Example #1
0
        private static void LaunchEvolutionRun(SolverParameters solverParameters, ExpressionGenerator <GameState> expressionGenerator)
        {
            var cache                 = new FitnessCache <GameAgentLogicGenome, double>(2000 * solverParameters.MaxEliteSize);
            var evaluator             = new GameAgentEvaluator <GameAgentLogicGenome>(cache, genome => new GameAgentWithLogic(genome));
            var bellWeightedRandom    = new CyclableBellWeightedRandom(10.0, 3.0, 1.0, 0.5, 0.1);
            var genomeDescriptions    = new GameAgentLogicGenomeDescription(bellWeightedRandom, expressionGenerator);
            var defaultGenomeFactory  = new GeneticSolver.Genome.DefaultGenomeFactory <GameAgentLogicGenome>(genomeDescriptions);
            var mutationProbabilities = new Cyclable <double>(new[] { 0.3, 0.9, 1.0 });
            var mutator               = new GenomeMutator <GameAgentLogicGenome>(genomeDescriptions, mutationProbabilities, new UnWeightedRandom());
            var logger                = new GameAgentWithLogicSolverLogger();
            var solver                = new Solver <GameAgentLogicGenome, double>(
                defaultGenomeFactory,
                evaluator,
                logger,
                solverParameters,
                new IEarlyStoppingCondition <GameAgentLogicGenome, double>[]
            {
                // new GeneticSolver.EarlyStoppingConditions.FitnessThresholdReachedEarlyStopCondition<GameAgentMultipliers, double>(fitness => fitness < 1e-6),
                new GeneticSolver.EarlyStoppingConditions.ProgressStalledEarlyStoppingCondition <GameAgentLogicGenome, double>(10, 0.5, 0.8),
                new GeneticSolver.EarlyStoppingConditions.FitnessNotImprovingEarlyStoppingCondition <GameAgentLogicGenome>(1, 100),
            },
                new IGenomeReproductionStrategy <GameAgentLogicGenome>[]
            {
                new CyclableReproductionStrategy <GameAgentLogicGenome>(new IGenomeReproductionStrategy <GameAgentLogicGenome>[]
                {
                    new SexualGenomeReproductionStrategy <GameAgentLogicGenome, double>(mutator, new StratifiedBreedingStrategy(),
                                                                                        defaultGenomeFactory, genomeDescriptions, evaluator, 40, 2),
                    new SexualGenomeReproductionStrategy <GameAgentLogicGenome, double>(mutator, new GeneticSolver.PairingStrategies.RandomBreedingStrategy(),
                                                                                        defaultGenomeFactory, genomeDescriptions, evaluator, 40, 2),
                    new AsexualGenomeReproductionStrategy <GameAgentLogicGenome>(new GenomeMutator <GameAgentLogicGenome>(genomeDescriptions, 1.0, new UnWeightedRandom())),
                }),
                new AsexualGenomeReproductionStrategy <GameAgentLogicGenome>(new GenomeMutator <GameAgentLogicGenome>(genomeDescriptions, 0.4, new UnWeightedRandom())),
            });

            solver.NewGeneration += (s, e) => bellWeightedRandom.CycleStdDev();
            solver.NewGeneration += (s, e) => mutationProbabilities.Cycle();
            solver.NewGeneration += (sender, e) => cache.ClearExcept(e.OrderedGenomes.Select(g => g.GenomeInfo.Genome));

            logger.Start();
            var best = solver.Evolve(1000);

            logger.LogGeneration(best);
            logger.End();
        }
