【问题标题】:Construction Heuristics takes long time构建启发式需要很长时间
【发布时间】: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


    【解决方案1】:

    请参阅文档部分“Scaling Construction Heuristics”。有一个更快的 multi-vars 非笛卡尔替代方案。如果这还不够帮助,还有分区搜索(只有 CH)。两者都有权衡。

    还要检查你的分数计算速度是不是太低(至少应该在 1000/秒以上)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-06
      • 1970-01-01
      • 2017-10-24
      • 2018-01-17
      • 1970-01-01
      • 2019-05-05
      • 2014-05-30
      相关资源
      最近更新 更多