public static void SupplementalDemo_SingleGame(this GameBoard board)
        {
            var greedyStrategy = new ChutesAndLadders.Strategy.Greedy.Engine();
            var linearStrategy = new ChutesAndLadders.Strategy.Linear.Engine();

            var geneticStrategy = new ChutesAndLadders.Strategy.Rules.Engine("Best Found");

            geneticStrategy.AddBestStrategyRules();

            var shortestPathStrategy = new ChutesAndLadders.Strategy.ShortestPath.Engine();

            // Remember that player 1 has a big advantage
            var player1 = new Player("Player 1", greedyStrategy);
            var player2 = new Player("Player 2", linearStrategy);
            var player3 = new Player("Player 3", geneticStrategy);
            var player4 = new Player("Player 4", shortestPathStrategy);
            var players = new Player[] { player1, player2, player3, player4 };

            var gameEngine = new Game(board);

            // Set the last parameter to a value 1-6 to have all rolls be that value
            // This allow us to compare the strategies when all use the same roll
            // It would be better if the roll varied by round but all players
            // got the same roll in a given round
            var results = gameEngine.Play(players, 1, 16, true, 0);

            Console.WriteLine(results.ToString());
            Console.WriteLine();
            Console.WriteLine(player4.Strategy.ToString());
        }
Пример #2
0
        public static void Demo2b_ImprovedLinear(this GameBoard board)
        {
            var linearStrategy = new ChutesAndLadders.Strategy.Linear.Engine();

            var improvedLinearStrategy1 = new ChutesAndLadders.Strategy.Rules.Engine("Improved Linear 1");

            improvedLinearStrategy1.AddTakeLadderRules(28, 84);
            improvedLinearStrategy1.AddTakeLadderRules(80, 100);

            var improvedLinearStrategy2 = new ChutesAndLadders.Strategy.Rules.Engine("Improved Linear 2");

            improvedLinearStrategy2.AddTakeLadderRules(28, 84);
            improvedLinearStrategy2.AddTakeLadderRules(80, 100);
            improvedLinearStrategy2.AddTakeChuteRules(98, 78);

            // This is the shortest path, which should give the same results
            // as "Take All Ladders" if all games started from 0
            var improvedLinearStrategy3 = new ChutesAndLadders.Strategy.Rules.Engine("Improved Linear 3");

            improvedLinearStrategy3.AddTakeLadderRules(1, 38);
            improvedLinearStrategy3.AddTakeLadderRules(51, 67);
            improvedLinearStrategy3.AddTakeLadderRules(71, 91);


            var player1 = new Player("Player 1", linearStrategy);
            var player2 = new Player("Player 2", improvedLinearStrategy1);
            var player3 = new Player("Player 3", improvedLinearStrategy2);
            var player4 = new Player("Player 4", improvedLinearStrategy3);
            var players = new Player[] { player1, player2, player3, player4 };

            var engine = new SimulationCollection();

            engine.RunSimulations(players, 30000, true);
        }
Пример #3
0
        public static void Demo2a_RulesEngine(this GameBoard board)
        {
            var linearStrategy      = new ChutesAndLadders.Strategy.Rules.Engine();
            var greedyRulesStrategy = new ChutesAndLadders.Strategy.GreedyRules.Engine();
            var ladderRulesStrategy = new ChutesAndLadders.Strategy.TakeAllLadders.Engine();

            var player1 = new Player("Player 1", linearStrategy);
            var player2 = new Player("Player 2", greedyRulesStrategy);
            var player3 = new Player("Player 3", ladderRulesStrategy);
            var players = new Player[] { player1, player2, player3 };

            var engine = new SimulationCollection();

            engine.RunSimulations(players, 30000, true);
        }
Пример #4
0
        public static void Demo3c_GeneticSuperiority(this GameBoard board)
        {
            var greedyStrategy = new ChutesAndLadders.Strategy.Greedy.Engine();
            var linearStrategy = new ChutesAndLadders.Strategy.Linear.Engine();

            var geneticStrategy = new ChutesAndLadders.Strategy.Rules.Engine("Best Found");

            geneticStrategy.AddBestStrategyRules();

            var player1 = new Player("Player 1", greedyStrategy);
            var player2 = new Player("Player 2", linearStrategy);
            var player3 = new Player("Player 3", geneticStrategy);
            var players = new Player[] { player1, player2, player3 };

            var engine = new SimulationCollection();

            engine.RunSimulations(players, 100000, true);
        }
