예제 #1
0
        public void Test_DP_Math_NoMatch(string contraints, string methodCall)
        {
            var me = (Name)"Ana";
            var kb = new KB(me);


            var resultVariable = methodCall.Split('=')[1];


            var conditions = contraints.Split(',');

            IEnumerable <SubstitutionSet> resultingConstraints;

            var condSet = new ConditionSet();

            var cond = Condition.Parse(conditions[0]);

            // Apply conditions to RPC
            foreach (var c in conditions)
            {
                cond    = Condition.Parse(c);
                condSet = condSet.Add(cond);
            }

            resultingConstraints = condSet.Unify(kb, Name.SELF_SYMBOL, null);

            condSet = new ConditionSet();
            cond    = Condition.Parse(methodCall);
            condSet = condSet.Add(cond);


            var res = condSet.Unify(kb, Name.SELF_SYMBOL, resultingConstraints);

            Assert.IsEmpty(res);
        }
예제 #2
0
        public void Test_DP_LastEventID_ValueMatch(int eventSet, string context, string lastEventMethodCall, string expectedValue)
        {
            var rpc = BuildRPCAsset();

            PopulateEventSet(eventSet);

            foreach (var eve in eventSets[eventSet])
            {
                rpc.Perceive((Name)eve);
                rpc.Tick++;
            }

            // Build the context, parsin the conditions:

            var resultVariable = lastEventMethodCall.Split('=')[1];

            var conditions = context.Split(',');
            var cond       = Condition.Parse("[x] != True");
            var condSet    = new ConditionSet();
            IEnumerable <SubstitutionSet> resultingConstraints = new List <SubstitutionSet>();

            if (conditions[0] != "")
            {
                condSet = new ConditionSet();

                cond = Condition.Parse(conditions[0]);


                // Apply conditions to RPC
                foreach (var res in conditions)
                {
                    cond    = Condition.Parse(res);
                    condSet = condSet.Add(cond);
                }

                resultingConstraints = condSet.Unify(rpc.m_kb, Name.SELF_SYMBOL, null);
            }



            condSet = new ConditionSet();
            cond    = Condition.Parse(lastEventMethodCall);
            condSet = condSet.Add(cond);


            var result = condSet.Unify(rpc.m_kb, Name.SELF_SYMBOL, resultingConstraints);

            var actualResult = "";

            foreach (var sub in result)
            {
                if (sub.Contains((Name)resultVariable))
                {
                    actualResult = sub[(Name)resultVariable].ToString();
                }
            }
            Assert.AreEqual(expectedValue, actualResult);
        }
예제 #3
0
        public void Test_DP_Volition_Step_Match(int eventSet, string context, string MethodCall, string variable, string value)
        {
            var rpc = BuildRPCAsset3();
            var cif = BuildCIFAsset();

            cif.RegisterKnowledgeBase(rpc.m_kb);
            rpc.LoadAssociatedAssets();



            PopulateEventSet(eventSet);

            foreach (var eve in eventSets[eventSet])
            {
                rpc.Perceive((Name)eve);
                rpc.Tick++;
            }



            // conditions
            var conditions = context.Split(',');

            IEnumerable <SubstitutionSet> resultingConstraints;

            var condSet = new ConditionSet();

            var cond = Condition.Parse(conditions[0]);


            // Apply conditions to RPC
            foreach (var res in conditions)
            {
                cond    = Condition.Parse(res);
                condSet = condSet.Add(cond);
            }

            resultingConstraints = condSet.Unify(rpc.m_kb, Name.SELF_SYMBOL, null);

            condSet = new ConditionSet();
            cond    = Condition.Parse(MethodCall);
            condSet = condSet.Add(cond);


            var result = condSet.Unify(rpc.m_kb, Name.SELF_SYMBOL, resultingConstraints);

            Assert.IsNotEmpty(result);


            var sub = result.FirstOrDefault().Where(x => x.Variable == (Name)variable);

            var ret = sub.FirstOrDefault().SubValue;

            Assert.AreEqual(ret.Value.ToString(), value);
        }
