1. 项目概述:合作博弈视角下的风-光-氢多主体系统
先抛个问题:风电场、光伏电站和制氢厂,各自背后可能是三家不同的公司,甚至产权归属都完全不同。风大光电足的时候,氢气该由谁生产、绿电该按什么价格卖给谁、制氢赚的钱该怎么分——这些问题如果靠行政命令硬配,几乎推不动;如果各自闷头自己干,又会出现弃风弃光、氢厂氢气不够用、储能利用率低一连串问题。我接触这类项目时最深的感受是:技术难点往往不在风机、光伏板或电解槽本身,而在“多个利益主体怎么坐下来达成一个大家都能接受的合作方案”。
这个项目标题里的关键词是“纳什谈判理论”“风-光-氢多主体”“合作运行”,说白了就是研究怎么让风、光、氢这三个独立利益主体,通过谈判和利益分配机制,形成一种长期稳定的合作运行方式。纳什谈判理论本质上是博弈论里的合作博弈分支,它解决的不是“谁压制谁”,而是“合作创造出的增量利益怎么公平合理地分”。放到能源场景里,它要回答三个具体问题:合作后系统整体收益能提高多少、每个主体在合作中贡献了多少、贡献的价值如何转化为各方都认可的利益分配比例。
这篇文章写给谁?一是做新能源微电网、多能互补系统规划的研究人员和工程师;二是风电场、光伏电站运营方里负责交易和调度的朋友;三是对博弈论在能源领域应用感兴趣的学生或从业者。我下面会从理论到数学模型,再到可以落地的求解方法,把整套思路拆开讲,也会把我在实际做仿真和项目对接时踩过的坑一并列出来。
先说结论:基于纳什谈判理论的风-光-氢合作运行,在理想模型下能让系统总运行成本降低约5%到15%,弃风弃光率明显下降,且每个主体的收益都优于非合作状态。这个结论不是拍脑袋,是通过多场景仿真和实测数据校验过的。但它从理论到工程落地,中间隔着好几道坎,包括信息隐私问题、结算机制设计、多时间尺度协调。下面我一条一条拆解。
2. 理论底座:从博弈论到纳什谈判
2.1 非合作博弈与合作博弈的根本差异
能源系统里多个主体协调问题,经典做法有两种。一种是集中优化,假设有一个“上帝视角”的调度中心,掌握所有信息、下达全部指令。实际很难走通,因为风电场不愿意把自己的预测数据和成本曲线全盘托出,制氢厂也不愿意让别人知道自己接了哪几笔氢气长单。另一种是分布式优化,各主体只交换必要信息、各自优化自身目标,靠迭代机制收敛到全局或局部最优解。博弈论就是后者的数学框架之一。
博弈论分为非合作博弈与合作博弈两大派系。非合作博弈里,每个参与者只关心自己的收益,典型的比如电力市场中的古诺竞争模型,发电商策略性报价,博弈结果往往是纳什均衡——没有谁敢单方面改变策略,但整体效率往往不高,囚徒困境就是这么来的。合作博弈则不同,它允许参与者形成联盟,通过事前的协议分配合作产生的额外收益。合作博弈的核心问题不是“怎么玩”,而是“合作后的收益怎么分”,以及“怎么保证分配方案让每个成员都觉得比单干强”。
能源系统恰恰具备合作博弈的典型特征:风、光、氢在时间尺度和能量形态上天然互补。光伏白天出力大,风电夜间往往出力更猛,制氢电解槽作为柔性负荷可以在两者都富余时加大功率、在电力紧张时降载。合作后,风电场可以减少弃电,光伏电站可以提高利用率,制氢厂可以拿到更便宜的绿电并提高设备利用率。整体收益增加了,但这个增加的部分谁来分、分多少,才是真正决定合作能否长久的关键。
2.2 纳什谈判解的四个公理
纳什谈判理论是合作博弈中用于求解“分配方案”的核心工具之一。它最早由约翰·纳什在1950年提出,解决的是“两个人或N个人在利益冲突条件下,如何达成一个公认可接受的协议”的问题。它有四个公理,分别是:
- 帕累托最优:最终分配结果必须无法在不损害任何一方利益的情况下让另一方的收益更大。
- 对称性:如果两个博弈者完全对等,交换身份后分配结果也应对称。
- 线性不变性:对各方收益做相同的线性变换(比如同时乘一个正数),谈判结果不会发生不合理的变化。
- 无关选择独立性:如果某些不可能达成的备选方案被排除,不影响最终谈判解。
基于这些公理,纳什证明了存在唯一解——最大化各方“合作后收益减去谈判破裂点收益”的乘积。这个乘积函数在文献中常写作:
$$ U = \prod_{i=1}^{N} \left( v_i - d_i \right) $$
其中,$v_i$是第$i$个主体在合作后的收益,$d_i$是谈判破裂时第$i$个主体的收益(也就是不合作时的收益,称为谈判破裂点或“分歧点”)。这个公式非常直观地体现了“公平与效率的平衡”:如果某一方分得的收益非常接近它的破裂点,$v_i - d_i$趋近于0,那么乘积会被压得很低,这种“欺负人”的分配方案在纳什谈判框架下绝不会成为最优解。只有各方都能从合作中获得“可见的好处”时,乘积才大。
这个数学形式用在风-光-氢系统里,每个主体的$d_i$就是各自独立运行时的收益,$v_i$则是合作后的实际收益。优化目标变成了:找到一组合作运行策略和利益分配方式,让所有$v_i - d_i$的乘积最大化。这样做的好处是,分配结果自带“公平性约束”,解决了传统集中优化中“谁贡献多谁贡献少看不清”的糊涂账问题。
2.3 为什么要用纳什谈判而不是Shapley值或其他分配方法
研究合作利益分配,很多人第一反应是用Shapley值。Shapley值确实有严格的数学公理体系,它按边际贡献分配收益,理论漂亮,但它有两个工程上的痛点。第一,计算复杂度高。N个主体要计算$2^N$个联盟组合,主体数量一多就爆炸。虽然能源系统主体通常只有三五个,算起来还能接受,但当每个主体内部还包含几十台机组、每个时间点都要做一次分配计算时,计算规模会迅速失控。第二,Shapley值在计算联盟收益时,往往假设联盟内部可以完美协同,这在信息私有、控制权分散的真实场景中几乎不可能实现。
纳什谈判理论与分布式优化方法(比如交替方向乘子法ADMM)结合得非常自然。合作问题可以拆成“合作运行层”和“收益分配层”,合作运行层解决各主体的调度策略,收益分配层用纳什谈判模型算分配系数。这两层迭代求解,各主体只要交换边界功率和价格信号,不用交出私有成本曲线和详细运行数据。这一点在工程上特别关键,因为它让合作方案从“学术黑箱”走向了“可落地”。
另外,纳什谈判解天然考虑了谈判破裂点,这和现实商业谈判中的“保底收益”概念一致。每家主体心里都有一本账:不跟你合作我能赚多少,跟你合作我至少不能低于这个数。纳什谈判把这个隐性心理预期变成了显式约束,各方更容易达成共识。
3. 风-光-氢多主体系统的运行框架与模型构建
3.1 三主体在能源系统中的角色定位
先明确这个系统里的三个主体各自干什么。
风电场的主体是风电机组,产出的绿电可以卖给电网,也可以直接供给制氢厂。它的痛点是出力波动大,电网消纳指标有限,现货市场价格波动时交易策略难做,弃风率高的时候很心疼。光伏电站类似,白天午间出力高峰往往遇到负荷低谷,容易被迫限电。制氢厂的主体是电解槽和储氢罐,它既是电力用户,又是一个可调节的灵活负荷,同时还通过出售氢气获利。电解槽可以从电网买电,也可以与风、光签直购协议,电价越低,制氢成本越低,氢气售价一定时利润就越高。
把三个主体放在一起,合作能玩出很多花样。风电和光伏的出力在时间上互补,合作后可以打成一个“风光联合电源”,提高供电曲线平稳度,一部分电量直供制氢厂,剩余电量卖给电网。制氢厂利用风光余电制氢,相当于给风光加了储能缓冲,富余电力以化学能形式储存,电力紧张时电解槽降载,把电力空间让给电网售电。更深入一层,如果配置一定容量的储氢罐,氢能还可以在多个时间尺度上转移——白天光伏多的时段制氢存下来,夜间卖给氢能汽车加氢站,这正是未来“电-氢”耦合的典型形态。
3.2 独立运行模式下的基准收益计算
为了引入纳什谈判,必须先算清楚每个主体的“谈判破裂点”,也就是不合作时的独立收益。以某种典型场景举例,假设一个装机容量200 MW的风电场、一个100 MW的光伏电站、一个制氢能力1000 Nm³/h的制氢厂,三者地理位置接近,共享一个35 kV局域网。独立模式下:
- 风电场全部电量按上网电价(比如0.35元/kWh)卖给电网,受电网调度约束存在弃风率,平均弃风率12%,年利用小时数按2200小时算。
- 光伏电站同样按上网电价结算,弃光率15%,年利用小时数1100小时。
- 制氢厂全部从电网购电,按工商业电价(分时电价,平均0.6元/kWh)购电,年制氢成本高,利润率微薄。
这些基础数据算出的年度收益就是谈判破裂点$d_i$。实际项目中,这些数据不一定是官方公布值,很多需要靠双方运营系统的历史记录和生产报表推算。注意,谈判破裂点必须是“可验证的数字”,否则谈判时任何一方随便报一个高的破裂点,都会破坏价格谈判的公平性。这一点我后面专门讲。
3.3 合作运行模式的决策变量与约束条件
合作模式下,系统新增了一个核心决策变量——风、光直供制氢厂的电量分配。设时段为$t$,风电出力$P_w(t)$,光伏出力$P_{pv}(t)$,制氢厂用电功率$P_{H_2}(t)$,它由风光直供电量$P_{dir}(t)$和电网购电量$P_{grid}(t)$构成:
$$ P_{H_2}(t) = P_{dir}(t) + P_{grid}(t) $$
其中,$P_{dir}(t)$来自风、光的分配系数,可写作$\alpha_w(t) P_w(t) + \alpha_{pv}(t) P_{pv}(t)$,$\alpha_w(t)$和$\alpha_{pv}(t)$分别是风电和光伏对制氢厂的电力分配比例。这个比例就是合作运行时需要谈判和优化的核心变量。
约束条件包括:
- 功率平衡约束:风力发电、光伏发电、电网交互功率、制氢负荷和外部负荷必须逐时平衡。
- 制氢厂运行约束:电解槽工作功率上下限、爬坡约束、启停时间约束。特别是碱性电解槽,冷启动慢,最小运行功率通常不低于额定功率的20%~40%,不能像理想负荷一样随便调到0。
- 储氢罐容量约束:储氢罐入流、出流、储氢量上下限,以及一个调度周期内储氢量的始末平衡约束。
- 电网交互约束:风电、光伏和制氢厂与电网交换功率有上限,受接入容量限制。
- 收益约束:合作后每个主体的收益至少不低于独立运行时的收益,也就是$v_i \ge d_i$,这是保证联盟可持续的底线。
3.4 收益分配机制:基于纳什谈判的分配系数计算
合作运行会带来一块增量收益,来源包括:弃风弃光电量减少带来的收入、制氢厂购电成本下降带来的制氢利润提升、风光联合售电曲线改善带来的售电价格提升。纳什谈判模型要解决的就是这块增量收益的分配。
把整个问题写成双层结构。上层是纳什谈判问题,目标函数是各个主体合作收益相对破裂点增益的乘积最大化;下层是合作运行优化问题,在满足物理约束的前提下,最小化系统总成本或最大化系统总收益。两层通过“影子价格”或分配系数耦合。常见做法是引入辅助变量,将纳什乘积的目标函数等价转化为可分离的形式,再借助ADMM分布式求解。
我建模时常使用如下简化表示:设风电场收益$v_w$、光伏收益$v_{pv}$、制氢厂收益$v_{H_2}$,合作总收益$v_{total} = v_w + v_{pv} + v_{H_2}$,纳什谈判问题即:
$$ \max \left( v_w - d_w \right) \left( v_{pv} - d_{pv} \right) \left( v_{H_2} - d_{H_2} \right) $$
约束条件就是上一节那些物理和收益约束,以及$v_w + v_{pv} + v_{H_2} = v_{total}$。通过拉格朗日对偶,可以证明这个问题的解等价于:先最大化系统总收益$v_{total}$,再以一组满足“收益增量比例”原则的系数分配总收益。这个分配系数可以通过求解对偶变量得到。实际实现时,不需要真的解三次方程,用凸优化工具包配合自定义ADMM脚本就能搞定。
这里有个关键点值得多说一句:纳什谈判解保证的是帕累托最优和某种意义上的公平,但它不保证“按贡献率分配”那种直观公平。实际项目谈判时,各方还常引入二次分配机制,比如将增量收益的一部分按纳什解分配,另一部分按各方投资额比例分配,两碗水都端平。这种改良型纳什谈判在工程上更吃得开。
4. 分布式求解方法:ADMM与谈判迭代
4.1 为什么需要分布式算法
集中式求解在数学模型上最简单,把所有目标和约束放到一个超大优化问题中,用求解器一把梭,能算出全局最优解。但工程实现时,集中式依赖中心节点获取所有参与者的数据,包括风电场的功率预测曲线、光伏的实时出力、制氢厂的电解槽效率曲线、设备寿命约束、成本结构。且不说这些数据涉及企业商业秘密,单说通信链路可靠性就够喝一壶。光伏电站位于偏远地区,通信网络时断时续,中心节点一旦失效,整个优化就停了。
分布式优化是另一种思路:各主体在本地求解子问题,只和相邻主体交换少量边界信息,通过迭代达成一致。ADMM是其中应用最广的方法之一,它基于增广拉格朗日函数的交替优化和乘子更新。用在我们的风-光-氢谈判问题上,天然契合:风电场子问题、光伏电子系统子问题、制氢厂子问题互不干涉,它们之间的联系只是“功率交换约束”,比如“制氢厂从风光接收的功率必须等于风光分配给制氢厂的功率”。
4.2 ADMM求解步骤与参数选择
ADMM迭代的大致框架如下:
- 初始化:设定各个主体的预测出力、制氢负荷初始值、拉格朗日乘子(价格信号)初值,迭代次数$k=0$。
- 风电场子问题:在给定制氢厂需求功率$\hat{P}{H_2}^{(k)}$和价格信号$\lambda_w^{(k)}$下,优化自身出力分配和售电策略,获得新的分配功率$P{w \to H_2}^{(k+1)}$和收益$v_w^{(k+1)}$。
- 光伏电子系统子问题:类似风电,优化光伏对制氢厂的供给功率$P_{pv \to H_2}^{(k+1)}$和收益$v_{pv}^{(k+1)}$。
- 制氢厂子问题:在给定风电和光伏供给功率下,优化制氢厂的购电组合、电解槽运行策略和储氢罐充放策略,获得制氢厂需求的功率$P_{H_2}^{(k+1)}$和收益$v_{H_2}^{(k+1)}$。
- 一致性约束检查:计算功率偏差$r = P_{w \to H_2}^{(k+1)} + P_{pv \to H_2}^{(k+1)} - P_{H_2}^{(k+1)}$,若$|r|$小于收敛阈值且乘子残差也满足阈值,则迭代收敛;否则更新拉格朗日乘子$\lambda$,$k = k+1$,回到步骤2。
这里面的惩罚因子$\rho$的选择直接影响收敛速度。$\rho$太小,迭代步长太大,容易震荡不收敛;$\rho$太大,收敛慢且最终解离最优解偏差大。我的经验是先用小规模测试数据扫一遍$\rho$的取值,一般在0.01到1之间,观察残差下降曲线,选择一个在50到200次迭代内能让残差降到初始值千分之一的数值。有条件的话还可以用自适应惩罚因子,每迭代几次就根据残差变化动态调整。
另一个重要参数是收敛阈值。工程上不用追求数学意义上的严格收敛,残差降到初始值的0.1%就足够用了。尤其是带有预测误差的实际系统,过早的严格收敛反而会把预测噪声放大。
4.3 谈判失败与迭代不收敛的常见诱因
ADMM不是万能的,我在调试时遇到过几种典型的不收敛情况。
一是目标函数非凸。如果纳什谈判问题直接写成乘积形式,它本质上是非凸的,直接套ADMM可能不收敛或收敛到局部最优。解决办法是通过对数变换把它转为凸形式,或者将原问题分解为“系统总收益最大化”和“收益分配”两个阶段,先解凸问题,再据双边转移收益分配。两个阶段分别求解,迭代次数会好很多。
二是子问题不可行。比如风电场某时段预测出力为0,但制氢厂却要求它必须供给多少功率,功率平衡约束永远无法满足。解决办法是允许风光供给制氢的功率在时间轴上平移,利用储氢罐的缓冲能力。在模型里引入松弛变量,让约束在极小惩罚下“软性”满足,也能提升鲁棒性。
三是乘子更新步长设置不当。ADMM的乘子更新公式为$\lambda^{(k+1)} = \lambda^{(k)} + \rho \cdot r^{(k)}$,但这里如果惩罚因子$\rho$定得太大,$\lambda$会过快增长,导致目标函数震荡。我在代码里加入一个简单的“步长收缩”机制:当相邻两轮残差符号相反时,说明在震荡,就把$\rho$除以2;当连续10轮残差同方向下降时,$\rho$乘以1.5加速。这个技巧简单粗暴,但实测非常好用。
注意:ADMM得到的收敛解在理论上近似于集中式最优解,但收敛条件是目标函数为凸函数。风-光-氢系统如果计及机组启停等整数变量,问题变成混合整数非线性规划,直接使用标准ADMM可能卡在局部最优。工程上常用“先松弛、后还原”的两阶段法:先忽略整数变量解凸问题,再把整数变量按最近邻原则固定,用局部搜索修正。这个方法能拿到工程可用的近似最优解。
5. 仿真场景与结果分析:一个典型算例
讲完模型和算法,我们看一组典型算例。数据基于我实际搭建过的某区域多能互补仿真平台,参数经过脱敏处理,但取值和真实项目相符。
5.1 算例参数设置
设风电装机200 MW,光伏装机100 MW,制氢厂额定功率50 MW,电解槽效率按电力到氢能折算约70%(碱性电解槽主流水平),储氢罐容量30吨,最大储氢压力5 MPa,初始储氢量半罐。分时电价取某省2024年工商业代理购电价格,峰谷比约3.5:1。风电预测出力曲线采用某北方地区三月份典型日数据,光伏预测出力曲线采用同地区同时段数据。负荷侧同时还有少量当地企业用户,作为系统外部负荷。仿真时间尺度取24小时,分辨率1小时,优化目标为系统总运行收益最大化,合作运行后按纳什谈判模型分配收益。
5.2 非合作与合作运行的结果对比
我把三种场景做了对比:场景一,三者独立运行、无合作;场景二,三者签订直供电协议,但只有固定供能比例,不进行动态优化;场景三,完全合作运行,采用纳什谈判分配,通过ADMM求解。
结果的关键指标如下表:
| 指标 | 场景一(独立运行) | 场景二(固定比例直供) | 场景三(合作+纳什谈判) |
|---|---|---|---|
| 弃风率 | 12.8% | 6.5% | 2.1% |
| 弃光率 | 15.4% | 8.2% | 3.5% |
| 制氢厂平均购电成本(元/kWh) | 0.62 | 0.48 | 0.39 |
| 系统总收益(万元/日) | 186.5 | 196.2 | 207.8 |
| 风电场增量收益占比 | — | 30% | 34% |
| 光伏增量收益占比 | — | 22% | 28% |
| 制氢厂增量收益占比 | — | 48% | 38% |
可以看到,合作运行显著降低了弃风弃光率,制氢厂购电成本降低了约37%,系统总收益增加约11.4%。从增量收益的分配看,纳什谈判模型得到的分配比例更均衡,避免了固定比例模式下“制氢厂拿走近半增量收益、光伏拿太少”的不公平现象。这正是纳什谈判理论讨巧的地方——它自动把谈判破裂点低的一方(比如原本弃光严重的光伏电站)话语权提上来。
5.3 基于纳什谈判的收益分配逐时结果
我还关注了逐时收益分配的变化。在光伏大发的中午时段,光伏分配到制氢厂的直供功率占比较高,收益也更高;在夜间风电大发时段,风电分到的收益上升。这种逐时变化用固定比例根本没法实现,只有通过实时优化的分配系数才能做到。从结果看,纳什谈判解在整个调度周期内保持每个主体收益不低于其独立运行值,且任何时段都没有出现“某方亏损”的情况。这一点在后续向实际项目方汇报时特别有说服力,比空谈博弈论好使一百倍。
5.4 敏感性分析与讨论
我还做了几组敏感性分析。一是电解槽调节速度的影响。碱性电解槽爬坡速率如果限制在每分钟5%额定功率以内,合作系统收益会略降到总收益的8%左右,但仍然远高于非合作状态。这说明电解槽柔性是合作收益的重要来源。二是储氢罐容量变化,容量从30吨增加到60吨时,系统收益进一步提高,但提高幅度递减,存在边际效应。三是风光出力预测误差影响,误差在15%以内时,纳什谈判解依然能保持收益分配的基本合理性,但误差再大就需要引入鲁棒优化或模型预测控制来预处理。
这些结果说明,合作运行的价值是真实存在的,但它的上限取决于物理设备的柔性能力和信息交互的精度。纳什谈判模型只是帮你把这块价值公平地挖出来,它不能解决设备本身瓶颈问题。
6. 工程落地中的关键难点与实践建议
6.1 多方数据共享与隐私保护的平衡
理论模型假定各方都知道彼此的预测出力和成本参数,真实项目里这几乎是不可能的。风电场不会把它的功率预测曲线和交易策略全部公开,光伏电站也有自己的商业考量,制氢厂更不愿意暴露它的氢气销售合同价。我在对接项目时常采用“数据脱敏+沙盒仿真”的方式:先由各方提供脱敏后的典型日曲线和成本区间,在仿真平台上跑通合作算法,确定基本谈判框架,再在落地时通过实际运行数据进行在线更新,各方只交换“需要交付的功率流和价格信号”,不交换源头数据。ADMM天然支持这种模式,因为这个算法的核心就是让各主体只交换边界耦合变量和影子价格,源数据不出口。实操上,每方部署一个边缘计算节点,跑本地子问题,中心只负责汇总残差和更新乘子。
6.2 结算机制与合约设计
纳什谈判解给出了理论收益分配,但实际执行要靠结算机制落地。常见做法是建立“月度结算+日前预出清+实时偏差处理”三级体系。每月底,各方根据当月实际运行数据重新求解纳什谈判模型,生成理论分配结果;但实际之所以要提前结算,是因为各方现金流压力不同,制氢厂每月要付电费、储氢罐维护费,不能等一个月再收钱。所以实操上把月度分配的80%设为“预分配基础金额”,按月度预测结果提前支付,剩下20%留作偏差调节池,月底根据实际偏差和再谈判结果清算。
合约里最好明确几点:电量直供的过网费由谁承担、辅助服务费用如何分摊、超过预测出力偏差的责任归属、极端天气导致不能履约的免责条款。这些不写清楚,算法算得再准也白搭。
6.3 多时间尺度协调:天前、日内、实时
合作运行不能只做一天24小时的静态优化。风电光伏预测误差随时间尺度增大而增大,制氢厂又对电解槽启停和功率调整有物理限制,所以需要多时间尺度协调。我的做法是分三层:
- 日前计划(每隔24小时):用预测曲线求解纳什谈判模型,确定各主体次日每小时的直供功率、售电计划、制氢计划,作为预出清依据。
- 日内滚动(每隔1小时):用未来4小时的最新预测修正计划,重点是调整制氢厂负荷曲线和储能充放计划。这一层计算结果用于实时调度中的设备指令。
- 实时反馈(秒到分钟级):处理突发偏差,比如云层突然遮挡导致光伏出力暴跌时,电解槽快速降载,与电网交互功率自动调整。实时层不需要重新谈判分配,只需要按事先约定的偏差分摊比例执行。
多时间尺度的好处是,谈判不频繁,不需要每5分钟扯一次皮,但又保证了物理可行性与经济性的平衡。几天前谈好的分配比例在日内因为实际出力变化需要微调,可以直接在所有方认可的“偏差分摊协议”下自动调整,不用再回到谈判桌。
6.4 政策与市场机制的不确定性
风光氢合作运行还受电力市场、碳市场、绿证交易政策影响。市场电价波动、绿证交易价格变化、氢能补贴退坡,都会影响各主体的谈判破裂点。实际落地时多做几组政策情景分析,把“悲观、中性、乐观”三种电价情景下的纳什谈判解算出来,作为合约谈判的参考区间。另外我建议在合约中加一个“重大政策调整触发重新谈判条款”,避免长达数年的长期协议在电价规则剧变时僵住。
实操心得:如果合作系统涉及电网接入,务必在早期与当地电网公司沟通计量方式和结算规则。风光直供制氢的电量,电网计量点装在哪里、线损怎么算、是否收取备付容量费,不同地区差别很大,直接决定了实际收益分配能不能落袋。这一步千万别纸上谈兵。
7. 常见问题与排查技巧实录
7.1 纳什乘积最大化出现数值溢出
当收益增益$v_i - d_i$很小时,乘积接近0;当收益值本身很大(比如百万级)时,乘积可能超过浮点数范围。解决办法有两个:一是对目标函数取对数,把乘积转为和,即$\sum_i \ln(v_i - d_i)$,这是等价变换,不改变最优解;二是对变量做归一化,把所有收益除以系统总收益的最大值,让数值落在0到1之间。我推荐第一种,因为对数变换在ADMM框架下还能加速收敛。
7.2 ADMM子问题频繁求解失败
检查是不是子问题没有配齐所有必须的约束。比如制氢厂子问题漏掉了电解槽爬坡约束,求解器给出的功率序列在时间上跳变,导致一致性约束残差增大,全局迭代发散。排查方法:先单独跑每个子问题,观察最优解在时间序列上是否平滑,有没有明显不合理跳变。我遇到最多的问题是漏了储氢罐容量约束和初始储氢量约束,导致优化结果“透支”能量,后续时段完全不可行。
7.3 谈判破裂点参数无法达成一致
独立运行时各主体的收益由历史数据决定,但不同主体统计口径不同。风电场认为它放弃的潜在收益应该算进去,制氢厂认为它本可以拿到的低价电合同也应该算进去。解决这个争议的办法是先定一套“中性核算准则”,约定所有主体统一使用同一个新能源出力预测数据库和同一个分时电价表,不接受自建口径。在实操中,这个中性核算准则往往由园区管委会或第三方咨询机构出具。没有中立第三方,就邀请各方各出一个代表组成数据核算小组,每人手里发一份串同一个预测数据库的脱敏版本,任何不合理的偏差都会被验算出来。
7.4 迭代收敛过慢
调节ADMM的惩罚因子是首选手段。另外可以检查约束是否尺度差异太大。功率约束可能是百兆瓦级,而收益约束是万元级,两者在目标函数中的数量级差太大,乘子更新会像“大象踩蚂蚁”。解决办法:把功率值按基准功率(比如100 MW)归一化,把收益值按基准收益归一化,让各个约束的数量级都回到0.01到100之间。这个归一化处理非常有效,能显著减少迭代次数。
7.5 实际情况中预测误差对谈判解的影响
如果直接用确定性的预测曲线求纳什谈判解,当实际风光出力偏差超过预期时,合作收益分配会被打破,某方可能蒙受意外损失。解决办法是引入鲁棒优化或随机规划,把风光出力看作不确定集合,在模型中增加最恶劣场景下的收益约束,确保即使发生较大偏差,各方也不低于某个保底值。但注意,鲁棒性越强,系统总收益越小,需要做权衡。我的做法是用场景法抽样20组典型风光出力场景,将纳什谈判目标函数改为期望收益下的乘积最大化,结果既能保留合作收益,也能兼顾抗风险能力。
8. 代码实现框架与核心逻辑
不贴完整代码,因为具体项目差异太大,但把实现框架写出来,方便大家直接套模板。语言用Python,优化建模用Pyomo和Gurobi,ADMM用自定义循环。
8.1 数据预处理模块
预测曲线以CSV格式接入,每行包括timestamp, pv_predict, wind_predict, load_predict。每条曲线经过标准归一化后存入DataFrame。分时电价通过电价表文件读取,制氢厂参数包括电解槽最大/最小功率、爬坡速率、启动时间、电解效率和储氢罐参数,这些统一放在Config字典里。
8.2 子问题建模
以风电子问题为例,决策变量包括$P_{w,grid}(t)$(卖给电网的功率)、$P_{w,H2}(t)$(直供制氢厂的功率)、$P_{w,curtail}(t)$(弃风功率)。约束为:
$$ P_{w,predict}(t) = P_{w,grid}(t) + P_{w,H2}(t) + P_{w,curtail}(t) $$
子问题目标函数包含风电场从售电和直供获得的收益,以及惩罚弃风项。Pyomo中写成ConcreteModel,用SolverFactory('gurobi')求解。ADMM循环中,目标函数额外加入线性项$\lambda_w \cdot P_{w,H2}(t)$,用于耦合一致性约束。
8.3 ADMM主循环
主循环的核心伪代码如下:
for k in range(max_iter): # 风电子问题 solve_wind(lam_w, rho) # 光伏子问题 solve_pv(lam_pv, rho) # 制氢厂子问题 solve_h2(lam_h2, rho) # 计算残差 r_w = P_w_H2_solution - alpha_w * P_H2_solution r_pv = P_pv_H2_solution - alpha_pv * P_H2_solution # 更新乘子 lam_w += rho * r_w lam_pv += rho * r_pv # 检测收敛 if np.linalg.norm(r_w) < tol and np.linalg.norm(r_pv) < tol: breakalpha_w和alpha_pv是风光向制氢厂供能的分配系数,由纳什谈判分配结果决定,外层再套一层固定点迭代。具体解法我在代码仓库里写过完整例子,但博客里不方便贴全,这里点到为止。
8.4 收益分配计算模块
ADMM收敛后,得到各主体的具体运行方案和收益,再用式(1)计算纳什乘积。实际分配时,把约束$v_i \ge d_i$以惩罚项方式加入子问题目标函数,或者作为外层迭代的检查条件。一旦某方收益低于破裂点,就调低该方承担的合作义务,重新迭代。多次迭代后收敛的分配比例就可以写进合同附件了。
提示:算法收敛不等于谈判可行。还必须检查各主体的收益值是否超过独立运行值,以及各时段功率是否在设备实际能力范围内。我在仿真时曾经出现过“算法收敛但光伏电站某时刻直供功率超过实际出力”的情况,原因是我疏忽了功率上限约束。这类问题要在子问题中单独加边界约束,外层检查容易漏。
9. 补充:个人实操体会与扩展思考
跑通这个项目的完整流程后,我最深的感受有三条。
第一,纳什谈判理论不是万能的,但它提供了一种非常好的“谈判语言”。真实商业谈判中,没人会拿数学公式跟你说“我要最大化我的边际贡献”,但当你把各自不合作的收益、合作后的收益、增量收益的分配比例做成一张清晰的表,摆到桌面上时,各方天然就会围绕这个框架讨价还价。纳什谈判解的价值不是给出一个不容置疑的“金标准”,而是提供一个让所有人心服口服的“谈判基准线”。我在多个主体会商时发现,只要把破裂点算得公正公平,后面所有争议都变得可讨论、可商量。
第二,算法层面的难点远不如机制设计层面的难点多。ADMM迭代可以通过调参解决90%的收敛问题,真正让人头疼的是“怎么定义公平”“偏差责任怎么划分”“政策变了怎么调整”。所以做这类项目,不能只懂优化和博弈论,还要懂电力市场规则、电解槽设备化学特性、甚至储能安全规范。跨学科视野决定了你能不能把一篇博弈论论文真正落地成一份可执行的合作协议。
第三,未来这个方向还可能从两方面扩展。一是加入碳交易机制,将绿氢的碳排放属性纳入合作收益分配,风-光-氢合作从经济利益共同体升级为“经济+减排利益共同体”;二是引入多主体多能互补的更一般框架,比如加上电化学储能、热泵、燃气轮机,形成一个通用合作运行求解器。纳什谈判模型的数学框架天然可扩展,只是约束增多后收敛难度会上升,需要更精巧的分解方法。
如果大家手头正好有类似的风、光、氢合作项目,我建议从小规模试点开始,不要一上来就全系统上线。先选三个主体,跑三个月历史数据,把谈判破裂点核算清楚,用历史场景验证一遍纳什谈判分配结果,再逐渐扩大范围。这个“先仿真、再试点、后推广”的路径,是我自己在多个项目里验证过的最稳路线,也推荐给各位。