Example #2
0
        /// <summary>
        /// Allows the game to perform any initialization it needs to before starting to run.
        /// This is where it can query for any required services and load any non-graphic
        /// related content.  Calling base.Initialize will enumerate through any components
        /// and initialize them as well.
        /// </summary>
        protected override void Initialize()
        {
            // TODO: Add your initialization logic here
            MAPWIDTH  = 40;
            MAPHEIGHT = 40;
            sprites   = TextureLoader.LoadTextures <Texture2D>(Content, "Sprites");
            IMapGenStrat <DungeonMap> strat = new RandomRoomMapStrat <DungeonMap>(MAPWIDTH, MAPHEIGHT, 30, 1, 3, 10);

            map     = strat.CreateMap();
            genomes = new List <Genome>();
            mutator = new GenomeMutator();

            for (int i = 0; i < POPULATION_SIZE; i++)
            {
                genomes.Add(new Genome(2500));
            }

            int genomeNumber = 1;

            foreach (Genome g in genomes)
            {
                mutator.AddGenomeWalker(new GenomeWalker(map.GetStartTile().X, map.GetStartTile().Y, map, g, genomeNumber));
                genomeNumber++;
            }

            Tile temp = map.GetRandomWalkable();


            p                     = new Player(temp.X, temp.Y, ref map);
            font                  = Content.Load <SpriteFont>("ASCII");
            inputState            = new InputState();
            camera.ViewportWidth  = graphics.GraphicsDevice.Viewport.Width;
            camera.ViewportHeight = graphics.GraphicsDevice.Viewport.Height;
            camera.CenterOn(temp);

            start = map.GetRandomWalkable();
            end   = map.GetRandomWalkable();

            base.Initialize();
        }
Example #3
0
        private static void LaunchEvolutionRun(SolverParameters solverParameters, CoefficientsGenomeEvaluator evaluator)
        {
            var mutationProbabilities = new Cyclable <double>(new [] { 0.3, 0.9, 1.0 });
            var bellWeightedRandom    = new CyclableBellWeightedRandom(10.0, 3.0, 1.0, 0.5, 0.1);
            var genomeDescriptions    = new CoefficientsGenomeDescriptions(bellWeightedRandom);
            var defaultGenomeFactory  = new DefaultGenomeFactory <Coefficients.Coefficients>(genomeDescriptions);
            var mutator = new GenomeMutator <Coefficients.Coefficients>(genomeDescriptions, mutationProbabilities, new UnWeightedRandom());
            var logger  = new CoefficientsSolverLogger();
            var solver  = new Solver <Coefficients.Coefficients, double>(
                defaultGenomeFactory,
                evaluator,
                logger,
                solverParameters,
                new IEarlyStoppingCondition <Coefficients.Coefficients, double>[]
            {
                new FitnessThresholdReachedEarlyStopCondition <Coefficients.Coefficients, double>(fitness => fitness < 1e-6),
                new ProgressStalledEarlyStoppingCondition <Coefficients.Coefficients, double>(10, 0.5, 0.8),
                new FitnessNotImprovingEarlyStoppingCondition <Coefficients.Coefficients>(1e-7, 10),
            },
                new IGenomeReproductionStrategy <Coefficients.Coefficients>[]
            {
//                    new SexualGenomeReproductionStrategy<Coefficients.Coefficients, double>(mutator, new HaremBreedingStrategy(),
//                        defaultGenomeFactory, genomeDescriptions, evaluator, 100, 2),
                new SexualGenomeReproductionStrategy <Coefficients.Coefficients, double>(mutator, new StratifiedBreedingStrategy(),
                                                                                         defaultGenomeFactory, genomeDescriptions, evaluator, 100, 2),
                new SexualGenomeReproductionStrategy <Coefficients.Coefficients, double>(mutator, new RandomBreedingStrategy(),
                                                                                         defaultGenomeFactory, genomeDescriptions, evaluator, 100, 2),
//                    new AsexualGenomeReproductionStrategy<Coefficients.Coefficients>(mutator),
            });

            solver.NewGeneration += (s, e) => mutationProbabilities.Cycle();
            solver.NewGeneration += (s, e) => bellWeightedRandom.CycleStdDev();

            logger.Start();
            var best = solver.Evolve(1000);

            logger.LogGeneration(best);
            logger.End();
        }