Exemple #1
0
 private ICanvasJSDataPoint MapToCanvasJsDataPoint(IPopulationResult populationResult, ChromosomeFactor factor)
 {
     return(new CanvasJSDataPoint
     {
         X = populationResult.Iteration,
         Y = populationResult.Population.Members.Sum(x => x.Factors.Where(y => y.Key == factor).Sum(z => z.Value)),
     });
 }
        public IEvolutionIterationResult RunIteration(IPopulationResult populationResult, IMatrix matrix, int maxDiffBetweenNode)
        {
            var halfOfElementsCount = (int)Math.Floor(populationResult.Population.Members.Count() / 2.0d);

            var bestChromosomesByEdgeCount     = GetBestChromosomes(ChromosomePart.First, populationResult.Population, halfOfElementsCount);
            var bestChromosomesByConnectedEdge = GetBestChromosomes(ChromosomePart.Second, populationResult.Population, halfOfElementsCount);

            if (bestChromosomesByEdgeCount.Count() != halfOfElementsCount &&
                bestChromosomesByConnectedEdge.Count() != halfOfElementsCount)
            {
                throw new InvalidOperationException("Invalid best chromosome member count after turnament part");
            }

            var mutatedChromosomes = MutateChromosomeByNodeFlipping(bestChromosomesByEdgeCount, bestChromosomesByConnectedEdge, matrix, maxDiffBetweenNode);

            var members = mutatedChromosomes.OrderBy(x => Guid.NewGuid()).ToArray();

            return(new EvolutionIterationResult(new Population(members), populationResult.Iteration + 1));
        }
Exemple #3
0
 public IDictionary <ChromosomeFactor, List <ICanvasJSDataPoint> > MapPopulationToDataPoints(IPopulationResult populationResult)
 {
     return(new Dictionary <ChromosomeFactor, List <ICanvasJSDataPoint> >()
     {
         [ChromosomeFactor.EdgeCount] = new List <ICanvasJSDataPoint>
         {
             MapToCanvasJsDataPoint(populationResult, ChromosomeFactor.EdgeCount)
         },
         [ChromosomeFactor.ConnectedEdgeWeigthSum] = new List <ICanvasJSDataPoint>
         {
             MapToCanvasJsDataPoint(populationResult, ChromosomeFactor.ConnectedEdgeWeigthSum)
         },
     });
 }
        public IEvolutionIterationResult[] RunIterations(int iterations, int maxDiffBetweenNode, IPopulationResult population, IMatrix matrix)
        {
            var result = new IEvolutionIterationResult[iterations];

            result[0] = RunIteration(population, matrix, maxDiffBetweenNode);

            for (var i = 1; i < iterations; i++)
            {
                result[i] = RunIteration(result[i - 1], matrix, maxDiffBetweenNode);
            }

            return(result);
        }