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

PyPSA模型中光伏电站无法向电网送电的问题排查与建议

PyPSA光伏电站模型无电网送电问题分析

模型代码

import pandas as pd
import pypsa

index = pd.date_range("2024-01-01 00:00", "2024-01-01 23:00", freq="H")

network = pypsa.Network(snapshots=index)

network.add("Bus", "main_bus")
network.add("Bus", "grid_bus")

pv_pu = pd.Series([
    0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
    0.1, 0.3, 0.5, 0.7, 0.9, 0.9,
    1.0, 1.0, 0.9, 0.8, 0.5, 0.5,
    0.2, 0.1, 0.0, 0.0, 0.0, 0.0
], index)

demand = pd.Series([
    0.3, 0.3, 0.3, 0.3, 0.3, 0.5,
    1.0, 2.0, 1.5, 0.8, 0.6, 0.7,
    0.8, 0.7, 0.6, 0.7, 0.8, 1.5,
    2.5, 2.0, 1.5, 1.0, 0.5, 0.3
], index)

network.add("Generator", "PV",
    bus="main_bus",
    p_nom_extendable=True,    
    p_nom_min=5,              
    p_nom_max=15,             
    p_max_pu=pv_pu,          
    capital_cost=400,         
    marginal_cost=0)         

network.add("Link", "grid_export",
    bus0="main_bus",         
    bus1="grid_bus",         
    p_nom_extendable=True,   
    p_nom_min=0,            
    p_nom_max=10,           
    efficiency=1,
    capital_cost=0,         
    marginal_cost=-5.0)     

network.add("Load", "grid_sink",
    bus="grid_bus",
    p_set=0)               

network.add("Load", "demand",
    bus="main_bus",
    p_set=demand)

network.add("StorageUnit", "battery",
    bus="main_bus",
    p_nom_extendable=True,     
    max_hours=4,               
    capital_cost=150,          
    efficiency_store=0.95,     
    efficiency_dispatch=0.95,  
    standing_loss=0.01,
    cyclic_state_of_charge=True)

问题描述

优化后发现光伏电站或电池从未向电网送电,需排查是默认目标函数问题还是模型设置有误,并寻求优化建议。

原因分析

  1. 电网侧无接收机制:你设置的grid_sink负载p_set=0,相当于电网不接受任何送电,模型没有外送电量的出口,自然不会安排送电。
  2. 目标函数与成本优先级:PyPSA默认目标是最小化系统总成本。电池的capital_cost=150远低于光伏的400,模型会优先选择用储能存储多余光伏电量(用于后续负荷高峰),而非通过外送获取收益——因为存储的长期成本更低。
  3. 光伏装机与负荷匹配:光伏p_nom_min=5,白天满发时出力完全覆盖最高2.5MW的负荷,多余电量被电池存储,没有外送的必要性。

优化建议

1. 修复电网送电的收益与接收机制

移除无效的grid_sink,添加电网收购电量的逻辑,让外送能产生收益:

# 移除原grid_sink负载
network.remove("Load", "grid_sink")
# 添加模拟电网收购的Generator,按单位价格5收购电量
network.add("Generator", "grid_buy",
            bus="grid_bus",
            p_nom_extendable=True,
            marginal_cost=5.0,  # 电网收购价格,对应外送的收益
            p_max_pu=pd.Series(1.0, index=index))  # 允许电网无限接收电量

2. 调整成本优先级,引导外送行为

如果希望优先外送而非存储,可调整参数:

  • 降低外送的收益门槛:将grid_export的marginal_cost调至更负(如-10.0),提升外送的收益权重;
  • 提高储能成本:增加电池的capital_cost,或限制电池的max_hours/p_nom_max,降低储能的优先级。

3. 自定义目标函数(可选)

若需最大化收益而非最小化成本,可替换默认目标:

from pypsa.linopt import get_var

def maximize_profit(network, snapshots):
    # 获取核心变量
    link_p = get_var(network, "Link", "p")
    pv_nom = get_var(network, "Generator", "p_nom")
    link_nom = get_var(network, "Link", "p_nom")
    battery_nom = get_var(network, "StorageUnit", "p_nom")
    
    # 计算总收益:外送收益 - 投资成本
    total_profit = (link_p * 5.0).sum() - (pv_nom * 400).sum() - (link_nom * 0).sum() - (battery_nom * 150).sum()
    
    # PyPSA默认最小化目标,因此取负转化为最大化问题
    network.model.objective = -total_profit

# 调用自定义目标运行优化
network.lopf(snapshots, extra_functionality=maximize_profit)

4. 验证连接逻辑

确认grid_export的方向正确:bus0为送电端(main_bus)、bus1为接收端(grid_bus),当前设置无误,只需确保接收端有电量消耗/收购机制即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 18:14:54