Exception while using Hard Constraints

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)

Can you use this instead:

Jsprit.Builder jspritBuilder = Jsprit.Builder.newInstance(vrp);
jspritBuilder.setStateAndConstraintManager(stateManager, constraintManager);
VehicleRoutingAlgorithm vra = jspritBuilder.build();

Do you still get an Exception?

1 Like