public IterativeAlgorithm(int populationSize,
                           StopCondition <IterativeAlgorithm <TProblem, TSolution>, TProblem, TSolution>
                           stopCondition,
                           MainOperator <IterativeAlgorithm <TProblem, TSolution>, TProblem, TSolution>
                           mainOperator,
                           NewGenerationCreator <IterativeAlgorithm <TProblem, TSolution>, TProblem, TSolution>
                           newGenerationCreator)
     : base(populationSize, stopCondition, mainOperator)
 {
     NewGenerationCreator = newGenerationCreator.DeepClone();
 }
Example #2
0
        private static IterativeAlgorithm <Function <Point>, Point>[] CreateIterableRCGA(int dimension)
        {
            var maxIteration  = dimension * PopulationSize;
            var maxEvaluation = PopulationSize * maxIteration;

            var evaluator = new EvaluatorStandard <IterativeAlgorithm <Function <Point>, Point>, Function <Point>, Point>();
            var coordinatesInitializer =
                new CoordinatesInitializerUniform <IterativeAlgorithm <Function <Point>, Point>, Function <Point>, Point>();
            var fitter =
                new FitterNormalizingMinimization <IterativeAlgorithm <Function <Point>, Point>, Function <Point>, Point>();

            var selectors = new Selector <IterativeAlgorithm <Function <Point>, Point>, Function <Point>, Point>[]
            {
                new SelectorProportional <IterativeAlgorithm <Function <Point>, Point>, Function <Point>, Point>
                    (PopulationSize, 2),
                new SelectorLinearRank <IterativeAlgorithm <Function <Point>, Point>, Function <Point>, Point>
                    (PopulationSize, 2),
                new SelectorTournament <IterativeAlgorithm <Function <Point>, Point>, Function <Point>, Point>
                    (PopulationSize, 2)
            };
            var crossovers = new CoordinatesCrossover <IterativeAlgorithm <Function <Point>, Point>, Function <Point>, Point>[]
            {
                new CoordinatesCrossoverArithmetic <IterativeAlgorithm <Function <Point>, Point>, Function <Point>, Point>(),
                new CoordinatesCrossoverBLX <IterativeAlgorithm <Function <Point>, Point>, Function <Point>, Point>(),
                new CoordinatesCrossoverExtendedLine <IterativeAlgorithm <Function <Point>, Point>, Function <Point>, Point>(),
                new CoordinatesCrossoverHeuristic <IterativeAlgorithm <Function <Point>, Point>, Function <Point>, Point>(),
                new CoordinatesCrossoverLinear <IterativeAlgorithm <Function <Point>, Point>, Function <Point>, Point>(true),
                new CoordinatesCrossoverLinear <IterativeAlgorithm <Function <Point>, Point>, Function <Point>, Point>(false),
                new CoordinatesCrossoverProportional <IterativeAlgorithm <Function <Point>, Point>, Function <Point>, Point>()
            };
            var mutators = new CoordinatesMutator <IterativeAlgorithm <Function <Point>, Point>, Function <Point>, Point>[]
            {
                new CoordinatesMutatorCombined <IterativeAlgorithm <Function <Point>, Point>, Function <Point>, Point>(new CoordinatesMutator <IterativeAlgorithm <Function <Point>, Point>, Function <Point>, Point>[]
                {
                    new CoordinatesMutatorUniform <IterativeAlgorithm <Function <Point>, Point>, Function <Point>, Point>(),
                    new CoordinatesMutatorClamp <IterativeAlgorithm <Function <Point>, Point>, Function <Point>, Point>()
                }),
                new CoordinatesMutatorCombined <IterativeAlgorithm <Function <Point>, Point>, Function <Point>, Point>(new CoordinatesMutator <IterativeAlgorithm <Function <Point>, Point>, Function <Point>, Point>[]
                {
                    new CoordinatesMutatorMPT <IterativeAlgorithm <Function <Point>, Point>, Function <Point>, Point>(),
                    new CoordinatesMutatorClamp <IterativeAlgorithm <Function <Point>, Point>, Function <Point>, Point>()
                }),
            };
            var newGenerationCreators = new NewGenerationCreator <IterativeAlgorithm <Function <Point>, Point>, Function <Point>, Point>[]
            {
                new NewGenerationCreatorChildrenOnly <IterativeAlgorithm <Function <Point>, Point>, Function <Point>, Point>
                    (PopulationSize, 0),
                new NewGenerationCreatorChildrenOnly <IterativeAlgorithm <Function <Point>, Point>, Function <Point>, Point>
                    (PopulationSize, 5),
                new NewGenerationCreatorChildrenPLusBest <IterativeAlgorithm <Function <Point>, Point>, Function <Point>, Point>
                    (PopulationSize, 0),
                new NewGenerationCreatorChildrenPLusBest <IterativeAlgorithm <Function <Point>, Point>, Function <Point>, Point>
                    (PopulationSize, 5)
            };

            var stopCondition = new StopCondition <IterativeAlgorithm <Function <Point>, Point>, Function <Point>, Point>(new [] { new MoreEvaluationsThan <IterativeAlgorithm <Function <Point>, Point>, Function <Point>, Point>(maxEvaluation) },
                                                                                                                          new [] { new DistanceFromBestToOptimumIsLessThan <IterativeAlgorithm <Function <Point>, Point>, Function <Point>, Point>(Accuracy) });

            var algorithms = new IterativeAlgorithm <Function <Point>, Point> [selectors.Length * crossovers.Length *
                                                                               mutators.Length *
                                                                               newGenerationCreators.Length];
            var ai = 0;

            foreach (var selector in selectors)
            {
                foreach (var crossover in crossovers)
                {
                    foreach (var mutator in mutators)
                    {
                        foreach (var newGenerationCreator in newGenerationCreators)
                        {
                            algorithms[ai] = new IterativeAlgorithm <Function <Point>, Point>(PopulationSize,
                                                                                              stopCondition,
                                                                                              new MainOperatorRCGA <IterativeAlgorithm <Function <Point>, Point>, Function <Point>, Point>(evaluator, coordinatesInitializer, fitter, selector, crossover, mutator),
                                                                                              newGenerationCreator);
                            ai++;
                        }
                    }
                }
            }

            return(algorithms);
        }