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(); }
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); }