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

PyPSA添加孤立储能与链路后LOPF优化耗时异常求助

问题描述

我有一个包含母线、线路、带max_pu/min_pu曲线的发电机、带p_set的负荷及快照的AC网络,无变压器,通过import_from_csv导入数据,bus.csv中包含平衡母线。使用PyPSA v0.23执行network.lopf()进行机组组合(调度)优化,无容量扩展需求,原网络可在30秒内完成优化并实现所有母线功率平衡,代码如下:

try:
    network.lopf(network.snapshots)
except Exception as e:
    print("An error occurred during optimization: " + str(e))

为平衡光伏过剩功率添加储能单元后,LOPF优化一直无法得到结果。我尝试在新母线"bus1"上添加孤立储能、负荷及充放电链路(代码如下),优化仍无进展:

# Add a store to the network
network.add("Bus", "bus1",
            v_nom=380,
            carrier='AC',
            control='Slack',
            )
# Add a store to the network
network.add("Store", "store1",
            bus="bus1",
            e_nom=100,
            e_initial=50,
            e_min_pu=0,
            e_max_pu=1,
            marginal_cost=1,
            )

# Add two links to the network, representing the charging and discharging of the storage unit
network.add("Link", "charging_link",
            bus0="bus1",
            bus1="bus1",
            p_nom=100,
            efficiency=0.9)

network.add("Link", "discharging_link",
            bus0="bus1",
            bus1="bus1",
            p_nom=100,
            efficiency=0.9)

# Add a load to the network
network.add("Load", "load1",
            bus="bus1",
            p_set=1)

添加GLPK求解器选项后还出现了找不到线路名称的异常:

# Setting solver options as a dictionary for GLPK
solver_options = {"msg_lev": "GLP_MSG_ALL"}


try:
    network.lopf(network.snapshots,solver_options=solver_options)
except Exception as e:
    print("An error occurred during optimization: " + str(e))

求助如何合理配置储能及链路以实现LOPF优化,希望能先通过随机参数运行再适配真实数据,确保优化能在1分钟内完成。

解决方案建议

1. 修正储能充放电链路的逻辑错误

当前充放电链路都连接同一母线,无法正确模拟储能的充放电功率流向。正确的配置需要明确功率的吸收/释放方向,建议直接在光伏接入的现有母线上添加储能,避免孤立母线:

# 在现有光伏接入母线上添加储能(替换为实际母线名称)
network.add("Store", "pv_storage",
            bus="光伏接入母线名",
            e_nom=100,
            e_initial=50,
            e_min_pu=0,
            e_max_pu=1,
            marginal_cost=1,
            )

# 充电链路:从母线吸收功率(p_min_pu=-1允许反向功率,p_max_pu=0限制仅充电)
network.add("Link", "storage_charge",
            bus0="光伏接入母线名",
            bus1="光伏接入母线名",
            p_nom=100,
            efficiency=0.9,
            p_min_pu=-1,
            p_max_pu=0,
            )

# 放电链路:向母线释放功率(p_min_pu=0限制仅放电,p_max_pu=1允许满额输出)
network.add("Link", "storage_discharge",
            bus0="光伏接入母线名",
            bus1="光伏接入母线名",
            p_nom=100,
            efficiency=0.9,
            p_min_pu=0,
            p_max_pu=1,
            )

2. 移除多余的Slack母线

原网络已存在平衡母线,新增的bus1设置为Slack母线会导致潮流计算的自由度冲突,这是优化无法收敛的核心原因之一。直接在现有电网母线上配置储能即可,无需新增独立Slack母线。

3. 修复GLPK求解器选项的传递格式

PyPSA中求解器选项需要嵌套在对应求解器的字典下,错误的格式会引发参数解析异常,正确写法如下:

# 正确传递GLPK求解器选项
solver_options = {'glpk': {'msg_lev': 'GLP_MSG_ALL'}}

try:
    network.lopf(network.snapshots, solver_options=solver_options)
except Exception as e:
    print("优化过程中出错:" + str(e))

4. 提升优化收敛速度的额外措施

  • 先做小规模测试:用随机生成的3-5个母线、1台发电机、1个负荷和1组储能验证配置,确认能快速收敛后再替换真实数据。
  • 调整储能边际成本:设置为弃光成本的50%-80%,避免优化器因成本过高/过低跳过储能使用。
  • 限制快照数量:先测试1-2个快照的优化,再逐步扩展到全时段,减少计算量。
  • 切换高效求解器:如果GLPK性能不足,可尝试CBC(开源)或Gurobi/CPLEX(商业),只需在lopf中指定solver_name='cbc'即可。

内容的提问来源于stack exchange,提问作者Antonio Dominguez-Ramos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 21:00:29