Optaplanner 流口水,惩罚一个 1 个实体
Optaplanner drools, penalize one 1 entity
我使用 optaplanner 来创建包含不同课程的时间计划。
我需要帮助解决的一个重要规则是 minimizing/cut 每节课之间的停顿。
我基本上使用时间粒度模式,我需要一个规则来最小化两节课之间的时间粒度。
假设我有一个课程 A。我怎样才能找到之前最近的课程 B(在时间粒度上)?
我的临时解决方案是使用匹配课程 A 和同一天(且早于课程 A)的课程集合的规则。这似乎有效,但当我惩罚课程时,它也会惩罚集合中的所有课程。
所以我的下一个问题是:
基于匹配多个条目的规则匹配,我可以只惩罚其中一个吗?
这是我想要实现的示例:
rule "Horizontal conflict"
when
$queen1: Queen($id : id, row != null, $i : rowIndex)
$queen2: Queen(id > $id, rowIndex == $i)
then
//scoreHolder.addConstraintMatch(kcontext, -1);
only penalize $queen1
end
```
不知道你模型的细节,我假设 Lesson
有一个 startDate
时间粒度:
when
Lesson($firstStart: startDate)
Lesson($secondStart: startDate, startDate > $firstStart)
not Lesson(start > $firstStart, start < $secondStart)
then
// your penalty is $secondStart - $firstStart
end
您必须根据您的具体要求调整边界条件,但主要技巧是 not
- 您正在寻找一对中间没有课程的课程。
我使用 optaplanner 来创建包含不同课程的时间计划。 我需要帮助解决的一个重要规则是 minimizing/cut 每节课之间的停顿。 我基本上使用时间粒度模式,我需要一个规则来最小化两节课之间的时间粒度。
假设我有一个课程 A。我怎样才能找到之前最近的课程 B(在时间粒度上)?
我的临时解决方案是使用匹配课程 A 和同一天(且早于课程 A)的课程集合的规则。这似乎有效,但当我惩罚课程时,它也会惩罚集合中的所有课程。
所以我的下一个问题是: 基于匹配多个条目的规则匹配,我可以只惩罚其中一个吗? 这是我想要实现的示例:
rule "Horizontal conflict"
when
$queen1: Queen($id : id, row != null, $i : rowIndex)
$queen2: Queen(id > $id, rowIndex == $i)
then
//scoreHolder.addConstraintMatch(kcontext, -1);
only penalize $queen1
end
```
不知道你模型的细节,我假设 Lesson
有一个 startDate
时间粒度:
when
Lesson($firstStart: startDate)
Lesson($secondStart: startDate, startDate > $firstStart)
not Lesson(start > $firstStart, start < $secondStart)
then
// your penalty is $secondStart - $firstStart
end
您必须根据您的具体要求调整边界条件,但主要技巧是 not
- 您正在寻找一对中间没有课程的课程。