예제 #1
0
        public void MarkovProcessTest3()
        {
            //S0:
            //AB-ABar1 => S0 0.8 * 0.8
            //         => S1 1 - 0.8 * 0.8
            //S1:
            //MBAM-ABar => S0 0.8
            //          => S1 0.2

            Ability AB    = new Ability();
            Ability ABar1 = new Ability();
            Ability MBAM  = new Ability();
            Ability ABar  = new Ability();

            Ability ABABar1  = new AbilitySequence(AB, ABar1);
            Ability MBAMABar = new AbilitySequence(MBAM, ABar);

            State <Ability> S0 = new State <Ability>()
            {
                Name = "S0"
            };
            State <Ability> S1 = new State <Ability>()
            {
                Name = "S1"
            };

            S0.Transitions = new List <StateTransition <Ability> >()
            {
                new StateTransition <Ability>()
                {
                    Ability = ABABar1, TargetState = S0, TransitionDuration = ABABar1.Duration, TransitionProbability = 0.8 * 0.8
                },
                new StateTransition <Ability>()
                {
                    Ability = ABABar1, TargetState = S1, TransitionDuration = ABABar1.Duration, TransitionProbability = 1.0 - 0.8 * 0.8
                },
            };
            S1.Transitions = new List <StateTransition <Ability> >()
            {
                new StateTransition <Ability>()
                {
                    Ability = MBAMABar, TargetState = S0, TransitionDuration = MBAMABar.Duration, TransitionProbability = 0.8
                },
                new StateTransition <Ability>()
                {
                    Ability = MBAMABar, TargetState = S1, TransitionDuration = MBAMABar.Duration, TransitionProbability = 0.2
                },
            };
            List <State <Ability> > stateSpace = new List <State <Ability> >()
            {
                S0, S1
            };

            MarkovProcess <Ability> mp = new MarkovProcess <Ability>(stateSpace);

            Assert.AreEqual(mp.StateWeight[0], 0.69, 0.01, "S0");
            Assert.AreEqual(mp.StateWeight[1], 0.31, 0.01, "S1");
        }
예제 #2
0
        public void MarkovProcessTest2()
        {
            //S0:
            //A  => S0 0.5
            //AB  => S0 0.5

            Ability A = new Ability()
            {
                Damage = 100, Duration = 2
            };
            Ability B = new Ability()
            {
                Damage = 200, Duration = 1
            };
            Ability AB = new AbilitySequence(A, B);

            State <Ability> S0 = new State <Ability>()
            {
                Name = "S0"
            };

            S0.Transitions = new List <StateTransition <Ability> >()
            {
                new StateTransition <Ability>()
                {
                    Ability = A, TargetState = S0, TransitionDuration = A.Duration, TransitionProbability = 0.5
                },
                new StateTransition <Ability>()
                {
                    Ability = AB, TargetState = S0, TransitionDuration = AB.Duration, TransitionProbability = 0.5
                },
            };
            List <State <Ability> > stateSpace = new List <State <Ability> >()
            {
                S0
            };

            MarkovProcess <Ability> mp = new MarkovProcess <Ability>(stateSpace);

            Assert.AreEqual(mp.StateWeight[0], 1.0, 0.000000000001, "S0");
            Assert.AreEqual(mp.AverageTransitionDuration, 2.5, 0.000000000001, "time");

            double averageDamage = 0.0;

            foreach (KeyValuePair <Ability, double> kvp in mp.AbilityWeight)
            {
                averageDamage += kvp.Key.Damage * kvp.Value;
            }
            Assert.AreEqual(averageDamage, 200.0, "damage");

            Assert.AreEqual(averageDamage / mp.AverageTransitionDuration, 80.0, 0.000000000001, "dps");
        }
예제 #3
0
        public void MarkovProcessTest3()
        {
            //S0:
            //AB-ABar1 => S0 0.8 * 0.8
            //         => S1 1 - 0.8 * 0.8
            //S1:
            //MBAM-ABar => S0 0.8
            //          => S1 0.2

            Ability AB = new Ability();
            Ability ABar1 = new Ability();
            Ability MBAM = new Ability();
            Ability ABar = new Ability();

            Ability ABABar1 = new AbilitySequence(AB, ABar1);
            Ability MBAMABar = new AbilitySequence(MBAM, ABar);

            State<Ability> S0 = new State<Ability>() { Name = "S0" };
            State<Ability> S1 = new State<Ability>() { Name = "S1" };

            S0.Transitions = new List<StateTransition<Ability>>()
            {
                new StateTransition<Ability>() { Ability = ABABar1, TargetState = S0, TransitionDuration = ABABar1.Duration, TransitionProbability = 0.8 * 0.8 },
                new StateTransition<Ability>() { Ability = ABABar1, TargetState = S1, TransitionDuration = ABABar1.Duration, TransitionProbability = 1.0 - 0.8 * 0.8 },
            };
            S1.Transitions = new List<StateTransition<Ability>>()
            {
                new StateTransition<Ability>() { Ability = MBAMABar, TargetState = S0, TransitionDuration = MBAMABar.Duration, TransitionProbability = 0.8 },
                new StateTransition<Ability>() { Ability = MBAMABar, TargetState = S1, TransitionDuration = MBAMABar.Duration, TransitionProbability = 0.2 },
            };
            List<State<Ability>> stateSpace = new List<State<Ability>>() { S0, S1 };

            MarkovProcess<Ability> mp = new MarkovProcess<Ability>(stateSpace);

            Assert.AreEqual(mp.StateWeight[0], 0.69, 0.01, "S0");
            Assert.AreEqual(mp.StateWeight[1], 0.31, 0.01, "S1");
        }
예제 #4
0
        public void MarkovProcessTest2()
        {
            //S0:
            //A  => S0 0.5
            //AB  => S0 0.5

            Ability A = new Ability() { Damage = 100, Duration = 2 };
            Ability B = new Ability() { Damage = 200, Duration = 1 };
            Ability AB = new AbilitySequence(A, B);

            State<Ability> S0 = new State<Ability>() { Name = "S0" };

            S0.Transitions = new List<StateTransition<Ability>>()
            {
                new StateTransition<Ability>() { Ability = A, TargetState = S0, TransitionDuration = A.Duration, TransitionProbability = 0.5 },
                new StateTransition<Ability>() { Ability = AB, TargetState = S0, TransitionDuration = AB.Duration, TransitionProbability = 0.5 },
            };
            List<State<Ability>> stateSpace = new List<State<Ability>>() { S0 };

            MarkovProcess<Ability> mp = new MarkovProcess<Ability>(stateSpace);

            Assert.AreEqual(mp.StateWeight[0], 1.0, 0.000000000001, "S0");
            Assert.AreEqual(mp.AverageTransitionDuration, 2.5, 0.000000000001, "time");

            double averageDamage = 0.0;
            foreach (KeyValuePair<Ability, double> kvp in mp.AbilityWeight)
            {
                averageDamage += kvp.Key.Damage * kvp.Value;
            }
            Assert.AreEqual(averageDamage, 200.0, "damage");

            Assert.AreEqual(averageDamage / mp.AverageTransitionDuration, 80.0, 0.000000000001, "dps");
        }