Сгруппируйте сущность x в неопределенное количество групп с ограничениями группировки z, используя OptaPlanner - PullRequest
2 голосов
/ 20 февраля 2020

Я пытаюсь смоделировать проблему с помощью OptaPlanner, но не могу найти моделирование. (Я начинаю с OptaPlanner).

Моя проблема заключается в следующем:

  • У меня есть x номеров объектов с именем Process в качестве ввода
  • Я хочу сгруппировать Process в неопределенные числа (назовем его y) из Group.
  • У меня есть z критериев для группировки в качестве ввода

Я хочу иметь минимальное число Group с максимальным числом Process в каждом Group и все Process одного и того же Group совместимы (по критериям).

Ниже приведено несколько примеров критериев:

  • Process имеет поле name, ограничение может быть Process must have name starting with 'a'
  • Process имеет поле code, ограничение может быть Process must have same code
  • Process имеет поля dateMin и dateMax, ограничение может быть dateMin and dateMax overlap between Process

Пример: у меня есть 5 Process

  • P1 (name = «ab», код = 1)
  • P2 (имя = «a c», код = 2)
  • P3 (имя = «ad», код = 1)
  • P4 (имя = "ba", код = 1)
  • P5 (имя = "ca", код = 3)

Я хочу т o рассчитать оценку для следующей комбинации, используя приведенные выше примеры критериев (P1, P2, P3), (P1, P3, P4), (P5). Все остальные комбинации должны быть исключены как несовместимые

. Есть ли способ сделать это с помощью OptaPlanner. Какой подход я должен изучить, чтобы попытаться решить мою проблему.

1 Ответ

2 голосов
/ 21 февраля 2020

Звучит, в основном, как проблема CloudBalancing. Возьмите этот пример, переименуйте Computer в GroupProcess останется Process).

Тогда вы можете сделать потоки ограничений, такие как

// Process have field code, the constraint can be Process must have same code
from(Process)
.groupBy(Process::getComputer, countDistinct(Process::getCode)
.filter((computer, codeCount) -> codeCount > 1)
.penalize(...);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...