示例#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();
        }
示例#2
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();
        }