Планирование сотрудников Google Or-Tools. Условие не работает должным образом - PullRequest
1 голос
/ 11 марта 2019

Я использую тот пример планирования медсестры . У меня 3 сотрудника, 2 смены и 7 дней, и у меня есть условие, что если работник работает в смену 1, он / она не может работать на следующий день в смену 0. Вот мой код, и он не работает.

    for n in all_nurses:
      for d in all_days:
        model.Add(sum(shifts[(n, d, s)] for s in range(0,1))+sum(shifts[(n, (d+1)%6, s)] for s in range(1,2)) <= 1)

и это вывод . Медсестра 2 работала в день 0 и смену 1, а на следующий день также работала в смену 1

1 Ответ

1 голос
/ 12 марта 2019

В соответствии с вашими ограничениями:

for n in all_nurses:
    for d in all_days:
        model.Add(sum([shifts[(n, d, 1)], shifts[(n, (d+1)%7, 0)]]) <= 1)

Лучшая формулировка будет

for n in all_nurses:
    for d in all_days:
        model.AddBoolOr([shifts[(n, d, 1)].Not(), shifts[(n, (d + 1) % 7, 0)].Not()])

ref: https://github.com/google/or-tools/blob/aa0c6c42a523ee4c23633585b86fb6d3e090f8c8/ortools/sat/samples/bool_or_sample_sat.py#L23-L28

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...