Слюни правила для минимизации - любой другой способ? - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть Система планирования собраний . Я минимизирую количество комнат, используемых в нем, следующим образом:

rule "minimize #rooms used"
when
    $room : Room()
    exists MeetingAssignment(room==$room, meeting!=null)
then scoreHolder.addSoftConstraintMatch(kcontext, -10);  
end

, поэтому в итоге OptaPlanner скорее выберет go для комнаты, в которой уже назначено собрание, чем для свободного sh один.

Есть ли другой / лучший способ сделать это? Я объединяю много правил в бэкэнде - у меня нет правил "побочных эффектов" (обновлений и т. д. c) друг на друга, так что это выполнимо. и я хочу меньшее количество правил для быстродействия. я не вижу способа объединить это правило с другими.

есть идеи?

TIA.

1 Ответ

1 голос
/ 24 февраля 2020

A) Да, есть: балансировка нагрузки . В документах найдите главу о Справедливость (балансировка нагрузки AKA) и инвертируйте влияние этого результата на оценку.

Это будет стимулировать его проводить как можно больше собраний в одной комнате - сначала осушить малоиспользуемые комнаты, даже если это не сразу опустошит малоиспользуемую комнату (это будет легче сделать позже). Уловка 22 - это когда вы хотите выполнить балансировку нагрузки в пределах минимального количества комнат ...

B) Или не делать A) и вводить грубые движения, которые истощают комнаты. Начните с добавления движений смены столба, но этого явно недостаточно, поскольку они не распределяют нагрузку этой истощающей комнаты (все приземляется в одной комнате).

...