Pyomo基础学习笔记【2】:定义了多个目标函数
在 Pyomo 中,如果模型中定义了多个目标函数,求解器会使用最后一个定义的目标函数作为优化目标。这是因为在 Pyomo 中,目标函数的定义会覆盖之前的定义。
示例说明
from pyomo.environ import *
# 创建一个具体的模型
model = ConcreteModel()
# 定义变量
model.x = Var(initialize=1.5)
# 定义第一个目标函数
model.obj1 = Objective(expr=model.x**2, sense=minimize)
# 定义第二个目标函数
model.obj2 = Objective(expr=-model.x**2, sense=maximize)
# 查看模型中的目标函数
print(model.component_objects(Objective, active=True))
输出结果
<pyomo.core.base.objective.Objective at 0x7f8b8c6d8130>
在这个例子中,虽然定义了两个目标函数 obj1 和 obj2,但求解器只会使用最后一个定义的目标函数 obj2,因为 obj2 覆盖了 obj1。
如何指定使用哪个目标函数
如果你希望明确指定使用哪个目标函数,可以通过以下方式:
- 设置目标函数的
active属性:- 将不需要的目标函数设置为非活动状态(
active=False),并确保需要的目标函数处于活动状态(active=True)。
- 将不需要的目标函数设置为非活动状态(
from pyomo.environ import *
# 创建一个具体的模型
model = ConcreteModel()
# 定义变量
model.x = Var(initialize=1.5)
# 定义第一个目标函数
model.obj1 = Objective(expr=model.x**2, sense=minimize)
# 定义第二个目标函数
model.obj2 = Objective(expr=-model.x**2, sense=maximize)
# 设置 obj1 为活动目标函数
model.obj1.activate()
model.obj2.deactivate()
# 查看模型中的活动目标函数
print(model.component_objects(Objective, active=True))
输出结果
<pyomo.core.base.objective.Objective at 0x7f8b8c6d8130>
在这个例子中,我们通过 activate() 和 deactivate() 方法显式地设置了目标函数的活动状态,确保 obj1 是活动的目标函数。
总结
在 Pyomo 中,如果你定义了多个目标函数,求解器会使用最后一个定义的目标函数作为优化目标。为了避免混淆,你可以通过设置目标函数的 active 属性来明确指定使用哪个目标函数。

浙公网安备 33010602011771号