Моделирование проблемы планирования с ограничением python
У меня есть проблема, когда мне нужно назначить некоторые переменные для использования ресурса, чтобы каждый рабочий всегда выполнял какую-то работу. Допустим, у меня есть список рабочих
w = {w1,w2,w3,...}
и некоторые ресурсы
r = {r1,r2,..}
. Затем у меня также есть список диапазонов времени, например
06:00 - 12:00
. Каждый
worker
имеет по крайней мере один диапазон, но рабочий может иметь более одного (не перекрывающихся).
Небольшой пример будет примерно таким:
w1 00:00 - 12:00 [r1,r2,r3]
w1 12:00 - 13:00 [r4,r6]
w2 00:00 - 12:00 [r1]
И решение может быть
w1 00:00 - 12:00 r2
,
w1 12:00 13:00 r4
,
w2 00:00 - 12:00 r1
.
Пока все хорошо, но тогда я должен добавить некоторые ограничения, например, если
w_i
использует
r_j
,
w_k
нельзя использовать
r_l
. Также у меня есть ограничения, подобные этому, связанные со временем.
Моя первая идея была
from constraint import *
problem = Problem()
problem.addVariable("w1", ["r1", "r2", "r3", "r4"])
problem.addVariable("w2", ["r1", "r2", "r3"])
problem.addVariable("w3", ["r4", "r5"])
problem.addVariable("w4", ["r7", "r9", "r10"])
Но я не знаю, как добавить сюда ограничение по времени, а также мне нужно ссылаться на рабочие в зависимости от времени. Я думал, что добавление к имени переменной времени может сработать, но это был беспорядок, и я не знаю, есть ли способ получить доступ к именам переменных, чтобы добавить ограничение. Это также не имеет смысла.
Обратите внимание, что я использую
python-constraint
, я бы обычно использовал
Prolog
для чего-то вроде этого.