Skip to content

Commit 87211c1

Browse files
committed
Only Activate if needed
1 parent 8348b89 commit 87211c1

File tree

6 files changed

+31
-13
lines changed

6 files changed

+31
-13
lines changed

jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/constraint/ConstraintManager.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
import com.graphhopper.jsprit.core.problem.misc.JobInsertionContext;
2121
import com.graphhopper.jsprit.core.problem.solution.route.activity.TourActivity;
2222
import com.graphhopper.jsprit.core.problem.solution.route.state.RouteAndActivityStateGetter;
23+
import com.graphhopper.jsprit.core.problem.vehicle.Vehicle;
24+
2325
import org.slf4j.Logger;
2426
import org.slf4j.LoggerFactory;
2527

@@ -107,7 +109,12 @@ public void addTimeWindowConstraint() {
107109

108110
public void addRouteDurationConstraint() {
109111
if (!routeDurationConstraintsSet) {
110-
addConstraint(new VehicleRouteDurationConstraints(stateManager, vrp.getTransportCosts(), vrp.getActivityCosts()), Priority.HIGH);
112+
boolean useConstraint = false;
113+
for(Vehicle vehc : vrp.getVehicles())
114+
if(vehc.getMaximumRouteDuration() != null)
115+
useConstraint = true;
116+
if(useConstraint)
117+
addConstraint(new VehicleRouteDurationConstraints(stateManager, vrp.getTransportCosts(), vrp.getActivityCosts()), Priority.HIGH);
111118
routeDurationConstraintsSet = true;
112119
}
113120
}

jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/constraint/VehicleRouteDurationConstraints.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,9 @@ public VehicleRouteDurationConstraints(RouteAndActivityStateGetter states, Vehic
4747

4848
@Override
4949
public ConstraintsStatus fulfilled(JobInsertionContext iFacts, TourActivity prevAct, TourActivity newAct, TourActivity nextAct, double prevActDepTime) {
50+
if(iFacts.getNewVehicle().getMaximumRouteDuration() == null)
51+
return ConstraintsStatus.FULFILLED;
52+
5053
double maximumVehicleDuration = iFacts.getNewVehicle().getMaximumRouteDuration();
5154

5255
double routeDurationIncrease;

jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/io/VrpXMLWriter.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -365,7 +365,8 @@ private void writeVehiclesAndTheirTypes(XMLConfiguration xmlConfig) {
365365
}
366366
xmlConfig.setProperty(vehiclePathString + "(" + counter + ").timeSchedule.start", vehicle.getEarliestDeparture());
367367
xmlConfig.setProperty(vehiclePathString + "(" + counter + ").timeSchedule.end", vehicle.getLatestArrival());
368-
xmlConfig.setProperty(vehiclePathString + "(" + counter + ").duration", vehicle.getMaximumRouteDuration());
368+
if (vehicle.getMaximumRouteDuration() != null)
369+
xmlConfig.setProperty(vehiclePathString + "(" + counter + ").duration", vehicle.getMaximumRouteDuration());
369370

370371
if (vehicle.getBreak() != null) {
371372
Collection<TimeWindow> tws = vehicle.getBreak().getTimeWindows();

jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/vehicle/Vehicle.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,5 +74,5 @@ public interface Vehicle extends HasId, HasIndex {
7474

7575
public abstract Break getBreak();
7676

77-
public abstract double getMaximumRouteDuration();
77+
public abstract Double getMaximumRouteDuration();
7878
}

jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/vehicle/VehicleImpl.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,8 @@ public Break getBreak() {
9595
}
9696

9797
@Override
98-
public double getMaximumRouteDuration() {
99-
return 0;
98+
public Double getMaximumRouteDuration() {
99+
return null;
100100
}
101101

102102
}
@@ -134,7 +134,7 @@ public static class Builder {
134134

135135
private Break aBreak;
136136

137-
private double maximumRouteDuration = Double.MAX_VALUE;
137+
private Double maximumRouteDuration = null;
138138

139139
private Builder(String id) {
140140
super();
@@ -307,7 +307,7 @@ public static NoVehicle createNoVehicle() {
307307

308308
private final Location startLocation;
309309

310-
private final double maximumRouteDuration;
310+
private final Double maximumRouteDuration;
311311

312312
private final Break aBreak;
313313

@@ -387,7 +387,7 @@ public Break getBreak() {
387387
}
388388

389389
@Override
390-
public double getMaximumRouteDuration() {
390+
public Double getMaximumRouteDuration() {
391391
return maximumRouteDuration;
392392
}
393393

jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/vehicle/VehicleTypeKey.java

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,9 @@ public class VehicleTypeKey extends AbstractVehicle.AbstractTypeKey {
3737
public final double latestEnd;
3838
public final Skills skills;
3939
public final boolean returnToDepot;
40-
public final double maximumRouteDuration;
40+
public Double maximumRouteDuration = null;
4141

42-
public VehicleTypeKey(String typeId, String startLocationId, String endLocationId, double earliestStart, double latestEnd, Skills skills, boolean returnToDepot, double maximumRouteDuration) {
42+
public VehicleTypeKey(String typeId, String startLocationId, String endLocationId, double earliestStart, double latestEnd, Skills skills, boolean returnToDepot, Double maximumRouteDuration) {
4343
super();
4444
this.type = typeId;
4545
this.startLocationId = startLocationId;
@@ -65,7 +65,9 @@ public boolean equals(Object o) {
6565
if (!skills.equals(that.skills)) return false;
6666
if (!startLocationId.equals(that.startLocationId)) return false;
6767
if (!type.equals(that.type)) return false;
68-
if (Double.compare(that.maximumRouteDuration, maximumRouteDuration) != 0) return false;
68+
if (that.maximumRouteDuration == null ^ maximumRouteDuration == null) return false;
69+
if (that.maximumRouteDuration != null && maximumRouteDuration != null
70+
&& Double.compare(that.maximumRouteDuration, maximumRouteDuration) != 0) return false;
6971

7072
return true;
7173
}
@@ -83,7 +85,10 @@ public int hashCode() {
8385
result = 31 * result + (int) (temp ^ (temp >>> 32));
8486
result = 31 * result + skills.hashCode();
8587
result = 31 * result + (returnToDepot ? 1 : 0);
86-
temp = Double.doubleToLongBits(maximumRouteDuration);
88+
if(maximumRouteDuration != null)
89+
temp = Double.doubleToLongBits(maximumRouteDuration);
90+
else
91+
temp = Double.doubleToLongBits(Double.MAX_VALUE);
8792
result = 31 * result + (int) (temp ^ (temp >>> 32));
8893
return result;
8994
}
@@ -92,7 +97,9 @@ public int hashCode() {
9297
public String toString() {
9398
StringBuilder stringBuilder = new StringBuilder();
9499
stringBuilder.append(type).append("_").append(startLocationId).append("_").append(endLocationId)
95-
.append("_").append(Double.toString(earliestStart)).append("_").append(Double.toString(latestEnd)).append("_").append(maximumRouteDuration);
100+
.append("_").append(Double.toString(earliestStart)).append("_").append(Double.toString(latestEnd));
101+
if(maximumRouteDuration != null)
102+
stringBuilder.append("_").append(maximumRouteDuration);
96103
return stringBuilder.toString();
97104
}
98105

0 commit comments

Comments
 (0)