我正在尝试实现一个startComeDate: moment().add(1, 'M'),
endComeDate: moment().add(1, 'M').add(5, "days"),
startResiDate: moment().add(1, 'M'),
endResiDate: moment().add(1, 'M').add(5, "days")
,它看起来可以在同一可行集上迭代地优化多个目标函数。
由于我希望在周围的脚本中具有最大的透明度,更确切地说,是要反复激活不同目标函数的脚本,因此我希望将所有目标函数包含在模型的单个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)
中,我无法遍历各个目标容器。
答案 0 :(得分:0)
您可以按规则执行此操作:
def _obj(m, j):
if j < 3:
return m.x**2
else:
return m.x+1
m.obj = Objective([1,2,3,4], rule=_obj)
在将模型发送到求解器之前,只需确保停用一个目标即可。