Пример #5
0
 public static void AddBestStrategyRules(this ChutesAndLadders.Strategy.Rules.Engine strategy)
 {
     strategy.AddRule(0, 3, 39);
     strategy.AddRule(0, 4, 40);
     strategy.AddRule(0, 5, 14);
     strategy.AddRule(0, 6, 42);
     strategy.AddRule(1, 1, 38);
     strategy.AddRule(1, 3, 40);
     strategy.AddRule(1, 4, 14);
     strategy.AddRule(1, 5, 42);
     strategy.AddRule(1, 6, 16);
     strategy.AddRule(2, 3, 14);
     strategy.AddRule(2, 4, 15);
     strategy.AddRule(2, 5, 16);
     strategy.AddRule(2, 6, 17);
     strategy.AddRule(3, 2, 14);
     strategy.AddRule(3, 4, 16);
     strategy.AddRule(3, 5, 17);
     strategy.AddRule(3, 6, 18);
     strategy.AddRule(4, 1, 14);
     strategy.AddRule(4, 3, 16);
     strategy.AddRule(4, 4, 17);
     strategy.AddRule(4, 5, 18);
     strategy.AddRule(4, 6, 31);
     strategy.AddRule(6, 4, 31);
     strategy.AddRule(7, 4, 32);
     strategy.AddRule(8, 2, 31);
     strategy.AddRule(8, 3, 32);
     strategy.AddRule(8, 5, 34);
     strategy.AddRule(9, 1, 31);
     strategy.AddRule(9, 4, 34);
     strategy.AddRule(9, 6, 36);
     strategy.AddRule(11, 6, 6);
     strategy.AddRule(12, 5, 6);
     strategy.AddRule(13, 6, 8);
     strategy.AddRule(14, 3, 6);
     strategy.AddRule(14, 5, 8);
     strategy.AddRule(14, 6, 9);
     strategy.AddRule(15, 4, 8);
     strategy.AddRule(15, 6, 10);
     strategy.AddRule(16, 2, 7);
     strategy.AddRule(16, 4, 9);
     strategy.AddRule(16, 5, 10);
     strategy.AddRule(16, 6, 42);
     strategy.AddRule(17, 5, 42);
     strategy.AddRule(19, 4, 43);
     strategy.AddRule(19, 5, 44);
     strategy.AddRule(19, 6, 45);
     strategy.AddRule(20, 2, 42);
     strategy.AddRule(20, 5, 45);
     strategy.AddRule(20, 6, 46);
     strategy.AddRule(21, 1, 42);
     strategy.AddRule(21, 2, 43);
     strategy.AddRule(21, 3, 44);
     strategy.AddRule(21, 5, 46);
     strategy.AddRule(23, 6, 84);
     strategy.AddRule(24, 5, 84);
     strategy.AddRule(24, 6, 85);
     strategy.AddRule(25, 4, 84);
     strategy.AddRule(25, 5, 85);
     strategy.AddRule(25, 6, 86);
     strategy.AddRule(26, 3, 84);
     strategy.AddRule(26, 4, 85);
     strategy.AddRule(26, 5, 86);
     strategy.AddRule(26, 6, 87);
     strategy.AddRule(27, 2, 84);
     strategy.AddRule(27, 3, 85);
     strategy.AddRule(27, 4, 86);
     strategy.AddRule(27, 5, 87);
     strategy.AddRule(27, 6, 24);
     strategy.AddRule(28, 1, 84);
     strategy.AddRule(28, 2, 85);
     strategy.AddRule(28, 3, 86);
     strategy.AddRule(28, 4, 87);
     strategy.AddRule(28, 5, 88);
     strategy.AddRule(28, 6, 89);
     strategy.AddRule(31, 6, 44);
     strategy.AddRule(34, 3, 44);
     strategy.AddRule(34, 5, 46);
     strategy.AddRule(34, 6, 47);
     strategy.AddRule(35, 2, 44);
     strategy.AddRule(35, 3, 45);
     strategy.AddRule(36, 1, 44);
     strategy.AddRule(36, 5, 48);
     strategy.AddRule(36, 6, 27);
     strategy.AddRule(43, 5, 26);
     strategy.AddRule(43, 6, 27);
     strategy.AddRule(44, 4, 26);
     strategy.AddRule(44, 6, 11);
     strategy.AddRule(45, 3, 26);
     strategy.AddRule(45, 4, 27);
     strategy.AddRule(45, 5, 28);
     strategy.AddRule(45, 6, 29);
     strategy.AddRule(46, 4, 28);
     strategy.AddRule(46, 5, 84);
     strategy.AddRule(46, 6, 30);
     strategy.AddRule(47, 2, 27);
     strategy.AddRule(47, 3, 11);
     strategy.AddRule(47, 4, 12);
     strategy.AddRule(47, 5, 85);
     strategy.AddRule(47, 6, 31);
     strategy.AddRule(48, 2, 11);
     strategy.AddRule(48, 3, 12);
     strategy.AddRule(48, 4, 67);
     strategy.AddRule(48, 5, 14);
     strategy.AddRule(48, 6, 69);
     strategy.AddRule(49, 1, 11);
     strategy.AddRule(49, 3, 13);
     strategy.AddRule(49, 4, 68);
     strategy.AddRule(49, 5, 15);
     strategy.AddRule(49, 6, 16);
     strategy.AddRule(50, 2, 67);
     strategy.AddRule(50, 5, 70);
     strategy.AddRule(51, 1, 67);
     strategy.AddRule(51, 6, 53);
     strategy.AddRule(52, 5, 53);
     strategy.AddRule(52, 6, 54);
     strategy.AddRule(53, 6, 55);
     strategy.AddRule(54, 3, 53);
     strategy.AddRule(55, 5, 56);
     strategy.AddRule(55, 6, 53);
     strategy.AddRule(56, 3, 55);
     strategy.AddRule(56, 5, 57);
     strategy.AddRule(56, 6, 58);
     strategy.AddRule(57, 6, 19);
     strategy.AddRule(58, 6, 20);
     strategy.AddRule(59, 4, 19);
     strategy.AddRule(59, 5, 20);
     strategy.AddRule(59, 6, 60);
     strategy.AddRule(60, 5, 60);
     strategy.AddRule(60, 6, 22);
     strategy.AddRule(61, 3, 20);
     strategy.AddRule(61, 4, 60);
     strategy.AddRule(61, 5, 61);
     strategy.AddRule(61, 6, 62);
     strategy.AddRule(62, 3, 21);
     strategy.AddRule(62, 4, 42);
     strategy.AddRule(62, 5, 23);
     strategy.AddRule(62, 6, 63);
     strategy.AddRule(63, 2, 60);
     strategy.AddRule(63, 5, 63);
     strategy.AddRule(64, 2, 61);
     strategy.AddRule(64, 3, 62);
     strategy.AddRule(64, 4, 63);
     strategy.AddRule(64, 5, 20);
     strategy.AddRule(64, 6, 60);
     strategy.AddRule(68, 4, 91);
     strategy.AddRule(69, 3, 91);
     strategy.AddRule(69, 5, 93);
     strategy.AddRule(69, 6, 73);
     strategy.AddRule(70, 4, 93);
     strategy.AddRule(70, 5, 94);
     strategy.AddRule(70, 6, 74);
     strategy.AddRule(71, 3, 93);
     strategy.AddRule(71, 5, 74);
     strategy.AddRule(71, 6, 96);
     strategy.AddRule(83, 6, 25);
     strategy.AddRule(86, 2, 24);
     strategy.AddRule(86, 5, 27);
     strategy.AddRule(87, 1, 24);
     strategy.AddRule(87, 4, 27);
     strategy.AddRule(87, 6, 29);
     strategy.AddRule(91, 5, 75);
     strategy.AddRule(92, 5, 76);
     strategy.AddRule(93, 2, 74);
     strategy.AddRule(93, 4, 76);
     strategy.AddRule(93, 6, 78);
     strategy.AddRule(94, 2, 75);
     strategy.AddRule(94, 4, 77);
     strategy.AddRule(98, 1, 78);
 }