source: AgentMind/branches/FAtiMA-Modular/FAtiMA.AdvancedMemory/src/main/java/FAtiMA/advancedMemoryComponent/RuleEngine.java @ 772

Revision 772, 3.2 KB checked in by myl, 8 years ago (diff)

Solved the bugs for saving and reloading agent states.

Line 
1package FAtiMA.advancedMemoryComponent;
2
3import java.io.FileInputStream;
4import java.io.IOException;
5import java.io.ObjectInputStream;
6import java.io.ObjectOutputStream;
7import java.io.Serializable;
8import java.util.ArrayList;
9
10
11import org.drools.KnowledgeBase;
12import org.drools.KnowledgeBaseFactory;
13import org.drools.builder.KnowledgeBuilder;
14import org.drools.builder.KnowledgeBuilderError;
15import org.drools.builder.KnowledgeBuilderErrors;
16import org.drools.builder.KnowledgeBuilderFactory;
17import org.drools.builder.ResourceType;
18import org.drools.io.ResourceFactory;
19import org.drools.runtime.StatefulKnowledgeSession;
20
21import FAtiMA.Core.memory.episodicMemory.ActionDetail;
22import FAtiMA.Core.memory.episodicMemory.EpisodicMemory;
23import FAtiMA.Core.memory.episodicMemory.MemoryEpisode;
24
25
26public class RuleEngine implements Serializable {
27       
28        /**
29         * for serialization purposes
30         */
31        private static final long serialVersionUID = 1L;
32       
33        protected KnowledgeBuilder _kbuilder;
34        protected KnowledgeBase _kbase;
35        protected StatefulKnowledgeSession _ksession;
36        protected String _rulePath;
37       
38        public RuleEngine(String rulePath)
39        {               
40                _rulePath = rulePath;
41                createKSession();
42        }
43       
44        private void createKSession()
45        {       
46                try {
47                        // load up the knowledge base
48                        _kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
49                        _kbuilder.add(ResourceFactory.newClassPathResource(_rulePath), ResourceType.DRL);
50                        KnowledgeBuilderErrors errors = _kbuilder.getErrors();
51                        if (errors.size() > 0) {
52                                for (KnowledgeBuilderError error: errors) {
53                                        System.err.println(error);
54                                }
55                                throw new IllegalArgumentException("Could not parse knowledge.");
56                        }
57                        _kbase = KnowledgeBaseFactory.newKnowledgeBase();
58                        _kbase.addKnowledgePackages(_kbuilder.getKnowledgePackages());
59                        _ksession = _kbase.newStatefulKnowledgeSession();
60                       
61                } catch (Throwable t) {
62                        t.printStackTrace();
63                }                       
64        }
65       
66        private void writeObject(ObjectOutputStream out) throws IOException
67        {
68                out.writeObject(_rulePath);
69               
70        }
71       
72        private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException
73        {
74                _rulePath = (String) in.readObject();
75                createKSession();
76        }
77       
78        protected void AssertData(EpisodicMemory episodicMemory)
79        {
80                try {           
81                        MemoryEpisode event;
82                        ArrayList<ActionDetail> details;
83                        ActionDetail actionDetail;
84                       
85                        _ksession = _kbase.newStatefulKnowledgeSession();
86               
87                        ArrayList<MemoryEpisode> episodes = episodicMemory.GetAllEpisodes();
88                        for (int i = 0; i < episodes.size(); i++)
89                        {
90                                event = (MemoryEpisode) episodes.get(i);
91                                details = event.getDetails();
92                                for (int j = 0; j < details.size(); j++)
93                                {
94                                        actionDetail = (ActionDetail) details.get(j);
95                                        _ksession.insert(actionDetail);
96                                        //cad = new CandidateEvent(actionDetail);
97                                        //_ksession.insert(cad);       
98                                }                               
99                        }
100                       
101                        ArrayList<ActionDetail> records = episodicMemory.getDetails();
102                        for (int j = 0; j < records.size(); j++)
103                        {
104                                actionDetail = (ActionDetail) records.get(j);
105                                _ksession.insert(actionDetail);
106                                //cad = new CandidateEvent(actionDetail);
107                                //_ksession.insert(cad);       
108                        }       
109                } catch (Throwable t) {
110                        t.printStackTrace();
111                }               
112        }       
113}
Note: See TracBrowser for help on using the repository browser.