public List <ProblemPerformanceSingleObjective> RunAssessment(
            int numberOfRestarts,
            int reportingFrequency,
            Action <Population> reporters,
            Action <int> iterationReporter,
            int timeOutEvaluations   = 0,
            TimeSpan?timeOutDuration = null,
            int numberOfNewIndividualsPerGeneration = 1)
        {
            var results = new List <ProblemPerformanceSingleObjective>();

            for (var i = 1; i <= numberOfRestarts; i++)
            {
                var optimiserRunner = new OptimiserRunnerBasic(builder, evaluator, convergenceCheckers, reporters);

                optimiserRunner.Run(
                    reportingFrequency: reportingFrequency,
                    timeOutEvaluations: timeOutEvaluations,
                    timeOutDuration: timeOutDuration,
                    newIndividualsPerGeneration: numberOfNewIndividualsPerGeneration);

                results.Add(
                    new ProblemPerformanceSingleObjective(
                        builder.CreateOptimiser().ToString(),
                        evaluator,
                        optimiserRunner));

                iterationReporter(i);
            }

            return(results);
        }
 public OptimiserRunnerBasicTests()
 {
     builder = new ObjectCreators.OptimiserBuilderMock();
     runner  = new OptimiserRunnerBasic(
         builder,
         new ObjectCreators.EvaluatorMock(),
         p => p.AbsoluteDecisionVectorConvergence(1),
         p => { });
 }
        public void Run_EvaluatorThrowsError_ErrorWrappedAndThrown()
        {
            var errorRunner = new OptimiserRunnerBasic(
                builder,
                new ObjectCreators.EvaluatorWithErrorMock(),
                p => p.AbsoluteDecisionVectorConvergence(1),
                p => { });

            Assert.Throws <InvalidOperationException>(() => errorRunner.Run());
        }
        public void Run_IndividualIsIllegal_AssignsPenaltyValue()
        {
            var illegalRunner = new OptimiserRunnerBasic(
                builder,
                new ObjectCreators.EvaluatorWithErrorMock(false),
                p => p.AbsoluteDecisionVectorConvergence(1),
                p => { });

            illegalRunner.Run();
            Assert.True(illegalRunner.AllEvaluated.All(i => i.Fitness == ObjectCreators.OptimiserBuilderMock.PenaltyValue));
        }
Exemple #5
0
        static void Main(string[] args)
        {
            OptimiserBuilder builder;

            if (RunSingleObjective)
            {
                var problem = Options.GetSingleObjectiveContinuousProblem(SingleObjectiveProblemToUse,
                                                                          Number_Of_Dimensions);

                switch (OptimiserToUse)
                {
                case Options.OptimisersAvailable.NelderMead:
                    builder = NelderMeadBuilder.GetBuilder(
                        problem.GetGlobalOptimum().GetDecisionSpace(),
                        Nelder_Mead_Simplex_Creation_Step_Size);
                    break;

                case Options.OptimisersAvailable.EvolutionaryAlgorithm:
                    builder = EvolutionaryAlgorithmBuilderContinuousSO.GetBuilder(
                        problem.GetGlobalOptimum().GetDecisionSpace(),
                        AvailableOperators.ParentSelector.Tournament,
                        AvailableOperators.RecombinationOperator.Sbx,
                        AvailableOperators.MutationOperators.AddRandomNumber,
                        AvailableOperators.ReinsertionOperators.ReplaceRandom,
                        150);
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }

                var runner = new ProblemPerformanceAssessor <double>(builder, problem,
                                                                     p => p.AbsoluteDecisionVectorConvergence(Convergence_Tolerance));

                var results = runner.RunAssessment(
                    Number_Of_Restarts,
                    1000,
                    r => Console.Write("."),
                    i =>
                {
                    Console.WriteLine();
                    Console.WriteLine($"Optimisation {i}/{Number_Of_Restarts} complete.");
                    Console.WriteLine();
                },
                    timeOutEvaluations: Math.Max(5000, (int)Math.Pow(Number_Of_Dimensions, 3.0) * 20),
                    numberOfNewIndividualsPerGeneration: OptimiserToUse == Options.OptimisersAvailable.NelderMead ? 1 : Number_Of_New_Individuals_Per_Generation);

                printSingleObjectiveResults(results);
            }
            else
            {
                var problem = Options.GetMultipleObjectiveContinuousProblem(MultipleObjectiveProblemToUse);

                builder = EvolutionaryAlgorithmBuilderContinuousMO.GetBuilder(
                    problem.GetOptimalParetoFront(1).First().GetDecisionSpace());

                var optimiserRunner = new OptimiserRunnerBasic(builder, problem,
                                                               pop => false, r => Console.Write("."));

                optimiserRunner.Run(
                    reportingFrequency: 1000,
                    timeOutEvaluations: 10000,
                    timeOutDuration: null,
                    newIndividualsPerGeneration: Number_Of_New_Individuals_Per_Generation);

                new FastNonDominatedSort().PerformSort(optimiserRunner.FinalPopulation, new[] { true, true });
                var finalFrontier = optimiserRunner.FinalPopulation.ParetoFront(1);
                var comparison    = problem.GetOptimalParetoFront(finalFrontier.Length);
            }
        }