使用具有多个规划变量的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分钟或更长时间:
在)
中选择排序顺序缓存(缓存:阶段,
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我的问题:
在CH中用changeMove生成这么多步骤正常吗?
B.过滤在CH中没有多大意义,因为变量没有初始化。那么,理想情况下应该使用selectedCountLimit吗?
C.我的第一个CH阶段不需要任何时间,只需要4-5秒,因为它是相对较小的实体,并且没有链。对于具有814个链接实体的CH阶段2,理想的时间应该是什么?
发布于 2017-10-06 21:21:08
请参阅文档小节“扩展构造启发式”。有一个m多变量非笛卡尔替代,它的速度要快得多。如果这还不够好的话,还有分区搜索(只有CH)。不过,两者都有权衡之处。
还要检查你的分数计算速度是否太低(它至少应该在1000/秒以上)。
https://stackoverflow.com/questions/46587757
复制相似问题