Exemplo n.º 1
0
        internal static ((Solution best, double fitness, int generation) result, long ElapsedMilliseconds) RunGa(
            SolverConfig config, int id = 1,
            bool showLogs = true)
        {
            var random     = new Random(config.RandomGenerator.Next());
            var serializer = new GaSerializer(config.Problem)
            {
                FileNameTemplate = $"{id}_ga_history_"
            };
            var callbacks = new List <IGaCallback>(2)
            {
                serializer
            };

            if (showLogs)
            {
                callbacks.Add(new SolutionLogger());
            }

            var solver = new PcbGeneticSolver(config.Problem.Clone(),
                                              new WeightedEvaluator()
            {
                FragmentsOutsideBoardWeight = 20.0,
                IntersectionWeight          = 1000.0,
                SegmentCountWeight          = 10.0,
                SegmentsOutsideBoardWeight  = 5000.0,
                TotalLengthWeight           = 1
            },
                                              new RandomInitializer
            {
                RandomGenerator = random,
                MaxLength       = config.MaxSegmentLength
            },
                                              new RouletteSelection()
            {
                Bias            = 2,
                RandomGenerator = random
            },
                                              new UniformCrossoverOperator
            {
                FirstParentProbability = 0.5,
                RandomGenerator        = random
            },
                                              new ShiftMutationAlphaBeta(config.MaxShift, random),
                                              callbacks)
            {
                MutationProbability  = config.MutationProbability,
                CrossoverProbability = config.CrossoverProbability
            };

            var watch  = System.Diagnostics.Stopwatch.StartNew();
            var result = solver.Solve(config.PopulationSize, config.GenerationLimit);

            watch.Stop();

            serializer.WaitOngoingSaves();
            return(result, watch.ElapsedMilliseconds);
        }
Exemplo n.º 2
0
        public void MutationTestingGround()
        {
            var mutation = new ShiftMutationBeta(new Random(_seed), 15);
            var init     = new RandomInitializer {
                RandomGenerator = new Random(_seed)
            };
            var pathJson = "xd.json";
            var pathImg  = "xd.png";

            for (var i = 0; i < 30; i++)
            {
                mutation.Mutation(_solution, init);

                var serialized = GaSerializer.CreateSerializedSolution(_solution, i, includeProblemInfo: true);
                File.WriteAllText(pathJson, JsonSerializer.Serialize(serialized));

                GaVisualizer.GenerateImage(pathJson, pathImg);
            }

            Assert.True(true);
        }