Esempio n. 1
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);
        }
Esempio n. 2
0
        private void startSimulationButton_Click(object sender, EventArgs e)
        {
#if false
            SimulationCollection simulations = new SimulationCollection(this.Model);

            Technique.AddAll(simulations);

            foreach (Target target in this.Targets)
            {
                GlobalSimulationContext globalContext = new GlobalSimulationContext(target);

                SimulationContext initialContext = new SimulationContext(globalContext);

                Simulator simulator = Simulator.CreateControlledCodeExecutionSimulator(simulations, initialContext);
                simulator.Run();

                resultsGridView.Rows.Add(new object[] {
                    globalContext,
                    target.Hardware.FullSymbol,
                    target.OperatingSystem.FullSymbol,
                    target.Application.FullSymbol,
                    target.Violation.FullSymbol,
                    globalContext.SimulationCount > 0 ? globalContext.CompletedSimulationContexts.Max(x => x.Exploitability) : 0,
                    globalContext.SimulationCount > 0 ? globalContext.CompletedSimulationContexts.Average(x => x.Exploitability) : 0,
                    globalContext.SimulationCount
                });
            }
#endif
        }
        /// <summary>
        /// Find the first match in the given collection. 
        /// </summary>
        /// <param name="simulations">The collection of simulations. Can be null or empty. </param>
        /// <param name="path"></param>
        /// <param name="headers"></param>
        /// <returns></returns>
        public Simulation Match(SimulationCollection simulations, System.Net.Http.HttpMethod method, string path, string query, IEnumerable<Header> headers)
        {
            if (null == simulations) return null;
            if (simulations.Count() == 0) return null;

            var matches = simulations.Where(f => Matches(f, method, path, query, headers) == true);
            var match = matches.FirstOrDefault();
            return match;
        }
        public static void GameActionOutput_SmallSample(this GameBoard board)
        {
            var randomStrategy = new ChutesAndLadders.Strategy.Random.Engine();

            var player1 = new Player("Player 1", randomStrategy);
            var player2 = new Player("Player 2", randomStrategy);
            var player3 = new Player("Player 3", randomStrategy);
            var player4 = new Player("Player 4", randomStrategy);
            var player5 = new Player("Player 5", randomStrategy);
            var player6 = new Player("Player 6", randomStrategy);
            var players = new Player[] { player1, player2, player3, player4, player5, player6 };

            var engine  = new SimulationCollection();
            var results = engine.RunSimulations(players, 60000, false, @".\");
        }
Esempio n. 5
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);
        }
Esempio n. 6
0
        public static void Demo1a_GreedyAlgorithm(this GameBoard board)
        {
            var greedyStrategy = new ChutesAndLadders.Strategy.Greedy.Engine();
            var badStrategy    = new ChutesAndLadders.Strategy.AgressivelyBad.Engine();
            var linearStrategy = new ChutesAndLadders.Strategy.Linear.Engine();

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

            var engine = new SimulationCollection();

            engine.RunSimulations(players, 30000, true);
        }
Esempio n. 7
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);
        }
Esempio n. 8
0
        public static void Demo3b_GeneticEvolution(this GameBoard board)
        {
            const int    maxGenerations           = 300;
            const int    simulationsPerGeneration = 1200;
            const double misspellingRate          = 0.05;

            var basicGeneticStrategy = new ChutesAndLadders.Strategy.Genetic.Engine();

            var player1 = new Player("Player 1", basicGeneticStrategy.Evolve(misspellingRate));
            var player2 = new Player("Player 2", basicGeneticStrategy.Evolve(misspellingRate));
            var player3 = new Player("Player 3", basicGeneticStrategy.Evolve(misspellingRate));
            var player4 = new Player("Player 4", basicGeneticStrategy.Evolve(misspellingRate));
            var player5 = new Player("Player 5", basicGeneticStrategy.Evolve(misspellingRate));
            var player6 = new Player("Player 6", basicGeneticStrategy.Evolve(misspellingRate));
            var players = new Player[] { player1, player2, player3, player4, player5, player6 };

            var engine = new SimulationCollection();

            int mostWins        = 0;
            int generationCount = 0;

            while (generationCount < maxGenerations)
            {
                players = engine.RunSimulations(players, simulationsPerGeneration).Players.ToArray();

                // Create the next generation of Players/Strategies
                // by evolving based on the strategies of the top 2 players
                var bestPlayers = players.OrderByDescending(p => p.WinCount).Take(2);
                if (bestPlayers.First().WinCount > mostWins)
                {
                    mostWins = bestPlayers.First().WinCount;
                    Console.WriteLine($"Generation {generationCount} (most wins {mostWins}):");
                }

                player1 = new Player("Player 1", bestPlayers.First().Strategy);
                player2 = new Player("Player 2", bestPlayers.Last().Strategy);
                player3 = new Player("Player 3", (player1.Strategy as ChutesAndLadders.Strategy.Genetic.Engine).Evolve());
                player4 = new Player("Player 4", (player1.Strategy as ChutesAndLadders.Strategy.Genetic.Engine).Evolve());
                player5 = new Player("Player 5", (player1.Strategy as ChutesAndLadders.Strategy.Genetic.Engine).Evolve());
                player6 = new Player("Player 6", (player2.Strategy as ChutesAndLadders.Strategy.Genetic.Engine).Evolve());
                players = new Player[] { player1, player2, player3, player4, player5, player6 };

                generationCount++;
            }


            // Run the original (linear) strategy against the best one found genetically
            var rootStrategy  = new ChutesAndLadders.Strategy.Genetic.Engine("GeneticRoot");
            var finalStrategy = players.OrderByDescending(p => p.WinCount).First().Strategy as ChutesAndLadders.Strategy.Genetic.Engine;

            var p1           = new Player("Player 1", finalStrategy);
            var p2           = new Player("Player 2", finalStrategy);
            var p3           = new Player("Player 3", finalStrategy);
            var p4           = new Player("Player 4", rootStrategy);
            var p5           = new Player("Player 5", rootStrategy);
            var p6           = new Player("Player 6", rootStrategy);
            var finalPlayers = new Player[] { p1, p2, p3, p4, p5, p6 };

            engine.RunSimulations(finalPlayers, simulationsPerGeneration, true);

            Console.WriteLine($"{finalStrategy.Name} rules:");
            Console.WriteLine(finalStrategy.ContrastWith(rootStrategy));
        }
        /// <summary>
        /// Returns all matches in the order in which they were added. 
        /// </summary>
        /// <param name="simulations">The collection of simulations. Can be null or empty. </param>
        /// <param name="content"></param>
        /// <param name="method"></param>
        /// <param name="path"></param>
        /// <param name="headers"></param>
        /// <returns></returns>
        public IEnumerable<Simulation> Matches(SimulationCollection simulations, HttpContent content, System.Net.Http.HttpMethod method, string path, string query, IEnumerable<Header> headers)
        {
            IEnumerable<Simulation> matches = new List<Simulation>();
            if (null == simulations) return matches;
            if (simulations.Count() == 0) return matches;

            matches = simulations.Where(f => Matches(f, content, method, path, query, headers) == true);
            return matches;
        }
 /// <summary>
 /// Returns all matches in the order in which they were added. 
 /// </summary>
 /// <param name="simulations">The collection of simulations. Can be null or empty. </param>
 /// <param name="method"></param>
 /// <param name="path"></param>
 /// <param name="headers"></param>
 /// <returns></returns>
 public IEnumerable<Simulation> Matches(SimulationCollection simulations, System.Net.Http.HttpMethod method, string path, string query, IEnumerable<Header> headers)
 {
     return Matches(simulations, null, method, path, query, headers);
 }
 internal static SimulationCollection EmbedRelations(this SimulationCollection collection,
                                                     HttpRequest request, IEmbeddedRelationsSchema schema, UserManager <Model.User> userManager) =>
 EmbedRelations <SimulationCollection, SimulationResource>(collection, request, schema, userManager);
