Changeset 236


Ignore:
Timestamp:
11/18/2009 11:09:38 AM (10 years ago)
Author:
joao.dias
Message:

Changes in the reactive appraisal process in order to generate Emotions for Others using the ToM.

Reactive Appraisal is now used to determine other's emotional appraisal.

Creation of Display Panels to display the ToM of others.

Location:
AgentMind/branches/FAtiMA2/src/FAtiMA
Files:
12 edited

Legend:

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

    r212 r236  
    88import java.io.ObjectOutputStream; 
    99import java.util.ArrayList; 
     10import java.util.Collection; 
    1011import java.util.HashMap; 
    1112import java.util.ListIterator; 
     
    3637import FAtiMA.motivationalSystem.MotivationalState; 
    3738import FAtiMA.reactiveLayer.ActionTendencies; 
     39import FAtiMA.reactiveLayer.EmotionalReactionTreeNode; 
    3840import FAtiMA.reactiveLayer.Reaction; 
    3941import FAtiMA.reactiveLayer.ReactiveProcess; 
     
    7880                        SAXParserFactory factory = SAXParserFactory.newInstance(); 
    7981                        SAXParser parser = factory.newSAXParser(); 
    80                         parser.parse(new File(MIND_PATH + "LIRECScenarios.xml"), scenHandler); 
     82                        parser.parse(new File(MIND_PATH + "Scenarios.xml"), scenHandler); 
    8183                        args = scenHandler.getAgentArguments(); 
    8284                } 
     
    142144         
    143145        protected HashMap<String,ModelOfOther> _ToM; 
     146        protected ArrayList<String> _nearbyAgents; 
    144147         
    145148        protected EmotionalState _emotionalState; 
     
    184187                 
    185188                _ToM = new HashMap<String, ModelOfOther>(); 
     189                _nearbyAgents = new ArrayList<String>(); 
    186190                 
    187191                _saveDirectory = saveDirectory; 
     
    382386        } 
    383387         
     388        public Collection<String> getNearByAgents() 
     389        { 
     390                return this._nearbyAgents; 
     391        } 
     392         
     393        public void AddNearByAgent(String agent) 
     394        { 
     395                if(!agent.equals(this._name)) 
     396                { 
     397                        this._nearbyAgents.add(agent); 
     398                } 
     399        } 
     400         
     401        public void RemoveNearByAgent(String entity) 
     402        { 
     403                this._nearbyAgents.remove(entity); 
     404        } 
     405         
    384406        public void initializeModelOfOther(String name) 
    385407        { 
     
    399421                ObjectInputStream s = new ObjectInputStream(in); 
    400422                this._ToM = (HashMap<String, ModelOfOther>) s.readObject(); 
     423                this._nearbyAgents = (ArrayList<String>) s.readObject(); 
    401424                this._deliberativeLayer = (DeliberativeProcess) s.readObject(); 
    402425                this._reactiveLayer = (ReactiveProcess) s.readObject(); 
     
    589612                                                { 
    590613                                                        Event e = (Event) li.next(); 
     614                                                        AgentLogger.GetInstance().log("Perceiving event: " + e.toName()); 
     615                                                         
     616                                                         
     617                                                        //ToM of others 
     618                                                        for(String other : _nearbyAgents) 
     619                                                        { 
     620                                                                Event e2 = e.ApplyPerspective(other); 
     621                                                                ModelOfOther m = _ToM.get(other); 
     622                                                                m.getMemory().getEpisodicMemory().StoreAction(m.getMemory(), e2); 
     623                                                                m.getMemory().getSemanticMemory().Tell(ACTION_CONTEXT,e2.toName().toString()); 
     624                                                                m.AddEvent(e2); 
     625                                                                 
     626                                                        } 
     627                                                         
     628                                                        //SELF 
    591629                                                        e = e.ApplyPerspective(_name); 
    592                                                         AgentLogger.GetInstance().log("Perceiving event: " + e.toName()); 
     630                                                         
    593631                                                        //inserting the event in AM 
    594632                                                         
     
    638676                                        //Appraise the events and changes in data 
    639677                                        _reactiveLayer.Appraisal(this); 
     678                                         
     679                                        for(ModelOfOther m : _ToM.values()) 
     680                                        { 
     681                                                _reactiveLayer.Appraisal(m); 
     682                                        } 
     683                                         
    640684                                    _deliberativeLayer.Appraisal(this);  
    641685                                     
     
    720764 
    721765                        s.writeObject(_ToM); 
     766                        s.writeObject(_nearbyAgents); 
    722767                        s.writeObject(_deliberativeLayer); 
    723768                        s.writeObject(_reactiveLayer); 
     
    793838                        AppraisalVector v = new AppraisalVector(); 
    794839                        v.setAppraisalVariable(AppraisalVector.LIKE, like); 
    795                         em = (BaseEmotion) Appraisal.GenerateEmotions(this, e, v, null).get(0); 
     840                        em = (BaseEmotion) Appraisal.GenerateSelfEmotions(this, e, v).get(0); 
    796841                        return _emotionalState.DetermineActiveEmotion(em); 
    797842                } 
     
    811856                        } 
    812857                         
    813                         Reaction r = _reactiveLayer.Evaluate(this, e); 
    814                         emotions = Appraisal.GenerateEmotions(this, e, _reactiveLayer.translateEmotionalReaction(r),r.getOther()); 
     858                        Reaction r = ReactiveProcess.Evaluate(this, e); 
     859                        emotions = Appraisal.GenerateSelfEmotions(this, e, ReactiveProcess.translateEmotionalReaction(r)); 
    815860                        ListIterator<BaseEmotion> li = emotions.listIterator(); 
    816861                         
     
    848893                return _reactiveLayer.getActionTendencies(); 
    849894        } 
     895         
     896        public EmotionalReactionTreeNode getEmotionalReactions() 
     897        { 
     898                return _reactiveLayer.getEmotionalReactions(); 
     899        } 
     900 
     901        @Override 
     902        public void clearEvents() { 
     903                _reactiveLayer.clearEvents();    
     904        } 
     905 
     906        @Override 
     907        public Collection<Event> getEvents() { 
     908                return _reactiveLayer.getEvents(); 
     909        } 
    850910 
    851911 
  • AgentMind/branches/FAtiMA2/src/FAtiMA/AgentModel.java

    r212 r236  
    11package FAtiMA; 
     2 
     3import java.util.Collection; 
     4import java.util.HashMap; 
    25 
    36import FAtiMA.emotionalState.EmotionalState; 
     
    58import FAtiMA.motivationalSystem.MotivationalState; 
    69import FAtiMA.reactiveLayer.ActionTendencies; 
     10import FAtiMA.reactiveLayer.EmotionalReactionTreeNode; 
     11import FAtiMA.sensorEffector.Event; 
    712 
    813public interface AgentModel { 
     
    1722         
    1823        public ActionTendencies getActionTendencies(); 
     24         
     25        public EmotionalReactionTreeNode getEmotionalReactions(); 
     26         
     27        public HashMap<String,ModelOfOther> getToM(); 
     28         
     29        public Collection<String> getNearByAgents(); 
     30         
     31        public Collection<Event> getEvents(); 
     32         
     33        public void clearEvents(); 
    1934} 
  • AgentMind/branches/FAtiMA2/src/FAtiMA/Display/ActionTendenciesPanel.java

    r212 r236  
    88import FAtiMA.Agent; 
    99import FAtiMA.AgentModel; 
     10import FAtiMA.reactiveLayer.Action; 
    1011import FAtiMA.reactiveLayer.ActionTendencies; 
    1112 
     
    3839        @Override 
    3940        public boolean Update(Agent ag) { 
    40                 // TODO Auto-generated method stub 
    41                 return false; 
     41                return Update((AgentModel) ag); 
    4242        } 
    4343 
     
    4545        public boolean Update(AgentModel am) { 
    4646                ActionTendencies at = am.getActionTendencies(); 
    47                 //if(at.) 
     47                if(at.getActions().size() != _numberOfAT) 
     48                { 
     49                        _actionsPanel.removeAll(); 
     50                        for(Action a : at.getActions()) 
     51                        { 
     52                                _actionsPanel.add(new ActionDisplay(a)); 
     53                        } 
     54                         
     55                        _numberOfAT = at.getActions().size(); 
     56                        return true; 
     57                } 
    4858                 
    4959                return false; 
  • AgentMind/branches/FAtiMA2/src/FAtiMA/Display/ModelOfOtherPanel.java

    r211 r236  
    3030             _components.addTab("ShortTermMemory", null, new ShortTermMemoryPanel()); 
    3131              
     32             _components.addTab("ActionTendencies", null, new ActionTendenciesPanel()); 
     33              
    3234              
    3335             this.add(_components); 
  • AgentMind/branches/FAtiMA2/src/FAtiMA/Display/ToMPanel.java

    r212 r236  
    4343                } 
    4444                 
     45                update = ((ModelOfOtherPanel)_agentsPanel.getSelectedComponent()).Update(ag) || update; 
     46                 
    4547                return update; 
    4648        } 
  • AgentMind/branches/FAtiMA2/src/FAtiMA/ModelOfOther.java

    r209 r236  
    11package FAtiMA; 
     2 
     3import java.util.ArrayList; 
     4import java.util.Collection; 
     5import java.util.HashMap; 
    26 
    37import FAtiMA.emotionalState.EmotionalState; 
     
    610import FAtiMA.reactiveLayer.ActionTendencies; 
    711import FAtiMA.reactiveLayer.EmotionalReactionTreeNode; 
     12import FAtiMA.sensorEffector.Event; 
    813 
    914public class ModelOfOther implements AgentModel { 
    1015         
     16        private ArrayList<Event> _perceivedEvents; 
    1117        private String _name; 
    1218        private EmotionalState _es; 
     
    2228                _mem = new Memory(); 
    2329                _ms = new MotivationalState(); 
     30                _perceivedEvents = new ArrayList<Event>(); 
    2431                _emotionalReactions = (EmotionalReactionTreeNode) reactions.clone(); 
    2532                _actionTendencies = (ActionTendencies) at.clone(); 
    2633                _actionTendencies.ClearFilters(); 
    2734                 
     35        } 
     36         
     37        public void AddEvent(Event e) 
     38        { 
     39                _perceivedEvents.add(e); 
     40        } 
     41         
     42        public Collection<Event> getEvents() 
     43        { 
     44                return _perceivedEvents; 
     45        } 
     46         
     47        public void clearEvents() 
     48        { 
     49                _perceivedEvents.clear(); 
    2850        } 
    2951 
     
    5577        } 
    5678 
     79        @Override 
     80        public Collection<String> getNearByAgents() { 
     81                return null; 
     82        } 
     83 
     84        @Override 
     85        public HashMap<String, ModelOfOther> getToM() { 
     86                return null; 
     87        } 
     88 
    5789} 
  • AgentMind/branches/FAtiMA2/src/FAtiMA/emotionalState/Appraisal.java

    r191 r236  
    3535import FAtiMA.sensorEffector.Event; 
    3636import FAtiMA.socialRelations.LikeRelation; 
     37import FAtiMA.util.Constants; 
    3738import FAtiMA.util.enumerables.EmotionType; 
    3839 
    3940import FAtiMA.wellFormedNames.Name; 
    40 import FAtiMA.wellFormedNames.Symbol; 
    4141 
    4242public abstract class Appraisal { 
    4343         
    44         public static ArrayList<BaseEmotion> GenerateEmotions(AgentModel am, Event event, AppraisalVector vector, Symbol other) 
     44        public static ArrayList<BaseEmotion> GenerateSelfEmotions(AgentModel am, Event event, AppraisalVector vector) 
    4545        { 
    4646                ArrayList<BaseEmotion> emotions = new ArrayList<BaseEmotion>(); 
    4747                float desirability; 
    48                 float desirabilityForOther; 
    4948                float praiseworthiness; 
    5049                float like; 
    5150                 
    5251                desirability = vector.getAppraisalVariable(AppraisalVector.DESIRABILITY); 
    53                 desirabilityForOther = vector.getAppraisalVariable(AppraisalVector.DESIRABILITY_FOR_OTHER); 
    5452                praiseworthiness = vector.getAppraisalVariable(AppraisalVector.PRAISEWORTHINESS); 
    5553                like = vector.getAppraisalVariable(AppraisalVector.LIKE); 
     
    6462                if (desirability != 0) { 
    6563                        emotions.add(OCCAppraiseWellBeing(event, desirability)); 
    66                                  
    67                         //FortuneOfOtherEmotions: HappyFor, Gloating, Resentment, Pitty 
    68                         if(desirabilityForOther != 0) { 
    69                                 emotions.addAll(OCCAppraiseFortuneForAll(am, event, desirability, desirabilityForOther, other)); 
    70                         } 
    7164                } 
    7265                 
     
    195188        } 
    196189         
    197         private static ArrayList<BaseEmotion> OCCAppraiseFortuneForAll(AgentModel am, Event event, float desirability, float desirabilityForOther, Symbol other) 
     190        public static BaseEmotion GenerateEmotionForOther(AgentModel am, Event event, AppraisalVector v, String other) 
    198191        { 
     192                float desirabilityForOther = v.getAppraisalVariable(AppraisalVector.DESIRABILITY_FOR_OTHER); 
     193                float desirability = v.getAppraisalVariable(AppraisalVector.DESIRABILITY); 
    199194                float targetBias = 0; 
    200195                float subjectBias = 0; 
    201196                float bias; 
    202197                float newDesirability = 0; 
    203                 ArrayList<BaseEmotion> emotions = new ArrayList<BaseEmotion>(); 
    204                  
    205                 String appraisingAgent = am.getName(); 
    206                 String target = event.GetTarget(); 
     198         
     199                 
    207200                String subject = event.GetSubject(); 
    208201                 
    209                 if(other != null && other.isGrounded()) 
    210                 { 
    211                         target = other.toString(); 
    212                 }                
    213  
    214                                  
    215                 if(target != null && !target.equals(appraisingAgent)) 
    216                 {        
    217                         targetBias = LikeRelation.getRelation(appraisingAgent,event.GetTarget()).getValue(am.getMemory()) * desirabilityForOther/10; 
    218                         bias = targetBias; 
    219                         if(!subject.equals(appraisingAgent)) 
    220                         { 
    221                                 subjectBias = LikeRelation.getRelation(appraisingAgent, event.GetSubject()).getValue(am.getMemory()); 
     202                if(desirabilityForOther == 0) return null; 
     203                 
     204                targetBias = LikeRelation.getRelation(Constants.SELF,other).getValue(am.getMemory()) * desirabilityForOther/10; 
     205                bias = targetBias; 
     206                if(!subject.equals(Constants.SELF)) 
     207                { 
     208                                subjectBias = LikeRelation.getRelation(Constants.SELF, subject).getValue(am.getMemory()); 
    222209                                bias = (bias + subjectBias)/2; 
    223                         } 
    224                 } 
    225                 else  
    226                 { 
    227                         subjectBias = LikeRelation.getRelation(appraisingAgent,event.GetSubject()).getValue(am.getMemory()) * desirabilityForOther/10; 
    228                         bias = subjectBias; 
    229                 } 
    230  
    231                 newDesirability = Math.round((desirability + bias)/2); 
    232  
    233                 if(target != null && !target.equals(appraisingAgent)) 
    234                 { 
    235                         emotions.add(OCCAppraiseFortuneOfOthers(event, newDesirability, desirabilityForOther, target)); 
    236                          
    237                         if(!subject.equals(appraisingAgent)) 
    238                         { 
    239                                 emotions.add(OCCAppraiseFortuneOfOthers(event, newDesirability, 10, subject)); 
    240                         } 
    241                 } 
    242                 else 
    243                 { 
    244                         emotions.add(OCCAppraiseFortuneOfOthers(event, newDesirability, desirabilityForOther, subject)); 
    245                 } 
    246                  
    247                 return emotions; 
     210                } 
     211                 
     212                newDesirability = (desirability + bias)/2; 
     213 
     214                 
     215                return OCCAppraiseFortuneOfOthers(event, newDesirability, desirabilityForOther, other); 
     216                                         
    248217        } 
    249218         
  • AgentMind/branches/FAtiMA2/src/FAtiMA/motivationalSystem/MotivationalState.java

    r199 r236  
    217217                vec.setAppraisalVariable(AppraisalVector.PRAISEWORTHINESS, praiseWorthiness); 
    218218         
    219                 emotions = Appraisal.GenerateEmotions(am, e, vec, null); 
     219                emotions = Appraisal.GenerateSelfEmotions(am, e, vec); 
    220220                 
    221221                 
  • AgentMind/branches/FAtiMA2/src/FAtiMA/reactiveLayer/ActionTendencies.java

    r209 r236  
    8787        } 
    8888         
     89        public ArrayList<Action> getActions() 
     90        { 
     91                return _actions; 
     92        } 
     93         
    8994        /** 
    9095         * Checks the Integrity of all the actions by testing if any of them 
  • AgentMind/branches/FAtiMA2/src/FAtiMA/reactiveLayer/ReactiveProcess.java

    r191 r236  
    6262 
    6363import java.util.ArrayList; 
     64import java.util.Collection; 
    6465import java.util.ListIterator; 
    6566 
    6667import FAtiMA.AgentModel; 
    6768import FAtiMA.AgentProcess; 
     69import FAtiMA.ModelOfOther; 
    6870import FAtiMA.ValuedAction; 
    6971import FAtiMA.emotionalState.AppraisalVector; 
     
    125127        } 
    126128         
     129        public Collection<Event> getEvents() 
     130        { 
     131                return _eventPool; 
     132        } 
     133         
     134        public void clearEvents() 
     135        { 
     136                _eventPool.clear(); 
     137        } 
     138         
    127139        /** 
    128140         * Determines an answer to a SpeechAct according to the agent's emotional reactions 
     
    157169         * reaction rules 
    158170         */ 
    159         public void Appraisal(AgentModel am) { 
    160                 ListIterator<Event> li; 
    161                 Event event; 
     171        public void Appraisal(AgentModel ag) { 
     172                Event event2; 
     173                Event event3; 
    162174                ArrayList<BaseEmotion> emotions; 
    163                 Reaction evaluation; 
    164                  
    165                  
    166                 synchronized (_eventPool) { 
    167                         li = _eventPool.listIterator(); 
    168                         while (li.hasNext()) { 
    169                                 event = (Event) li.next(); 
    170  
    171                                 evaluation = Evaluate(am, event); 
     175                BaseEmotion emotionForOther; 
     176                Reaction selfEvaluation; 
     177                Reaction otherEvaluation; 
     178                AppraisalVector v; 
     179                 
     180                 
     181                synchronized (ag.getEvents()) { 
     182                        for(Event event : ag.getEvents()) 
     183                        { 
     184                         
     185                                //self evaluation 
     186                                selfEvaluation = Evaluate(ag, event); 
    172187                                 
    173                                 if(evaluation != null) 
     188                                if(selfEvaluation != null) 
    174189                                { 
    175190                                         
    176                                         emotions = FAtiMA.emotionalState.Appraisal.GenerateEmotions(am, event, translateEmotionalReaction(evaluation), evaluation.getOther()); 
     191                                        emotions = FAtiMA.emotionalState.Appraisal.GenerateSelfEmotions( 
     192                                                        ag,  
     193                                                        event,  
     194                                                        translateEmotionalReaction(selfEvaluation)); 
    177195                                                 
    178196                                        ListIterator<BaseEmotion> li2 = emotions.listIterator(); 
    179197                                        while(li2.hasNext()) 
    180198                                        { 
    181                                                 am.getEmotionalState().AddEmotion(li2.next(), am); 
     199                                                ag.getEmotionalState().AddEmotion(li2.next(), ag); 
    182200                                        }                        
    183201                                } 
     202                                 
     203                                if(ag.getToM() != null) 
     204                                { 
     205                                 
     206                                        event2 = event.RemovePerspective(ag.getName()); 
     207                                         
     208                                        // generating fortune of others emotions 
     209                                        for(String other : ag.getNearByAgents()) 
     210                                        { 
     211                                                event3 = event2.ApplyPerspective(other); 
     212                                                ModelOfOther m = ag.getToM().get(other); 
     213                                                otherEvaluation = Evaluate(m, event3); 
     214                                                v = new AppraisalVector(); 
     215                                                if(selfEvaluation != null && selfEvaluation.getDesirability() != null) 
     216                                                { 
     217                                                        v.setAppraisalVariable(AppraisalVector.DESIRABILITY, selfEvaluation.getDesirability()); 
     218                                                } 
     219                                                 
     220                                                if(otherEvaluation != null && otherEvaluation.getDesirability() != null) 
     221                                                { 
     222                                                        v.setAppraisalVariable(AppraisalVector.DESIRABILITY_FOR_OTHER, otherEvaluation.getDesirability()); 
     223                                                } 
     224                                                 
     225                                                 
     226                                                emotionForOther = FAtiMA.emotionalState.Appraisal.GenerateEmotionForOther( 
     227                                                                ag, 
     228                                                                event,  
     229                                                                v, 
     230                                                                other); 
     231                                                if(emotionForOther != null) 
     232                                                { 
     233                                                        ag.getEmotionalState().AddEmotion(emotionForOther, ag); 
     234                                                } 
     235                                        } 
     236                                } 
    184237                        } 
    185                         _eventPool.clear(); 
     238                        ag.clearEvents(); 
    186239                } 
    187240        } 
     
    199252        } 
    200253         
    201         public AppraisalVector translateEmotionalReaction(Reaction r) 
     254        public static AppraisalVector translateEmotionalReaction(Reaction r) 
    202255        { 
    203256                AppraisalVector vector = new AppraisalVector(); 
     
    269322        } 
    270323         
    271         public Reaction Evaluate(AgentModel am, Event event) 
     324        public static Reaction Evaluate(AgentModel am, Event event) 
    272325        { 
    273326         
     
    282335                else 
    283336                { 
    284                         emotionalReaction = _emotionalReactions.MatchEvent(event); 
     337                        emotionalReaction = am.getEmotionalReactions().MatchEvent(event); 
    285338                        if(emotionalReaction != null) 
    286339                        { 
  • AgentMind/branches/FAtiMA2/src/FAtiMA/sensorEffector/Event.java

    r191 r236  
    175175        } 
    176176         
     177        public Event RemovePerspective(String agentName) 
     178        { 
     179                Parameter p1; 
     180                Parameter p2; 
     181                 
     182                Event e = new Event(this._subject); 
     183                 
     184                if(this._subject.equals(Constants.SELF)) 
     185                { 
     186                        e._subject = agentName; 
     187                } 
     188                else 
     189                { 
     190                        e._subject = this._subject; 
     191                } 
     192                 
     193                e._action = this._action; 
     194                 
     195                if(this._target.equals(Constants.SELF)) 
     196                { 
     197                        e._target = agentName; 
     198                } 
     199                else 
     200                { 
     201                        e._target = this._target; 
     202                } 
     203                 
     204                e._time = this._time; 
     205                 
     206                if(this._parameters != null) 
     207                { 
     208                        e._parameters = new ArrayList<Parameter>(); 
     209                        ListIterator<Parameter> li = this._parameters.listIterator(); 
     210                        while(li.hasNext()) 
     211                        { 
     212                                p1 = li.next(); 
     213                                if(p1.GetValue().equals(Constants.SELF)) 
     214                                { 
     215                                        p2 = new Parameter("param",agentName); 
     216                                } 
     217                                else 
     218                                { 
     219                                        p2 = (Parameter) p1.clone(); 
     220                                } 
     221                                e._parameters.add(p2); 
     222                        } 
     223                } 
     224                 
     225                return e; 
     226        } 
     227         
     228         
    177229        /** 
    178230         * Parses an event from a XML attributes list 
  • AgentMind/branches/FAtiMA2/src/FAtiMA/sensorEffector/RemoteAgent.java

    r231 r236  
    769769                                _agent.initializeModelOfOther(subject); 
    770770                                _agent.getMotivationalState().InitializeOtherAgentMotivators(subject); 
     771                                _agent.AddNearByAgent(subject); 
    771772                                 
    772773                        } 
     
    787788        protected void EntityRemovedPerception(String perc) 
    788789        { 
     790                StringTokenizer st = new StringTokenizer(perc, " "); 
     791                _agent.RemoveNearByAgent(st.nextToken()); 
    789792        } 
    790793         
Note: See TracChangeset for help on using the changeset viewer.