DotNet Reference

DotNet Reference

TspCities.cs
Go to the documentation of this file.
1 // Copyright 2010-2018 Google LLC
2 // Licensed under the Apache License, Version 2.0 (the "License");
3 // you may not use this file except in compliance with the License.
4 // You may obtain a copy of the License at
5 //
6 // http://www.apache.org/licenses/LICENSE-2.0
7 //
8 // Unless required by applicable law or agreed to in writing, software
9 // distributed under the License is distributed on an "AS IS" BASIS,
10 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11 // See the License for the specific language governing permissions and
12 // limitations under the License.
13 
14 // [START program]
15 // [START import]
16 using System;
17 using System.Collections.Generic;
19 // [END import]
20 
24 public class TspCities {
25  // [START data_model]
26  class DataModel {
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},
41  };
42  public int VehicleNumber = 1;
43  public int Depot = 0;
44  };
45  // [END data_model]
46 
47  // [START solution_printer]
51  static void PrintSolution(
52  in RoutingModel routing,
53  in RoutingIndexManager manager,
54  in Assignment solution) {
55  Console.WriteLine("Objective: {0} miles", solution.ObjectiveValue());
56  // Inspect solution.
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);
65  }
66  Console.WriteLine("{0}", manager.IndexToNode((int)index));
67  Console.WriteLine("Route distance: {0}miles", routeDistance);
68  }
69  // [END solution_printer]
70 
71  public static void Main(String[] args) {
72  // Instantiate the data problem.
73  // [START data]
74  DataModel data = new DataModel();
75  // [END data]
76 
77  // Create Routing Index Manager
78  // [START index_manager]
80  data.DistanceMatrix.GetLength(0),
81  data.VehicleNumber,
82  data.Depot);
83  // [END index_manager]
84 
85  // Create Routing Model.
86  // [START routing_model]
87  RoutingModel routing = new RoutingModel(manager);
88  // [END routing_model]
89 
90  // [START transit_callback]
91  int transitCallbackIndex = routing.RegisterTransitCallback(
92  (long fromIndex, long toIndex) => {
93  // Convert from routing variable Index to distance matrix NodeIndex.
94  var fromNode = manager.IndexToNode(fromIndex);
95  var toNode = manager.IndexToNode(toIndex);
96  return data.DistanceMatrix[fromNode, toNode]; }
97  );
98  // [END transit_callback]
99 
100  // Define cost of each arc.
101  // [START arc_cost]
102  routing.SetArcCostEvaluatorOfAllVehicles(transitCallbackIndex);
103  // [END arc_cost]
104 
105  // Setting first solution heuristic.
106  // [START parameters]
107  RoutingSearchParameters searchParameters =
109  searchParameters.FirstSolutionStrategy =
110  FirstSolutionStrategy.Types.Value.PathCheapestArc;
111  // [END parameters]
112 
113  // Solve the problem.
114  // [START solve]
115  Assignment solution = routing.SolveWithParameters(searchParameters);
116  // [END solve]
117 
118  // Print solution on console.
119  // [START print_solution]
120  PrintSolution(routing, manager, solution);
121  // [END print_solution]
122  }
123 }
124 // [END program]
void SetArcCostEvaluatorOfAllVehicles(int evaluator_index)
global::Google.OrTools.ConstraintSolver.FirstSolutionStrategy.Types.Value FirstSolutionStrategy
First solution strategies, used as starting point of local search.
Definition: Assignment.cs:11
int IndexToNode(long index)
Value
Definition: RoutingModel.cs:18
static void Main(String[] args)
Definition: TspCities.cs:71
Minimal TSP using distance matrix.
Definition: TspCities.cs:24
First solution strategies, used as starting point of local search.
static Google.OrTools.ConstraintSolver.RoutingSearchParameters DefaultRoutingSearchParameters()
Definition: Assignment.cs:18
Container for nested types declared in the FirstSolutionStrategy message type.
int RegisterTransitCallback(LongLongToLong callback)
Assignment SolveWithParameters(Google.OrTools.ConstraintSolver.RoutingSearchParameters search_parameters)
Parameters defining the search used to solve vehicle routing problems.