예제 #4
0
파일: DataDAO.cs 프로젝트: danjiewu/MyOrm
        /// <summary>
        /// 根据主键更新字段值
        /// </summary>
        /// <param name="updateValues">需要更新的属性名称以及值集合</param>
        /// <param name="keys">主键,多个主键需按主键名排序</param>
        /// <returns>更新是否成功</returns>
        public bool Update(IEnumerable <KeyValuePair <string, object> > updateValues, params object[] keys)
        {
            ThrowExceptionIfNoKeys();
            ThrowExceptionIfWrongKeys(keys);
            ConditionSet condition = new ConditionSet();

            for (int i = 0; i < keys.Length; i++)
            {
                condition.Add(new SimpleCondition(TableDefinition.Keys[i].PropertyName, keys[i]));
            }
            return(Update(updateValues, condition) > 0);
        }
예제 #5
0
파일: ObjectDAO.cs 프로젝트: danjiewu/MyOrm
        /// <summary>
        /// 根据主键更新数据
        /// </summary>
        /// <param name="values">需要更新的属性及数值,key为属性名,value为数值</param>
        /// <param name="condition">更新的条件</param>
        /// <returns>更新是否成功</returns>
        public virtual bool UpdateValues(IEnumerable <KeyValuePair <string, object> > values, params object[] keys)
        {
            ThrowExceptionIfNoKeys();
            ThrowExceptionIfWrongKeys(keys);
            ConditionSet condition = new ConditionSet();
            int          i         = 0;

            foreach (ColumnDefinition column in TableDefinition.Keys)
            {
                condition.Add(new SimpleCondition(column.PropertyName, keys[i++]));
            }
            return(UpdateValues(values, condition) > 0);
        }
예제 #6
0
        public void Test_DP_Math_Match(string contraints, string methodCall, float result)
        {
            var me = (Name)"Ana";
            var kb = new KB(me);


            var resultVariable = methodCall.Split('=')[1];


            var conditions = contraints.Split(',');

            IEnumerable <SubstitutionSet> resultingConstraints;

            var condSet = new ConditionSet();

            var cond = Condition.Parse(conditions[0]);

            // Apply conditions to RPC
            foreach (var c in conditions)
            {
                cond    = Condition.Parse(c);
                condSet = condSet.Add(cond);
            }

            resultingConstraints = condSet.Unify(kb, Name.SELF_SYMBOL, null);

            condSet = new ConditionSet();
            cond    = Condition.Parse(methodCall);
            condSet = condSet.Add(cond);


            var res = condSet.Unify(kb, Name.SELF_SYMBOL, resultingConstraints);

            Assert.IsNotEmpty(res);

            Name actualResult = Name.BuildName(0);

            foreach (var v in res.FirstOrDefault())
            {
                if (v.Variable == (Name)resultVariable)
                {
                    actualResult = v.SubValue.Value;
                    break;
                }
            }



            Assert.AreEqual(actualResult, Name.BuildName(result));
        }
예제 #7
0
        public void Test_DP_Volition_NoMatch(int eventSet, string context, string MethodCall)
        {
            var rpc = BuildRPCAsset();
            var cif = BuildCIFAsset();

            cif.RegisterKnowledgeBase(rpc.m_kb);
            rpc.LoadAssociatedAssets();



            PopulateEventSet(eventSet);

            foreach (var eve in eventSets[eventSet])
            {
                rpc.Perceive((Name)eve);
                rpc.Tick++;
            }



            // conditions
            var conditions = context.Split(',');

            IEnumerable <SubstitutionSet> resultingConstraints;

            var condSet = new ConditionSet();

            var cond = Condition.Parse(conditions[0]);


            // Apply conditions to RPC
            foreach (var res in conditions)
            {
                cond    = Condition.Parse(res);
                condSet = condSet.Add(cond);
            }

            resultingConstraints = condSet.Unify(rpc.m_kb, Name.SELF_SYMBOL, null);

            condSet = new ConditionSet();
            cond    = Condition.Parse(MethodCall);
            condSet = condSet.Add(cond);


            var result = condSet.Unify(rpc.m_kb, Name.SELF_SYMBOL, resultingConstraints);

            Assert.IsEmpty(result);
        }
