Beispiel #1
0
        public override void MergeSolution(byte[][] solutions)
        {
            //m
            State = TaskSolverState.Merging;
            var datas = new List <DvrpSolutionData>();

            for (int i = 0; i < solutions.Count(); i++) //Deserialize
            {
                datas.Add(DvrpSolutionData.Deserialize(solutions[i]));
            }
            MergeSolution(datas); //Real merge
            OnSolutionsMergingFinished(this);
            State = TaskSolverState.Idle;
        }
Beispiel #2
0
        public override byte[][] DivideProblem(int threadCount)
        {
            State              = TaskSolverState.Dividing;
            solution           = new DvrpSolutionData();
            solution.StartTime = DateTime.Now;
            List <DvrpProblemData> dvrpPartialProblems = new List <DvrpProblemData>();

            partialDictionary = new Dictionary <List <int>, int>(new ListComparer <int>());
            var subsets = Set.GenerateAllSubsets(problem.Clients.Length);
            int tag     = 0;

            foreach (var subset in subsets)
            {
                List <Client> clients = new List <Client>();

                foreach (int index in subset.Elements)
                {
                    clients.Add(problem.Clients[index]);
                }

                var partialProblem = new DvrpProblemData(clients.ToArray(), problem.Depots, problem.Fleet, tag);
                partialDictionary.Add(subset.Elements, tag);
                ++tag;
                dvrpPartialProblems.Add(partialProblem);
            }

            byte[][] dividedData = new byte[dvrpPartialProblems.Count][];
            for (int i = 0; i < dvrpPartialProblems.Count; i++)
            {
                dividedData[i] = dvrpPartialProblems[i].Serialize();
            }
            PartialProblems = dividedData;
            OnProblemDividingFinished(this);
            State = TaskSolverState.Idle;
            return(dividedData);
        }