Drools:检查列表元素是否是连续的整数范围
Drools: Check if list elements are a continuous range of integers
Optaplanner 新手。
我在计划实体和计划变量之间建立了多对多关系,因此创建了一个中间体 class,这就是计划实体。
现在,我想编写一个规则,将 'n' 个对象分配给一个变量,我需要检查分配的所有 'n' 个对象是否具有连续的 ID。
public class ObjectA {
private int ID;
}
@PlanningEntity
public class ResourceAssignment {
private ObjectA myObjectA;
private ObjectB myObjectB;
}
我获取所有分配对象的规则:
rule "continuous objects assigned to a variable"
when
$objectb: ObjectB()
$ObjectaAssignedToObjectb : Object() from accumulate(ResourceAssignment(myObjectB == $objectb, $Assignments: myObjectA.getID),
collectList($Assignments)
)
then
//scoreHolder.addHardConstraintMatch(kcontext, -1);
end
以上规则为我提供了分配给 ObjectB 的所有 ObjectA 的列表。我只需要确保分配给 ObjectA 的所有 ID 都是连续的整数范围。开始和结束可以是任何东西,只要是连续的即可。
怎么样:
when
Assignment($i : index)
not Assignment(index == $i + 1)
Assignment(index > $i + 1)
then
...
Optaplanner 新手。
我在计划实体和计划变量之间建立了多对多关系,因此创建了一个中间体 class,这就是计划实体。
现在,我想编写一个规则,将 'n' 个对象分配给一个变量,我需要检查分配的所有 'n' 个对象是否具有连续的 ID。
public class ObjectA {
private int ID;
}
@PlanningEntity
public class ResourceAssignment {
private ObjectA myObjectA;
private ObjectB myObjectB;
}
我获取所有分配对象的规则:
rule "continuous objects assigned to a variable"
when
$objectb: ObjectB()
$ObjectaAssignedToObjectb : Object() from accumulate(ResourceAssignment(myObjectB == $objectb, $Assignments: myObjectA.getID),
collectList($Assignments)
)
then
//scoreHolder.addHardConstraintMatch(kcontext, -1);
end
以上规则为我提供了分配给 ObjectB 的所有 ObjectA 的列表。我只需要确保分配给 ObjectA 的所有 ID 都是连续的整数范围。开始和结束可以是任何东西,只要是连续的即可。
怎么样:
when
Assignment($i : index)
not Assignment(index == $i + 1)
Assignment(index > $i + 1)
then
...