Пример #1
0
        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();
        }
Пример #2
0
 protected byte[] GetData()
 {
     return(data.Serialize());
 }