16 import static java.lang.Math.abs;
24 import java.util.function.LongBinaryOperator;
25 import java.util.logging.Logger;
31 System.loadLibrary(
"jniortools");
34 private static final Logger logger = Logger.getLogger(
Tsp.class.getName());
37 static class DataModel {
38 public final int[][] locations = {
57 public final int vehicleNumber = 1;
58 public final int depot = 0;
61 for (
int[] element : locations) {
74 static class ManhattanDistance
implements LongBinaryOperator {
77 distanceMatrix =
new long[data.locations.length][data.locations.length];
78 indexManager = manager;
79 for (
int fromNode = 0; fromNode < data.locations.length; ++fromNode) {
80 for (
int toNode = 0; toNode < data.locations.length; ++toNode) {
81 if (fromNode == toNode) {
82 distanceMatrix[fromNode][toNode] = 0;
84 distanceMatrix[fromNode][toNode] =
85 (long) abs(data.locations[toNode][0] - data.locations[fromNode][0])
86 + (long) abs(data.locations[toNode][1] - data.locations[fromNode][1]);
92 public long applyAsLong(
long fromIndex,
long toIndex) {
95 int toNode = indexManager.indexToNode(toIndex);
96 return distanceMatrix[fromNode][toNode];
98 private final long[][] distanceMatrix;
105 static void printSolution(
110 logger.info(
"Route for Vehicle 0:");
111 long routeDistance = 0;
113 long index = routing.
start(0);
114 while (!routing.
isEnd(index)) {
116 long previousIndex = index;
122 logger.info(
"Distance of the route: " + routeDistance +
"m");
126 public static void main(String[] args)
throws Exception {
129 final DataModel data =
new DataModel();
145 final int transitCallbackIndex =
170 printSolution(data, routing, manager, solution);
static com.google.ortools.constraintsolver.RoutingSearchParameters defaultRoutingSearchParameters()
static void main(String[] args)