Esempio n. 1
0
        public static void Main(string[] args)
        {
//            var solver = new Solver<Values.MyThing, int>(new DefaultGenomeFactory<MyThing>(), new MyThingGenomeEvaluator(), new MyThingGenomeDescription(), new MyThingSolverLogger(), new SolverParameters(1000));

            var coefficientsToMatch = new Coefficients.Coefficients
            {
                FifthLevel  = 0,
                FourthLevel = 3.9,
                ThirdLevel  = -34.5,
                SecondLevel = -9.8,
                FirstLevel  = 11.9
            };
            var pointsToMatch = Enumerable.Range(-1000, 1000).Select(x => new Point(x, coefficientsToMatch.Calc(x)));
            var evaluator     = new CoefficientsGenomeEvaluator(pointsToMatch);

            var solverParameters = new SolverParameters(
                1000,
                2000,
                0.3);

//            var tasks = new List<Task>();
            for (int i = 0; i < 10; i++)
            {
//                tasks.Add(Task.Run(() => LaunchEvolutionRun(genomeDescriptions, solverParameters, defaultGenomeFactory, evaluator)));
                LaunchEvolutionRun(solverParameters, evaluator);
            }

//            Task.WaitAll(tasks.ToArray());

//            TestBellCurve();
            Console.WriteLine("Finished");
            Console.ReadKey();
        }
Esempio n. 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();
        }