26 import java.util.Arrays;
27 import java.util.logging.Logger;
33 System.loadLibrary(
"jniortools");
36 private static final Logger logger = Logger.getLogger(
VrpResources.class.getName());
39 static class DataModel {
40 public final long[][] timeMatrix = {
41 {0, 6, 9, 8, 7, 3, 6, 2, 3, 2, 6, 6, 4, 4, 5, 9, 7},
42 {6, 0, 8, 3, 2, 6, 8, 4, 8, 8, 13, 7, 5, 8, 12, 10, 14},
43 {9, 8, 0, 11, 10, 6, 3, 9, 5, 8, 4, 15, 14, 13, 9, 18, 9},
44 {8, 3, 11, 0, 1, 7, 10, 6, 10, 10, 14, 6, 7, 9, 14, 6, 16},
45 {7, 2, 10, 1, 0, 6, 9, 4, 8, 9, 13, 4, 6, 8, 12, 8, 14},
46 {3, 6, 6, 7, 6, 0, 2, 3, 2, 2, 7, 9, 7, 7, 6, 12, 8},
47 {6, 8, 3, 10, 9, 2, 0, 6, 2, 5, 4, 12, 10, 10, 6, 15, 5},
48 {2, 4, 9, 6, 4, 3, 6, 0, 4, 4, 8, 5, 4, 3, 7, 8, 10},
49 {3, 8, 5, 10, 8, 2, 2, 4, 0, 3, 4, 9, 8, 7, 3, 13, 6},
50 {2, 8, 8, 10, 9, 2, 5, 4, 3, 0, 4, 6, 5, 4, 3, 9, 5},
51 {6, 13, 4, 14, 13, 7, 4, 8, 4, 4, 0, 10, 9, 8, 4, 13, 4},
52 {6, 7, 15, 6, 4, 9, 12, 5, 9, 6, 10, 0, 1, 3, 7, 3, 10},
53 {4, 5, 14, 7, 6, 7, 10, 4, 8, 5, 9, 1, 0, 2, 6, 4, 8},
54 {4, 8, 13, 9, 8, 7, 10, 3, 7, 4, 8, 3, 2, 0, 4, 5, 6},
55 {5, 12, 9, 14, 12, 6, 6, 7, 3, 3, 4, 7, 6, 4, 0, 9, 2},
56 {9, 10, 18, 6, 8, 12, 15, 8, 13, 9, 13, 3, 4, 5, 9, 0, 9},
57 {7, 14, 9, 16, 14, 8, 5, 10, 6, 5, 4, 10, 8, 6, 2, 9, 0},
59 public final long[][] timeWindows = {
78 public final int vehicleNumber = 4;
80 public final int vehicleLoadTime = 5;
81 public final int vehicleUnloadTime = 5;
82 public final int depotCapacity = 2;
84 public final int depot = 0;
90 static void printSolution(
94 for (
int i = 0; i < data.vehicleNumber; ++i) {
95 long index = routing.
start(i);
96 logger.info(
"Route for Vehicle " + i +
":");
98 while (!routing.
isEnd(index)) {
100 route += manager.
indexToNode(index) +
" Time(" + solution.
min(timeVar) +
"," 101 + solution.
max(timeVar) +
") -> ";
105 route += manager.
indexToNode(index) +
" Time(" + solution.
min(timeVar) +
"," 106 + solution.
max(timeVar) +
")";
108 logger.info(
"Time of the route: " + solution.
min(timeVar) +
"min");
109 totalTime += solution.
min(timeVar);
111 logger.info(
"Total time of all routes: " + totalTime +
"min");
115 public static void main(String[] args)
throws Exception {
118 final DataModel data =
new DataModel();
134 final int transitCallbackIndex =
139 return data.timeMatrix[fromNode][toNode];
157 for (
int i = 1; i < data.timeWindows.length; ++i) {
159 timeDimension.
cumulVar(index).
setRange(data.timeWindows[i][0], data.timeWindows[i][1]);
162 for (
int i = 0; i < data.vehicleNumber; ++i) {
163 long index = routing.
start(i);
164 timeDimension.
cumulVar(index).
setRange(data.timeWindows[0][0], data.timeWindows[0][1]);
172 for (
int i = 0; i < data.vehicleNumber; ++i) {
175 timeDimension.
cumulVar(routing.
start(i)), data.vehicleLoadTime,
"depot_interval");
178 timeDimension.
cumulVar(routing.
end(i)), data.vehicleUnloadTime,
"depot_interval");
183 long[] depotUsage =
new long[intervals.length];
184 Arrays.fill(depotUsage, 1);
190 for (
int i = 0; i < data.vehicleNumber; ++i) {
212 printSolution(data, routing, manager, solution);
static void main(String[] args)
static com.google.ortools.constraintsolver.RoutingSearchParameters defaultRoutingSearchParameters()
Minimal VRP with Resource Constraints.