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); } } }
/// <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; }
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); } }
/// <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; }
/// <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); }
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); }
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(); }
/// <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; }
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); } }
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); }
/// <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); }
/// <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); }
/// <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); } }
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 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); } } } }
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); }
//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; }