使用多个规划实体进行drools评分
我正在尝试为OptaPlanner开发Drools分数,以最大限度地创建类似的成对运输运行 规划实体是其中的500个:使用多个规划实体进行drools评分,drools,optaplanner,Drools,Optaplanner,我正在尝试为OptaPlanner开发Drools分数,以最大限度地创建类似的成对运输运行 规划实体是其中的500个: 鲁尼德 电流指示器-包含AM或PM 位置 计划变量包含成对运行的可能性-其中12000个: runID1 地点1 runID2 地点2 安培表 更高的排名分数用于最大化使用runID的成对运行,该规则运行良好,因为它解析为特定的runID 我需要制定一个较低的排名规则,最大化AM和PM中成对位置的平衡数量。因此,在AM中配对的两个位置应在PM中的相同位置配对 // At
- 鲁尼德
- 电流指示器-包含AM或PM
- 位置
- runID1
- 地点1
- runID2
- 地点2
- 安培表
// 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);
如何配置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);
在6.1文档中,查找“公平性/负载平衡分数约束”。我也这么想
因为成对运行是一种软约束(显然),所以我不会更改您的模型。(如果它们是硬约束,人们可以提出一个模型,使一个规划实体具有2个以前的静态规划变量,但即使这样,我也不推荐。)我在上面的原始问题中添加了一个说明和示例代码。叹气。请参阅我答案的第一句:文档=澄清,视频=optplanner示例中的示例名称。谢谢。我想我现在明白了,我会尝试这个解决方案。我花了一段时间才这样想。非常感谢您的耐心。