Добавить условие в Google CP-Sat Solver Or-Tools - PullRequest
0 голосов
/ 05 августа 2020

Я пробовал следующее, но похоже, что это не работает. Любые идеи? Цените помощь.

for j in range(anz_current_pruef):
  model.Add(sum(x[i][j] for i in range(anz_current_role)) < 2 if sum(
   planung[(i, j)][t] * x[i][j] for i in range(anz_current_role) for t in
   range(time_step_start, time_step_end + 1)) < 10)

1 Ответ

1 голос
/ 06 августа 2020

вы должны понимать, что sum(...) < 10 создаст объект python, который представляет ограничение для базового решателя.

При использовании в контексте if sum(...) < 10 он всегда будет оценивать как True поскольку объект не является None.

По той же причине использование конструкций min() и max() python не работает, поскольку они оцениваются перед передачей в модель.

Как указано Страдивари , вам необходимо создать промежуточную логическую переменную, которая будет True, если и только если sum(...) < 10, а затем использовать ее как литерал принудительного исполнения для первой части вашего уравнения.

...