Является ли длина сдвига тем, что задано, т.е. параметром модели, или тем, что вы хотите, чтобы ваша модель решала, например, переменной решения?
В зависимости от случая вам потребуется определить либо параметр, либо или переменная, соответственно, проиндексированная за [день, смена], чтобы представить это. Если, например, мы назовем это shift_len[day, shift]
, тогда ваше ограничение станет:
for worker in workers:
model.constraints.add(
52 >= sum(shift_len[day, shift] * model.works[worker, day, shift] for day in date for shift in days_shifts[day]))
Обратите внимание, что если это переменная решения, то ваша модель становится нелинейной из-за произведения двух переменных (есть все же способы линеаризации продукта, хотя). Если это параметр, то ваша модель остается линейной.