private void _CreateSolver() { Debug.Assert(null != _servicesInfo); // NOTE: load first var serviceOptions = ServiceOptions.None; if (_servicesInfo.SolveInfo.SolverSettingsInfo.UseSyncronousVrp) { serviceOptions |= ServiceOptions.UseSyncVrp; } _solver = new VrpSolver( _solveInfo, _servers, _solveServiceValidator, serviceOptions); }
public static List<double> ComputeGains(ref Solution p1, ref Solution p2, ref Solution p3, ref Solution p12, ref Solution p23, ref Solution p31, ref Solution p123, int max_iters = 30, Update update = null, VrpSolver solver = null) { if (solver == null) solver = DefaultSolver; ///// for (var i = 0; i < max_iters; ++i) { p1 = solver.Solve(p1.Problem, p1); p2 = solver.Solve(p2.Problem, p2); p3 = solver.Solve(p3.Problem, p3); p12 = solver.Solve(p12.Problem, p12); p23 = solver.Solve(p23.Problem, p23); p31 = solver.Solve(p31.Problem, p31); p123 = solver.Solve(p123.Problem, p123); var v1 = p1.TotalDistance(); var v2 = p2.TotalDistance(); var v3 = p3.TotalDistance(); var v12 = p12.TotalDistance(); var v23 = p23.TotalDistance(); var v31 = p31.TotalDistance(); var v123 = p123.TotalDistance(); var phi1 = 1.0 * 3.0 / v1 + 1.0 / 6.0 * (v12 - v2) + 1.0 / 6.0 * (v31 - v3) + 1.0 / 3.0 * (v123 - v23); var phi2 = 1.0 * 3.0 / v2 + 1.0 / 6.0 * (v23 - v3) + 1.0 / 6.0 * (v12 - v1) + 1.0 / 3.0 * (v123 - v31); var phi3 = 1.0 * 3.0 / v3 + 1.0 / 6.0 * (v31 - v1) + 1.0 / 6.0 * (v23 - v2) + 1.0 / 3.0 * (v123 - v12); p1.Phi = v1 - phi1; p2.Phi = v2 - phi2; p3.Phi = v3 - phi3; update(max_iters, i); } return null; }
public static List <double> ComputeGains(ref Solution p1, ref Solution p2, ref Solution p3, ref Solution p12, ref Solution p23, ref Solution p31, ref Solution p123, int max_iters = 30, Update update = null, VrpSolver solver = null) { if (solver == null) { solver = DefaultSolver; } ///// for (var i = 0; i < max_iters; ++i) { p1 = solver.Solve(p1.Problem, p1); p2 = solver.Solve(p2.Problem, p2); p3 = solver.Solve(p3.Problem, p3); p12 = solver.Solve(p12.Problem, p12); p23 = solver.Solve(p23.Problem, p23); p31 = solver.Solve(p31.Problem, p31); p123 = solver.Solve(p123.Problem, p123); var v1 = p1.TotalDistance(); var v2 = p2.TotalDistance(); var v3 = p3.TotalDistance(); var v12 = p12.TotalDistance(); var v23 = p23.TotalDistance(); var v31 = p31.TotalDistance(); var v123 = p123.TotalDistance(); var phi1 = 1.0 * 3.0 / v1 + 1.0 / 6.0 * (v12 - v2) + 1.0 / 6.0 * (v31 - v3) + 1.0 / 3.0 * (v123 - v23); var phi2 = 1.0 * 3.0 / v2 + 1.0 / 6.0 * (v23 - v3) + 1.0 / 6.0 * (v12 - v1) + 1.0 / 3.0 * (v123 - v31); var phi3 = 1.0 * 3.0 / v3 + 1.0 / 6.0 * (v31 - v1) + 1.0 / 6.0 * (v23 - v2) + 1.0 / 3.0 * (v123 - v12); p1.Phi = v1 - phi1; p2.Phi = v2 - phi2; p3.Phi = v3 - phi3; update(max_iters, i); } return(null); }