Я смотрю на пример планирования собраний 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. Есть ли у вас какие-либо предложения?