Улучшить скорость вложенных циклов для ограничения pyomo

Я пытаюсь добавить этот тип ограничения "constraint1" в мою модель Pyomo, циклически перебирая (симметричную) матрицу размера "n" и выполняя проверку, учитывая параметр a(i,j):

model.con1=ConstraintList()
for i in range(1,n):
    for j in range(1,i):
        if model.a[i,j]==1:
            model.con1.add((model.x[i] + model.x[j] )  <= 1 )

Код, кажется, работает, но я хотел бы знать, есть ли более вычислительно эффективный способ написать то же самое.

Спасибо

1 ответ

Вы можете попробовать следующее, чтобы увидеть, будет ли это работать лучше:

model.n = RangeSet(n)
model.triangular = Set(within=model.n * model.n, filter=lambda i, j: j < i)

@model.Constraint(model.triangular)
def con(m, i, j):
    if model.a[i, j] == 1:
        return model.x[i] + model.x[j] <= 1
    else:
        return Constraint.Skip
Другие вопросы по тегам