具有链式规划变量的PartitionedSearch的最佳做法?

如何解决具有链式规划变量的PartitionedSearch的最佳做法?

我一直在尝试使用链式计划变量和锚点对TWVSP进行修改。与TWVSP带有“停止”的示例类似的方法

它看起来像这样:

Vehicle1 (AnchorShadowVarialbe) - Trip1_1 - Trip1_2 - ... - Trip1_k1
...
VehicleM (Anchor) - TripM_1 - TripM_2 - ... - TripM_kM

将小点分配给车辆。每个行程都有一个开始/结束时间戳记。一辆车不能服务两次重叠的旅程。

为了加快求解速度,我开始使用SolutionPartitioner实现将搜索空间划分为多个分区,因为可以根据行程的时间范围将行程分组。我们的目标是为这些集群分配出行车辆,但是我只有一个车队。

一个问题,我不能使用相同的车辆对象,因为求解器将失败并显示IllegalStateException-很好,我为每个分区克隆了车辆列表,并分配了前往这些克隆对象的行程

然后,我捕获phaseEnded事件,其中phaseScopePartitionedSearchPhaseScope一个实例(即分区搜索结束事件),然后将行程重新分配给原始车辆对象(确保指针都指向各个方向上的相同对象(类似于示例中的prevIoUsstandstill,nextVisit),并手动修复了链条,因此群集链仅锚定在原始车辆上,并且将它们链接在一起:

vehicleX - (partition0.trip(0)) - ... - (partition(i-1).trip(last)) - (partition(i).trip(0)) - ... 

然后我在解决方案范围内更新解决方案:

partitionPhaseScope.getSolverScope().setBestSolution(mergedSolution);

我想按照文档中的建议在分区后进行本地搜索,但是会出现错误

Caused by: java.lang.IllegalStateException: The move thread with moveThreadindex (65) has thrown an exception. Relayed here in the parent thread.
    at org.optaplanner.core.impl.heuristic.thread.OrderByMoveIndexBlockingQueue.take(OrderByMoveIndexBlockingQueue.java:147)
    at org.optaplanner.core.impl.localsearch.decider.MultiThreadedLocalSearchDecider.forageResult(MultiThreadedLocalSearchDecider.java:188)
    at org.optaplanner.core.impl.localsearch.decider.MultiThreadedLocalSearchDecider.decideNextStep(MultiThreadedLocalSearchDecider.java:159)
    at org.optaplanner.core.impl.localsearch.DefaultLocalSearchPhase.solve(DefaultLocalSearchPhase.java:71)
    at org.optaplanner.core.impl.solver.AbstractSolver.runPhases(AbstractSolver.java:99)
    at org.optaplanner.core.impl.solver.DefaultSolver.solve(DefaultSolver.java:189)
    at com.mynamespace.planner.v4.rest.ScheduleResource.startSolving(ScheduleResource.java:221)
    at com.mynamespace.planner.v4.rest.ScheduleResource.solve(ScheduleResource.java:112)
    at com.mynamespace.planner.v4.rest.ScheduleResource_ClientProxy.solve(ScheduleResource_ClientProxy.zig:156)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:167)
    at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:130)
    at org.jboss.resteasy.core.ResourceMethodInvoker.internalInvokeOnTarget(ResourceMethodInvoker.java:638)
    at org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTargetAfterFilter(ResourceMethodInvoker.java:504)
    at org.jboss.resteasy.core.ResourceMethodInvoker.lambda$invokeOnTarget$2(ResourceMethodInvoker.java:454)
    at org.jboss.resteasy.core.interception.jaxrs.PreMatchContainerRequestContext.filter(PreMatchContainerRequestContext.java:364)
    at org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:456)
    at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:417)
    at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:391)
    at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:68)
    at org.jboss.resteasy.core.Synchronousdispatcher.invoke(Synchronousdispatcher.java:488)
    ... 49 more
Caused by: java.lang.NullPointerException
    at org.drools.core.common.NamedEntryPoint.update(NamedEntryPoint.java:353)
    at org.drools.core.common.NamedEntryPoint.update(NamedEntryPoint.java:338)
    at org.drools.core.impl.StatefulKNowledgeSessionImpl.update(StatefulKNowledgeSessionImpl.java:1587)
    at org.drools.core.impl.StatefulKNowledgeSessionImpl.update(StatefulKNowledgeSessionImpl.java:1559)
    at org.optaplanner.core.impl.score.stream.drools.DroolsConstraintSession.update(DroolsConstraintSession.java:47)
    at org.optaplanner.core.impl.score.director.stream.ConstraintStreamscoreDirector.afterVariableChanged(ConstraintStreamscoreDirector.java:141)
    at org.optaplanner.core.impl.domain.variable.inverserelation.SingletonInverseVariableListener.retract(SingletonInverseVariableListener.java:96)
    at org.optaplanner.core.impl.domain.variable.inverserelation.SingletonInverseVariableListener.beforeVariableChanged(SingletonInverseVariableListener.java:46)
    at org.optaplanner.core.impl.domain.variable.listener.support.VariableListenerSupport.beforeVariableChanged(VariableListenerSupport.java:174)
    at org.optaplanner.core.impl.score.director.AbstractscoreDirector.beforeVariableChanged(AbstractscoreDirector.java:433)
    at org.optaplanner.core.impl.score.director.AbstractscoreDirector.changeVariableFacade(AbstractscoreDirector.java:446)
    at org.optaplanner.core.impl.heuristic.selector.move.generic.chained.ChainedChangeMove.doMoveOnGenuineVariables(ChainedChangeMove.java:74)
    at org.optaplanner.core.impl.heuristic.move.AbstractMove.doMove(AbstractMove.java:36)
    at org.optaplanner.core.impl.heuristic.move.AbstractMove.doMove(AbstractMove.java:31)
    at org.optaplanner.core.impl.score.director.AbstractscoreDirector.doAndProcessMove(AbstractscoreDirector.java:178)
    at org.optaplanner.core.impl.heuristic.thread.MoveThreadRunner.run(MoveThreadRunner.java:146)
    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)

任何想法都缺少什么? 是否有关于如何使用链式计划变量进行PartitionedSearch的文档?

谢谢。

解决方法

FactHandle可能为null,因此至少应该改善错误消息:https://issues.redhat.com/browse/PLANNER-2222

对于实际的错误,您的Partitioned可能会创建一个分区,该分区在@ProblemFactCollectionProperty@PlanningEntityCollectionProperty中没有该事实,但确实存在于链接实体的尾链中(= think变量)收听者的到达时间等“更新”。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?