示例#1
0
        public void Appraisal(KB kb, IBaseEvent evt, IWritableAppraisalFrame frame)
        {
            AppraisalRule activeRule = Evaluate(evt, kb, kb.Perspective);

            if (activeRule != null)
            {
                if (activeRule.Desirability != null)
                {
                    float des;
                    if (!float.TryParse(activeRule.Desirability.ToString(), out des))
                    {
                        throw new ArgumentException("Desirability can only be a float value");
                    }
                    frame.SetAppraisalVariable(OCCAppraisalVariables.DESIRABILITY, des);
                }

                if (activeRule.Praiseworthiness != null)
                {
                    float p;
                    if (!float.TryParse(activeRule.Praiseworthiness.ToString(), out p))
                    {
                        throw new ArgumentException("Desirability can only be a float value");
                    }
                    frame.SetAppraisalVariable(OCCAppraisalVariables.PRAISEWORTHINESS, p);
                }
            }
        }
示例#2
0
 /// <summary>
 ///     Clone Constructor
 /// </summary>
 /// <param name="other">the reaction to clone</param>
 public AppraisalRule(AppraisalRule other)
 {
     m_id               = other.m_id;
     EventName          = other.EventName;
     Conditions         = new ConditionSet(other.Conditions);
     AppraisalVariables = other.AppraisalVariables;
 }
示例#3
0
        public void Appraisal(EmotionalAppraisalAsset emotionalModule, IBaseEvent evt, IWritableAppraisalFrame frame)
        {
            AppraisalRule selfEvaluation = Evaluate(evt, emotionalModule.Kb);

            if (selfEvaluation != null)
            {
                if (selfEvaluation.Desirability != 0)
                {
                    frame.SetAppraisalVariable(OCCAppraisalVariables.DESIRABILITY, selfEvaluation.Desirability);
                }

                //if (selfEvaluation.DesirabilityForOther != 0)
                //{
                //	string other;
                //	if (selfEvaluation.Other != null)
                //		other = selfEvaluation.Other.ToString();
                //	else if (evt.Target != null)
                //		other = evt.Target;
                //	else
                //		other = evt.Subject;

                //	frame.SetAppraisalVariable(OCCAppraisalVariables.DESIRABILITY_FOR_OTHER + other, selfEvaluation.DesirabilityForOther);
                //}

                if (selfEvaluation.Praiseworthiness != 0)
                {
                    frame.SetAppraisalVariable(OCCAppraisalVariables.PRAISEWORTHINESS, selfEvaluation.Praiseworthiness);
                }

                //if (selfEvaluation.Like != 0)
                //	frame.SetAppraisalVariable(OCCAppraisalVariables.LIKE, selfEvaluation.Like);
            }
        }
示例#4
0
 /// <summary>
 ///     Clone Constructor
 /// </summary>
 /// <param name="other">the reaction to clone</param>
 public AppraisalRule(AppraisalRule other)
 {
     m_id             = other.m_id;
     EventName        = other.EventName;
     Conditions       = new ConditionSet(other.Conditions);
     Desirability     = other.Desirability;
     Praiseworthiness = other.Praiseworthiness;
 }
示例#5
0
 /// <summary>
 ///     Clone Constructor
 /// </summary>
 /// <param name="other">the reaction to clone</param>
 public AppraisalRule(AppraisalRule other)
 {
     Desirability = other.Desirability;
     //DesirabilityForOther = other.DesirabilityForOther;
     Praiseworthiness = other.Praiseworthiness;
     //Like = other.Like;
     //ReferencedEventName = (Name)other.ReferencedEventName.Clone();
     //if (Other != null)
     //	Other = (Name) other.Other.Clone();
 }
 public void AddEmotionalReaction(AppraisalRule appraisalRule)
 {
     var name = appraisalRule.EventName;
     HashSet<AppraisalRule> ruleSet;
     if (!Rules.TryGetValue(name, out ruleSet))
     {
         ruleSet = new HashSet<AppraisalRule>();
         Rules.Add(name, ruleSet);
     }
     ruleSet.Add(appraisalRule);
 }
示例#7
0
        private void AddEmotionalReaction(AppraisalRule appraisalRule)
        {
            var name = appraisalRule.EventName;
            HashSet <AppraisalRule> ruleSet;

            if (!Rules.TryGetValue(name, out ruleSet))
            {
                ruleSet = new HashSet <AppraisalRule>();
                Rules.Add(name, ruleSet);
            }
            ruleSet.Add(appraisalRule);
        }
