How can I force breaks?

Hi,
I am using the breakExample.java sample code and modified it slightly.

The two vehicles each have a break with priority = 1. Furthermore, the services have priority = 3 and have been expanded by 2 services (now 6).

In this example, I get a tour without a break and a second tour with a break.

Set breaks must be observed and have priority over the services.

How can I force / achieve this?

Here is the code:

public class breakexample {

public static void main(String[] args) {


	/*
     * 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).setCostPerWaitingTime(1.0);
    VehicleType vehicleType = vehicleTypeBuilder.build();

	/*
	 * get a vehicle-builder and build a vehicle located at (10,10) with type "vehicleType"
	 */
    Builder vehicleBuilder = Builder.newInstance("v1");
    vehicleBuilder.setStartLocation(Location.newInstance(10, 10));

    Break myFirstBreak = Break.Builder.newInstance("myFirstBreak").setTimeWindow(TimeWindow.newInstance(10, 15)).setServiceTime(10).setPriority(1).build();
    
    vehicleBuilder.setBreak(myFirstBreak);

    vehicleBuilder.setType(vehicleType);
    VehicleImpl vehicle = vehicleBuilder.build();


    VehicleImpl v2 = VehicleImpl.Builder.newInstance("v2").setStartLocation(Location.newInstance(0, 10)).setType(vehicleType).setBreak((Break) Break.Builder.newInstance("mySecondBreak").setTimeWindow(TimeWindow.newInstance(5, 10)).setServiceTime(10).build()).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)).setPriority(3).build();
    Service service2 = Service.Builder.newInstance("2").addSizeDimension(WEIGHT_INDEX, 1).setLocation(Location.newInstance(5, 13)).setPriority(3).build();
    Service service3 = Service.Builder.newInstance("3").addSizeDimension(WEIGHT_INDEX, 1).setLocation(Location.newInstance(15, 7)).setPriority(3).build();
    Service service4 = Service.Builder.newInstance("4").addSizeDimension(WEIGHT_INDEX, 1).setLocation(Location.newInstance(15, 13)).setPriority(3).build();
    Service service5 = Service.Builder.newInstance("5").addSizeDimension(WEIGHT_INDEX, 1).setLocation(Location.newInstance(15, 6)).setPriority(3).build();
    Service service6 = Service.Builder.newInstance("6").addSizeDimension(WEIGHT_INDEX, 1).setLocation(Location.newInstance(17, 9)).setPriority(3).build();


    VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance();
    vrpBuilder.addVehicle(vehicle);
    vrpBuilder.addJob(service1).addJob(service2).addJob(service3).addJob(service4).addJob(service5).addJob(service6).addVehicle(v2);
    vrpBuilder.setFleetSize(VehicleRoutingProblem.FleetSize.FINITE);
    VehicleRoutingProblem problem = vrpBuilder.build();

	/*
	 * get the algorithm out-of-the-box.
	 */
    VehicleRoutingAlgorithm algorithm = Jsprit.Builder.newInstance(problem)
        .setProperty(Jsprit.Strategy.CLUSTER_REGRET, "0.")
        .setProperty(Jsprit.Strategy.CLUSTER_BEST, "0.").buildAlgorithm();
	/*
	 * and search a solution
	 */
    Collection<VehicleRoutingProblemSolution> solutions = algorithm.searchSolutions();

	/*
	 * get the best
	 */
    VehicleRoutingProblemSolution bestSolution = Solutions.bestOf(solutions);

    SolutionPrinter.print(problem, bestSolution, SolutionPrinter.Print.VERBOSE);

	/*
	 * plot
	 */
    new Plotter(problem, bestSolution).plot("output/plot", "breaks");


}

}breakexample.java (5.3 KB)

Powered by Discourse