Changeset 33


Ignore:
Timestamp:
03/24/2009 01:36:14 PM (11 years ago)
Author:
myl
Message:

Added a functionality to step through the agent processes so that the movement of memory data can be observed. A new display panel was also added to allow visualisation of entries in WM and how these entries are being moved to LTM (the knowledgeBase).

Location:
AgentMind/trunk/AgentMind
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • AgentMind/trunk/AgentMind/FAtiMA/src/FAtiMA/Agent.java

    r13 r33  
    167167        public static final String MIND_PATH = "data/characters/minds/"; 
    168168        private static final Name ACTION_CONTEXT = Name.ParseName("ActionContext()"); 
     169         
     170        private boolean _readyForNextStep = false; 
    169171 
    170172        public Agent(short agentPlatform, String host, int port, String saveDirectory, boolean displayMode, String name,String lActDatabase, String userLActDatabase, String sex, String role, String displayName, String actionsFile, String goalsFile, String cultureName, HashMap properties, ArrayList goalList) { 
     
    342344                AutobiographicalMemory.SaveState(fileName+"-AutobiographicalMemory.dat"); 
    343345                ShortTermMemory.SaveState(fileName+"-ShortTermMemory.dat"); 
     346                WorkingMemory.SaveState(fileName+"-WorkingMemory.dat"); 
    344347                ActionLibrary.SaveState(fileName+"-ActionLibrary.dat"); 
    345348                _remoteAgent.SaveState(fileName+"-RemoteAgent.dat"); 
     
    431434                AutobiographicalMemory.LoadState(fileName+"-AutobiographicalMemory.dat"); 
    432435                ShortTermMemory.LoadState(fileName+"-ShortTermMemory.dat"); 
     436                WorkingMemory.LoadState(fileName+"-WorkingMemory.dat"); 
    433437                ActionLibrary.LoadState(fileName+"-ActionLibrary.dat"); 
    434438                 
     
    532536 
    533537        /** 
     538         * Set the value for readyForNextStep 
     539         * @param boolean value of readyForNextStep 
     540         */ 
     541        public void setReadyForNextStep(boolean readyForNextStep){ 
     542                this._readyForNextStep = readyForNextStep; 
     543        } 
     544         
     545        /** 
    534546         * Runs the agent, endless loop until there is a shutdown 
    535547         */ 
     
    538550                long updateTime = System.currentTimeMillis(); 
    539551                 
    540                 while (!_shutdown) { 
    541                         try { 
    542                                  
    543                             if(_remoteAgent.isShutDown()) { 
    544                                     _shutdown = true; 
    545                             } 
    546                                  
    547                             //updates the agent's simulation timer 
    548                             AgentSimulationTime.GetInstance().Tick(); 
    549                              
    550                             _numberOfCycles++; 
    551                             long startCycleTime = System.currentTimeMillis(); 
    552                              
    553                                 if (_remoteAgent.isRunning()) { 
    554                                         //decay the agent's emotional state 
    555                                         EmotionalState.GetInstance().Decay(); 
    556                                         MotivationalState.GetInstance().Decay(); 
    557                                         _dialogManager.DecayCauseIDontHaveABetterName(); 
     552                while (!_shutdown) {                     
     553                        if(_readyForNextStep) 
     554                        { 
     555                                try { 
    558556                                         
    559                                         //perceives and appraises new events 
    560                                         synchronized (this) 
    561                                         { 
    562                                                 for(ListIterator li = this._perceivedEvents.listIterator(); li.hasNext();) 
     557                                    if(_remoteAgent.isShutDown()) { 
     558                                            _shutdown = true; 
     559                                    } 
     560                                         
     561                                    //updates the agent's simulation timer 
     562                                    AgentSimulationTime.GetInstance().Tick(); 
     563                                     
     564                                    _numberOfCycles++; 
     565                                    long startCycleTime = System.currentTimeMillis(); 
     566                                     
     567                                        if (_remoteAgent.isRunning()) { 
     568                                                //decay the agent's emotional state 
     569                                                EmotionalState.GetInstance().Decay(); 
     570                                                MotivationalState.GetInstance().Decay(); 
     571                                                _dialogManager.DecayCauseIDontHaveABetterName(); 
     572                                                 
     573                                                //perceives and appraises new events 
     574                                                synchronized (this) 
    563575                                                { 
    564                                                         Event e = (Event) li.next(); 
    565                                                         AgentLogger.GetInstance().log("Perceiving event: " + e.toName()); 
    566                                                         //inserting the event in AM 
    567                                                     //AutobiographicalMemory.GetInstance().StoreAction(e); 
     576                                                        for(ListIterator li = this._perceivedEvents.listIterator(); li.hasNext();) 
     577                                                        { 
     578                                                                Event e = (Event) li.next(); 
     579                                                                AgentLogger.GetInstance().log("Perceiving event: " + e.toName()); 
     580                                                                //inserting the event in AM 
     581                                                            //AutobiographicalMemory.GetInstance().StoreAction(e); 
     582                                                                 
     583                                                                // Meiyii 11/03/09 
     584                                                                ShortTermMemory.GetInstance().StoreAction(e); 
     585                                                                 
     586                                                            //registering an Action Context property in the KB 
     587                                                                WorkingMemory.GetInstance().Tell(ACTION_CONTEXT,e.toName().toString()); 
     588                                                                 
     589                                                                if(SpeechAct.isSpeechAct(e.GetAction())) 
     590                                                                { 
     591                                                                        _dialogManager.UpdateDialogState(e); 
     592                                                                } 
     593                                                                                 
     594                                                                //adds the event to the deliberative and reactive layers so that they can appraise 
     595                                                                //the events 
     596                                                                 
     597                                                                _reactiveLayer.AddEvent(e); 
     598                                                                _deliberativeLayer.AddEvent(e); 
     599                                                        } 
     600                                                        this._perceivedEvents.clear(); 
     601                                                } 
     602                                                 
     603                                                //if there was new data or knowledge added we must apply inference operators 
     604                                                //update any inferred property to the outside and appraise the events 
     605                                                if(ShortTermMemory.GetInstance().HasNewData() || 
     606                                                                WorkingMemory.GetInstance().HasNewKnowledge()) 
     607                                                { 
    568608                                                         
    569                                                         // Meiyii 11/03/09 
    570                                                         ShortTermMemory.GetInstance().StoreAction(e); 
     609                                                        //calling the KnowledgeBase inference process 
     610                                                        WorkingMemory.GetInstance().PerformInference(); 
    571611                                                         
    572                                                     //registering an Action Context property in the KB 
    573                                                         WorkingMemory.GetInstance().Tell(ACTION_CONTEXT,e.toName().toString()); 
     612                                                        synchronized (KnowledgeBase.GetInstance()) 
     613                                                        { 
     614                                                                ArrayList facts = WorkingMemory.GetInstance().GetNewFacts(); 
     615                                                                 
     616                                                                for(ListIterator li = facts.listIterator();li.hasNext();) 
     617                                                                { 
     618                                                                        KnowledgeSlot ks = (KnowledgeSlot) li.next(); 
     619                                                                        if(ks.getName().startsWith(this._self)) 
     620                                                                        { 
     621                                                                                _remoteAgent.ReportInternalPropertyChange(Name.ParseName(ks.getName()), 
     622                                                                                                ks.getValue()); 
     623                                                                        } 
     624                                                                } 
     625                                                                 
     626                                                                 
     627                                                        } 
     628                                                } 
     629                                                 
     630                                                //Appraise the events and changes in data 
     631                                                _reactiveLayer.Appraisal(); 
     632                                            _deliberativeLayer.Appraisal();      
     633                                             
     634                                                 
     635                                            _reactiveLayer.Coping(); 
     636                                                 
     637                                                 
     638                                                _deliberativeLayer.Coping(); 
     639                                         
     640                                                if(_remoteAgent.FinishedExecuting() && _remoteAgent.isRunning()) { 
    574641                                                         
    575                                                         if(SpeechAct.isSpeechAct(e.GetAction())) 
     642                                                        action = FilterSpeechAction(_reactiveLayer.GetSelectedAction()); 
     643                                                         
     644                                                        if(action != null)  
    576645                                                        { 
    577                                                                 _dialogManager.UpdateDialogState(e); 
     646                                                                _reactiveLayer.RemoveSelectedAction(); 
     647                                                                _remoteAgent.AddAction(action); 
    578648                                                        } 
    579                                                                          
    580                                                         //adds the event to the deliberative and reactive layers so that they can appraise 
    581                                                         //the events 
    582                                                          
    583                                                         _reactiveLayer.AddEvent(e); 
    584                                                         _deliberativeLayer.AddEvent(e); 
    585                                                 } 
    586                                                 this._perceivedEvents.clear(); 
    587                                         } 
    588                                          
    589                                         //if there was new data or knowledge added we must apply inference operators 
    590                                         //update any inferred property to the outside and appraise the events 
    591                                         if(ShortTermMemory.GetInstance().HasNewData() || 
    592                                                         WorkingMemory.GetInstance().HasNewKnowledge()) 
    593                                         { 
    594                                                  
    595                                                 //calling the KnowledgeBase inference process 
    596                                                 WorkingMemory.GetInstance().PerformInference(); 
    597                                                  
    598                                                 synchronized (KnowledgeBase.GetInstance()) 
    599                                                 { 
    600                                                         ArrayList facts = WorkingMemory.GetInstance().GetNewFacts(); 
    601                                                          
    602                                                         for(ListIterator li = facts.listIterator();li.hasNext();) 
     649                                                        else 
    603650                                                        { 
    604                                                                 KnowledgeSlot ks = (KnowledgeSlot) li.next(); 
    605                                                                 if(ks.getName().startsWith(this._self)) 
     651                                                                action = FilterSpeechAction(_deliberativeLayer.GetSelectedAction()); 
     652                                                                if(action != null) 
    606653                                                                { 
    607                                                                         _remoteAgent.ReportInternalPropertyChange(Name.ParseName(ks.getName()), 
    608                                                                                         ks.getValue()); 
     654                                                                        _deliberativeLayer.RemoveSelectedAction(); 
     655                                                                        _remoteAgent.AddAction(action); 
    609656                                                                } 
    610657                                                        } 
     658                         
     659                                                        _remoteAgent.ExecuteNextAction(); 
     660                                                } 
     661                                                 
     662                                                if(System.currentTimeMillis() - updateTime > 1000) 
     663                                                { 
     664                                                        if(_showStateWindow && _agentDisplay != null)  
     665                                                        { 
     666                                                                _agentDisplay.update(); 
     667                                                        } 
    611668                                                         
     669                                                        _remoteAgent.ReportInternalState(); 
    612670                                                         
     671                                                        /*ActiveEmotion auxEmotion = EmotionalState.GetInstance().GetStrongestEmotion(); 
     672                                                        short nextEmotion; 
     673                                                        if(auxEmotion != null) { 
     674                                                            nextEmotion = auxEmotion.GetType();  
     675                                                        } 
     676                                                        else nextEmotion = EmotionType.NEUTRAL; 
     677                                                         
     678                                                        if(_currentEmotion != nextEmotion) { 
     679                                                            _currentEmotion = nextEmotion; 
     680                                                            _remoteAgent.ExpressEmotion(EmotionType.GetName(_currentEmotion)); 
     681                                                        }*/ 
     682                                                         
     683                                                        updateTime = System.currentTimeMillis(); 
    613684                                                } 
    614685                                        } 
    615686                                         
    616                                         //Appraise the events and changes in data 
    617                                         _reactiveLayer.Appraisal(); 
    618                                     _deliberativeLayer.Appraisal();      
    619                                      
     687                                        long cycleExecutionTime = System.currentTimeMillis() - startCycleTime; 
     688                                        _totalexecutingtime += cycleExecutionTime; 
     689                                        //System.out.println("Cycle execution (in Millis): " + cycleExecutionTime); 
     690                                        //System.out.println("Average time per cycle (in Millis): " + _totalexecutingtime / _numberOfCycles); 
     691                                        Thread.sleep(10); 
     692                                        this._readyForNextStep = false; 
    620693                                         
    621                                     _reactiveLayer.Coping(); 
    622                                          
    623                                          
    624                                         _deliberativeLayer.Coping(); 
    625                                  
    626                                         if(_remoteAgent.FinishedExecuting() && _remoteAgent.isRunning()) { 
    627                                                  
    628                                                 action = FilterSpeechAction(_reactiveLayer.GetSelectedAction()); 
    629                                                  
    630                                                 if(action != null)  
    631                                                 { 
    632                                                         _reactiveLayer.RemoveSelectedAction(); 
    633                                                         _remoteAgent.AddAction(action); 
    634                                                 } 
    635                                                 else 
    636                                                 { 
    637                                                         action = FilterSpeechAction(_deliberativeLayer.GetSelectedAction()); 
    638                                                         if(action != null) 
    639                                                         { 
    640                                                                 _deliberativeLayer.RemoveSelectedAction(); 
    641                                                                 _remoteAgent.AddAction(action); 
    642                                                         } 
    643                                                 } 
    644                  
    645                                                 _remoteAgent.ExecuteNextAction(); 
    646                                         } 
    647                                          
    648                                         if(System.currentTimeMillis() - updateTime > 1000) 
    649                                         { 
    650                                                 if(_showStateWindow && _agentDisplay != null)  
    651                                                 { 
    652                                                         _agentDisplay.update(); 
    653                                                 } 
    654                                                  
    655                                                 _remoteAgent.ReportInternalState(); 
    656                                                  
    657                                                 /*ActiveEmotion auxEmotion = EmotionalState.GetInstance().GetStrongestEmotion(); 
    658                                                 short nextEmotion; 
    659                                                 if(auxEmotion != null) { 
    660                                                     nextEmotion = auxEmotion.GetType();  
    661                                                 } 
    662                                                 else nextEmotion = EmotionType.NEUTRAL; 
    663                                                  
    664                                                 if(_currentEmotion != nextEmotion) { 
    665                                                     _currentEmotion = nextEmotion; 
    666                                                     _remoteAgent.ExpressEmotion(EmotionType.GetName(_currentEmotion)); 
    667                                                 }*/ 
    668                                                  
    669                                                 updateTime = System.currentTimeMillis(); 
    670                                         } 
    671                                 } 
    672                                  
    673                                 long cycleExecutionTime = System.currentTimeMillis() - startCycleTime; 
    674                                 _totalexecutingtime += cycleExecutionTime; 
    675                                 //System.out.println("Cycle execution (in Millis): " + cycleExecutionTime); 
    676                                 //System.out.println("Average time per cycle (in Millis): " + _totalexecutingtime / _numberOfCycles); 
    677                                 Thread.sleep(10); 
    678                         } 
    679                         catch (Exception ex) { 
    680                             //_shutdown = true; 
    681                             ex.printStackTrace(); 
    682                             //System.out.println(ex); 
     694                                } 
     695                                catch (Exception ex) { 
     696                                    //_shutdown = true; 
     697                                    ex.printStackTrace(); 
     698                                    //System.out.println(ex); 
     699                                } 
     700                        } 
     701                        else 
     702                        { 
     703                                try { 
     704                                        Thread.sleep(10); 
     705                                } 
     706                                catch (Exception ex) {                           
     707                                    ex.printStackTrace(); 
     708                                } 
    683709                        } 
    684710                } 
  • AgentMind/trunk/AgentMind/FAtiMA/src/FAtiMA/Display/AgentDisplay.java

    r5 r33  
    5656        _frame = new JFrame(ag.displayName()); 
    5757        _frame.getContentPane().setLayout(new BoxLayout(_frame.getContentPane(),BoxLayout.Y_AXIS)); 
    58                 _frame.setSize(800,600); 
     58                _frame.setSize(900,1000); 
    5959                _frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    6060                 
     
    7171                 
    7272                panel = new NeedsPanel(ag.name()); 
    73                 _displayPane.addTab("Needs",null,panel,"displays the characters needs"); 
    74                  
     73                _displayPane.addTab("Needs",null,panel,"displays the characters needs");                 
    7574                 
    7675                panel = new SocialRelationsPanel(); 
  • AgentMind/trunk/AgentMind/FAtiMA/src/FAtiMA/Display/KnowledgeFactDisplay.java

    r1 r33  
    4444        _panel = new JPanel(); 
    4545        _panel.setBorder(BorderFactory.createTitledBorder(name)); 
     46        _panel.setMinimumSize(new Dimension(300,60)); 
    4647        _panel.setMaximumSize(new Dimension(300,60)); 
    47  
     48      
    4849        _label = new JLabel(value); 
    4950        _panel.add(_label); 
  • AgentMind/trunk/AgentMind/FAtiMA/src/FAtiMA/knowledgeBase/KnowledgeBase.java

    r13 r33  
    177177        private ArrayList _factList; 
    178178        private ArrayList _inferenceOperators; 
    179         private boolean _newKnowledge; 
    180         private ArrayList _newFacts; 
    181179 
    182180        /** 
     
    187185                _factList = new ArrayList(); 
    188186                _inferenceOperators = new ArrayList(); 
    189                 _newKnowledge = false; 
    190                 _newFacts = new ArrayList(); 
    191187        } 
    192188         
     
    198194        { 
    199195                _inferenceOperators.add(op); 
    200         } 
    201          
    202         /** 
    203      * Gets the list of inference operators 
    204      * @return inference operators 
    205      */ 
    206         public ArrayList GetInferenceOperators() 
    207         {  
    208                 return _inferenceOperators; 
    209196        } 
    210197         
     
    228215        } 
    229216 
     217         /** 
     218         * Gets the inference operators 
     219         * @return the inference operators 
     220         */ 
     221    // Added 19/03/09 
     222        public ArrayList GetInferenceOperators() 
     223        { 
     224                return _inferenceOperators; 
     225        } 
     226         
    230227        /** 
    231228         * Empties the KnowledgeBase 
     
    236233                        this._kB.clear(); 
    237234                        this._factList.clear(); 
    238                         this._newFacts.clear(); 
    239                         this._newKnowledge = false; 
    240235                } 
    241236        } 
     
    300295                ArrayList fetchList = property.GetLiteralList(); 
    301296                ListIterator li = fetchList.listIterator(); 
    302                 Symbol l; 
    303                  
     297                Symbol l;                
    304298 
    305299                synchronized (this) { 
     
    311305                                } else { 
    312306                                        newProperty = true; 
    313                                         _newKnowledge = true; 
    314307                                        aux = new KnowledgeSlot(l.toString()); 
    315308                                        currentSlot.put(l.toString(), aux); 
     
    320313                        { 
    321314                                aux.setValue(value); 
    322                                 _newKnowledge = true; 
    323                                 KnowledgeSlot ksAux = new KnowledgeSlot(property.toString()); 
    324                                 ksAux.setValue(value); 
    325                                 _newFacts.add(ksAux); 
    326                                  
    327                                 System.out.println("New facts: " + ksAux.toString()); 
     315                                System.out.println("New facts in KB: " + aux.toString()); 
    328316                        } 
    329317                         
     
    333321                                ks.setValue(value); 
    334322                                _factList.add(ks); 
    335                                 _newFacts.add(ks); 
    336                                 System.out.println("New property knowledge: " + ks.toString()); 
     323                                System.out.println("New property knowledge in KB: " + ks.toString()); 
    337324                        } 
    338325                        else 
     
    346333                                        { 
    347334                                                ks.setValue(value); 
    348                                                 System.out.println("New property value: " + ks.toString()); 
     335                                                System.out.println("New property value in KB: " + ks.toString()); 
    349336                                        } 
    350337                                } 
  • AgentMind/trunk/AgentMind/FAtiMA/src/FAtiMA/sensorEffector/RemoteAgent.java

    r13 r33  
    133133        protected static final String STOP_TIME = "STOP-TIME"; 
    134134        protected static final String RESUME_TIME = "RESUME-TIME"; 
     135        protected static final String READY_FOR_NEXT_STEP = "READY-FOR-NEXT-STEP"; 
    135136         
    136137        protected ArrayList _actions; 
     
    324325                        { 
    325326                                ResumeTimePerception(perception); 
     327                        } 
     328                        else if(msgType.equals(READY_FOR_NEXT_STEP)) 
     329                        { 
     330                                _agent.setReadyForNextStep(true);                        
    326331                        } 
    327332                         
  • AgentMind/trunk/AgentMind/FAtiMA/src/FAtiMA/sensorEffector/WorldSimulatorRemoteAgent.java

    r13 r33  
    148148                }*/ 
    149149 
    150                  
    151150                subject = st.nextToken(); 
    152151                symbol = st.nextToken(); 
  • AgentMind/trunk/AgentMind/WorldTest/src/RemoteAgent.java

    r5 r33  
    4242        private WorldTest _world; 
    4343        private Random _r; 
     44        private boolean _readyForNextStep = false; 
    4445 
    4546        public RemoteAgent(WorldTest world, Socket s) { 
     
    9798        } 
    9899 
    99  
    100100        public void AddProperty(Property p) { 
    101101                _properties.add(p); 
  • AgentMind/trunk/AgentMind/WorldTest/src/UserInterface.java

    r4 r33  
    66import java.util.StringTokenizer; 
    77 
     8import javax.swing.BorderFactory; 
    89import javax.swing.Box; 
    910import javax.swing.BoxLayout; 
     
    1415import javax.swing.JScrollPane; 
    1516import javax.swing.JTextArea; 
     17import javax.swing.JPanel; 
    1618 
    1719import FAtiMA.deliberativeLayer.plan.Effect; 
     
    5052        _frame = new JFrame("WorldTest User Interface"); 
    5153        _frame.getContentPane().setLayout(new BoxLayout(_frame.getContentPane(),BoxLayout.Y_AXIS)); 
    52                 _frame.setSize(650,650); 
     54                _frame.setSize(350,350); 
    5355                _frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    5456                 
     
    6062        // Create the combo box 
    6163        inputList = new JComboBox(); 
    62          
    63         // Create the OK button to confirm input 
    64         JButton okButton = new JButton("OK"); 
    65         okButton.addActionListener(this); 
    6664         
    6765        _frame.getContentPane().add(scrollPane); 
     
    127125        userBox.add(new JLabel("User: ")); 
    128126        userBox.add(_userOptions); 
     127 
     128         
     129        // Create the OK button to confirm input 
     130        JButton okButton = new JButton("OK"); 
     131        okButton.addActionListener(this); 
     132         
     133        // Button to perform the next step 
     134        JButton stepButton = new JButton("Next Step");; 
     135        stepButton.addActionListener(new ActionListener(){ 
     136                        public void actionPerformed(ActionEvent arg0) { 
     137                                _world.ReadyForNextStep(); 
     138                        } 
     139                }); 
     140         
     141        JPanel buttonsPanel = new JPanel(); 
     142        buttonsPanel.setLayout(new BoxLayout(buttonsPanel,BoxLayout.X_AXIS)); 
     143        buttonsPanel.add(okButton); 
     144        buttonsPanel.add(stepButton); 
    129145         
    130146        _frame.getContentPane().add(timeBox); 
     
    132148        _frame.getContentPane().add(userBox); 
    133149                _frame.getContentPane().add(inputList); 
    134                 _frame.getContentPane().add(okButton); 
     150                _frame.getContentPane().add(buttonsPanel); 
     151                //_frame.getContentPane().add(okButton); 
     152                //_frame.getContentPane().add(stepButton); 
    135153                _frame.setVisible(true); 
    136154                 
  • AgentMind/trunk/AgentMind/WorldTest/src/WorldTest.java

    r13 r33  
    280280        } 
    281281         
     282        public void ReadyForNextStep(){ 
     283                SendPerceptionToAll( "READY-FOR-NEXT-STEP" ); 
     284        } 
     285         
    282286        public synchronized void removeAgent(RemoteAgent ra){ 
    283287                _agents.remove(ra); 
  • AgentMind/trunk/AgentMind/user.txt

    r1 r33  
    11isPerson True 
    2 atGarden False 
    3 isParent False 
    4 hasSoil False 
    5 holds none 
Note: See TracChangeset for help on using the changeset viewer.