示例#8
0
        public Guid AddAppraisalRuleCondition(Guid appraisalRuleId, ConditionDTO conditionDto)
        {
            AppraisalRule existingRule = null;

            findExistingAppraisalRule(appraisalRuleId, out existingRule);
            if (existingRule != null)
            {
                var condition = Condition.Parse(conditionDto.Condition);
                existingRule.Conditions = existingRule.Conditions.Add(condition);
                return(condition.Id);
            }
            return(Guid.Empty);
        }
 /// <summary>
 ///     Clone Constructor
 /// </summary>
 /// <param name="other">the reaction to clone</param>
 public AppraisalRule(AppraisalRule other)
 {
     m_id = other.m_id;
     EventName = other.EventName;
     Conditions = new ConditionSet(other.Conditions);
     Desirability = other.Desirability;
     Praiseworthiness = other.Praiseworthiness;
     //DesirabilityForOther = other.DesirabilityForOther;
     //Like = other.Like;
     //ReferencedEventName = (Name)other.ReferencedEventName.Clone();
     //if (Other != null)
     //	Other = (Name) other.Other.Clone();
 }
示例#10
0
 /// <summary>
 ///     Clone Constructor
 /// </summary>
 /// <param name="other">the reaction to clone</param>
 public AppraisalRule(AppraisalRule other)
 {
     m_id      = other.m_id;
     EventName = other.EventName;
     if (other.Conditions == null || other.Conditions.Count == 0)
     {
         Conditions = new ConditionSet();
     }
     else
     {
         Conditions = new ConditionSet(other.Conditions);
     }
     AppraisalVariables = other.AppraisalVariables;
 }
示例#11
0
        public void InverseAppraisal(EmotionalAppraisalAsset emotionalModule, IAppraisalFrame frame)
        {
            float desirability     = frame.GetAppraisalVariable(OCCAppraisalVariables.DESIRABILITY);
            float praiseworthiness = frame.GetAppraisalVariable(OCCAppraisalVariables.PRAISEWORTHINESS);

            if (desirability != 0 || praiseworthiness != 0)
            {
                var           eventName = frame.AppraisedEvent.EventName.ApplyPerspective(emotionalModule.Perspective);
                AppraisalRule r         = new AppraisalRule(eventName, null);
                r.Desirability     = desirability;
                r.Praiseworthiness = praiseworthiness;
                //r.EventObject = frame.AppraisedEvent.ToIdentifierName().RemovePerspective(emotionalModule.Perspective);
                AddEmotionalReaction(r);
            }
        }
示例#12
0
        public IEnumerable <AppraisalRule> Evaluate(IBaseEvent evt, IQueryable kb, Name perspective)
        {
            // Switching the SELF term for the correct name withint the event

            var auxEvt = evt.EventName.SwapTerms(perspective, Name.SELF_SYMBOL);
            var result = new List <AppraisalRule>();

            foreach (var r in this.Rules)
            {
                // Trying to find all possible initial substitutions;
                var initialSubSet = Unifier.Unify(r.EventName, auxEvt);


                if (initialSubSet == null)
                {
                    initialSubSet = new SubstitutionSet();
                }


                if (auxEvt.Match(r.EventName) || initialSubSet.Any())
                {
                    var finalSubSet = r.Conditions.Unify(kb, perspective, new List <SubstitutionSet>()
                    {
                        new SubstitutionSet(initialSubSet)
                    });
                    if (finalSubSet != null)
                    {
                        //TODO: Handle uncertainty in beliefs
                        foreach (var set in finalSubSet)
                        {
                            var a = new AppraisalRule(r);
                            a.EventName.MakeGround(set);
                            foreach (var variable in a.getAppraisalVariables())
                            {
                                variable.Value = variable.Value.MakeGround(set);
                                if (variable.Target != null && variable.Target != (Name)"-")
                                {
                                    variable.Target = variable.Target.MakeGround(set);
                                }
                            }
                            result.Add(a);
                        }
                    }
                }
            }
            return(result);
        }
