Changeset 240


Ignore:
Timestamp:
11/19/2009 05:40:44 PM (11 years ago)
Author:
myl
Message:

SA and CC mechanisms added as memory processes - in MemoryProcesses? project. A separate project is created to link FAtiMA with MemoryProcesses?. Interfaces for CompoundCue? and SpreadActivate? have also been added to the Memory package.

Location:
AgentMind
Files:
29 added
7 edited

Legend:

Unmodified
Added
Removed
  • AgentMind/branches/FAtiMA2/src/FAtiMA/Agent.java

    r239 r240  
    22 
    33import java.io.File; 
     4 
    45import java.io.FileInputStream; 
    56import java.io.FileOutputStream; 
     
    5758import FAtiMA.wellFormedNames.Symbol; 
    5859 
     60import FAtiMA.memory.ICompoundCue; 
     61import FAtiMA.memory.ISpreadActivate; 
     62 
    5963public class Agent implements AgentModel { 
    60          
    61          /** 
    62      * The main method 
    63          * @throws SAXException  
    64          * @throws ParserConfigurationException  
    65          * @throws IOException  
    66      */ 
    67          
    68         static public void main(String args[]) throws ParserConfigurationException, SAXException, IOException  { 
    69                 short agentPlatform = 0; 
    70                 String platform; 
    71                                  
    72                 if(args.length == 0){ 
    73                         System.out.println("ERROR: zero arguments."); 
    74                         System.exit(1);  
    75                 } 
    76                  
    77                 //Load the arguments from the scenario definition present in scenarios.xml       
    78                 if(args.length == 2){ 
    79                         ScenarioLoaderHandler scenHandler = new ScenarioLoaderHandler(args[0],args[1]); 
    80                         SAXParserFactory factory = SAXParserFactory.newInstance(); 
    81                         SAXParser parser = factory.newSAXParser(); 
    82                         parser.parse(new File(MIND_PATH + "LirecScenarios.xml"), scenHandler); 
    83                         args = scenHandler.getAgentArguments(); 
    84                 } 
    85                  
    86                 platform = args[0]; 
    87                  
    88                 if(platform.equalsIgnoreCase("ION")){ 
    89                         agentPlatform = AgentPlatform.ION; 
    90                 }else if(platform.equalsIgnoreCase("WORLDSIM")){ 
    91                         agentPlatform = AgentPlatform.WORLDSIM; 
    92                 }else{ 
    93                         System.err.println("ERROR: The first argument should be 'ion' or 'worldsim' according to the platform in use."); 
    94                         System.exit(1); 
    95                 } 
    96                  
    97                 switch(agentPlatform){ 
    98                         case AgentPlatform.ION: 
    99                                 if(args.length == 14){ 
    100                                          
    101                                         new Agent(agentPlatform,args[1], Integer.parseInt(args[2]), args[3],Boolean.parseBoolean(args[10]), args[4], args[5], args[6], args[7], args[8], args[9],args[11],args[12],args[13],null,null); 
    102                                 } 
    103                                 else if(args.length == 5) 
    104                                 { 
    105                                         System.err.println("Creating the agent instance"); 
    106                                         new Agent(agentPlatform,args[1],Integer.parseInt(args[2]), args[3], args[4]); 
    107                                 } 
    108                                 else 
    109                                 { 
    110                                         System.err.println("Wrong number of arguments!"); 
    111                                 } 
    112                                 break; 
    113                                  
    114                         case AgentPlatform.WORLDSIM: 
    115                                 String saveDirectory = ""; 
    116                                 if (args.length == 4){ 
    117                                         new Agent(agentPlatform, args[1],Integer.parseInt(args[2]),saveDirectory,args[3]); 
    118                                 }else if(args.length >= 11){ 
    119                                         HashMap<String,String> properties = new HashMap<String,String>(); 
    120                                         ArrayList<String> goals = new ArrayList<String>(); 
    121                                         readPropertiesAndGoals(args, properties, goals); 
    122                                         new Agent(agentPlatform,args[1], Integer.parseInt(args[2]),saveDirectory,Boolean.parseBoolean(args[3]),args[4],null,null, args[5], args[6], args[7],args[8],args[9],args[10], properties, goals);                
    123                                 }else{ 
    124                                         System.err.println("Wrong number of arguments!"); 
    125                                 } 
    126                                 break; 
    127                 } 
    128  
    129         } 
    130          
    131         static private void readPropertiesAndGoals(String args[],HashMap<String,String> properties,ArrayList<String> goals){ 
    132                 StringTokenizer st; 
    133                 String left; 
    134                          
    135                 for(int i = 11; i < args.length; i++) { 
    136                         st = new StringTokenizer(args[i], ":"); 
    137                         left = st.nextToken(); 
    138                         if(left.equals("GOAL")) { 
    139                             goals.add(st.nextToken()); 
    140                         } 
    141                         else properties.put(left, st.nextToken()); 
    142                 } 
    143         } 
    14464         
    14565        protected HashMap<String,ModelOfOther> _ToM; 
     
    17393        protected Logger _logger; 
    17494 
     95        protected ICompoundCue _compoundCue; 
     96        protected ISpreadActivate _spreadActivate; 
     97         
    17598        private String _saveDirectory; 
    17699        public static final String MIND_PATH = "data/characters/minds/"; 
     
    242165                         */ 
    243166                        AgentSimulationTime.GetInstance(); 
    244  
    245                         _remoteAgent.start(); 
    246  
    247                         if(_showStateWindow){ 
    248                                  _agentDisplay = new AgentDisplay(this); 
    249                         } 
    250  
    251                         this.Run(); 
    252167                } 
    253168                catch (Exception e) { 
     
    274189                        } 
    275190                          
    276                         LoadAgentState(directory + fileName); 
    277                           
     191                        LoadAgentState(directory + fileName);                     
     192                         
     193                } 
     194                catch (Exception e) { 
     195                        e.printStackTrace(); 
     196                        this.terminateExecution(); 
     197                } 
     198        } 
     199         
     200        /** 
     201         * Starting the agent 
     202         * added by Meiyii 19/11/09 
     203         */ 
     204        public void StartAgent() 
     205        { 
     206                try{ 
    278207                        _remoteAgent.start(); 
    279208                 
     
    370299        } 
    371300         
     301        /**  
     302         * Gets the compound cue mechanism of the agent 
     303         * @return the compound cue mechanism 
     304         * added by Meiyii 19/11/09 
     305         */      
     306        public ICompoundCue getCompoundCue() { 
     307                return _compoundCue; 
     308        } 
     309         
     310        /**  
     311         * Gets the spread activate mechanism of the agent 
     312         * @return the spread activate mechanism 
     313         *  added by Meiyii 19/11/09 
     314         */      
     315        public ISpreadActivate getSpreadActivate() { 
     316                return _spreadActivate; 
     317        } 
     318         
    372319        /** 
    373320         * Gets the agent's Reactive Layer that you can use 
     
    411358                        _ToM.put(name, model); 
    412359                } 
     360        } 
     361         
     362         
     363        /**  
     364         * Set the compound cue mechanism object of the agent 
     365         * @param compoundCue 
     366         *  added by Meiyii 19/11/09 
     367         */      
     368        public void setCompoundCue(ICompoundCue compoundCue) { 
     369                this._compoundCue = compoundCue; 
     370        } 
     371         
     372        /**  
     373         * Set the spread activate mechanism object of the agent 
     374         * @param spreadActivate 
     375         *  added by Meiyii 19/11/09 
     376         */      
     377        public void setSpreadActivate(ISpreadActivate spreadActivate) { 
     378                this._spreadActivate = spreadActivate; 
    413379        } 
    414380         
  • AgentMind/branches/FAtiMA2/src/FAtiMA/AgentModel.java

    r236 r240  
    1010import FAtiMA.reactiveLayer.EmotionalReactionTreeNode; 
    1111import FAtiMA.sensorEffector.Event; 
     12import FAtiMA.memory.ICompoundCue; 
    1213 
    1314public interface AgentModel { 
     
    3233         
    3334        public void clearEvents(); 
     35         
    3436} 
  • AgentMind/branches/FAtiMA2/src/FAtiMA/sensorEffector/RemoteAgent.java

    r237 r240  
    8282import java.net.UnknownHostException; 
    8383import java.util.ArrayList; 
     84import java.util.Iterator; 
    8485import java.util.ListIterator; 
    8586import java.util.Map; 
    8687import java.util.StringTokenizer; 
     88import java.util.Hashtable; 
    8789 
    8890import FAtiMA.Agent; 
     
    98100import FAtiMA.wellFormedNames.Name; 
    99101import FAtiMA.wellFormedNames.SubstitutionSet; 
     102 
     103import FAtiMA.memory.episodicMemory.*; 
    100104 
    101105/** 
     
    128132        protected static final String STOP_TIME = "STOP-TIME"; 
    129133        protected static final String RESUME_TIME = "RESUME-TIME"; 
     134        protected static final String SA_MEMORY = "SA-MEMORY"; 
     135        protected static final String CC_MEMORY = "CC-MEMORY"; 
    130136         
    131137        protected ArrayList<ValuedAction> _actions; 
     
    318324                                ResumeTimePerception(perception); 
    319325                        } 
     326                        else if(msgType.equals(SA_MEMORY)) 
     327                        { 
     328                                 
     329                                st = new StringTokenizer(perception, "$"); 
     330                                String question = st.nextToken(); 
     331                                String known = ""; 
     332                                while(st.hasMoreTokens()) 
     333                                { 
     334                                        known = known + st.nextToken(); 
     335                                }                                        
     336                                System.out.println("question " + question); 
     337                                ArrayList<String> knownInfo = ExtractKnownInfo(known); 
     338                                //ArrayList<MemoryEpisode> episodes = _agent.getMemory().getEpisodicMemory().GetAllEpisodes(); 
     339                                //ArrayList<ActionDetail> records = _agent.getMemory().getEpisodicMemory().getDetails(); 
     340                                _agent.getSpreadActivate().Spread(question, knownInfo, _agent.getMemory().getEpisodicMemory()); 
     341                                 
     342                                Hashtable<String, Integer> saResult = _agent.getSpreadActivate().getSAResult(); 
     343                                Iterator it = saResult.keySet().iterator(); 
     344                                while (it.hasNext()) 
     345                                { 
     346                                        String result = (String) it.next(); 
     347                                        System.out.println(question + " " + result + " frequency " + saResult.get(result)); 
     348                                } 
     349                         
     350                                System.out.println("\n\n"); 
     351                        } 
     352                        else if(msgType.equals(CC_MEMORY)) 
     353                        { 
     354                                int index = (int) (Math.random()*10); 
     355                                ActionDetail event = _agent.getMemory().getEpisodicMemory().getDetails().get(index); 
     356                                _agent.getCompoundCue().Match(event, _agent.getMemory().getEpisodicMemory()); 
     357                                System.out.println("\nEvent ID to match on " + event.getID()); 
     358                                 
     359                                Hashtable<Integer, Float>  results = _agent.getCompoundCue().getCCResults(); 
     360                                Iterator it = results.keySet().iterator(); 
     361                                while (it.hasNext()) 
     362                                { 
     363                                        int id = (Integer) it.next(); 
     364                                        System.out.println("ID " + id + " evaluation " + results.get(id)); 
     365                                } 
     366                                System.out.println("\n\n"); 
     367                        } 
    320368                         
    321369                        while(_lookAtList.size() > 0) 
     
    332380                        e.printStackTrace(); 
    333381                } 
     382        } 
     383         
     384        /** 
     385         * Extract known information 
     386         * @param  
     387         * @return 
     388         * added by Meiyii 19/11/09 
     389         */ 
     390        private ArrayList<String> ExtractKnownInfo(String known) 
     391        { 
     392                ArrayList<String> knownInfo = new ArrayList<String>(); 
     393                         
     394                StringTokenizer st = new StringTokenizer(known, "*"); 
     395                while(st.hasMoreTokens()) 
     396                { 
     397                        String knownStr = st.nextToken(); 
     398                        knownInfo.add(knownStr); 
     399                        System.out.println("Known String " + knownStr); 
     400                } 
     401                return knownInfo; 
    334402        } 
    335403         
  • AgentMind/trunk/AgentMind/WorldTest/src/RemoteAgent.java

    r40 r240  
    4949                _world = world; 
    5050                _r = new Random(); 
    51                 Memory.GetInstance().setSelf(_name); 
     51                //Memory.GetInstance().setSelf(_name); 
    5252                 
    5353                this.socket = s; 
     
    199199                        if(!name.startsWith("EVENT") && !name.startsWith("SpeechContext")) 
    200200                        { 
    201                                 if(e.GetProbability() > _r.nextFloat()) 
     201                                if(e.GetProbability(null) > _r.nextFloat()) 
    202202                                { 
    203203                                        msg = "PROPERTY-CHANGED " + name + " " + e.GetEffect().GetValue(); 
  • AgentMind/trunk/AgentMind/WorldTest/src/UserInterface.java

    r235 r240  
    1919import FAtiMA.deliberativeLayer.plan.Effect; 
    2020import FAtiMA.deliberativeLayer.plan.Step; 
     21import FAtiMA.emotionalState.BaseEmotion; 
     22import FAtiMA.memory.episodicMemory.Time; 
     23import FAtiMA.sensorEffector.Parameter; 
    2124import FAtiMA.wellFormedNames.Name; 
    2225import FAtiMA.wellFormedNames.Substitution; 
     
    4144        JComboBox _timeOptions; 
    4245        JComboBox _locationOptions; 
     46        JComboBox _infoOptions; 
     47        JComboBox _queryOptions; 
     48        JComboBox _eventOptions; 
    4349        WorldTest _world; 
    4450         
     
    7278        _frame = new JFrame("WorldTest User Interface"); 
    7379        _frame.getContentPane().setLayout(new BoxLayout(_frame.getContentPane(),BoxLayout.Y_AXIS)); 
    74                 _frame.setSize(350,750); 
     80                _frame.setSize(500,800); 
    7581                _frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    7682                 
     
    183189        userBox.add(_userOptions); 
    184190         
     191        // Meiyii 19/11/09 
     192        _infoOptions = new JComboBox(); 
     193        _infoOptions.addItem("subject SELF"); 
     194        _infoOptions.addItem("subject Amy"); 
     195        _infoOptions.addItem("target SELF"); 
     196        _infoOptions.addItem("target Amy"); 
     197        _infoOptions.addItem("location LivingRoom"); 
     198        _infoOptions.addItem("action Greet"); 
     199        _infoOptions.addItem("action SpeechAct"); 
     200                _infoOptions.addActionListener(new ActionListener(){ 
     201                        public void actionPerformed(ActionEvent arg0) { 
     202                                _world.AddKnownInfo(_infoOptions.getSelectedItem().toString()); 
     203                        WriteLine("=> Add known info for SA query: " + _infoOptions.getSelectedItem().toString()); 
     204                        } 
     205                }); 
     206                 
     207                Box infoBox = new Box(BoxLayout.X_AXIS); 
     208        infoBox.add(new JLabel("Known info: ")); 
     209        infoBox.add(_infoOptions ); 
     210         
     211        _queryOptions = new JComboBox(); 
     212        _queryOptions.addItem("subject"); 
     213        _queryOptions.addItem("target"); 
     214        _queryOptions.addItem("location"); 
     215        _queryOptions.addItem("action"); 
     216                _queryOptions.addActionListener(new ActionListener(){ 
     217                        public void actionPerformed(ActionEvent arg0) { 
     218                        WriteLine("=> Change the SA query: " + _queryOptions.getSelectedItem().toString()); 
     219                        } 
     220                }); 
     221         
     222                Box queryBox = new Box(BoxLayout.X_AXIS); 
     223        queryBox.add(new JLabel("Query: ")); 
     224        queryBox.add(_queryOptions ); 
     225         
    185226        // Create the OK button to confirm input 
    186227        JButton okButton = new JButton("OK"); 
     
    195236                }); 
    196237         
    197      // Button to perform the next step 
    198         JButton queryButton = new JButton("Query");; 
    199         queryButton.addActionListener(new ActionListener(){ 
    200                         public void actionPerformed(ActionEvent arg0) { 
    201                                 _world.QueryMemory(); 
     238        // Button to perform spreading activation 
     239        JButton saButton = new JButton("SpreadActivate");; 
     240        saButton.addActionListener(new ActionListener(){ 
     241                        public void actionPerformed(ActionEvent arg0) { 
     242                                _world.SAMemory(_queryOptions.getSelectedItem().toString()); 
     243                        } 
     244                }); 
     245         
     246        // Button to perform compound cue matching 
     247        JButton ccButton = new JButton("CompoundCue");; 
     248        ccButton.addActionListener(new ActionListener(){ 
     249                        public void actionPerformed(ActionEvent arg0) { 
     250                                _world.CCMemory(); 
    202251                        } 
    203252                }); 
     
    207256        buttonsPanel.add(okButton); 
    208257        buttonsPanel.add(stepButton); 
    209         buttonsPanel.add(queryButton); 
     258        buttonsPanel.add(saButton); 
     259        buttonsPanel.add(ccButton); 
    210260         
    211261        _frame.getContentPane().add(caseBox); 
     
    213263        _frame.getContentPane().add(locationBox); 
    214264        _frame.getContentPane().add(userBox); 
     265                _frame.getContentPane().add(infoBox); 
     266                _frame.getContentPane().add(queryBox); 
    215267                _frame.getContentPane().add(inputList); 
    216268                _frame.getContentPane().add(buttonsPanel); 
     269                 
     270                 
    217271                //_frame.getContentPane().add(okButton); 
    218272                //_frame.getContentPane().add(stepButton); 
     
    309363        } 
    310364     
     365     
    311366    private void PropertiesChanged(ArrayList effects) 
    312367        { 
     
    321376                        if(!name.startsWith("EVENT") && !name.startsWith("SpeechContext")) 
    322377                        { 
    323                                 if(e.GetProbability() > _r.nextFloat()) 
     378                                if(e.GetProbability(null) > _r.nextFloat()) 
    324379                                { 
    325380                                        msg = "PROPERTY-CHANGED " + name + " " + e.GetEffect().GetValue(); 
  • AgentMind/trunk/AgentMind/WorldTest/src/WorldTest.java

    r235 r240  
    122122                //com.sun.xml.parser.Parser parser; 
    123123                //parser = new com.sun.xml.parser.Parser(); 
    124                 StripsOperatorsLoaderHandler op = new StripsOperatorsLoaderHandler(self); 
     124                StripsOperatorsLoaderHandler op = new StripsOperatorsLoaderHandler(null); 
    125125                //parser.setDocumentHandler(op); 
    126126                try  
     
    361361        } 
    362362         
    363         public void QueryMemory(){ 
    364                 SendPerceptionToAll( "QUERY-MEMORY" ); 
    365         } 
    366          
     363        String knownInfo = ""; 
     364        public void AddKnownInfo( String info ){ 
     365                knownInfo = knownInfo + info + "*"; 
     366        } 
     367         
     368        public void CCMemory(){ 
     369                SendPerceptionToAll( "CC-MEMORY"); 
     370        } 
     371         
     372        public void SAMemory(String question){ 
     373                SendPerceptionToAll( "SA-MEMORY " + question + "$" + knownInfo ); 
     374                knownInfo = ""; 
     375        } 
     376                 
    367377        public synchronized void removeAgent(RemoteAgent ra){ 
    368378                _agents.remove(ra); 
  • AgentMind/trunk/AgentMind/data/characters/minds/LIRECScenarios.xml

    r235 r240  
    1414         
    1515                </WorldSimulator>        
    16                 <!--Agent name="Greta" displayName="Greta" role="Greta" platform="worldsim" host="localhost"  
     16                <Agent name="Greta" displayName="Greta" role="Greta" platform="worldsim" host="localhost"  
    1717                           port="46874" displayMode="True" sex="F" actionsFile="LIRECActions"  
    1818                           goalsFile="LIRECGoalLibrary" cultureName="NoCulture"> 
     
    2121                                <Property name="isPerson" value="True"/> 
    2222                                <Property name="location" value="LivingRoom"/> 
    23                         </Properties-->  
    24                 <Agent name="Greta" platform="worldsim" host="localhost" port="46874"> 
     23                        </Properties>    
     24                <!--Agent name="Greta" platform="worldsim" host="localhost" port="46874"--> 
    2525                </Agent> 
    2626        </Scenario>      
Note: See TracChangeset for help on using the changeset viewer.