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

Pyomo建模:电解槽LCOH最小化目标函数非线性问题求助

电解槽LCOH最小化Pyomo模型报错求助

我正在构建模型以最小化电解槽的LCOH(平准化氢气成本),输入为小时电价,需根据产量判断是否值得生产,其余初始参数为常量。LCOH计算公式为:
(投资成本 + 可变成本) / 总产量
其中投资成本固定,可变成本由生产时段决定。

尝试将固定成本纳入分子、用决策变量求和表示可变成本时,出现目标函数非线性报错。我尝试了两种目标函数定义方式均失败:

  • 第一种方式触发NameError,提示变量t未定义;
  • 第二种方式使用GLPK求解时,因目标函数含非线性项无法写入LP格式,抛出ValueError。

第一种实现代码及报错

from pyomo.environ import *

model = ConcreteModel()
model.T = RangeSet(8760)  # 全年小时数
model.price = Param(model.T, initialize=lambda m, t: 0.05 + 0.03*sin(t/100))  # 示例小时电价
model.invest_cost = Param(initialize=1000000)  # 固定投资成本
model.prod = Var(model.T, domain=NonNegativeReals)  # 各时段氢气产量

# 目标函数定义(报错点)
model.obj = Objective(expr=(model.invest_cost + sum(model.price[t] * model.prod[t] for t in model.T)) / sum(model.prod[t] for t in model.T), sense=minimize)

报错信息:
NameError: name 't' is not defined

第二种实现代码及报错

from pyomo.environ import *

model = ConcreteModel()
model.T = RangeSet(8760)
model.price = Param(model.T, initialize=lambda m, t: 0.05 + 0.03*sin(t/100))
model.invest_cost = Param(initialize=1000000)
model.prod = Var(model.T, domain=NonNegativeReals)
model.total_var_cost = Var(domain=NonNegativeReals)
model.total_prod = Var(domain=NonNegativeReals)

# 约束:计算总可变成本和总产量
model.var_cost_con = Constraint(expr=model.total_var_cost == sum(model.price[t] * model.prod[t] for t in model.T))
model.total_prod_con = Constraint(expr=model.total_prod == sum(model.prod[t] for t in model.T))

# 目标函数定义(报错点)
model.obj = Objective(expr=(model.invest_cost + model.total_var_cost) / model.total_prod, sense=minimize)

报错信息:
ValueError: Cannot write LP format file. The objective has nonlinear terms. GLPK only supports linear models.

恳请协助解决该问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 21:25:53