示例#13
0
        /// <summary>
        /// Adds an emotional reaction to an event
        /// </summary>
        /// <param name="emotionalAppraisalRule">the AppraisalRule to add</param>
        public void AddOrUpdateAppraisalRule(AppraisalRuleDTO emotionalAppraisalRuleDTO)
        {
            AppraisalRule existingRule = GetAppraisalRule(emotionalAppraisalRuleDTO.Id);

            if (existingRule != null)
            {
                RemoveAppraisalRule(existingRule.Id);
                existingRule.EventName          = emotionalAppraisalRuleDTO.EventMatchingTemplate;
                existingRule.Conditions         = new ConditionSet(emotionalAppraisalRuleDTO.Conditions);
                existingRule.AppraisalVariables = emotionalAppraisalRuleDTO.AppraisalVariables;
            }
            else
            {
                existingRule = new AppraisalRule(emotionalAppraisalRuleDTO);
            }
            AddAppraisalRule(existingRule);
        }
示例#14
0
        /// <summary>
        /// Adds an emotional reaction to an event
        /// </summary>
        /// <param name="emotionalAppraisalRule">the AppraisalRule to add</param>
        public void AddOrUpdateAppraisalRule(AppraisalRuleDTO emotionalAppraisalRuleDTO)
        {
            AppraisalRule existingRule = GetAppraisalRule(emotionalAppraisalRuleDTO.Id);

            if (existingRule != null)
            {
                RemoveAppraisalRule(existingRule);
                existingRule.Desirability     = emotionalAppraisalRuleDTO.Desirability;
                existingRule.Praiseworthiness = emotionalAppraisalRuleDTO.Praiseworthiness;
                existingRule.EventName        = emotionalAppraisalRuleDTO.EventMatchingTemplate;
                existingRule.Conditions       = new ConditionSet(emotionalAppraisalRuleDTO.Conditions);
            }
            else
            {
                existingRule = new AppraisalRule(emotionalAppraisalRuleDTO);
            }
            AddEmotionalReaction(existingRule);
        }
示例#15
0
        /// <summary>
        /// Adds an emotional reaction to an event
        /// </summary>
        /// <param name="emotionalAppraisalRule">the AppraisalRule to add</param>
        public void AddOrUpdateAppraisalRule(AppraisalRuleDTO emotionalAppraisalRuleDTO)
        {
            AppraisalRule existingRule     = null;
            var           existingRulePair = findExistingAppraisalRule(emotionalAppraisalRuleDTO.Id, out existingRule);

            if (existingRule == null)
            {
                this.AddEmotionalReaction(new AppraisalRule(emotionalAppraisalRuleDTO));
            }
            else
            {
                existingRule.Desirability     = emotionalAppraisalRuleDTO.Desirability;
                existingRule.Praiseworthiness = emotionalAppraisalRuleDTO.Praiseworthiness;
                existingRule.EventName        = Name.BuildName(emotionalAppraisalRuleDTO.EventMatchingTemplate);
                Rules.Remove(existingRulePair);
                Rules.Add(existingRule.EventName, existingRulePair.Value);
            }
        }
示例#16
0
        public void RemoveAppraisalRule(AppraisalRule appraisalRule)
        {
            HashSet <AppraisalRule> ruleSet;

            if (Rules.TryGetValue(appraisalRule.EventName, out ruleSet))
            {
                AppraisalRule ruleToRemove = null;
                foreach (var rule in ruleSet)
                {
                    if (rule.Id == appraisalRule.Id)
                    {
                        ruleToRemove = rule;
                    }
                }
                if (ruleToRemove != null)
                {
                    ruleSet.Remove(ruleToRemove);
                }
            }
        }
示例#17
0
        public void Appraisal(KB kb, IBaseEvent evt, IWritableAppraisalFrame frame)
        {
            AppraisalRule activeRule = Evaluate(evt, kb, kb.Perspective);

            if (activeRule != null)
            {
                foreach (var appVar in activeRule.getAppraisalVariables())
                {
                    float des;
                    if (!float.TryParse(appVar.Value.ToString(), out des))
                    {
                        throw new ArgumentException(appVar.Name + " can only be a float value");
                    }


                    if (appVar.Name == OCCAppraisalVariables.GOALSUCCESSPROBABILITY)
                    {
                        frame.SetAppraisalVariable(OCCAppraisalVariables.GOALSUCCESSPROBABILITY + " " + appVar.Target, des);
                    }

                    else if (appVar.Name == OCCAppraisalVariables.PRAISEWORTHINESS)
                    {
                        frame.SetAppraisalVariable(OCCAppraisalVariables.PRAISEWORTHINESS + " " + appVar.Target, des);
                    }

                    else
                    {
                        frame.SetAppraisalVariable(appVar.Name, des);
                    }

                    if (appVar.Target != null && appVar.Target != (Name)"-" && appVar.Target != (Name)"SELF")
                    {
                        frame.SetAppraisalVariable(OCCAppraisalVariables.DESIRABILITY_FOR_OTHER + "" + appVar.Target, des);
                    }
                }
            }
        }
