private void MergeSolution(List <DvrpSolutionData> datas) { //DVRP partialSolutions = datas.ToArray(); List <Route> currentSolution = new List <Route>(); var set = new int[problem.Clients.Length]; for (int i = 0; i < set.Length; ++i) { set[i] = i; } var partitions = Partitioning.GetAllPartitions(set, problem.Fleet.count); foreach (var partition in partitions) { double distance = 0; currentSolution = new List <Route>(); foreach (var p in partition) { var key = p.ToList(); key.Sort(); int tag = partialDictionary[key]; //tag = datas.Count - tag -1; Route r = datas.First(d => d.Routes[0].Tag == tag).Routes[0];//datas[tag].Routes[0];// distance += r.Distance; if (distance > solution.Distance) { distance = double.MaxValue; break; } currentSolution.Add(r); } if (distance < solution.Distance) { solution.Routes = currentSolution.ToList(); solution.Distance = distance; } } Solution = solution.Serialize(); }
protected byte[] GetData() { return(data.Serialize()); }