Fix CapacitatedVehicleRoutingProblemWithTimeWindows

This commit is contained in:
Corentin Le Molgat
2019-02-06 09:05:00 +01:00
parent 4ffa33bf0c
commit f9c48ead3e

View File

@@ -14,8 +14,6 @@
// limitations under the License.
import com.google.ortools.constraintsolver.Assignment;
import com.google.ortools.constraintsolver.FirstSolutionStrategy;
import com.google.ortools.constraintsolver.LongLongToLong;
import com.google.ortools.constraintsolver.LongToLong;
import com.google.ortools.constraintsolver.IntVar;
import com.google.ortools.constraintsolver.RoutingDimension;
import com.google.ortools.constraintsolver.RoutingIndexManager;
@@ -25,6 +23,8 @@ import com.google.ortools.constraintsolver.main;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.function.LongBinaryOperator;
import java.util.function.LongUnaryOperator;
import java.util.logging.Logger;
// A pair class
@@ -87,10 +87,9 @@ public class CapacitatedVehicleRoutingProblemWithTimeWindows {
* @param manager Node Index Manager.
* @param costCoefficient The coefficient to apply to the evaluator.
*/
private LongLongToLong buildManhattanCallback(RoutingIndexManager manager, int costCoefficient) {
return new LongLongToLong() {
@Override
public long run(long firstIndex, long secondIndex) {
private LongBinaryOperator buildManhattanCallback(RoutingIndexManager manager, int costCoefficient) {
return new LongBinaryOperator() {
public long applyAsLong(long firstIndex, long secondIndex) {
try {
int firstNode = manager.indexToNode(firstIndex);
int secondNode = manager.indexToNode(secondIndex);
@@ -179,16 +178,15 @@ public class CapacitatedVehicleRoutingProblemWithTimeWindows {
// Setting up dimensions
final int bigNumber = 100000;
final LongLongToLong callback = buildManhattanCallback(manager, 1);
final LongBinaryOperator callback = buildManhattanCallback(manager, 1);
final String timeStr = "time";
model.addDimension(
model.registerTransitCallback(callback), bigNumber, bigNumber, false, timeStr);
RoutingDimension timeDimension = model.getMutableDimension(timeStr);
LongToLong demandCallback =
new LongToLong() {
@Override
public long run(long index) {
LongUnaryOperator demandCallback =
new LongUnaryOperator() {
public long applyAsLong(long index) {
try {
int node = manager.indexToNode(index);
if (node < numberOfOrders) {
@@ -207,7 +205,7 @@ public class CapacitatedVehicleRoutingProblemWithTimeWindows {
RoutingDimension capacityDimension = model.getMutableDimension(capacityStr);
// Setting up vehicles
LongLongToLong[] callbacks = new LongLongToLong[numberOfVehicles];
LongBinaryOperator[] callbacks = new LongBinaryOperator[numberOfVehicles];
for (int vehicle = 0; vehicle < numberOfVehicles; ++vehicle) {
final int costCoefficient = vehicleCostCoefficients.get(vehicle);
callbacks[vehicle] = buildManhattanCallback(manager, costCoefficient);