Я написал задачу оптимизации в pyomo и мне нужно ограничение, которое содержит суммирование с переменной длиной: u_i_t [i, t] * T_min_run - sum (tnewnew in (t-T_min_run + 1) .. t-1) u_i_t [i, tnewnew] <= sum (tnew in t .. (t + T_min_run-1)) u_i_t [i, tnew] </p>
T - это моя фактическая временная шкала, и N моих машин обычно перебираютсят, но я должен гарантировать, что машины будут включены на определенное время.
def HP_on_rule(model, i, t):
return model.u_i_t[i, t]*T_min_run - sum(model.u_i_t[i, tnewnew] for tnewnew in range((t-T_min_run+1), (t-1))) <= sum(model.u_i_t[i, tnew] for tnew in range(t, (t+T_min_run-1)))
model.HP_on_rule = Constraint(N, rule=HP_on_rule)
Я надеюсь, что вы можете предоставить мне правильную формулировку в pyomo / python.
Проблемаявляется то, что t является работающей переменной, и я не знаю, как реализовать это в Python.tnew - это только переменная справки.Например, t = 6 (переменная), T_min_run = 3 (постоянная) и u_i_t является двоичным [00001111100000 ...], тогда я получаю: 1 * 3 - 1 <= 3 Как я уже сказал, я не знаю, как реализовать это в моемкод и текущая версия не работает.Ошибка типа: HP_on_rule () отсутствует 1 обязательный позиционный аргумент: 't' </p>