【发布时间】:2017-10-05 14:08:29
【问题描述】:
使用具有多个规划变量的 Optaplanner 7.3.0,因此有多个 (2) 构建启发式阶段。这是我的 CH 阶段 2 的样子:
<constructionHeuristic>
<queuedEntityPlacer>
<entitySelector id="taskChainEntitySelector">
<entityClass>....Task</entityClass>
</entitySelector>
<changeMoveSelector>
<entitySelector mimicSelectorRef="taskChainEntitySelector"/>
<valueSelector>
<variableName>previousTaskOrEmployee</variableName>
</valueSelector>
</changeMoveSelector>
</queuedEntityPlacer>
</constructionHeuristic>
我有 814 个任务,previousTaskOrEmployee 是一个链式计划变量。但是,如果我不使用这些中的任何一个,这个 CH 阶段大约需要 7-8 分钟或更长时间:
1. valueSelector 中的缓存(Cache:PHASE, selectionOrder:SORTED)
2. selectedCountLimit=100
selectedCountLimit 之所以起作用,是因为这个 CH 阶段会随着步骤创建大量的移动,一个没有缓存/限制/过滤的简单数据:
-814init = selectedMovesCOunt:1
..
-621init = selectedMovesCOunt:300
..
-421init = selectedMovesCOunt:500
..
-221init = selectedMovesCOunt:800// increases downwards
In same cases, I've seen moves per step to be more than 50k which is crazy
我的问题:
A.通过 CH 中的 changeMove 生成这么多步骤正常吗?
B.由于变量未初始化,因此过滤在 CH 中没有多大意义。那么,是否应该理想地使用 selectedCountLimit 呢?
C.我的第一个 CH 阶段不需要任何时间,只需 4-5 秒,因为它是相对较小的实体并且没有链。包含 814 个链接实体的 CH 阶段 2 的理想时间应该是什么时候?
【问题讨论】:
标签: java drools optaplanner drools-planner