Определение общего уравнения в pyomo

Я использую pyomo и хочу определить общее уравнение (с общими переменными), а затем заменить конкретные переменные, что-то вроде этого:

def Variable_trap_eq(model, variable, f_variable, i):
    return  0 == variable[i] - variable[i+1] + (m.step/2.0)*( f_variable[i] + f_variable[i+1])

m.Variable_trap_eq_const = Constraint(m.N1, rule = Variable_trap_eq(x, f_x))
m.Variable_trap_eq_const = Constraint(m.N1, rule = Variable_trap_eq(y, f_y))

Примерно так, где в первом ограничении: variable= model.x, и f_variable = model.f_x, а во втором: variable= model.y, и f_variable = model.f_y.

Любая помощь?

Спасибо, Мария


person Michael    schedule 21.01.2017    source источник


Ответы (1)


Я думаю, что самый простой способ сделать это — определить два ограничивающих правила и третью функцию, которую затем будут вызывать эти два правила. Например.,

def Variable_trap_eq(model, variable, f_variable, i):
    return  0 == variable[i] - variable[i+1] + (m.step/2.0)*(f_variable[i] + f_variable[i+1])

def Variable_trap_eq_const1_rule(model, i):
    return Variable_trap_eq(model, model.x, model.f_x, i)
m.Variable_trap_eq_const1 = Constraint(m.N1, rule=Variable_trap_eq_const1_rule)

def Variable_trap_eq_const2_rule(model, i):
    return Variable_trap_eq(model, model.y, model.f_y, i)
m.Variable_trap_eq_const2 = Constraint(m.N1, rule=Variable_trap_eq_const2_rule)
person Gabe Hackebeil    schedule 21.01.2017