2017-01-21 3 views
0

Я использую 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.

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

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

ответ

0

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

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)