17 using System.Collections.Generic;
27 public long[,] DistanceMatrix = {
28 {0, 2451, 713, 1018, 1631, 1374, 2408, 213, 2571, 875, 1420, 2145, 1972},
29 {2451, 0, 1745, 1524, 831, 1240, 959, 2596, 403, 1589, 1374, 357, 579},
30 {713, 1745, 0, 355, 920, 803, 1737, 851, 1858, 262, 940, 1453, 1260},
31 {1018, 1524, 355, 0, 700, 862, 1395, 1123, 1584, 466, 1056, 1280, 987},
32 {1631, 831, 920, 700, 0, 663, 1021, 1769, 949, 796, 879, 586, 371},
33 {1374, 1240, 803, 862, 663, 0, 1681, 1551, 1765, 547, 225, 887, 999},
34 {2408, 959, 1737, 1395, 1021, 1681, 0, 2493, 678, 1724, 1891, 1114, 701},
35 {213, 2596, 851, 1123, 1769, 1551, 2493, 0, 2699, 1038, 1605, 2300, 2099},
36 {2571, 403, 1858, 1584, 949, 1765, 678, 2699, 0, 1744, 1645, 653, 600},
37 {875, 1589, 262, 466, 796, 547, 1724, 1038, 1744, 0, 679, 1272, 1162},
38 {1420, 1374, 940, 1056, 879, 225, 1891, 1605, 1645, 679, 0, 1017, 1200},
39 {2145, 357, 1453, 1280, 586, 887, 1114, 2300, 653, 1272, 1017, 0, 504},
40 {1972, 579, 1260, 987, 371, 999, 701, 2099, 600, 1162, 1200, 504, 0},
42 public int VehicleNumber = 1;
51 static void PrintSolution(
55 Console.WriteLine(
"Objective: {0} miles", solution.ObjectiveValue());
57 Console.WriteLine(
"Route:");
58 long routeDistance = 0;
59 var index = routing.Start(0);
60 while (routing.IsEnd(index) ==
false) {
61 Console.Write(
"{0} -> ", manager.IndexToNode((
int)index));
62 var previousIndex = index;
63 index = solution.Value(routing.NextVar(index));
64 routeDistance += routing.GetArcCostForVehicle(previousIndex, index, 0);
66 Console.WriteLine(
"{0}", manager.IndexToNode((
int)index));
67 Console.WriteLine(
"Route distance: {0}miles", routeDistance);
71 public static void Main(String[] args) {
74 DataModel data =
new DataModel();
80 data.DistanceMatrix.GetLength(0),
91 int transitCallbackIndex = routing.RegisterTransitCallback(
92 (
long fromIndex,
long toIndex) => {
96 return data.DistanceMatrix[fromNode, toNode]; }
102 routing.SetArcCostEvaluatorOfAllVehicles(transitCallbackIndex);
109 searchParameters.FirstSolutionStrategy =
115 Assignment solution = routing.SolveWithParameters(searchParameters);
120 PrintSolution(routing, manager, solution);