예제 #8
0
        public void Test_DP_EventID_NoMatch(int eventSet, string context, string MethodCall)
        {
            var rpc = BuildRPCAsset();

            PopulateEventSet(eventSet);

            foreach (var eve in eventSets[eventSet])
            {
                rpc.Perceive((Name)eve);
            }

            // Build the context, parsin the conditions:

            var conditions = context.Split(',');

            IEnumerable <SubstitutionSet> resultingConstraints;

            var condSet = new ConditionSet();

            var cond = Condition.Parse(conditions[0]);

            // Apply conditions to RPC
            foreach (var res in conditions)
            {
                cond    = Condition.Parse(res);
                condSet = condSet.Add(cond);
            }
            resultingConstraints = condSet.Unify(rpc.m_kb, Name.SELF_SYMBOL, null);

            condSet = new ConditionSet();
            cond    = Condition.Parse(MethodCall);
            condSet = condSet.Add(cond);


            var result = condSet.Unify(rpc.m_kb, Name.SELF_SYMBOL, resultingConstraints);

            /*   // what is the id I'm looking for
             * var wantedSub = cond.ToString().Split('=');
             *
             * foreach (var sub in result)
             * {
             *     if(sub)
             * }*/

            Assert.IsEmpty(result);
        }
예제 #9
0
        public void Test_DP_StrongestEmotion_Match(int eventSet, string context, string lastEventMethodCall)
        {
            var rpc = BuildEmotionalRPCAsset();

            PopulateEventSet(eventSet);

            foreach (var eve in eventSets[eventSet])
            {
                rpc.Perceive((Name)eve);
                rpc.Tick++;
            }

            // Initializing
            var condSet = new ConditionSet();
            var cond    = Condition.Parse("[x] = True");
            IEnumerable <SubstitutionSet> resultingConstraints = new List <SubstitutionSet>();

            if (context != "")
            {
                var conditions = context.Split(',');


                cond = Condition.Parse(conditions[0]);

                // Apply conditions to RPC
                foreach (var res in conditions)
                {
                    cond    = Condition.Parse(res);
                    condSet = condSet.Add(cond);
                }
                resultingConstraints = condSet.Unify(rpc.m_kb, Name.SELF_SYMBOL, null);
            }

            condSet = new ConditionSet();
            cond    = Condition.Parse(lastEventMethodCall);
            condSet = condSet.Add(cond);


            var result = condSet.Unify(rpc.m_kb, Name.SELF_SYMBOL, resultingConstraints);

            Assert.IsNotEmpty(result);
        }
예제 #10
0
        public void Test_DP_LastEventID_Match(int eventSet, string context, string lastEventMethodCall)
        {
            var rpc = BuildRPCAsset();

            PopulateEventSet(eventSet);

            foreach (var eve in eventSets[eventSet])
            {
                rpc.Perceive((Name)eve);
                rpc.Tick++;
            }

            // Build the context, parsin the conditions:

            var conditions = context.Split(',');

            IEnumerable <SubstitutionSet> resultingConstraints;

            var condSet = new ConditionSet();

            var cond = Condition.Parse(conditions[0]);

            // Apply conditions to RPC
            foreach (var res in conditions)
            {
                cond    = Condition.Parse(res);
                condSet = condSet.Add(cond);
            }
            resultingConstraints = condSet.Unify(rpc.m_kb, Name.SELF_SYMBOL, null);

            condSet = new ConditionSet();
            cond    = Condition.Parse(lastEventMethodCall);
            condSet = condSet.Add(cond);


            var result = condSet.Unify(rpc.m_kb, Name.SELF_SYMBOL, resultingConstraints);

            Assert.IsNotEmpty(result);
        }
예제 #11
0
        // [TestCase(1, "isAgent(Sarah)=True")]
        public void Test_DP_NoConstraintSet_Match(int eventSet, string lastEventMethodCall)
        {
            var rpc = BuildEmotionalRPCAsset();

            PopulateEventSet(eventSet);

            foreach (var eve in eventSets[eventSet])
            {
                rpc.Perceive((Name)eve);
                rpc.Tick++;
            }



            var condSet = new ConditionSet();
            var cond    = Condition.Parse(lastEventMethodCall);

            condSet = condSet.Add(cond);


            var result = condSet.Unify(rpc.m_kb, Name.SELF_SYMBOL, null);

            Assert.IsNotEmpty(result);
        }
