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

使用Pyomo求解家庭用电碳排放最小化线性优化问题的异常排查

问题根因分析
  • 核心错误1:功率平衡约束(lastdeckung)中多余使用了sum()函数:你的需求是每个时间步独立满足功率平衡,即t时刻的光伏出力 + t时刻电网购电量 = t时刻用电需求,你加了sum()后会把全周期8个时间步的供电侧数值全部累加,导致同一个求和结果需要同时匹配8个不同的负荷值,模型必然不可行。
  • 次要写法问题:目标函数定义传入了多余的形参t:全局优化目标是全周期碳排放总和,不需要按时间步迭代构造,传入t属于无用参数,且和内部sum循环的变量名重名,属于不规范写法。
修复后的代码
import pandas as pd
from pyomo.environ import ConcreteModel, RangeSet, Param, Var, NonNegativeReals, Objective, Constraint, minimize

# 读取数据部分保持不变
data = pd.read_excel(Stromsimulation, skiprows = 1, usecols=('A:E'), index_col = 0)
df = pd.DataFrame(data)
daten = df.to_dict()
model = ConcreteModel()

model.n = RangeSet(1, 8)

model.verbrauch = Param(model.n, initialize = daten['Verbrauch'])
model.eigenproduktion = Param(model.n, initialize = daten['Eigenproduktion'])
model.stromimport = Param(model.n, initialize = daten['Import'])
model.emissionen = Param(model.n, initialize = daten['CO2-Emissionen'])

model.x = Var(model.n, within = NonNegativeReals)

# 目标函数去掉多余的形参t
def emissionsreduzierung(model):
  return sum(((model.x[t] * model.stromimport[t]) * model.emissionen[t] for t in model.n))
model.emissionsreduzierung = Objective(rule = emissionsreduzierung, sense = minimize)

# 功率平衡约束去掉sum,只保留当前时间步t的计算
def lastdeckung(model, t):
  return model.eigenproduktion[t] + (model.stromimport[t] * model.x[t]) == model.verbrauch[t]
model.lastdeckung = Constraint(model.n, rule = lastdeckung)
修复效果说明

修改后每个时间步的约束会独立对应本时刻的供需平衡,不会出现全周期求和的问题,模型即可正常求解。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:15:07