You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pyomo调用Gurobi求解器报错:多目标定义问题求助

问题排查与解决:Pyomo多目标函数报错

错误原因

你遇到的ValueError: More than one active objective defined是因为这段代码:

model.obj = Objective(model.T, rule=object_rule, sense=maximize)

当给Objective()传入索引集合model.T时,Pyomo会为集合里的每个时间周期a生成独立的目标函数obj[1]、obj[2]...,而线性规划求解器(包括Gurobi)只允许一个活跃目标函数,因此无法生成合法的LP文件。你的核心需求是最大化全周期总发电量,而非每个周期单独设目标,所以需要调整目标规则的定义。

修正代码

步骤1:修改目标规则为求和形式

将带索引的规则改为对所有时间周期的发电量求和:

def object_rule(model):
    # 对所有时间周期的发电量求和
    return sum(K * model.Q[a] * (model.H[a] + model.H[a + 1]) / 2 * 8760 * 3600 / 1000 for a in model.T)
# K为系数,Q为流量,H为水头,a代表时间周期

步骤2:重新定义Objective

去掉索引集合model.T,直接使用无索引的目标规则:

model.obj = Objective(rule=object_rule, sense=maximize)

额外检查

  • 确保模型中没有其他已定义的Objective对象,如果之前定义过model.obj或其他目标,需删除以避免重复。
  • 确认model.T集合的范围,保证a + 1不会超出索引边界(比如model.T是1到N时,a最大取N-1,否则会出现索引错误)。

内容的提问来源于stack exchange,提问作者dut_old_fish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 16:26:26