【发布时间】:2019-07-02 08:36:21
【问题描述】:
我正在尝试实现一个AbstractModel,它希望在同一个可行集上迭代地优化多个目标函数。
由于我希望在周围的脚本中具有最大的透明度,更准确地说是迭代激活不同目标函数的脚本,我希望将所有目标函数包含在模型的单个 obj 属性中。我该怎么做呢?
由于有两种类型的目标在不同的集合中被索引,我尝试分别创建这两种类型,然后将这两种类型合并到一个ObjectiveList 中。
这将导致以下结果:
import pyomo.environ as pyo
model=pyo.AbstractModel()
model.i=pyo.Set(initialize=[1,2])
model.a=pyo.Set(initialize=[(1,2),(2,1)])
model.x=pyo.Var()
model.obj=pyo.ObjectiveList()
def obj_type1(model,i):
return x**2
obj_type1=pyo.Objective(model.i,rule=obj_type1)
for key, new_obj in obj_type1.items():
model.obj.add(new_obj)
def obj_type2(model,a):
return x+1
obj_type2=pyo.Objective(model.a,rule=obj_type2)
for key, new_obj in obj_type2.items():
model.obj.add(new_obj)
这不起作用,因为在 AbstractModel 中,我无法遍历各个目标容器。
【问题讨论】:
标签: python scripting mathematical-optimization pyomo