i did exactly what you said, but it seems not to make any difference to my output.
static void SolveVRP()
{
//this is called node!
int[,] costs = {{0, 2451, 713, 1018, 1631, 1374, 2408, 213, 2571, 875, 1420, 2145, 1972}, // New York
{2451, 0, 1745, 1524, 831, 1240, 959, 2596, 403, 1589, 1374, 357, 579}, // Los Angeles
{713, 1745, 0, 355, 920, 803, 1737, 851, 1858, 262, 940, 1453, 1260}, // Chicago
{1018, 1524, 355, 0, 700, 862, 1395, 1123, 1584, 466, 1056, 1280, 987}, // Minneapolis
{1631, 831, 920, 700, 0, 663, 1021, 1769, 949, 796, 879, 586, 371}, // Denver
{1374, 1240, 803, 862, 663, 0, 1681, 1551, 1765, 547, 225, 887, 999}, // Dallas
{2408, 959, 1737, 1395, 1021, 1681, 0, 2493, 678, 1724, 1891, 1114, 701}, // Seattle
{213, 2596, 851, 1123, 1769, 1551, 2493, 0, 2699, 1038, 1605, 2300, 2099}, // Boston
{2571, 403, 1858, 1584, 949, 1765, 678, 2699, 0, 1744, 1645, 653, 600}, // San Francisco
{875, 1589, 262, 466, 796, 547, 1724, 1038, 1744, 0, 679, 1272, 1162}, // St. Louis
{1420, 1374, 940, 1056, 879, 225, 1891, 1605, 1645, 679, 0, 1017, 1200}, // Houston
{2145, 357, 1453, 1280, 586, 887, 1114, 2300, 653, 1272, 1017, 0, 504}, // Phoenix
{1972, 579, 1260, 987, 371, 999, 701, 2099, 600, 1162, 1200, 504, 0}}; // Salt Lake City
string[] city_names = { "New York", "Los Angeles", "Chicago", "Minneapolis", "Denver", "Dallas", "Seattle", "Boston", "San Francisco", "St. Louis", "Houston", "Phoenix", "Salt Lake City" };
int num_locations = city_names.Length;
RoutingModel routingModel = new RoutingModel(num_locations, 1, 0);
RoutingSearchParameters search_parameters = RoutingModel.DefaultSearchParameters();
//optional: enables the solver to escape a local minimum
//search_parameters.LocalSearchMetaheuristic = LocalSearchMetaheuristic.Types.Value.GuidedLocalSearch;
//search_parameters.TimeLimitMs = 10000;
NodeEvaluator2 cost_between_nodes = new Cost(costs);
routingModel.SetArcCostEvaluatorOfAllVehicles(cost_between_nodes); //oder SetVehicleCost wenn Fahrzeuge unterschiedliche Kostenmatrix haben
Solver solver = routingModel.solver();
string rank_name = "rank";
routingModel.AddConstantDimension(1, num_locations, true, rank_name);
var highPriorityVarIndex = routingModel.NodeToIndex(3);//Minneapolis
var lowPriorityVarIndex = routingModel.NodeToIndex(0);//New York
//Constraint MinneapolisBeforeNewYork = solver.MakeLess(routingModel.CumulVar(highPriorityVarIndex, rank_name), routingModel.CumulVar(lowPriorityVarIndex, rank_name));
Constraint MinneapolisBeforeNewYork = routingModel.CumulVar(highPriorityVarIndex, rank_name) < routingModel.CumulVar(lowPriorityVarIndex, rank_name);
solver.Add(MinneapolisBeforeNewYork);
RoutingDimension rank_dimension = routingModel.GetDimensionOrDie(rank_name);
Assignment assignment = routingModel.SolveWithParameters(search_parameters);
if (assignment != null)
{
Console.WriteLine("Total distance: " + assignment.ObjectiveValue().ToString() + "miles");
//Ergebnis ansehen:
//index is the index of the variable that represents the starting node of the route, called the depot. The index of a node variable is not always the same as the index of the node itself (its row number in the locations array).
//So, when we add nodes to the route displayed in the output, we convert the indices of node variable to node indices, using the method routing.IndexToNode()
long index = routingModel.Start(0); //vehicle 0
StringBuilder route = new StringBuilder();
route.Append("Route: ");
do
{
route.Append(city_names[routingModel.IndexToNode(index)] + " (Time: " + assignment.Min(rank_dimension.CumulVar(index)) + ", " + assignment.Max(rank_dimension.CumulVar(index)) + ") -> ");
index = assignment.Value(routingModel.NextVar(index));
} while (!routingModel.IsEnd(index));
route.Append(city_names[routingModel.IndexToNode(index)] + " (Time: " + assignment.Min(rank_dimension.CumulVar(index)) + ", " + assignment.Max(rank_dimension.CumulVar(index)) + ")");
Console.WriteLine(route.ToString());
}
else
{
Console.WriteLine("No solution found");
}
}
Can you please help me to fix this?