Не нужно добавлять цикл.
Когда в вашем ограничении есть элементы, которые являются «для всех элементов в ...», Pyomo просто требует, чтобы вы добавили Set
s, которые вы хотите перебрать в строке построения Constraint
.
model.NodeAConstraint=Constraint(model.set_of_arcs_A, model.set_of_node_N, rule=NodeA)
И ваше правило должно включать a
и n
в качестве параметров (i
, похоже, уже используется в вашей функции).
def NodeA(model, a, n):
k = sum(
model.ArcVar[i] * node_arc_matrix[i,a]
for i in model.ArcVar
)
return k == 2 * model.NodeVar[n]
Обратите внимание, куда я положил a
и n
в предыдущем коде. Это также должны быть параметры для вашей функции. Я пытался заменить каждый 0
на a
и каждый 1
на n
, если я правильно понял ваши потребности.
Ссылка на документацию здесь: https://pyomo.readthedocs.io/en/stable/pyomo_modeling_components/Constraints.html