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)
at com.loginext.algorithm.engine.VRPEngine.execute(VRPEngine.java:125)
at com.loginext.algorithm.processor.AlgoInputProcessor.execute(AlgoInputProcessor.java:151)
at com.loginext.algorithm.controller.DeliveryPlanningController.deliveryPlanner(DeliveryPlanningController.java:100)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:817)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:731)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:968)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:870)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:844)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1502)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1458)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)