I would like to set a custom penalty cost for unassigned jobs, for example a constant. I did not find how to that and some help regarding this matter would be highly welcome.
Incidentally is it possible to set a lower penalty cost for jobs which time windows are not respected but assigned nonetheless, in order to enable the possibility of late deliveries?
Thank you very much for your help!
For example using the instance of SimpleExample.java:
* get a vehicle type-builder and build a type with the typeId "vehicleType" and one capacity dimension, i.e. weight, and capacity dimension value of 2
final int WEIGHT_INDEX = 0;
VehicleTypeImpl.Builder vehicleTypeBuilder = VehicleTypeImpl.Builder.newInstance("vehicleType").addCapacityDimension(WEIGHT_INDEX, 2);
VehicleType vehicleType = vehicleTypeBuilder.build();
* get a vehicle-builder and build a vehicle located at (10,10) with type "vehicleType"
Builder vehicleBuilder = VehicleImpl.Builder.newInstance("vehicle");
VehicleImpl vehicle = vehicleBuilder.build();
* build services at the required locations, each with a capacity-demand of 1.
Service service1 = Service.Builder.newInstance("1").addSizeDimension(WEIGHT_INDEX, 1).setLocation(Location.newInstance(5, 7)).addTimeWindow(0,5).build();
Service service2 = Service.Builder.newInstance("2").addSizeDimension(WEIGHT_INDEX, 1).setLocation(Location.newInstance(5, 13)).addTimeWindow(0,5).build();
Service service3 = Service.Builder.newInstance("3").addSizeDimension(WEIGHT_INDEX, 1).setLocation(Location.newInstance(15, 7)).addTimeWindow(0,5).build();
Service service4 = Service.Builder.newInstance("4").addSizeDimension(WEIGHT_INDEX, 1).setLocation(Location.newInstance(15, 13)).addTimeWindow(0,5).build();
VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance();
VehicleRoutingProblem problem = vrpBuilder.build();
* get the algorithm out-of-the-box.
VehicleRoutingAlgorithm algorithm = Jsprit.createAlgorithm(problem);
* and search a solution
Collection<VehicleRoutingProblemSolution> solutions = algorithm.searchSolutions();
* get the best
VehicleRoutingProblemSolution bestSolution = Solutions.bestOf(solutions);
With the default configuration I get a total cost of 840 with no job assigned. So now I would like to change the cost penalty for each unassigned job, and even give a lower penalty for late deliveries that do not respect the time windows, so that the jobs are assigned even if the time windows cannot be respected.