public ChartData(GADefinition gaDefinition, AdvancedCollectionView filteringCollection, Guid key) { GaDefinition = gaDefinition; FilteringCollection = filteringCollection; Key = key; }
/// <summary> /// Loads presetsProfile into service. /// </summary> /// <exception cref="T:System.InvalidOperationException">Thrown when an attempt to load presetsProfile twice is made.</exception> public void AddGeneticAlgorithm(GADefinition definition, Guid Key) { var chromosome = new FloatingPointChromosome( minValue: new double[] { 0, 0, 0, 0 }, maxValue: new double[] { _maxWidth, _maxHeight, _maxWidth, _maxHeight }, totalBits: new int[] { 20, 20, 20, 20 }, fractionDigits: new int[] { 0, 0, 0, 0 }, geneValues: _geneValues); ICrossover gaCrossover = default; switch (definition.Crossover) { case Crossovers.Uniform: gaCrossover = new UniformCrossover(mixProbability: 0.5f); break; case Crossovers.OnePoint: gaCrossover = new OnePointCrossover(swapPointIndex: 40); break; case Crossovers.ThreeParent: gaCrossover = new ThreeParentCrossover(); break; default: throw new ArgumentOutOfRangeException(paramName: nameof(definition.Crossover), actualValue: definition.Crossover, message: "Crossover has wrong value"); } ISelection gaSelection = default; switch (definition.Selection) { case Selections.Elite: gaSelection = new EliteSelection(); break; case Selections.Roulette: gaSelection = new RouletteWheelSelection(); break; case Selections.Tournament: gaSelection = new TournamentSelection( size: decimal.ToInt32(d: decimal.Multiply(definition.Population, new decimal(0.2f)))); break; case Selections.StohasticUniversalSampling: gaSelection = new StochasticUniversalSamplingSelection(); break; default: throw new ArgumentOutOfRangeException(paramName: nameof(definition.Selection), actualValue: definition.Selection, message: "Selection has wrong value"); } var gaMutation = new UniformMutation(true); var gaPopulation = new Population(minSize: definition.Population, maxSize: definition.Population, adamChromosome: chromosome); var ga = new GeneticAlgorithm(population: gaPopulation, fitness: new EuclideanDistanceFitness(), selection: gaSelection, crossover: gaCrossover, mutation: gaMutation); ga.MutationProbability = (float)definition.Mutation; ga.GenerationRan += GeneticAlgorithmOnGenerationRan; ga.Termination = new FitnessStagnationTermination(expectedStagnantGenerationsNumber: 5); _geneticAlgorithms.Add(key: Key, value: ga); }