Ejemplo n.º 1
0
        public List <Route> Solve(Node start, Node end)
        {
            var population = new List <Route>(_initialSetFactory.CreateInitialPopulation(start, end));
            var archive    = new List <Route>();
            Dictionary <Route, Vector <double> > objectives = null;
            Dictionary <Route, double>           fitnesses  = null;

            for (int generationCount = 0; generationCount < _maxGenerationCount; generationCount++)
            {
                population = population.Union(archive).ToList();
                objectives = CalculateObjectives(population);
                fitnesses  = Fitness.FitnessValues(population, objectives);
                archive    = GetNonDominated(population, fitnesses);
                archive    = ExternalPopulationCountRegulator(archive, population, fitnesses);
                var tournired = Tournament(archive, fitnesses);
                var crossed   = Crossover(tournired);
                var mutated   = Mutation(crossed);
                population = _filter.Filter(mutated);
            }
            var result = GetNonDominated(archive, fitnesses);

            if (result.Count > _externalPopulationCount)
            {
                result = Cluster(result, fitnesses);
            }
            LastResult = new Result(result, _objectives);
            OnSolved(LastResult);
            return(result);
        }
        private List <Route> GetAllPossibleRoutes(Node start, Node end)
        {
            var set   = _graph.Where(x => x != start && x != end).ToList();
            var paths = new List <List <Node> >()
            {
                new List <Node>()
            };

            for (int i = 1; i <= set.Count; i++)
            {
                var levelpaths = VariationGenerator <Node> .Generate(set, i);

                //paths = paths.Union(levelpaths);
                paths.AddRange(levelpaths);
            }
            paths.ForEach(x => { x.AddFirst(start); x.Add(end); });
            return(_filter.Filter(paths.Select(x => new Route(x)).ToList()));
        }