Поиск в табу: как реализовать ограничение "работник, работающий в парах"
Я разрабатываю автоматизированное приложение для планирования сотрудников, используя поиск в Tabu с ограничениями.
У меня уже есть много ограничений (минимальное количество рабочих часов для сотрудников, количество сотрудников, необходимое на смену, сотрудники, которые не должны работать вместе,...).
Автоматизированный планировщик пробует разные ходы на каждой итерации (добавление / удаление / замена сотрудников), оценивает ограничения для всех сгенерированных решений (1 решение на ход) и выбирает решение с наименьшим штрафом.
Сейчас я пытаюсь реализовать ограничение, например, "если сотрудник А запланирован на смену, то сотрудник Б также должен быть запланирован на ту же смену".
Моя проблема в том, что я не знаю, как это реализовать.
Скажем, текущее движение состоит в том, чтобы запланировать сотрудника A на смену без штатов S. Если ограничение, которое я пытаюсь создать, будет оценено, то это решение получит штраф сразу, потому что сотрудник A запланирован на S без сотрудника B. Следовательно, это решение никогда не может быть выбрано, даже если оно хорошее, и ни один из сотрудников A или B не приступит к работе.
У кого-нибудь есть идеи?
Спасибо
1 ответ
Некоторые предложения:
Наказание за смену без штатов должно быть больше, чем за непарных друзей.
Вы можете имитировать отжиг - так, чтобы иногда принималось кратковременное увеличение штрафа.
У вас может быть другой вид движения - движение, которое добавляет / удаляет больше людей и предпочитает перемещать "друзей" вместе.