我正在看OptaPlanner会议安排示例。有房间和人。我已经定义了每个房间的最小和最大容量,然后尝试实施一些规则。一个规则是不要超过最大容量,而我已经实现了以下规则:
rule "Max Quota"
when
$ma : MeetingAssignment( room != null,$city: city, $room:room, $roomCapacity : roomCapacity)
accumulate(
$m2 : MeetingAssignment(room != null,city==$city, calculateOverlap($ma) > 0, room.getRoomName() == $room.getRoomName());
$total : count($m2);
$total > $roomCapacity
)
then
scoreHolder.addMediumConstraintMatch(kcontext, -50000000);
end
正在工作。现在我要实现最小容量。例如,有四个房间,每个房间的最大容量为60,最小容量为20(或可以不同)。分配后,一个房间可容纳50人,第二个40,第三个60,最后一个只有10人。最后一个房间不超过20。我不想分配40、40、40、40之类的东西。最后一个房间超过20个就足够了。您有什么建议吗?
答案 0 :(得分:0)
将roomCapacity
重命名为roomMaximumCapacity
。然后添加roomMinimumCapacity
。然后添加一个约束规则来处理该问题。