示例#18
0
 public void AddAppraisalRule(AppraisalRule appraisalRule)
 {
     Rules.Add(appraisalRule);
 }
 /// <summary>
 /// Adds an emotional reaction to an event
 /// </summary>
 /// <param name="emotionalAppraisalRule">the AppraisalRule to add</param>
 public void AddOrUpdateAppraisalRule(AppraisalRuleDTO emotionalAppraisalRuleDTO)
 {
     AppraisalRule existingRule = GetAppraisalRule(emotionalAppraisalRuleDTO.Id);
     if (existingRule != null)
     {
         RemoveAppraisalRule(existingRule);
         existingRule.Desirability = emotionalAppraisalRuleDTO.Desirability;
         existingRule.Praiseworthiness = emotionalAppraisalRuleDTO.Praiseworthiness;
         existingRule.EventName = Name.BuildName(emotionalAppraisalRuleDTO.EventMatchingTemplate);
         existingRule.Conditions = new ConditionSet(emotionalAppraisalRuleDTO.Conditions);
     }
     else
     {
         existingRule = new AppraisalRule(emotionalAppraisalRuleDTO);
     }
     AddEmotionalReaction(existingRule);
 }
示例#20
0
 //todo: this method is overly complex due to the nature of how rules are stored. with time try to refactor this
 private KeyValuePair <Name, HashSet <AppraisalRule> > findExistingAppraisalRule(Guid id, out AppraisalRule rule)
 {
     foreach (var ruleNamePair in Rules)
     {
         var ruleSet = ruleNamePair.Value;
         foreach (var appraisalRule in ruleSet)
         {
             if (appraisalRule.Id == id)
             {
                 rule = appraisalRule;
                 return(ruleNamePair);
             }
         }
     }
     rule = null;
     return(Rules.FirstOrDefault());
 }
 public void RemoveAppraisalRule(AppraisalRule appraisalRule)
 {
     HashSet<AppraisalRule> ruleSet;
     if (Rules.TryGetValue(appraisalRule.EventName, out ruleSet))
     {
         AppraisalRule ruleToRemove = null;
         foreach (var rule in ruleSet)
         {
             if (rule.Id == appraisalRule.Id)
             {
                 ruleToRemove = rule;
             }
         }
         if (ruleToRemove != null)
         {
             ruleSet.Remove(ruleToRemove);
         }
     }
 }
        public void InverseAppraisal(EmotionalAppraisalAsset emotionalModule, IAppraisalFrame frame)
        {
            float desirability = frame.GetAppraisalVariable(OCCAppraisalVariables.DESIRABILITY);
            float praiseworthiness = frame.GetAppraisalVariable(OCCAppraisalVariables.PRAISEWORTHINESS);

            if (desirability != 0 || praiseworthiness != 0)
            {
                var eventName = frame.AppraisedEvent.EventName.ApplyPerspective((Name)emotionalModule.Perspective);
                AppraisalRule r = new AppraisalRule(eventName,null);
                r.Desirability = desirability;
                r.Praiseworthiness = praiseworthiness;
                //r.EventObject = frame.AppraisedEvent.ToIdentifierName().RemovePerspective(emotionalModule.Perspective);
                AddEmotionalReaction(r);
            }
        }
        private static EmotionalAppraisalAsset BuildTestAsset()
        {
            //Emotional System Setup
            var m_emotionalAppraisalAsset = new EmotionalAppraisalAsset("Agent");
            m_emotionalAppraisalAsset.Perspective = "Test";

            //Setup Emotional Disposition

            //var loveDisposition = new EmotionDisposition(OCCEmotionType.Love.Name, 5, 3);
            //m_emotionalAppraisalAsset.EmotionalState.AddEmotionDisposition(loveDisposition);

            //var hateDisposition = new EmotionDisposition(OCCEmotionType.Hate.Name, 5, 3);
            //m_emotionalAppraisalAsset.EmotionalState.AddEmotionDisposition(hateDisposition);

            //var hopeDisposition = new EmotionDisposition(OCCEmotionType.Hope.Name, 8, 4);
            //m_emotionalAppraisalAsset.EmotionalState.AddEmotionDisposition(hopeDisposition);

            //var fearDisposition = new EmotionDisposition(OCCEmotionType.Fear.Name, 2, 1);
            //m_emotionalAppraisalAsset.EmotionalState.AddEmotionDisposition(fearDisposition);

            //var satisfactionDisposition = new EmotionDisposition(OCCEmotionType.Satisfaction.Name, 8, 5);
            //m_emotionalAppraisalAsset.EmotionalState.AddEmotionDisposition(satisfactionDisposition);

            //var reliefDisposition = new EmotionDisposition(OCCEmotionType.Relief.Name, 5, 3);
            //m_emotionalAppraisalAsset.EmotionalState.AddEmotionDisposition(reliefDisposition);

            //var fearsConfirmedDisposition = new EmotionDisposition(OCCEmotionType.FearsConfirmed.Name, 2, 1);
            //m_emotionalAppraisalAsset.EmotionalState.AddEmotionDisposition(fearsConfirmedDisposition);

            //var disapointmentDisposition = new EmotionDisposition(OCCEmotionType.Disappointment.Name, 5, 2);
            //m_emotionalAppraisalAsset.EmotionalState.AddEmotionDisposition(disapointmentDisposition);

            var joyDisposition = new EmotionDisposition(OCCEmotionType.Joy.Name, 2, 3);
            m_emotionalAppraisalAsset.AddEmotionDisposition(joyDisposition.ToDto());

            var distressDisposition = new EmotionDisposition(OCCEmotionType.Distress.Name, 2, 1);
            m_emotionalAppraisalAsset.AddEmotionDisposition(distressDisposition.ToDto());

            //var happyForDisposition = new EmotionDisposition(OCCEmotionType.HappyFor.Name, 5, 2);
            //m_emotionalAppraisalAsset.EmotionalState.AddEmotionDisposition(happyForDisposition);

            //var pittyDisposition = new EmotionDisposition(OCCEmotionType.Pitty.Name, 2, 2);
            //m_emotionalAppraisalAsset.EmotionalState.AddEmotionDisposition(pittyDisposition);

            //var resentmentDisposition = new EmotionDisposition(OCCEmotionType.Resentment.Name, 2, 3);
            //m_emotionalAppraisalAsset.EmotionalState.AddEmotionDisposition(resentmentDisposition);

            //var gloatingDisposition = new EmotionDisposition(OCCEmotionType.Gloating.Name, 8, 5);
            //m_emotionalAppraisalAsset.EmotionalState.AddEmotionDisposition(gloatingDisposition);

            var prideDisposition = new EmotionDisposition(OCCEmotionType.Pride.Name, 5, 5);
            m_emotionalAppraisalAsset.AddEmotionDisposition(prideDisposition.ToDto());

            var shameDisposition = new EmotionDisposition(OCCEmotionType.Shame.Name, 2, 1);
            m_emotionalAppraisalAsset.AddEmotionDisposition(shameDisposition.ToDto());

            var gratificationDisposition = new EmotionDisposition(OCCEmotionType.Gratification.Name, 8, 5);
            m_emotionalAppraisalAsset.AddEmotionDisposition(gratificationDisposition.ToDto());

            var remorseDisposition = new EmotionDisposition(OCCEmotionType.Remorse.Name, 2, 1);
            m_emotionalAppraisalAsset.AddEmotionDisposition(remorseDisposition.ToDto());

            var admirationDisposition = new EmotionDisposition(OCCEmotionType.Admiration.Name, 5, 3);
            m_emotionalAppraisalAsset.AddEmotionDisposition(admirationDisposition.ToDto());

            var reproachDisposition = new EmotionDisposition(OCCEmotionType.Reproach.Name, 8, 2);
            m_emotionalAppraisalAsset.AddEmotionDisposition(reproachDisposition.ToDto());

            var gratitudeDisposition = new EmotionDisposition(OCCEmotionType.Gratitude.Name, 5, 3);
            m_emotionalAppraisalAsset.AddEmotionDisposition(gratitudeDisposition.ToDto());

            var angerDisposition = new EmotionDisposition(OCCEmotionType.Anger.Name, 5, 3);
            m_emotionalAppraisalAsset.AddEmotionDisposition(angerDisposition.ToDto());

            //Setup appraisal rules

            AppraisalRule petAppraisalRule = new AppraisalRule((Name)"Event(EventObject,*,Pet,self)");
            petAppraisalRule.TriggersOnFailedActivation = true;
            petAppraisalRule.Desirability = 10;
            //petAppraisalRule.Like = 7;
            //m_emotionalAppraisalAsset.AddAppraisalRule(petAppraisalRule);

            AppraisalRule slapAppraisalRule = new AppraisalRule((Name)"Event(EventObject,*,Slap,self)");
            slapAppraisalRule.Desirability = -10;
            //slapAppraisalRule.Like = -15;
            //m_emotionalAppraisalAsset.AddAppraisalRule(slapAppraisalRule);

            AppraisalRule feedAppraisalRule = new AppraisalRule((Name)"Event(EventObject,*,Feed,self)");
            feedAppraisalRule.Desirability = 5;
            feedAppraisalRule.Praiseworthiness = 10;
            //m_emotionalAppraisalAsset.AddAppraisalRule(feedAppraisalRule);

            AppraisalRule screamMad = new AppraisalRule((Name)"Event(EventObject,*,Talk(High,Mad),self)");
            screamMad.Desirability = -7;
            screamMad.Praiseworthiness = -15;
            //screamMad.Like = -4;
            //m_emotionalAppraisalAsset.AddAppraisalRule(screamMad);

            AppraisalRule talkSoftAppraisalRule = new AppraisalRule((Name)"Event(EventObject,*,Talk(Low,Happy),self)");
            talkSoftAppraisalRule.Praiseworthiness = 5;
            //talkSoftAppraisalRule.Like = 5;
            //m_emotionalAppraisalAsset.AddAppraisalRule(talkSoftAppraisalRule);

            //Generate emotion

            m_emotionalAppraisalAsset.AppraiseEvents(new []{ (Name)"Event(EventObject,*,Slap(Hard),self)" });

            //Add knowledge
            var kb = m_emotionalAppraisalAsset.Kb;
            kb.Tell((Name)"Strength(John)", (byte)5,true,KnowledgeVisibility.Self);
            kb.Tell((Name)"Strength(Mary)", (sbyte)3, true, KnowledgeVisibility.Self);
            kb.Tell((Name)"Strength(Leonidas)", (short)500, true, KnowledgeVisibility.Self);
            kb.Tell((Name)"Strength(Goku)", (uint)9001f, true, KnowledgeVisibility.Self);
            kb.Tell((Name)"Strength(SuperMan)", ulong.MaxValue, true, KnowledgeVisibility.Self);
            kb.Tell((Name)"Strength(Saitama)", float.MaxValue, true, KnowledgeVisibility.Self);
            kb.Tell((Name)"Race(Saitama)", "human", true, KnowledgeVisibility.Self);
            kb.Tell((Name)"Race(Superman)", "kriptonian", true, KnowledgeVisibility.Universal);
            kb.Tell((Name)"Race(Goku)", "sayian",true,KnowledgeVisibility.Self);
            kb.Tell((Name)"Race(Leonidas)", "human", true, KnowledgeVisibility.Self);
            kb.Tell((Name)"Race(Mary)", "human", true, KnowledgeVisibility.Self);
            kb.Tell((Name)"Race(John)", "human", true, KnowledgeVisibility.Self);
            kb.Tell((Name)"Job(Saitama)", "super-hero",false,KnowledgeVisibility.Self);
            kb.Tell((Name)"Job(Superman)", "super-hero", true, KnowledgeVisibility.Universal);
            kb.Tell((Name)"Job(Leonidas)", "Spartan", false, KnowledgeVisibility.Self);
            kb.Tell((Name)"AKA(Saitama)", "One-Punch_Man", true, KnowledgeVisibility.Self);
            kb.Tell((Name)"AKA(Superman)", "Clark_Kent", true, KnowledgeVisibility.Self);
            kb.Tell((Name)"AKA(Goku)", "Kakarot", true, KnowledgeVisibility.Self);
            kb.Tell((Name)"Hobby(Saitama)", "super-hero", false, KnowledgeVisibility.Self);
            kb.Tell((Name)"Hobby(Goku)", "training", true, KnowledgeVisibility.Universal);

            return m_emotionalAppraisalAsset;
        }