Ejemplo n.º 1
0
 public ChartData(GADefinition gaDefinition, AdvancedCollectionView filteringCollection, Guid key)
 {
     GaDefinition        = gaDefinition;
     FilteringCollection = filteringCollection;
     Key = key;
 }
Ejemplo n.º 2
0
        /// <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);
        }