Есть ли способ назначить встречи комнатам в соответствии с минимальной вместимостью комнаты в примере планирования встреч OptaPlanner? - PullRequest
2 голосов
/ 09 июля 2019

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

1 Ответ

0 голосов
/ 10 июля 2019

Переименовать roomCapacity в roomMaximumCapacity. Затем добавьте roomMinimumCapacity. Затем добавьте правило ограничения, чтобы справиться с этим тоже.

...