/// /// ///SOLVE PROBLEM /// /// public override byte[] Solve(byte[] partialData, TimeSpan timeout) { if (partialData == null || partialData.Length == 0) { return(null); } //przerób bajty na PartialProblemInstance var converter = new ProblemToBytesConverter(); var partialInstance = (DVRPPartialProblemInstance)converter.FromBytesArray(partialData); var instance = (DVRPProblemInstance)converter.FromBytesArray(_problemData); //dla każdego samochodu (listy klientów mu przypisanej) sprawdz poprawność kombinacji //(w sensie żądań) if (!demandsValid(instance)) { return(converter.ToByteArray(solutionImpossible())); } var n = instance.Visits.Count; var s = instance.VehicleNumber; var i = partialInstance.MinimalSetCount; if (s * i > n) { return(converter.ToByteArray(solutionImpossible())); } partialInstance.PartialResult = double.MaxValue; solveInParallel(instance, ref partialInstance); return(converter.ToByteArray(partialInstance)); }
/// /// ///DIVIDE PROBLEM /// /// public override byte[][] DivideProblem(int threadCount) { if (_problemData == null || _problemData.Length == 0) { return(null); } var converter = new ProblemToBytesConverter(); var instance = (DVRPProblemInstance)converter.FromBytesArray(_problemData); var problems = divideProblem(instance); return(problems.Select(x => converter.ToByteArray(x)).ToArray()); }