TotalDistance() public method

public TotalDistance ( ) : double
return double
コード例 #1
0
ファイル: WochLebkowski09.cs プロジェクト: zaycev/vrptw
 public Solution ImproveSolution(Solution initialSolution, List<Customer> selected, List<Route> routes)
 {
     if (selected == null)
         return initialSolution;
     var oldDist = initialSolution.TotalDistance();
     Solution bestSolution = initialSolution;
     foreach (var c in selected)
     {
         foreach (var r in routes)
         {
             var transfer = BestInsertionPlaceCzech2001(initialSolution, c, r);
             if(transfer.Value < oldDist)
             {
                 bestSolution = transfer.Key;
                 oldDist = transfer.Value;
             }
         }
     }
     return bestSolution;
 }
コード例 #2
0
ファイル: ShapleyDivider.cs プロジェクト: zaycev/vrptw
        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
ファイル: WochLebkowski09.cs プロジェクト: zaycev/vrptw
        public KeyValuePair<Solution, double> BestInsertionPlaceCzech2001(Solution solution, Customer customer, Route route)
        {
            // Route customerRoute = solution.Routes[customerRouteIndex];
            // Customer customer = (Customer)customerRoute.RouteList[cusotomerIndex];
            // Route targetRoute = solution.Routes[targetRouteIndex];

            //int bestSolution = -1;
            double bestCost = solution.TotalDistance();

            //solution.Routes[cusotomerIndex] = customerRoute.Copy();
            //solution.Routes[cusotomerIndex].RouteList.RemoveAt(cusotomerIndex);

            var routeIndex = route.Index();
            var newSolution = solution.Copy();
            var oldRouteIdx = customer.Route.Index();
            var oldRoute = newSolution.Routes[oldRouteIdx].Copy();
            oldRoute.RemoveAt(customer.Index());
            newSolution.Routes[oldRouteIdx] = oldRoute;
            Solution bestSolutionCopy = null;

            for (int i = 1; i < route.RouteList.Count; ++i)
            {

                var newRoute = solution.Routes[routeIndex].Copy();
                newRoute.InsertCustomer(customer, i);
                newSolution.Routes[routeIndex] = newRoute;
                double newCost = newSolution.TotalDistance();
                if (newRoute.IsFeasible() && newCost < bestCost)
                {
                    bestSolutionCopy = newSolution.Copy();
                    bestCost = newCost;
                }
            }

            return new KeyValuePair<Solution, double>(bestSolutionCopy, bestCost);
        }