Optaplanner — Как смоделировать проблему планирования шаблонов временных интервалов, если определенные типы задач требуют меньше ресурсов, когда они запланированы в одном и том же слоте?

#optaplanner

Вопрос:

Я разрабатываю проблему планирования шаблонов ежедневных временных интервалов с приоритетом задач и постоянством ресурсов ежедневных смен.

  • Каждый продукт состоит из нескольких партий, и каждая партия состоит из последовательных задач (например, подготовкасмешиваниеобработка и т.д.), Которые должны быть запланированы.
  • Задачи потребляют единицы смены, и для каждого типа задач существуют ограничения на дневную смену.
  • Если две задачи подготовки одного и того же продукта запланированы на один и тот же день, они потребляют 1 единицу смены вместе, в то время как каждый из них по-прежнему использует 1 единицу смены, если они запланированы отдельно.
  • Последующие задачи (например, смешивание или обработка) одних и тех же продуктов не выиграют от совместного планирования в один и тот же день. Если для одной задачи смешивания используется 1 единица смены, то для двух задач смешивания, запланированных на один и тот же день, потребуется в общей сложности 2 единицы смены.

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

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

Мы будем признательны за любую подсказку или помощь. Спасибо.

Ответ №1:

Я решил эту проблему, используя теневую переменную «modifiedProcessTime» в объекте планирования и обновленную пользовательским списком переменных, когда две или более задач из одного и того же продукта одного и того же типа запланированы на один и тот же день. Первая задача сохраняет свое первоначальное время обработки, в то время как другие задачи устанавливаются равными нулю.