/// <summary> /// Converts VRP operation result to route's result. /// </summary> /// <param name="vrpResult">VRP solve operation result.</param> /// <param name="request">Request used for obtaining the response.</param> /// <returns>Route results.</returns> protected virtual IList <RouteResult> ConvertResult( VrpResult vrpResult, SubmitVrpJobRequest request) { Debug.Assert(vrpResult != null); Debug.Assert(request != null); var conv = new VrpResultConverter(_context.Project, _schedule, _context.SolverSettings); return(conv.Convert(vrpResult.ResultObjects, vrpResult.RouteResponse, request)); }
/// <summary> /// Gets violations. /// </summary> /// <param name="vrpResult">VRP solve operation result.</param> /// <returns>Founded violations.</returns> protected virtual List <Violation> GetViolations(VrpResult vrpResult) { Debug.Assert(null != vrpResult); var list = new List <Violation>(); var conv = new VrpResultConverter(_context.Project, _schedule, _context.SolverSettings); var results = vrpResult.ResultObjects; int hr = vrpResult.SolveHR; if (ComHelper.IsHRSucceeded(hr) && vrpResult.ResultObjects != null) { list.AddRange(conv.GetOrderViolations(results.ViolatedStops, hr)); } else if (hr == (int)NAError.E_NA_VRP_SOLVER_EMPTY_INFEASIBLE_ROUTES) { list.AddRange(conv.GetRouteViolations(results.Routes, hr)); } else if (hr == (int)NAError.E_NA_VRP_SOLVER_NO_SOLUTION) { list.AddRange(conv.GetOrderViolations(results.ViolatedStops, hr)); } else if (hr == (int)NAError.E_NA_VRP_SOLVER_PREASSIGNED_INFEASIBLE_ROUTES) { list.AddRange(conv.GetRouteViolations(results.Routes, hr)); list.AddRange(conv.GetOrderViolations(results.ViolatedStops, hr)); } else if (hr == (int)NAError.E_NA_VRP_SOLVER_INVALID_INPUT) { list.AddRange(conv.GetDepotViolations(results.ViolatedStops)); list.AddRange(conv.GetRestrictedOrderViolations(results.ViolatedStops)); } return(list); }