Ignore:
Timestamp:
02/11/2011 02:03:54 PM (10 years ago)
Author:
joao.dias
Message:

fixed a bug with the cultural appraisal

File:
1 edited

Legend:

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

    r929 r935  
    3535        final float ALPHA = 0.3f; 
    3636        final float POWER_DISTANCE_K = 1.2f; 
     37        final float MAX_DIMENSIONAL_SCORE = 100; 
    3738         
    3839        private String cultureFile; 
     
    6566        public void appraisal(AgentModel am, Event e, AppraisalFrame af) 
    6667        { 
    67                 float desirabilityForOther = 0; 
    68                 float desirability = af.getAppraisalVariable(OCCAppraisalVariables.DESIRABILITY.name()); 
    69                  
    70                  
    71                 for(String variable : af.getAppraisalVariables()) 
    72                 { 
    73                         if(variable.startsWith(OCCAppraisalVariables.DESFOROTHER.name())) 
     68                float desirabilityForOtherAgents = 0; 
     69                float desirabilityForAgentResponsible = 0; 
     70                 
     71                if(e.GetSubject().equalsIgnoreCase(Constants.SELF)){ 
     72                        /* if the agent was responsible for the event, 
     73                         * desirabilityForAgentResponsible is equal to the 
     74                         * desirability the event had for the agent itself 
     75                         */ 
     76                        desirabilityForAgentResponsible = af.getAppraisalVariable(OCCAppraisalVariables.DESIRABILITY.name()); 
     77                        for(String variable : af.getAppraisalVariables()) 
    7478                        { 
    75                                 desirabilityForOther += af.getAppraisalVariable(variable); 
     79                                if(variable.startsWith(OCCAppraisalVariables.DESFOROTHER.name())) 
     80                                {                
     81                                        desirabilityForOtherAgents += af.getAppraisalVariable(variable); 
     82                                } 
    7683                        } 
    77                 } 
    78                          
    79                 float praiseWorthiness = this.determinePraiseWorthiness( 
    80                                 desirability, 
    81                                 desirabilityForOther); 
     84                }else{ 
     85                        /* if the agent was not responsible for the event, 
     86                         * then the desirability the event had for the agent itself is added to 
     87                         * the desirabirabilityForOtherAgents 
     88                         */ 
     89                        desirabilityForOtherAgents += af.getAppraisalVariable(OCCAppraisalVariables.DESIRABILITY.name()); 
     90                        for(String variable : af.getAppraisalVariables()) 
     91                        { 
     92                                if(variable.startsWith(OCCAppraisalVariables.DESFOROTHER.name())) 
     93                                { 
     94                                        String agentName = variable.substring(OCCAppraisalVariables.DESFOROTHER.name().length()); 
     95                                        if (agentName.equalsIgnoreCase(e.GetSubject())){ 
     96                                                desirabilityForAgentResponsible = af.getAppraisalVariable(variable); 
     97                                        } 
     98                                        desirabilityForOtherAgents += af.getAppraisalVariable(variable); 
     99                                } 
     100                        } 
     101                } 
     102                                 
     103                float praiseWorthiness = this.determinePraiseWorthiness(desirabilityForAgentResponsible, desirabilityForOtherAgents); 
    82104                 
    83105                af.SetAppraisalVariable(NAME, (short)4, OCCAppraisalVariables.PRAISEWORTHINESS.name(), praiseWorthiness);        
     
    230252        }*/ 
    231253 
    232         public float determinePraiseWorthiness(float contributionToSelfNeeds, float contributionToOthersNeeds) { 
    233                 float collectivismCoefficient = _dimensionalValues[CulturalDimensionType.COLLECTIVISM] * 0.01f; 
    234  
    235                  
    236                 if((contributionToOthersNeeds >= 0)  && (contributionToSelfNeeds - contributionToOthersNeeds > 0)){ 
     254        public float determinePraiseWorthiness(float contributionToResponsibleAgentNeeds, float contributionToOthersNeeds) { 
     255                float collectivismCoefficient = _dimensionalValues[CulturalDimensionType.COLLECTIVISM] / MAX_DIMENSIONAL_SCORE; 
     256 
     257                 
     258                if((contributionToOthersNeeds >= 0)  && (contributionToResponsibleAgentNeeds - contributionToOthersNeeds > 0)){ 
    237259                        //if agent doesn't lower other agents needs and he does something better for himself than to others 
    238260                        return 0; 
    239261                } 
    240262                else{ 
    241                         float praiseworthiness = (contributionToOthersNeeds - contributionToSelfNeeds) * collectivismCoefficient; 
     263                        float praiseworthiness = (contributionToOthersNeeds - contributionToResponsibleAgentNeeds) * collectivismCoefficient; 
    242264                        return praiseworthiness; 
    243265                } 
Note: See TracChangeset for help on using the changeset viewer.