Beispiel #1
0
        public void SelectTest1(float uval1, float uval2)
        {
            var r = new Behaviour();

            r.Selector = new MaxUtilitySelector();

            r.AddOption(new ConstantUtilityOption());

            var option1 = new ConstantUtilityOption();

            option1.SetAction(new MockAction());
            option1.DefaultUtility = uval1;
            var option2 = new ConstantUtilityOption();

            option2.SetAction(new MockAction());
            option2.DefaultUtility = uval2;
            Assert.That(r.AddOption(option1), Is.True);
            Assert.That(r.AddOption(option2), Is.True);

            IAction cAction;

            cAction = uval2 > uval1 ? option2.Action : option1.Action;

            // When all options have equal utility the first one
            // is selected. Does this make sense? Perhaps...
            IAction aAction = r.Select(_customContext);

            Assert.That(cAction == aAction);
        }
Beispiel #2
0
        public void ThinkRecursionDetectionTest()
        {
            _aic.ClearAll();
            var s = new Scheduler();
            // The main AI
            var ta            = new AiTransition("TransitionToCircularAi", "circularAi", _aic);
            var circularAi    = new UtilityAi("circularAi", _aic);
            var coreBehaviour = new Behaviour("cb", _bc);

            coreBehaviour.Selector = new MaxUtilitySelector();
            var circularOption = new ConstantUtilityOption("recursive", _oc);

            circularOption.DefaultUtility = new Utility(1f, 1f);
            circularOption.SetAction("TransitionToCircularAi");

            Assert.That(coreBehaviour.AddOption("recursive"), Is.True);
            Assert.That(circularAi.AddBehaviour(coreBehaviour.NameId), Is.True);

            var dm = new DecisionMaker(circularAi, _toon, s);

            Assert.Throws <DecisionMakerBase.PotentialCircularDependencyException>(dm.Think);
            try {
                dm.Think();
            } catch (Exception ex) {
                Console.WriteLine(ex.Message);
            }
        }
Beispiel #3
0
        protected override void DefineBehaviours()
        {
            B = new Behaviour(BehaviourDefs.LiveLong, Behaviours);
            B.AddOption(OptionDefs.Drink);
            B.AddOption(OptionDefs.Eat);
            B.AddOption(OptionDefs.Toilet);
            B.AddOption(OptionDefs.Sleep);
            B.AddOption(OptionDefs.Shower);
            B.AddOption(OptionDefs.Exercise);
            B.AddOption(OptionDefs.Idle);
            B.AddConsideration(ConsiderationDefs.LiveLong);

            B = new Behaviour(BehaviourDefs.Prosper, Behaviours);
            B.AddOption(OptionDefs.Work);
            B.AddOption(OptionDefs.Read);
            B.AddConsideration(ConsiderationDefs.Prosper);
        }
Beispiel #4
0
        public void SelectTreeOfConsiderationsTest()
        {
            var r = new Behaviour();

            r.Selector = new MaxUtilitySelector();
            RandomizeOptionContext();

            var optionRootA = CreateOptionA();
            var optionRootB = CreateOptionB();

            r.AddOption(optionRootA);
            r.AddOption(optionRootB);

            IAction aAction = r.Select(_optionContext);

            var     aVal    = ComputeConsiderationsValue(_c1, _c2, _c3, _c4);
            var     bVal    = ComputeConsiderationsValue(_c5, _c6, _c7, _c8);
            IOption cOption = GetCorrectOption(optionRootA, aVal, optionRootB, bVal);

            Assert.That(cOption.Action == aAction);
        }
Beispiel #5
0
        public void BehaviourSelectionTest()
        {
            var ai      = new UtilityAi();
            var context = new UaiContext();
            var b1      = new Behaviour();

            b1.NameId = "b1";
            var b2 = new Behaviour();

            b2.NameId = "b2";
            var consideration1 = new BehaviourConsideration1();
            var consideration2 = new BehaviourConsideration2();

            b1.AddConsideration(consideration1);
            b2.AddConsideration(consideration2);

            var a1 = new MockAction();

            a1.NameId = "a1";
            var fo1 = new ConstantUtilityOption();

            fo1.SetAction(a1);
            b1.AddOption(fo1);
            var a2 = new MockAction();

            a2.NameId = "a2";
            var fo2 = new ConstantUtilityOption();

            fo2.SetAction(a2);
            b2.AddOption(fo2);

            ai.AddBehaviour(b1);
            ai.AddBehaviour(b2);

            context.Val1 = 1.0f;
            context.Val2 = 0.0f;
            var sel1 = ai.Select(context);

            Assert.That(sel1 == a1);
            context.Val1 = 0.0f;
            context.Val2 = 1.0f;
            var sel2 = ai.Select(context);

            Assert.That(sel2 == a2);
        }