예제 #12
0
        public void Test_IAT_DP_ValidDialogue_NoMatch(string context, string lastEventMethodCall)
        {
            var iat = Build_IAT_Asset();

            var id = new Guid();
            var d  = new DialogueStateActionDTO()
            {
                CurrentState = "Start",
                Meaning      = "-",
                NextState    = "S1",
                Style        = "-",
                Utterance    = "sbahh",
                Id           = id,
                UtteranceId  = "1"
            };

            var id2 = new Guid();
            var d2  = new DialogueStateActionDTO()
            {
                CurrentState = "S1",
                Meaning      = "-",
                NextState    = "S2",
                Style        = "Rude",
                Utterance    = "ssadasdasdh",
                Id           = id2,
                UtteranceId  = "2"
            };

            iat.AddDialogAction(d);
            iat.AddDialogAction(d2);

            // iat.AddNewCharacterSource(new CharacterSourceDTO(){});

            var rpc = BuildRPCAsset();

            // Associating IAT to RPC
            iat.BindToRegistry(rpc.DynamicPropertiesRegistry);

            // Making sure the RPC is well Initialized
            rpc.Perceive(EventHelper.ActionEnd("Sarah", "EnterRoom", "Matt"));
            rpc.Perceive(EventHelper.ActionEnd("Sarah", "Speak(S3,S4,Polite, Rude)", "Matt"));

            // Initializing
            var condSet = new ConditionSet();



            var cond = Condition.Parse("[x] = True");
            IEnumerable <SubstitutionSet> resultingConstraints = new List <SubstitutionSet>();

            if (context != "")
            {
                var conditions = context.Split(',');


                cond = Condition.Parse(conditions[0]);

                // Apply conditions to RPC
                foreach (var res in conditions)
                {
                    cond    = Condition.Parse(res);
                    condSet = condSet.Add(cond);
                }
                resultingConstraints = condSet.Unify(rpc.m_kb, Name.SELF_SYMBOL, null);
            }


            condSet = new ConditionSet();
            cond    = Condition.Parse(lastEventMethodCall);
            condSet = condSet.Add(cond);


            var result = condSet.Unify(rpc.m_kb, Name.SELF_SYMBOL, resultingConstraints);

            Assert.IsEmpty(result);
        }
예제 #13
0
        private Name FilterStep(Name SE, Name target)  // Missing the target
        {
            Name properStep = (Name)"-";

            // 1) Determine the Social Exchange
            var socialExchange = this.m_SocialExchanges.Find(x => x.Name == SE);

            if (socialExchange == null)
            {
                return(properStep);
            }

            // 2) Determine the steps of the Social Exchange
            var _Steps = new List <Name>();

            if (socialExchange.Steps.Count > 0)
            {
                _Steps = socialExchange.Steps;
            }
            else
            {
                return(properStep);
            }


            if (_Steps.Count == 1)
            {
                return(_Steps.FirstOrDefault());
            }

            // Now we need to see if the Agent has just performed the social exchange


            var MethodCall = "LastEventId(Action-End," + target.ToString() + ", Speak(*, *, SE(" + SE.ToString() + "," + "[step]" + "), *), SELF) >= 0";


            var lastStep = "";
            var condSet  = new ConditionSet();

            condSet = new ConditionSet();
            var cond = Condition.Parse(MethodCall);

            condSet = condSet.Add(cond);
            var result = condSet.Unify(this.m_kB, Name.SELF_SYMBOL, null);


            if (result != null)
            {
                if (result.FirstOrDefault() != null)
                {
                    if (result.FirstOrDefault().Where(x => x.Variable == (Name)"[step]") != null)
                    {
                        lastStep = result.FirstOrDefault().Where(x => x.Variable == (Name)"[step]").FirstOrDefault().SubValue.Value.ToString();
                    }
                    else
                    {
                        return(_Steps.FirstOrDefault());
                    }
                }
                else
                {
                    return(_Steps.FirstOrDefault());
                }
            }
            else
            {
                return(_Steps.FirstOrDefault());
            }



            var ind = _Steps.IndexOf((Name)lastStep);

            if (ind + 1 == _Steps.Count)
            {
                return(_Steps.FirstOrDefault());
            }
            else
            {
                return(_Steps[ind + 1]);
            }
        }