Я пытаюсь реализовать 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
я не могу перебирать отдельные целевые контейнеры.