public DvrpSolution(DvrpSolutionData result, ulong id, bool timeout_occured, ESolutionType type, ulong computations_time) { data = result; TaskId = id; TimeoutOccured = timeout_occured; SolutionType = type; ComputationsTime = computations_time; }
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; }
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); }