Changeset 634


Ignore:
Timestamp:
10/29/2010 12:10:14 AM (9 years ago)
Author:
joao.dias
Message:
 
Location:
AgentMind/branches/FAtiMA-Modular
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • AgentMind/branches/FAtiMA-Modular/AgentLauncher/src/AgentLauncher.java

    r622 r634  
    1212 
    1313import FAtiMA.Agent; 
     14import FAtiMA.AgentTemplate; 
     15import FAtiMA.motivationalSystem.MotivationalState; 
    1416import FAtiMA.util.enumerables.AgentPlatform; 
    1517import FAtiMA.util.parsers.ScenarioLoaderHandler; 
     
    3133                short agentPlatform = 0; 
    3234                String platform; 
    33                 Agent agent = null; 
     35                AgentTemplate agent = null; 
    3436                String args2[] = null; 
    3537                 
     
    6466                                if(args2.length >= 13){ 
    6567                                         
    66                                         agent = new Agent(agentPlatform,args2[1], Integer.parseInt(args2[2]),"", args2[4], Boolean.parseBoolean(args2[5]), args2[6], args2[7], args2[8], args2[9], args2[10], args2[11],null,null); 
     68                                        agent = new AgentTemplate(agentPlatform,args2[1], Integer.parseInt(args2[2]),"", args2[4], Boolean.parseBoolean(args2[5]), args2[6], args2[7], args2[8], args2[9], args2[10], null,null); 
    6769                                } 
    6870                                else if(args2.length == 5) 
    6971                                { 
    7072                                        System.err.println("Creating the agent instance"); 
    71                                         agent = new Agent(agentPlatform,args2[1],Integer.parseInt(args2[2]), args2[3], args2[4]); 
     73                                        agent = new AgentTemplate(agentPlatform,args2[1],Integer.parseInt(args2[2]), args2[3], args2[4]); 
    7274                                } 
    7375                                else 
     
    8587                                else if(args2.length == 13 && args2[12].equals("true")) 
    8688                                { 
    87                                         agent = new Agent(agentPlatform, args2[1],Integer.parseInt(args2[2]),saveDirectory,args2[4]); 
     89                                        agent = new AgentTemplate(agentPlatform, args2[1],Integer.parseInt(args2[2]),saveDirectory,args2[4]); 
    8890                                } 
    8991                                else { 
     
    9193                                        ArrayList<String> goals = new ArrayList<String>(); 
    9294                                        readPropertiesAndGoals(args2, properties, goals); 
    93                                         agent = new Agent(agentPlatform,args2[1], Integer.parseInt(args2[2]),saveDirectory,args2[4],Boolean.parseBoolean(args2[5]),args2[6], args2[7], args2[8], args2[9],args2[10],args2[11], properties, goals);               
     95                                        agent = new AgentTemplate(agentPlatform,args2[1], Integer.parseInt(args2[2]),saveDirectory,args2[4],Boolean.parseBoolean(args2[5]),args2[6], args2[7], args2[8], args2[9],args2[10], properties, goals);                 
    9496                                } 
    9597                                break; 
     
    99101                if (agent != null) 
    100102                { 
     103                         
     104                        MotivationalState ms = new MotivationalState(); 
     105                        agent.AddComponent(ms); 
     106                         
    101107                        agent.setCompoundCue(new CompoundCue()); 
    102108                        System.out.println("Compound cue set "); 
  • AgentMind/branches/FAtiMA-Modular/FAtiMA/src/FAtiMA/AgentModel.java

    r308 r634  
    44import java.util.HashMap; 
    55 
     6import FAtiMA.deliberativeLayer.DeliberativeProcess; 
    67import FAtiMA.emotionalState.EmotionalState; 
    78import FAtiMA.memory.ICompoundCue; 
     
    3940        public void clearEvents(); 
    4041         
     42        public DeliberativeProcess getDeliberativeComponent(); 
     43         
    4144} 
  • AgentMind/branches/FAtiMA-Modular/FAtiMA/src/FAtiMA/IComponent.java

    r631 r634  
    22 
    33import FAtiMA.sensorEffector.Event; 
     4import FAtiMA.wellFormedNames.Name; 
    45 
    56public interface IComponent { 
     
    78        public String name(); 
    89         
    9         public void initialize(); 
     10        public void Initialize(AgentModel am); 
    1011         
    1112        public void reset(); 
     
    1516        public void decay(long time); 
    1617         
    17         public void update(Event e); 
    18          
    1918        public void appraisal(Event e, AgentModel am); 
    2019         
    2120        public void coping(); 
    2221         
     22        public void PropertyChangedPerception(String ToM, Name propertyName, String value); 
     23         
     24        public void LookAtPerception(String subject, String target); 
     25         
    2326} 
  • AgentMind/branches/FAtiMA-Modular/FAtiMA/src/FAtiMA/ModelOfOther.java

    r586 r634  
    66import java.util.HashMap; 
    77 
     8import FAtiMA.deliberativeLayer.DeliberativeProcess; 
    89import FAtiMA.emotionalState.EmotionDisposition; 
    910import FAtiMA.emotionalState.EmotionalState; 
     
    119120                return null; 
    120121        } 
     122         
     123        @Override 
     124        public DeliberativeProcess getDeliberativeComponent() 
     125        { 
     126                return null; 
     127        } 
    121128 
    122129} 
  • AgentMind/branches/FAtiMA-Modular/FAtiMA/src/FAtiMA/deliberativeLayer/DeliberativeProcess.java

    r612 r634  
    182182        private ArrayList<ProtectedCondition> _protectionConstraints; 
    183183        private Intention _currentIntention; 
     184        private IExpectedUtilityStrategy _EUStrategy; 
    184185         
    185186        /** 
     
    204205                _protectionConstraints = new ArrayList<ProtectedCondition>(); 
    205206                _currentIntention = null; 
     207                _EUStrategy = new DefaultExpectedUtility(); 
     208        } 
     209         
     210        public void SetExpectedUtilityStrategy(IExpectedUtilityStrategy strategy) 
     211        { 
     212                _EUStrategy = strategy; 
    206213        } 
    207214         
     
    637644                                        //updating selfMotivators 
    638645                                        Event event2 = event.ApplyPerspective(am.getName()); 
    639                                         am.getMotivationalState().UpdateMotivators(am, event2, _planner.GetOperators()); 
     646                                        //am.getMotivationalState().UpdateMotivators(am, event2, _planner.GetOperators()); 
    640647                                         
    641648                                         
     
    811818                        if(!ContainsIntention(g)) 
    812819                        {                
    813                                 EU = g.GetExpectedUtility(am); 
     820                                EU = _EUStrategy.getExpectedUtility(am, g); 
    814821                                 
    815822                                if(EU > maxUtility) 
     
    826833                        { 
    827834                                if(_currentIntention == null || 
    828                                                 maxUtility > _currentIntention.getGoal().GetExpectedUtility(am)*SELECTIONTHRESHOLD) 
     835                                                maxUtility > _EUStrategy.getExpectedUtility(am,_currentIntention.getGoal())*SELECTIONTHRESHOLD) 
    829836                                { 
    830837                                        return maxGoal; 
     
    853860                        maxIntention = _currentIntention; 
    854861                        //TODO selection threshold here! 
    855                         highestUtility = _currentIntention.getGoal().GetExpectedUtility(am); 
     862                         
     863                        highestUtility = _EUStrategy.getExpectedUtility(am, _currentIntention.getGoal()); 
    856864                } 
    857865                else 
     
    872880                                if(intention != _currentIntention)  
    873881                                { 
    874                                         EU = intention.GetExpectedUtility(am); 
     882                                        EU = _EUStrategy.getExpectedUtility(am, intention.getGoal());  
    875883                                         
    876884                                        if(EU > highestUtility) 
  • AgentMind/branches/FAtiMA-Modular/FAtiMA/src/FAtiMA/deliberativeLayer/Intention.java

    r612 r634  
    241241        } 
    242242         
    243         public float GetExpectedUtility(AgentModel am) 
    244         { 
    245                 _goal.SetProbability(new Float(GetProbability(am))); 
    246                 return _goal.GetExpectedUtility(am); 
    247         } 
    248          
    249243 
    250244        /** 
  • AgentMind/branches/FAtiMA-Modular/FAtiMA/src/FAtiMA/deliberativeLayer/goals/ActivePursuitGoal.java

    r611 r634  
    319319         * @return the goal's urgency ranging from 0 (not urgent) to 1 (very urgent) 
    320320         */ 
    321         private float GetGoalUrgency(){ 
     321        public float GetGoalUrgency(){ 
    322322                 
    323323                ListIterator<Condition> li; 
     
    384384         
    385385         
    386         public float getContributionToTargetNeeds(AgentModel am) 
     386        /*public float getContributionToTargetNeeds(AgentModel am) 
    387387        { 
    388388                float result = 0;                
     
    403403        { 
    404404                return this.getContributionToNeeds(am, "SELF"); 
    405         } 
    406          
    407         private float getContributionToNeeds(AgentModel am, String target){ 
    408                 float result = 0; 
    409                 String[] effectTypes = {"OnSelect","OnIgnore"}; 
    410                 String[] nonCognitiveDrives = {"Affiliation","Integrity","Energy"}; 
    411                 float expectedContribution; 
    412                 float currentIntensity = 0; 
    413                 float auxMultiplier; // this is used for the effects that are OnIgnore 
    414                          
    415                 try { 
    416                          
    417                                  
    418                         // If target is SELF 
    419                         if(target.equalsIgnoreCase(Constants.SELF)){ 
    420                                 auxMultiplier = 1; 
    421                                 //Calculate the effect on Non-Cognitive Needs 
    422                                 for (int c = 0; c < effectTypes.length; c++ ){ 
    423                                          
    424                                         for(int i = 0; i < nonCognitiveDrives.length; i++){ 
    425                                                 expectedContribution = this.GetExpectedEffectOnDrive(effectTypes[c], nonCognitiveDrives[i], "[SELF]").floatValue(); 
    426                                                 currentIntensity =  am.getMotivationalState().GetIntensity(MotivatorType.ParseType(nonCognitiveDrives[i])); 
    427                                                 result +=  auxMultiplier * MotivationalState.determineQuadraticNeedVariation(currentIntensity, expectedContribution);  
    428                                         } 
    429                                         auxMultiplier = -1; 
    430  
    431                                 } 
    432                                  
    433                                 float currentCompetenceIntensity = am.getMotivationalState().GetIntensity(MotivatorType.COMPETENCE); 
    434                                 float expectedCompetenceContribution = am.getMotivationalState().PredictCompetenceChange(true); 
    435                                 result += MotivationalState.determineQuadraticNeedVariation(currentCompetenceIntensity, expectedCompetenceContribution); 
    436                                  
    437                                 float currentUncertaintyIntensity = am.getMotivationalState().GetIntensity(MotivatorType.CERTAINTY); 
    438                                 //expected error assuming that the goal is successful 
    439                                 float expectedError = 1 - getProbability(am); 
    440                                 float currentError = getUncertainty(am); 
    441                                 float expectedUncertaintyContribution = 10*(currentError - expectedError);  
    442                                 result += MotivationalState.determineQuadraticNeedVariation(currentUncertaintyIntensity,expectedUncertaintyContribution);        
    443                                                                  
    444                         } 
    445                         else{ 
    446                         // If target is NOT SELF 
    447                         // Only the non-cognitive needs are taken into account for other agents. This is because his actions cannot impact those needs. 
    448                                  
    449                                 if(am.getToM().containsKey(target)) 
    450                                 { 
    451                                         auxMultiplier = 1; 
    452                                         ModelOfOther m = am.getToM().get(target); 
    453                                          
    454                                         //Calculate the effect on Non-Cognitive Needs 
    455                                         for (int c = 0; c < effectTypes.length; c++ ){ 
    456                                                 for(int i = 0; i < nonCognitiveDrives.length; i++){ 
    457                                                         expectedContribution = this.GetExpectedEffectOnDrive(effectTypes[c], nonCognitiveDrives[i], "[target]").floatValue(); 
    458                                                         currentIntensity =  m.getMotivationalState().GetIntensity(MotivatorType.ParseType(nonCognitiveDrives[i])); 
    459                                                         result += auxMultiplier * MotivationalState.determineQuadraticNeedVariation(currentIntensity, expectedContribution);             
    460                                                 } 
    461                                                 auxMultiplier = -1; 
    462                                         }                
    463                                 } 
    464                         } 
    465                 } catch (InvalidMotivatorTypeException e) { 
    466                         AgentLogger.GetInstance().log("EXCEPTION:" + e); 
    467                         e.printStackTrace(); 
    468                 } 
    469  
    470  
    471                 return result; 
    472         } 
     405        }*/ 
     406         
     407         
    473408         
    474409        /*public float getContributionToPersonalNeeds(){ 
     
    503438        }*/ 
    504439         
    505         private float getCompetence(AgentModel am){ 
    506                 float generalCompetence = am.getMotivationalState().GetIntensity(MotivatorType.COMPETENCE)/10; 
    507                 Float probability = GetProbability(am); 
    508                  
    509                 if(probability != null){ 
    510                         return (generalCompetence + probability.floatValue())/2; 
    511                 }else{ 
    512                         //if there is no knowledge about the goal probability, the goal was never executed before 
    513                         //however, the agent assumes that he will be successful in achieving it  
    514                         return (generalCompetence + 1)/2; 
    515                 } 
    516         } 
    517          
    518          
    519         public float GetExpectedUtility(AgentModel am) 
    520         {                
    521                 float contributionToSelf = getContributionToPersonalNeeds(am); 
    522                 float contributionOthers = getContributionToTargetNeeds(am); 
    523                  
    524                 float culturalGoalUtility = CulturalDimensions.GetInstance().determineCulturalUtility(am, this,contributionToSelf,contributionOthers);           
    525                  
    526                 float EU = culturalGoalUtility * getCompetence(am) + (1 + this.GetGoalUrgency()); 
    527                  
    528                  
    529                 AgentLogger.GetInstance().intermittentLog("Goal: " + this.getName() + " CulturalUtilitity: " + culturalGoalUtility + " Competence: " + this.getCompetence(am) + 
    530                                 " Urgency: "+ this.GetGoalUrgency() + " Total: " + EU); 
    531                 return EU; 
    532         } 
     440         
    533441         
    534442         
  • AgentMind/branches/FAtiMA-Modular/FAtiMA/src/FAtiMA/motivationalSystem/MotivationalState.java

    r308 r634  
    1212import FAtiMA.AgentModel; 
    1313import FAtiMA.AgentSimulationTime; 
     14import FAtiMA.IComponent; 
     15import FAtiMA.ModelOfOther; 
    1416import FAtiMA.conditions.MotivatorCondition; 
    1517import FAtiMA.culture.CulturalDimensions; 
     18import FAtiMA.deliberativeLayer.IExpectedUtilityStrategy; 
     19import FAtiMA.deliberativeLayer.goals.ActivePursuitGoal; 
    1620import FAtiMA.deliberativeLayer.plan.EffectOnDrive; 
    1721import FAtiMA.deliberativeLayer.plan.IPlanningOperator; 
     
    3236 
    3337/** 
    34  * Implements the character's motivational state. You cannot create an MotivatorState,  
    35  * since there is one and only one instance of the MotivatorState for the agent.  
    36  * If you want to access it use MotivatorState.GetInstance() method. 
     38 * Implements the character's motivational state. 
    3739 *  
    3840 * @author Meiyii Lim, Samuel Mascarenhas  
    3941 */ 
    4042 
    41 public class MotivationalState implements Serializable, Cloneable { 
     43public class MotivationalState implements Serializable, Cloneable, IComponent, IExpectedUtilityStrategy { 
    4244         
    4345         
    4446        private static final long serialVersionUID = 1L; 
     47         
     48        private static final String NAME ="MotivationalState"; 
     49         
    4550        protected Motivator[]  _motivators; 
    4651        //protected Hashtable<String,Motivator[]> _otherAgentsMotivators; 
     
    217222                } 
    218223        } 
     224         
     225        public float getContributionToNeeds(AgentModel am, ActivePursuitGoal g, String target){ 
     226                float result = 0; 
     227                String[] effectTypes = {"OnSelect","OnIgnore"}; 
     228                String[] nonCognitiveDrives = {"Affiliation","Integrity","Energy"}; 
     229                float expectedContribution; 
     230                float currentIntensity = 0; 
     231                float auxMultiplier; // this is used for the effects that are OnIgnore 
     232                         
     233                try { 
     234                         
     235                                 
     236                        // If target is SELF 
     237                        if(target.equalsIgnoreCase(Constants.SELF)){ 
     238                                auxMultiplier = 1; 
     239                                //Calculate the effect on Non-Cognitive Needs 
     240                                for (int c = 0; c < effectTypes.length; c++ ){ 
     241                                         
     242                                        for(int i = 0; i < nonCognitiveDrives.length; i++){ 
     243                                                expectedContribution = g.GetExpectedEffectOnDrive(effectTypes[c], nonCognitiveDrives[i], "[SELF]").floatValue(); 
     244                                                currentIntensity =  am.getMotivationalState().GetIntensity(MotivatorType.ParseType(nonCognitiveDrives[i])); 
     245                                                result +=  auxMultiplier * MotivationalState.determineQuadraticNeedVariation(currentIntensity, expectedContribution);  
     246                                        } 
     247                                        auxMultiplier = -1; 
     248 
     249                                } 
     250                                 
     251                                float currentCompetenceIntensity = am.getMotivationalState().GetIntensity(MotivatorType.COMPETENCE); 
     252                                float expectedCompetenceContribution = am.getMotivationalState().PredictCompetenceChange(true); 
     253                                result += MotivationalState.determineQuadraticNeedVariation(currentCompetenceIntensity, expectedCompetenceContribution); 
     254                                 
     255                                float currentUncertaintyIntensity = am.getMotivationalState().GetIntensity(MotivatorType.CERTAINTY); 
     256                                //expected error assuming that the goal is successful 
     257                                float expectedError = 1 - g.getProbability(am); 
     258                                float currentError = g.getUncertainty(am); 
     259                                float expectedUncertaintyContribution = 10*(currentError - expectedError);  
     260                                result += MotivationalState.determineQuadraticNeedVariation(currentUncertaintyIntensity,expectedUncertaintyContribution);        
     261                                                                 
     262                        } 
     263                        else{ 
     264                        // If target is NOT SELF 
     265                        // Only the non-cognitive needs are taken into account for other agents. This is because his actions cannot impact those needs. 
     266                                 
     267                                if(am.getToM().containsKey(target)) 
     268                                { 
     269                                        auxMultiplier = 1; 
     270                                        ModelOfOther m = am.getToM().get(target); 
     271                                         
     272                                        //Calculate the effect on Non-Cognitive Needs 
     273                                        for (int c = 0; c < effectTypes.length; c++ ){ 
     274                                                for(int i = 0; i < nonCognitiveDrives.length; i++){ 
     275                                                        expectedContribution = g.GetExpectedEffectOnDrive(effectTypes[c], nonCognitiveDrives[i], "[target]").floatValue(); 
     276                                                        currentIntensity =  GetIntensity(MotivatorType.ParseType(nonCognitiveDrives[i])); 
     277                                                        result += auxMultiplier * MotivationalState.determineQuadraticNeedVariation(currentIntensity, expectedContribution);             
     278                                                } 
     279                                                auxMultiplier = -1; 
     280                                        }                
     281                                } 
     282                        } 
     283                } catch (InvalidMotivatorTypeException e) { 
     284                        AgentLogger.GetInstance().log("EXCEPTION:" + e); 
     285                        e.printStackTrace(); 
     286                } 
     287 
     288 
     289                return result; 
     290        } 
     291         
     292        public float getExpectedUtility(AgentModel am, ActivePursuitGoal g) 
     293        {                
     294                float utility = getContributionToNeeds(am, g, Constants.SELF); 
     295                                 
     296                 
     297                float EU = utility * getCompetence(am, g) + (1 + g.GetGoalUrgency()); 
     298                 
     299                 
     300                AgentLogger.GetInstance().intermittentLog("Goal: " + g.getName() + " Utilitity: " + utility + " Competence: " + getCompetence(am,g) + 
     301                                " Urgency: "+ g.GetGoalUrgency() + " Total: " + EU); 
     302                return EU; 
     303        } 
     304         
     305        public float getCompetence(AgentModel am, ActivePursuitGoal g){ 
     306                float generalCompetence = GetIntensity(MotivatorType.COMPETENCE)/10; 
     307                Float probability = g.GetProbability(am); 
     308                 
     309                if(probability != null){ 
     310                        return (generalCompetence + probability.floatValue())/2; 
     311                }else{ 
     312                        //if there is no knowledge about the goal probability, the goal was never executed before 
     313                        //however, the agent assumes that he will be successful in achieving it  
     314                        return (generalCompetence + 1)/2; 
     315                } 
     316        } 
     317         
     318         
    219319 
    220320        /** 
     
    364464         * Decays all needs according to the System Time 
    365465         */ 
    366         public void Decay() { 
    367  
    368                 long currentTime = AgentSimulationTime.GetInstance().Time();; 
     466        public void decay(long currentTime) { 
     467 
    369468                if (currentTime >= _lastTime + 1000) { 
    370469                        _lastTime = currentTime; 
     
    395494                return result; 
    396495        } 
     496 
     497 
     498        @Override 
     499        public String name() { 
     500                return MotivationalState.NAME; 
     501        } 
     502 
     503 
     504        @Override 
     505        public void reset() { 
     506                // TODO Auto-generated method stub 
     507                 
     508        } 
     509 
     510 
     511        @Override 
     512        public void shutdown() { 
     513                // TODO Auto-generated method stub 
     514                 
     515        } 
     516 
     517 
     518        @Override 
     519        public void appraisal(Event e, AgentModel am) { 
     520                Event event2 = e.ApplyPerspective(am.getName()); 
     521                UpdateMotivators(am, event2, am.getDeliberativeComponent().getEmotionalPlanner().GetOperators());        
     522        } 
     523 
     524 
     525        @Override 
     526        public void coping() { 
     527                // TODO Auto-generated method stub 
     528                 
     529        } 
     530 
     531 
     532        @Override 
     533        public void PropertyChangedPerception(String ToM, Name propertyName, 
     534                        String value) { 
     535                // TODO Auto-generated method stub 
     536                 
     537        } 
     538 
     539 
     540        @Override 
     541        public void LookAtPerception(String subject, String target) { 
     542                // TODO Auto-generated method stub 
     543                 
     544        } 
     545 
     546 
     547        @Override 
     548        public void Initialize(AgentModel am) { 
     549                 
     550                am.getDeliberativeComponent().SetExpectedUtilityStrategy(this); 
     551        } 
    397552} 
Note: See TracChangeset for help on using the changeset viewer.