Вы хотите реализовать ограничение:
x(t-1) = 0 and x(t) = 1 ==> x(t)+...+x(t+n-1) = n
Один из способов:
x(t)+...+x(t+n-1) >= n*(x(t)-x(t-1))
Примечания:
необходимо повторить это ограничение для каждого t
.
Несколько лучшая версия:
x(t+1)+...+x(t+n-1) >= (n-1)*(x(t)-x(t-1))
Существует также дезагрегированная версия этого ограничения это может повысить производительность (в зависимости от решателя: некоторые решатели могут выполнить это разделение автоматически).
В начале и в конце периода планирования все может стать интересным. Например, машина запущена в t=-1
.
Обновление:
Другой подход - просто ограничить «начало» задания до 1. Т.е. разрешить только комбинацию
x(j,t-1) = 0 and x(j,t) = 1
для данной работы j. Это можно сделать аналогичным образом:
start(j,t) >= x(j,t)-x(j,t-1)
sum(t, start(j,t)) <= 1
0 <= start(j,t) <= 1