Составление / расписание

Я работаю над инструментом для составления расписания для работника до месяца с учетом ограничений коммерческого и трудового законодательства. Несколько проблем и отличий от аналогичной проблемы:

  • Концепция смены содержит перерывы, разделенные на полчаса.
  • Не существует концепции полных 8 смен в качестве упомянутой аналогичной проблемы. Например, необходимо иметь 2 ресурса в 8 утра, 2,5 ресурса в 3 часа дня (например, дать перерыв на полчаса).
  • и регулярные ограничения, такие как часы в день, часы до перерыва, время перерыва...

Возможные решения - использовать солвер, известный как OR-Tools и Optaplanner. какие-нибудь намеки?

1 ответ

Решение

Если вы пользуетесь OptaPlanner и не хотите следовать плану Employee Rostering, присваивая сотрудникам 8-часовые смены (планирующие объекты) (плановая стоимость), из-за вашего 2-го ограничения, тогда вы можете попытаться следовать схеме Cheap Time Example, что-то вроде этого:

@PlanningEntity public class WorkAssignment {
     Employee employee;
     @PlanningVariable PotentialShiftStartTime startTime
     @PlanningVariable int durationInHalfHours
}

PotentialShiftStartTime - это практически любое время, когда смена может начинаться корректно, поэтому понедельник 8:00, понедельник 8:30, понедельник 9:00 и т. Д.

В этой свободной форме пространство поиска будет огромным, но есть приемы для улучшения масштабируемости (Ближний отбор, ранний выбор для CH, Ограниченный выбор для CH, ...).

Чтобы выйти из режима свободной формы (= уменьшить пространство поиска), вы можете комбинировать startTime и durationInHalfHours в PotentialShift, если, например, невозможно начать 8-часовую смену в 16:00 дня. Но убедитесь, что выигрыш огромен, прежде чем вводить эту сложность

В любом случае, проблема с этим дизайном заключается в определении того, сколько экземпляров WorkAssignment создать. Таким образом, вы, вероятно, захотите создать максимально возможное количество на одного сотрудника и работать с nullable=true игнорировать неиспользованные назначения.

Другие вопросы по тегам