0

我正在尝试为 OptaPlanner 开发 Drools 分数,以最大限度地创建类似的配对运输运行。

计划实体是一个运行 - 其中 500 个:

  • 运行ID
  • amPmIndicator - 包含 AM 或 PM
  • 地点

计划变量包含成对的运行可能性 - 其中 12,000 个:

  • 运行 ID1
  • 位置1
  • 运行ID2
  • 位置2
  • amPm指标

较高的排名分数用于最大化使用 runID 的配对运行,并且该规则工作正常,因为它解析为特定的 runID。

我需要制定一个较低的排名规则,以最大化 AM 和 PM 中配对位置的平衡数量。因此,在 AM 中配对的两个位置应该在 PM 中的相同位置配对。

如何配置 Drools 分数来实现这一点?似乎需要对分配给两个计划实体的 AM 的计划变量进行计数,然后与与 AM 计划实体具有相同位置的类似 PM 计划变量的计数进行比较。

或者有更好的建模方法吗?

非常感谢任何帮助。

我相信我的问题更多是关于 DRL 语言功能以及如何执行聚合。这是我写的规则,但它只确保 PM 中只存在一对。

// Attempts to make certain that a morning pairing at a Location level exists in the morning and afternoon 
// This rule should attempt to count Location pairs in AM and PM rule
"matchedLocationsAmToPm"
        when
            Run(amPm == "AM" && earlyLate == "EARLY", $amPair : pair, $earlyLocationId : LocationId)
            Run(amPm == "AM" &&  earlyLate == "LATE" && pair == $amPair, $lateLocationId : LocationId)
            Run(amPm == "PM" &&  earlyLate == "EARLY" && LocationId == $earlyLocationId, $pmPair : pair)
            not Run(amPm == "PM" &&  earlyLate == "LATE" && LocationId == $lateLocationId && pair == $pmPair)
        then
            scoreHolder.addSoftConstraintMatch(kcontext, -1000);
4

1 回答 1

0

在 6.1 文档中,查找“公平/负载平衡分数约束”。另外,请参阅此视频

因为配对运行是软约束(显然),我不会改变你的模型。(如果它们是硬约束,人们可能会主张一个模型让一个规划实体有 2 个previousStandstill规划变量,但即便如此我也可能不推荐它。)

于 2014-05-17T07:25:28.413 回答