Назначьте одну задачу одному клиенту в день в назначении задач Optaplanner - PullRequest
0 голосов
/ 16 июня 2020

Мне нужна помощь относительно изменений назначения задач Optaplanner, ниже представлена ​​полная информация о том же: -

У меня 70 задач, каждая задача занимает от 2 до 8 часов, которые определены для каждой задачи, приоритет каждой задача мала, и между сотрудниками и клиентами мало сходства, эти задачи связаны с 37 клиентами.

Мой вопрос в том, как я могу назначить эти задачи сотрудникам, чтобы, если задача клиента была назначена сотруднику, то в этот день другая задача этого клиента не может быть назначена тому же или другому сотруднику. Может ли кто-нибудь помочь с правилом drl или ограничением java для того же?

1 Ответ

0 голосов
/ 17 июня 2020

Не зная вашей модели данных, я собираюсь сделать некоторые предположения о доступных полях. Ограничение может выглядеть следующим образом:

.from(Task.class)
.ifExistsOther(Task.class, 
    Joiners.equal(Task::getCustomer), 
    Joiners.equal(Task::getDay))
.penalize("Two tasks for the same customer on the same day", ...)

Вам решать, насколько жестким должно быть наказание. Если вы хотите исключить эту ситуацию, вы должны сделать ее жестким ограничением - решение с нарушенным этим ограничением будет невозможно.

(EDIT) Существует также другой вариант, и он должен сделать ситуацию невозможной. в модели данных. Если вы создадите одну единицу планирования для каждой комбинации клиент + день, для одного клиента будет абсолютно невозможно выполнять больше задач за один день.

...