AddRoute() public method

public AddRoute ( Route route ) : void
route Route
return void
Exemplo n.º 1
0
        public Solution Copy()
        {
            var sol = new Solution(Problem);

            foreach (Route route in Routes)
            {
                if (route.RouteList.Count > 2)
                {
                    sol.AddRoute(route.Copy());
                }
            }
            return(sol);
        }
Exemplo n.º 2
0
        public override Solution Solve(Problem problem, Solution initialSolution = null)
        {
            var solution = new Solution(problem);
            var unroutedCustomers = new List<Customer>(problem.Customers);
            int seedId = SelectSeedCustomer(unroutedCustomers, problem.Depot);
            Customer seed = unroutedCustomers[seedId];
            unroutedCustomers.RemoveAt(seedId);
            var partialRoute = new Route(problem, seed);

            while (unroutedCustomers.Count > 0)
            {
                Route newRoute = partialRoute.Copy();
                var bestU = new List<int>();
                var c1Vals = new List<double>();
                foreach (Customer cust in unroutedCustomers)
                {
                    double minC1 = double.MaxValue;
                    int optimalU = 1;
                    for (int i = 1; i < newRoute.RouteList.Count - 1; ++i)
                    {
                        double c1 = CriterionC1(i, cust, i + 1, newRoute);
                        if (c1 < minC1)
                        {
                            minC1 = c1;
                            optimalU = i;
                        }
                    }
                    bestU.Add(optimalU);
                    c1Vals.Add(minC1);
                }

                int bestCust = 0;
                double minC2 = double.MaxValue;
                for (int i = 0; i < unroutedCustomers.Count; ++i)
                {
                    double c2 = CriterionC2(unroutedCustomers[i], c1Vals[i], newRoute);
                    if (c2 < minC2)
                    {
                        minC2 = c2;
                        bestCust = i;
                    }
                }

                Customer newCustomer = unroutedCustomers[bestCust];
                newRoute.InsertCustomer(newCustomer, bestU[bestCust]);

                if (newRoute.IsFeasible())
                {
                    unroutedCustomers.RemoveAt(bestCust);
                    partialRoute = newRoute;
                }
                else
                {
                    solution.AddRoute(partialRoute);
                    seedId = SelectSeedCustomer(unroutedCustomers, problem.Depot);
                    seed = unroutedCustomers[seedId];
                    unroutedCustomers.RemoveAt(seedId);
                    partialRoute = new Route(problem, seed);
                }

                if (unroutedCustomers.Count == 0)
                    solution.AddRoute(partialRoute);
            }

            return solution;
        }
Exemplo n.º 3
0
 public Solution Copy()
 {
     var sol = new Solution(Problem);
     foreach (Route route in Routes)
         if(route.RouteList.Count > 2)
            sol.AddRoute(route.Copy());
     return sol;
 }