I am running VRP for 5 vehicles with following constraints and logic
VehicleRoutingAlgorithmBuilder algoBuilder = new VehicleRoutingAlgorithmBuilder(problem, algoConfig);
algoBuilder.addCoreConstraints();
algoBuilder.addDefaultCostCalculators();
StateManager stateManager = new StateManager(problem);
stateManager.updateSkillStates();
stateManager.updateTimeWindowStates();
stateManager.updateLoadStates();
stateManager.addStateUpdater(new UpdateLocationsRouteActivity(stateManager));
ConstraintManager constraintManager = new ConstraintManager(problem, stateManager);
constraintManager.addSkillsConstraint();
constraintManager.addTimeWindowConstraint();
constraintManager.addLoadConstraint();
constraintManager.addConstraint(new RouteLocationConstraints(stateManager), Priority.CRITICAL);
algoBuilder.setStateAndConstraintManager(stateManager, constraintManager);
VehicleRoutingAlgorithm algorithm = algoBuilder.build();
algorithm.setPrematureAlgorithmTermination(new IterationWithoutImprovementTermination(100));
Collection<VehicleRoutingProblemSolution> solutions = algorithm.searchSolutions();
-----------
public class RouteLocationConstraints implements HardActivityConstraint {
private StateManager stateManager;
public RouteLocationConstraints(StateManager stateManager) {
this.stateManager = stateManager;
}
@Override
public ConstraintsStatus fulfilled(JobInsertionContext insertionContext, TourActivity prevAct, TourActivity newAct, TourActivity nextAct, double prevActDepTime) {
VehicleRoute routeVisitingLocation = stateManager.getProblemState(stateManager.createStateId(newAct.getLocation().getId()), VehicleRoute.class);
if (routeVisitingLocation == null) {
return ConstraintsStatus.FULFILLED;
} else {
return routeVisitingLocation == insertionContext.getRoute() ? ConstraintsStatus.FULFILLED : ConstraintsStatus.NOT_FULFILLED_BREAK;
}
}
}
public class UpdateLocationsRouteActivity implements StateUpdater, ActivityVisitor {
private StateManager stateManager;
private VehicleRoute route;
public UpdateLocationsRouteActivity(StateManager stateManager) {
this.stateManager = stateManager;
}
@Override
public void begin(VehicleRoute inRoute) {
this.route = inRoute;
}
@Override
public void visit(TourActivity activity) {
stateManager.putProblemState(stateManager.createStateId(activity.getLocation().getId()), VehicleRoute.class, route);
}
@Override
public void finish() {
}
}
I am stuck at following exception. Can anyone help me here?
java.lang.NullPointerException
at jsprit.core.algorithm.VariablePlusFixedSolutionCostCalculatorFactory$1.getCosts(VariablePlusFixedSolutionCostCalculatorFactory.java:51)
at jsprit.core.algorithm.InsertionInitialSolutionFactory.createSolution(InsertionInitialSolutionFactory.java:58)
at jsprit.core.algorithm.PrettyAlgorithmBuilder$2.informAlgorithmStarts(PrettyAlgorithmBuilder.java:144)
at sprit.core.algorithm.listener.VehicleRoutingAlgorithmListeners.algorithmStarts(VehicleRoutingAlgorithmListeners.java:127)
at jsprit.core.algorithm.VehicleRoutingAlgorithm.algorithmStarts(VehicleRoutingAlgorithm.java:296)
at jsprit.core.algorithm.VehicleRoutingAlgorithm.searchSolutions(VehicleRoutingAlgorithm.java:196)