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