Esempio n. 12
0
        public static void Evolution(int maxGenerations, int simulationsPerGeneration,
                                     double misspellingRate, Func <int, int, int, Task> updateDelegate = null)
        {
            var players = new PlayerCollectionBuilder()
                          .Add("Player 1", new ChutesAndLadders.Strategy.Genetic.Engine())
                          .Add("Player 2", new ChutesAndLadders.Strategy.Genetic.Engine())
                          .Add("Player 3", new ChutesAndLadders.Strategy.Genetic.Engine())
                          .Add("Player 4", new ChutesAndLadders.Strategy.Genetic.Engine())
                          .Add("Player 5", new ChutesAndLadders.Strategy.Genetic.Engine())
                          .Add("Player 6", new ChutesAndLadders.Strategy.Genetic.Engine())
                          .Build();

            var engine = new SimulationCollection();

            int mostWins        = 0;
            int generationCount = 0;
            int evolutionCount  = 0;

            while (generationCount < maxGenerations)
            {
                generationCount++;
                players = engine.RunSimulations(players, simulationsPerGeneration).Players.ToArray();

                // Create the next generation of Players/Strategies
                // by evolving based on the strategies of the top 2 players
                var bestPlayers = players.OrderByDescending(p => p.WinCount).Take(2);
                if (bestPlayers.First().WinCount > mostWins)
                {
                    mostWins = bestPlayers.First().WinCount;
                    Console.WriteLine($"Generation {generationCount} (most wins {mostWins}):");
                    evolutionCount++;
                }

                if (updateDelegate != null)
                {
                    updateDelegate.Invoke(generationCount, mostWins, evolutionCount);
                }

                var bestStrategy     = bestPlayers.First().Strategy;
                var runnerUpStrategy = bestPlayers.Last().Strategy;

                players = new PlayerCollectionBuilder()
                          .Add("Player 1", bestStrategy)
                          .Add("Player 2", runnerUpStrategy)
                          .Add("Player 3", (bestStrategy as Strategy.Genetic.Engine).CrossoverWith(runnerUpStrategy as Strategy.Genetic.Engine))
                          .Add("Player 4", (bestStrategy as Strategy.Genetic.Engine).Evolve())
                          .Add("Player 5", (bestStrategy as Strategy.Genetic.Engine).Evolve())
                          .Add("Player 6", (runnerUpStrategy as Strategy.Genetic.Engine).Evolve())
                          .Build();
            }


            // Run the linear strategy against the best one found genetically
            var rootStrategy = new ChutesAndLadders.Strategy.Genetic.Engine("GeneticRoot");

            // rootStrategy.LoadLinearDNA();
            rootStrategy.LoadBestPathDNA();

            var finalStrategy = players.OrderByDescending(p => p.WinCount).First().Strategy as Strategy.Genetic.Engine;

            new SimulationCollectionBuilder()
            .AddPlayer("Player 1", finalStrategy)
            .AddPlayer("Player 2", finalStrategy)
            .AddPlayer("Player 3", finalStrategy)
            .AddPlayer("Player 4", rootStrategy)
            .AddPlayer("Player 5", rootStrategy)
            .AddPlayer("Player 6", rootStrategy)
            .MaxExecutionCount(simulationsPerGeneration)
            .OutputResults(true)
            .Run();

            Console.WriteLine($"{finalStrategy.Name} rules:");
            Console.WriteLine(finalStrategy.ContrastWith(rootStrategy));
        }