mirror of
https://github.com/graphhopper/jsprit.git
synced 2020-01-24 07:45:05 +01:00
fix open route updater
This commit is contained in:
parent
67db18b6df
commit
44d0efdd54
3 changed files with 48 additions and 10 deletions
|
|
@ -34,7 +34,7 @@ public class UpdateEndLocationIfRouteIsOpen implements StateUpdater, RouteVisito
|
||||||
private void setRouteEndToLastActivity(VehicleRoute route) {
|
private void setRouteEndToLastActivity(VehicleRoute route) {
|
||||||
if(!route.getActivities().isEmpty()){
|
if(!route.getActivities().isEmpty()){
|
||||||
TourActivity lastAct = route.getActivities().get(route.getActivities().size()-1);
|
TourActivity lastAct = route.getActivities().get(route.getActivities().size()-1);
|
||||||
route.getEnd().setLocationId(lastAct.getLocation().getId());
|
route.getEnd().setLocation(lastAct.getLocation());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -106,7 +106,7 @@ public class GreatCircleCosts extends AbstractForwardVehicleRoutingTransportCost
|
||||||
from = locations.getCoord(fromLocation.getId());
|
from = locations.getCoord(fromLocation.getId());
|
||||||
to = locations.getCoord(toLocation.getId());
|
to = locations.getCoord(toLocation.getId());
|
||||||
}
|
}
|
||||||
if(from == null || to == null) throw new NullPointerException();
|
if(from == null || to == null) throw new NullPointerException("either from or to location is null");
|
||||||
return GreatCircleDistanceCalculator.calculateDistance(from, to, distanceUnit) * detour;
|
return GreatCircleDistanceCalculator.calculateDistance(from, to, distanceUnit) * detour;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,7 @@ import jsprit.core.problem.vehicle.VehicleImpl;
|
||||||
import jsprit.core.problem.vehicle.VehicleType;
|
import jsprit.core.problem.vehicle.VehicleType;
|
||||||
import jsprit.core.problem.vehicle.VehicleTypeImpl;
|
import jsprit.core.problem.vehicle.VehicleTypeImpl;
|
||||||
import jsprit.core.util.Coordinate;
|
import jsprit.core.util.Coordinate;
|
||||||
|
import jsprit.core.util.GreatCircleCosts;
|
||||||
import jsprit.core.util.Solutions;
|
import jsprit.core.util.Solutions;
|
||||||
|
|
||||||
import jsprit.core.util.TestUtils;
|
import jsprit.core.util.TestUtils;
|
||||||
|
|
@ -45,7 +46,7 @@ public class OpenRoutesTest {
|
||||||
public void whenDealingWithOpenRouteAndShipments_insertionShouldNotRequireRouteToBeClosed(){
|
public void whenDealingWithOpenRouteAndShipments_insertionShouldNotRequireRouteToBeClosed(){
|
||||||
VehicleType type = VehicleTypeImpl.Builder.newInstance("type").build();
|
VehicleType type = VehicleTypeImpl.Builder.newInstance("type").build();
|
||||||
|
|
||||||
Vehicle vehicle = VehicleImpl.Builder.newInstance("v").setLatestArrival(11.)
|
VehicleImpl vehicle = VehicleImpl.Builder.newInstance("v").setLatestArrival(11.)
|
||||||
.setType(type).setReturnToDepot(false).setStartLocation(Location.Builder.newInstance().setCoordinate(Coordinate.newInstance(0, 0)).build()).build();
|
.setType(type).setReturnToDepot(false).setStartLocation(Location.Builder.newInstance().setCoordinate(Coordinate.newInstance(0, 0)).build()).build();
|
||||||
|
|
||||||
Shipment shipment = Shipment.Builder.newInstance("s").setPickupLocation(TestUtils.loc(Coordinate.newInstance(5, 0)))
|
Shipment shipment = Shipment.Builder.newInstance("s").setPickupLocation(TestUtils.loc(Coordinate.newInstance(5, 0)))
|
||||||
|
|
@ -54,7 +55,7 @@ public class OpenRoutesTest {
|
||||||
VehicleRoutingProblem vrp = VehicleRoutingProblem.Builder.newInstance().addJob(shipment).addVehicle(vehicle).build();
|
VehicleRoutingProblem vrp = VehicleRoutingProblem.Builder.newInstance().addJob(shipment).addVehicle(vehicle).build();
|
||||||
|
|
||||||
VehicleRoutingAlgorithm vra = new SchrimpfFactory().createAlgorithm(vrp);
|
VehicleRoutingAlgorithm vra = new SchrimpfFactory().createAlgorithm(vrp);
|
||||||
vra.setNuOfIterations(10);
|
vra.setMaxIterations(10);
|
||||||
|
|
||||||
try{
|
try{
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
|
|
@ -70,15 +71,19 @@ public class OpenRoutesTest {
|
||||||
@Test
|
@Test
|
||||||
public void whenDealingWithOpenRoute_insertionShouldNotRequireRouteToBeClosed(){
|
public void whenDealingWithOpenRoute_insertionShouldNotRequireRouteToBeClosed(){
|
||||||
VehicleType type = VehicleTypeImpl.Builder.newInstance("type").build();
|
VehicleType type = VehicleTypeImpl.Builder.newInstance("type").build();
|
||||||
Vehicle vehicle = VehicleImpl.Builder.newInstance("v").setLatestArrival(9.)
|
VehicleImpl vehicle = VehicleImpl.Builder.newInstance("v").setLatestArrival(9.)
|
||||||
.setType(type).setReturnToDepot(false).setStartLocationCoordinate(Coordinate.newInstance(0, 0)).build();
|
.setType(type).setReturnToDepot(false)
|
||||||
|
.setStartLocation(TestUtils.loc(Coordinate.newInstance(0, 0)))
|
||||||
|
.build();
|
||||||
|
|
||||||
Service service = Service.Builder.newInstance("s").setCoord(Coordinate.newInstance(5, 0)).build();
|
Service service = Service.Builder.newInstance("s")
|
||||||
|
.setLocation(TestUtils.loc(Coordinate.newInstance(5, 0)))
|
||||||
|
.build();
|
||||||
|
|
||||||
VehicleRoutingProblem vrp = VehicleRoutingProblem.Builder.newInstance().addJob(service).addVehicle(vehicle).build();
|
VehicleRoutingProblem vrp = VehicleRoutingProblem.Builder.newInstance().addJob(service).addVehicle(vehicle).build();
|
||||||
|
|
||||||
VehicleRoutingAlgorithm vra = new SchrimpfFactory().createAlgorithm(vrp);
|
VehicleRoutingAlgorithm vra = new SchrimpfFactory().createAlgorithm(vrp);
|
||||||
vra.setNuOfIterations(10);
|
vra.setMaxIterations(10);
|
||||||
|
|
||||||
try{
|
try{
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
|
|
@ -96,7 +101,8 @@ public class OpenRoutesTest {
|
||||||
@Test
|
@Test
|
||||||
public void whenDealingWithOpenRouteAndShipments_algorithmShouldCalculateCorrectCosts(){
|
public void whenDealingWithOpenRouteAndShipments_algorithmShouldCalculateCorrectCosts(){
|
||||||
VehicleType type = VehicleTypeImpl.Builder.newInstance("type").build();
|
VehicleType type = VehicleTypeImpl.Builder.newInstance("type").build();
|
||||||
Vehicle vehicle = VehicleImpl.Builder.newInstance("v").setLatestArrival(20.)
|
|
||||||
|
VehicleImpl vehicle = VehicleImpl.Builder.newInstance("v").setLatestArrival(20.)
|
||||||
.setType(type).setReturnToDepot(false).setStartLocation(Location.Builder.newInstance()
|
.setType(type).setReturnToDepot(false).setStartLocation(Location.Builder.newInstance()
|
||||||
.setCoordinate(Coordinate.newInstance(0, 0)).build()).build();
|
.setCoordinate(Coordinate.newInstance(0, 0)).build()).build();
|
||||||
|
|
||||||
|
|
@ -119,7 +125,7 @@ public class OpenRoutesTest {
|
||||||
@Test
|
@Test
|
||||||
public void whenDealingWithOpenRoute_algorithmShouldCalculateCorrectCosts(){
|
public void whenDealingWithOpenRoute_algorithmShouldCalculateCorrectCosts(){
|
||||||
VehicleType type = VehicleTypeImpl.Builder.newInstance("type").build();
|
VehicleType type = VehicleTypeImpl.Builder.newInstance("type").build();
|
||||||
Vehicle vehicle = VehicleImpl.Builder.newInstance("v").setLatestArrival(10.)
|
VehicleImpl vehicle = VehicleImpl.Builder.newInstance("v").setLatestArrival(10.)
|
||||||
.setType(type).setReturnToDepot(false).setStartLocation(Location.Builder.newInstance().setCoordinate(Coordinate.newInstance(0, 0)).build()).build();
|
.setType(type).setReturnToDepot(false).setStartLocation(Location.Builder.newInstance().setCoordinate(Coordinate.newInstance(0, 0)).build()).build();
|
||||||
|
|
||||||
Service service = Service.Builder.newInstance("s")
|
Service service = Service.Builder.newInstance("s")
|
||||||
|
|
@ -136,4 +142,36 @@ public class OpenRoutesTest {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenDealingWithOpenRouteAndGreatCircleCost_algorithmShouldRunWithoutException(){
|
||||||
|
VehicleType type = VehicleTypeImpl.Builder.newInstance("type").build();
|
||||||
|
VehicleImpl vehicle = VehicleImpl.Builder.newInstance("v")
|
||||||
|
.setType(type).setReturnToDepot(false)
|
||||||
|
.setStartLocation(Location.Builder.newInstance().setCoordinate(Coordinate.newInstance(0, 0)).build())
|
||||||
|
.build();
|
||||||
|
|
||||||
|
Service service = Service.Builder.newInstance("s")
|
||||||
|
.setLocation(Location.Builder.newInstance().setCoordinate(Coordinate.newInstance(50, 0)).build()).build();
|
||||||
|
|
||||||
|
VehicleRoutingProblem vrp = VehicleRoutingProblem.Builder.newInstance()
|
||||||
|
.addJob(service).addVehicle(vehicle)
|
||||||
|
.setRoutingCost(new GreatCircleCosts())
|
||||||
|
.build();
|
||||||
|
|
||||||
|
VehicleRoutingAlgorithm vra = new SchrimpfFactory().createAlgorithm(vrp);
|
||||||
|
vra.setMaxIterations(10);
|
||||||
|
|
||||||
|
try {
|
||||||
|
@SuppressWarnings("UnusedDeclaration")
|
||||||
|
Collection<VehicleRoutingProblemSolution> solutions = vra.searchSolutions();
|
||||||
|
assertTrue(true);
|
||||||
|
}
|
||||||
|
catch (Exception e){
|
||||||
|
assertTrue(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue