Планирование Optaplanner и теневые переменные для планирования задач работника

Прежде всего, для подсчета баллов я использую интерфейс Java EasyScoreCalculator и создаю свой решатель также с Java API (так как у меня / были проблемы с загрузкой конфигурации / ограничений из файла xml или drl внутри Подключаемый модуль Java OSGI)

Моя проблема:

Я хочу решить проблему планирования задач с несколькими специалистами.

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

Задачи начало и дату окончания должны быть запланированы на заданный диапазон дат.

Решение: я хочу оптимизировать общую рабочую нагрузку (мин.) всех работников.

В настоящее время у меня есть три переменных планирования:

  • назначенный работник
  • Дата начала
  • Дата окончания

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

Для этого я создал теневую переменную tasksToWork (List of Taks), для которой задача будет добавлена, когда ресурс будет назначен переменной планирования назначенному работнику.

В своем классе Java Score я просматриваю список и вычисляю для каждой задачи (у которой есть дата начала и окончания - не ноль) рабочее время рабочего в каждый день на основе доступного времени. Время работы меньше доступного времени нормально, время работы выше доступного приведет к softScore, а максимальное рабочее время дня к hardScore.

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

Также я считаю, что нельзя использовать шаблон проектирования планирования времени для моей проблемы (поправьте меня, если вы думаете иначе)

Так что, может быть, мне скажут,

  • можно ли подсчитать балл только тогда, когда все переменные планирования заданы?
  • какая-либо лучшая реализация планирования даты начала и окончания?
  • или расчет рабочего времени с возможной сверхурочной работой?
  • способ вычислить теневую переменную (рабочее время рабочего каждый день), только если установлены две зависимые переменные планирования (начальная и конечная дата задачи)?

Спасибо


person eldorado    schedule 18.04.2018    source источник


Ответы (1)


1) Любой калькулятор оценок должен уметь вычислять оценку полуинициализированного решения. В противном случае CH будет слепым, пока все не будет назначено - так что это в основном случайная инициализация (= плохая).

2) и 3) Я просто читал его по диагонали, поэтому я не вдавался в подробности, но смотрю на 2 примера: планирование заданий по проекту и распределение задач. Оба используют временную цепочку.

4) Да, это возможно. Предположим, что C зависит от A и B. Если A или B равно нулю, то C равно нулю.

person Geoffrey De Smet    schedule 19.04.2018