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
相关产品推荐
相关产品推荐

