mirror of
https://github.com/graphhopper/jsprit.git
synced 2020-01-24 07:45:05 +01:00
reproduce bug #209
This commit is contained in:
parent
b012730dde
commit
13dee5ca7f
1 changed files with 99 additions and 0 deletions
|
|
@ -0,0 +1,99 @@
|
|||
package jsprit.core.algorithm;
|
||||
|
||||
import jsprit.core.algorithm.box.Jsprit;
|
||||
import jsprit.core.problem.Location;
|
||||
import jsprit.core.problem.VehicleRoutingProblem;
|
||||
import jsprit.core.problem.job.Break;
|
||||
import jsprit.core.problem.job.Service;
|
||||
import jsprit.core.problem.solution.VehicleRoutingProblemSolution;
|
||||
import jsprit.core.problem.solution.route.activity.BreakActivity;
|
||||
import jsprit.core.problem.solution.route.activity.TimeWindow;
|
||||
import jsprit.core.problem.solution.route.activity.TourActivity;
|
||||
import jsprit.core.problem.vehicle.VehicleImpl;
|
||||
import jsprit.core.problem.vehicle.VehicleType;
|
||||
import jsprit.core.problem.vehicle.VehicleTypeImpl;
|
||||
import jsprit.core.util.Solutions;
|
||||
import junit.framework.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
* Created by schroeder on 08/01/16.
|
||||
*/
|
||||
public class IgnoreBreakTimeWindowTest {
|
||||
|
||||
@Test
|
||||
public void doNotIgnoreBreakTW(){
|
||||
VehicleTypeImpl.Builder vehicleTypeBuilder = VehicleTypeImpl.Builder.newInstance("vehicleType");
|
||||
VehicleType vehicleType = vehicleTypeBuilder.setCostPerWaitingTime(0.8).build();
|
||||
|
||||
/*
|
||||
* get a vehicle-builder and build a vehicle located at (10,10) with type "vehicleType"
|
||||
*/
|
||||
|
||||
VehicleImpl vehicle2;
|
||||
{
|
||||
VehicleImpl.Builder vehicleBuilder = VehicleImpl.Builder.newInstance("v2");
|
||||
vehicleBuilder.setStartLocation(Location.newInstance(0, 0));
|
||||
vehicleBuilder.setType(vehicleType);
|
||||
vehicleBuilder.setEarliestStart(10).setLatestArrival(50);
|
||||
vehicleBuilder.setBreak(Break.Builder.newInstance("lunch").setTimeWindow(TimeWindow.newInstance(14, 14)).setServiceTime(1.).build());
|
||||
vehicle2 = vehicleBuilder.build();
|
||||
}
|
||||
/*
|
||||
* build services at the required locations, each with a capacity-demand of 1.
|
||||
*/
|
||||
|
||||
Service service2 = Service.Builder.newInstance("1").setLocation(Location.newInstance(0, 0))
|
||||
.setServiceTime(1.).setTimeWindow(TimeWindow.newInstance(14., 14.))
|
||||
.build();
|
||||
|
||||
|
||||
Service service4 = Service.Builder.newInstance("2").setLocation(Location.newInstance(0, 0))
|
||||
.setServiceTime(1.).setTimeWindow(TimeWindow.newInstance(17,17)).build();
|
||||
|
||||
Service service5 = Service.Builder.newInstance("3").setLocation(Location.newInstance(0, 0))
|
||||
.setServiceTime(1.).setTimeWindow(TimeWindow.newInstance(18, 18)).build();
|
||||
|
||||
Service service7 = Service.Builder.newInstance("4").setLocation(Location.newInstance(0, 0))
|
||||
.setServiceTime(1.).setTimeWindow(TimeWindow.newInstance(10, 10)).build();
|
||||
|
||||
Service service8 = Service.Builder.newInstance("5").setLocation(Location.newInstance(0, 0))
|
||||
.setServiceTime(1.).setTimeWindow(TimeWindow.newInstance(12, 12)).build();
|
||||
|
||||
Service service10 = Service.Builder.newInstance("6").setLocation(Location.newInstance(0, 0))
|
||||
.setServiceTime(1.).setTimeWindow(TimeWindow.newInstance(16, 16)).build();
|
||||
|
||||
Service service11 = Service.Builder.newInstance("7").setLocation(Location.newInstance(0, 0))
|
||||
.setServiceTime(1.).setTimeWindow(TimeWindow.newInstance(13, 13)).build();
|
||||
|
||||
VehicleRoutingProblem vrp = VehicleRoutingProblem.Builder.newInstance()
|
||||
.addVehicle(vehicle2)
|
||||
.addJob(service2).addJob(service4)
|
||||
.addJob(service5).addJob(service7)
|
||||
.addJob(service8).addJob(service10).addJob(service11)
|
||||
.setFleetSize(VehicleRoutingProblem.FleetSize.FINITE)
|
||||
.build();
|
||||
|
||||
VehicleRoutingAlgorithm vra = Jsprit.createAlgorithm(vrp);
|
||||
vra.setMaxIterations(50);
|
||||
|
||||
VehicleRoutingProblemSolution solution = Solutions.bestOf(vra.searchSolutions());
|
||||
|
||||
Assert.assertTrue(breakShouldBeTime(solution));
|
||||
}
|
||||
|
||||
private boolean breakShouldBeTime(VehicleRoutingProblemSolution solution) {
|
||||
boolean inTime = true;
|
||||
for(TourActivity act : solution.getRoutes().iterator().next().getActivities()){
|
||||
if(act instanceof BreakActivity){
|
||||
if(act.getEndTime() < ((BreakActivity) act).getJob().getTimeWindow().getStart()){
|
||||
inTime = false;
|
||||
}
|
||||
if(act.getArrTime() > ((BreakActivity) act).getJob().getTimeWindow().getEnd()){
|
||||
inTime = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return inTime;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue