Pyomo 和动态 objective 函数创建
Pyomo and dynamic objective function creation
我想根据 pandas 数据框中的行迭代添加到 Pyomo objective 函数。我根据数据框的大小创建了变量:
model.A = Var(range(0,len(arc_decvars)), initialize=0,within=Integers,bounds=(0,5))
其中 arc_decvars
是与对应的 pandas 数据帧系列顺序相同的列表。
我想做的是像这样创建一个 objective 函数,但不必在代码中明确指定索引:
model.ObjFcn = ( df.coefficient[0] * model.A[0] * ( 1- df.coefficient[0] * model.A[0]) ) + ( df.coefficient[1] * model.A[1] * ( 1- df.coefficient[1] * model.A[1]) +...+ ( df.coefficient[999] * model.A[999] * ( 1- df.coefficient[999] * model.A[999]) )
知道怎么做吗?
---- 跟进:
我正在添加一系列这样的约束,每个节点一个:
def NodeA(model):
k = sum(
model.ArcVar[i] * node_arc_matrix[i,0]
for i in model.ArcVar
)
return k == 2*model.NodeVar[1]
model.NodeAConstraint=Constraint(rule=NodeA)
其中node_arc_matrix中的0索引指的是Node_A对应的列。我可以跨 i(弧)和 j(节点)创建约束,而不是手动为每个节点创建约束吗?
尝试在求和公式中使用 Python 列表理解。
考虑到 df.coefficient
和 model.A
将 arc_decvars
作为域并且 arc_decvars
在 Pyomo Set
中,您可以创建您的 objective 以这种方式运行:
model.ObjFcn = sum(
df.coefficient[i] * model.A[i] * ( 1- df.coefficient[i] * model.A[i])
for i in model.arc_devcars
)
我想根据 pandas 数据框中的行迭代添加到 Pyomo objective 函数。我根据数据框的大小创建了变量:
model.A = Var(range(0,len(arc_decvars)), initialize=0,within=Integers,bounds=(0,5))
其中 arc_decvars
是与对应的 pandas 数据帧系列顺序相同的列表。
我想做的是像这样创建一个 objective 函数,但不必在代码中明确指定索引:
model.ObjFcn = ( df.coefficient[0] * model.A[0] * ( 1- df.coefficient[0] * model.A[0]) ) + ( df.coefficient[1] * model.A[1] * ( 1- df.coefficient[1] * model.A[1]) +...+ ( df.coefficient[999] * model.A[999] * ( 1- df.coefficient[999] * model.A[999]) )
知道怎么做吗?
---- 跟进:
我正在添加一系列这样的约束,每个节点一个:
def NodeA(model):
k = sum(
model.ArcVar[i] * node_arc_matrix[i,0]
for i in model.ArcVar
)
return k == 2*model.NodeVar[1]
model.NodeAConstraint=Constraint(rule=NodeA)
其中node_arc_matrix中的0索引指的是Node_A对应的列。我可以跨 i(弧)和 j(节点)创建约束,而不是手动为每个节点创建约束吗?
尝试在求和公式中使用 Python 列表理解。
考虑到 df.coefficient
和 model.A
将 arc_decvars
作为域并且 arc_decvars
在 Pyomo Set
中,您可以创建您的 objective 以这种方式运行:
model.ObjFcn = sum(
df.coefficient[i] * model.A[i] * ( 1- df.coefficient[i] * model.A[i])
for i in model.arc_devcars
)