Пример #1
0
        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);
        }
Пример #2
0
        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;
        }
Пример #3
0
        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);
        }