科研圈里一提到“风–光–氢多主体新能源”优化运行,很多文章都会挂上“合作博弈+纳什谈判”这个组合。刚接触这个方向的人,翻几篇文献常常被绕晕:又是合作博弈,又是纳什谈判,又是ADMM分布式求解,到底每个模块在解决什么问题?各主体之间的成本效益是怎么拆开的?为什么明明叫“多主体”,结果却像集中式优化一样要反复迭代?
我最早复现这类算例时也吃了不少亏。这篇就按“从建模到仿真、从公式到参数、从收敛到排坑”的顺序,把基于纳什谈判理论的风–光–氢多主体新能源优化运行讲透。无论你是做毕业设计、发小论文,还是想在企业里做新能源消纳方案,都可以对照着搭出自己的算例。
1. “多主体”这三个字,决定了整篇文章的建模基调
很多初学者拿到题目第一反应是:把风电、光伏、氢能合成一个大系统,建立一个总成本最小化模型,这不就是“风–光–氢优化运行”吗?听起来没问题,但这类文章在“多主体”框架下就说不通了。因为风电、光伏、氢能在实际运行时很可能是三个独立决策、独立核算的利益主体,各自有各自的调度权,谁也没有义务牺牲自己的收益去成全系统最优。
1.1 为什么纯集中式优化在工程语境里不够用
集中式优化的本质是假设所有设备属于同一个“总公司”,目标函数可以把风电出力、光伏出力、电解槽功率作为决策变量丢进一个包里,统一求系统总运行成本最低。这种做法在数学上简单、求解也快,但它默认了一件事:信息完全透明、决策权完全集中。
现实场景里不是这样的。风电场、光伏电站、氢能运营商可能是三个不同的投资方,电量和结算各算各账。风电场关心上网收益和弃风惩罚,光伏电站关心自己的售电曲线,氢能运营商关心电价成本和产氢收益。他们既不想把自己的运行数据、成本参数完全暴露给对方,也不想接受一个“中央调度指令”替自己做主。
所以这类研究改成博弈视角:每个主体保留内部的优化变量和目标函数,主体之间通过谈判协商交易功率和结算价格,最后让每个主体的收益都优于“不谈判、各干各的”基准情形。这个思路更贴近综合能源系统实际项目里的多公司协同场景。
1.2 合作博弈里的“合作”,指的不是道德觉悟
合作博弈这个名字容易让人误以为大家在讲奉献。其实合作博弈研究的是:理性参与者在什么条件下愿意组成一个大联盟,以及联盟产生的超额收益怎样分配才能让所有人都不退出。
纳什谈判是合作博弈里最常用的解概念之一。它有两条根本要求:第一,谈判结果必须优于“谈判破裂点”(也就是各主体不合作时的收益);第二,结果应当满足帕累托最优。简单理解,一伙人坐下来谈,谈崩了还能回到原状态,那么大家合作的前提就一定是“每个人都比不合作时过得好”。这比强制性的“上级调度”在商业逻辑上自然很多。
放到风–光–氢系统里,谈判破裂点通常取风电、光伏、氢能各自独立运行时能获得的最大收益。合作联盟形成后,大家通过内部交易功率重新分配利益。如果纳什谈判得到的结果中,某个主体收益反而低于独立运行,它完全可以退出谈判——所以这类模型的解天然带有“个体理性约束”。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 纳什谈判公式拆解:先做大概率,再分小账
接下来是理论核心。很多综述里提到纳什谈判就是一行乘积最大化公式,但真正要建模时必须清楚每一步推导是为了解决什么困难。
2.1 从“效用乘积最大化”说起
假设参与谈判的主体集合为 N,每个主体 i 通过内部决策变量 xi 获得收益 Ui(xi)。当谈判破裂时,主体 i 有一个保底收益 U0i。纳什谈判解要求求解:
max ∏(Ui(xi) − U0i),i = 1, 2, ..., N
约束条件包括各主体的运行约束,以及主体间传输功率的供需平衡约束。
这里的 Ui(xi) 可以定义为净收益,即售电收益、辅助服务收益、氢气销售收益等减去运行成本、购电成本、运维成本、惩罚项。U0i 通过求解各主体独立运行时的单目标优化得到,是一个预先算好的常数。
为什么用乘积而不是用加和?如果目标是“总收益最大”,分配不会自动照顾收益低的一方;而乘积形式在所有人都高于谈判破裂点时才有意义,任何一方逼近 U0i 都会让目标函数趋近于零,因此它天然带有“均衡受益”效果。
2.2 非凸乘积项不好解,怎么处理才会变成“可解”的结构
直接求解上面的乘积目标会遇到一个很现实的问题:当 N 大于 2 时,这个多线性乘积目标是非凸的,通用商业求解器直接跑很容易陷入局部解,甚至很多求解器根本不支持这种目标函数形式。
这时文献里通常采取两步等价拆解:
第一步:先让联盟整体运行成本最小化(或总联盟收益最大化),这个子问题本质上是个常规优化问题,可以用YALMIP/Gurobi或CPLEX求解。它只负责把“蛋糕做大”,先不管怎么分。
第二步:把第一步得到的最优总成本作为联盟约束,然后再求解一个支付分配的子问题,把“蛋糕分匀”。这一步的数学形式可以转化为各主体支付金额的某个简单乘积或凸优化问题。
注意:不是所有系统都能无损拆成这两步。拆解成立的前提是联盟内部的物质流和资金流可以分离——风–光–氢系统恰好满足这一条件:风电/光伏输出电功率给氢能系统,氢能系统付出购电费用给风光主体,电功率流由能量平衡约束决定,资金流由谈判确定,二者通过交互功率变量耦合。
2.3 谈判破裂点的取值决定“谈判空间”大小
有个细节特别容易翻车:U0i 的取值必须来自各主体独立运行时的最优解,而不能随意指定。比如风电独自运行时,它可能把电卖给电网公司,得到收益 U0w;光伏类似;氢能独立运行时只能从电网购电,承担较高的购电成本和运维成本,收益是 U0h。这个 U0h 很可能本来就是负数(赔本运营),但这没关系,谈判破裂点可以是负值。
如果某篇论文或你复现时把 U0i 设成 0 或者随意抬高基准收益,那么乘积项可能没有可行解,或导致某一方拒绝合作。还有一种更隐蔽的问题:风光主体的独立收益不是固定数,可能随典型日风资源、光照条件变化,所以 U0i 本质上要每个典型场景单独算一遍,不能全局用一个数。
我在实际搭建算例时,习惯先把三个独立优化各跑一遍,把收益存下来,下一步“联盟+谈判”阶段再去调用。这样既保证逻辑清楚,也方便检查到底合作后的收益从哪里来。
3. 风–光–氢三主体的模型如何落到具体表达式
理论讨论完,回到最实际的部分:每个主体到底怎么建模。下面给出我常用的一套模型框架,你复现时可以按这个底子扩展细节。
3.1 风电场主体:收益来自上网和内部交易
风电机组在 t 时段的出力 Pw(t) 受预测风速约束。主体 w 的收益由三部分组成:
- 向电网出售的功率 Pw_grid(t) 按上网电价 cgrid 结算。
- 与氢能系统谈判确定的内部交易功率 Pw_h(t) 按内部电价 cwh 结算。
- 如果风电场没有全额消纳,产生弃风功率 Pcurt_w(t),则会有弃风惩罚或机会损失。
目标函数可以写为:
max Σ [ cgrid·Pw_grid(t) + cwh·Pw_h(t) − cw_om·Pw(t) − cw_curt·Pcurt_w(t) ]
同时满足功率平衡:
Pw(t) = Pw_grid(t) + Pw_h(t)
Pw(t) ≤ Pw_forecast(t)
这里有个注意点:内部交易电价 cwh 不是事先给定的常数,而应作为谈判变量或由最终支付分配反推出来。如果在一开始就把 cwh 当成固定输入,那就不是博弈,而是确定性调度了。正确做法是,先解联盟总收益最大化,再通过资金转移在三个主体间分配收益,内部电价是收益分配的结果变量。
3.2 光伏主体:模型结构类似,但要额外处理时段耦合较弱的特点
光伏主体 v 的模型与风电几乎同构,差异主要在出力上限由光照预测 Pv_forecast(t) 决定,且午间存在明显高峰。目标函数:
max Σ [ cgrid·Pv_grid(t) + cvh·Pv_h(t) − cv_om·Pv(t) − cv_curt·Pcurt_v(t) ]
约束:
Pv(t) = Pv_grid(t) + Pv_h(t)
Pv(t) ≤ Pv_forecast(t)
独立运行时,光伏只需要参考预测曲线,在中午时段出力大、可能面临低上网电价甚至弃光。合作谈判后,光伏可以把午间富余功率卖给氢能系统做电解制氢,从而提高整体收益。
3.3 氢能系统主体:电解槽、储氢罐、氢气负荷之间的时序协调
氢能系统是三方中唯一带有储能和能量转化的主体,也是最容易建模出错的部分。系统结构包括电解槽、储氢罐和氢负荷(也可能有燃料电池回电)。经典氢能系统运行时序约束如下:
电解槽耗电 P_el(t),输入电功率与产氢率 H_prod(t) 之间存在转换效率 η_el:
H_prod(t) = η_el · P_el(t) / HHV_H2(如果按热值折算)
氢负荷 H_load(t) 给定,储氢罐状态 S(t) 满足:
S(t) = S(t−1) + H_prod(t) − H_load(t) + H_buy(t) − H_sell(t)(如果允许外购氢或售氢)
罐容约束:
S_min ≤ S(t) ≤ S_max
爬坡约束主要作用于电功率与氢负荷的交互时段,尤其是氢负荷波动大、电解槽启动慢的情况。
氢能系统主体的收益函数:
max Σ [ ch2·H_load(t) − cgrid_buy·P_grid_h(t) − cwh·Pw_h(t) − cvh·Pv_h(t) − c_om·P_el(t) ](单位统一折算)
其中 ch2 是售氢价格,cgrid_buy 是电网购电电价,P_grid_h(t) 是氢能系统从电网买的电量。
氢能系统功率平衡:
P_el(t) = P_grid_h(t) + Pw_h(t) + Pv_h(t)
注意,如果只关心三个主体的运行协调,氢能系统的储氢罐必不可少,因为在没有储氢的情况下,电解槽必须完全跟随氢负荷,风光出力的波动很难被充分利用,合作收益会小很多。
3.4 主体间耦合关系:交互功率与支付变量的处理办法
通常有三类变量在主体之间传递:
第一类是电功率变量 Pw_h(t) 和 Pv_h(t),决定联盟物质流。第二类是购电成本、交易金额等支付变量。第三类是谈判后的收益分配系数或转移价格。
模型里要体现个体理性约束:Pi 合作后的收益 ≥ 独立运行时的收益 U0i。这个约束不是自动满足的,需要在支付分配阶段显式写入,否则部分主体在纳什谈判后不但没受益,反而成了“公益发电”。
4. 用ADMM分布式求解纳什谈判模型的关键细节
许多论文采用ADMM(交替方向乘子法)来求解这类博弈问题,原因简单直接:多主体各自的数据不公开,分布式算法可以实现“数据不出域、只交换交互功率”。不过ADMM并不是唯一解,也不一定在所有规模下都比集中式好,初学者要理解它的适用边界。
4.1 为什么风光氢问题适合用ADMM解
在集中式模型中,一个总目标函数里同时包含风电、光伏、氢能的变量和约束,所有内部数据默认全局可见。而在多主体合作博弈的场景中,各主体不太可能接受“把所有成本参数交给第三方统一调度”的前提。ADMM 允许每个主体只求解自己的子问题,通过网络交换交互功率收敛到共同解。
另一个实际原因是,这类包含电解槽启停、储氢罐动态的模型往往带有整数变量,集中式模型变量规模一大,求解时间会明显增加;分布式求解把原问题切成三个小问题,每个小问题规模变小,对中型算例反而更灵活。
4.2 一致性约束怎么构造:主体局部变量与全局交互功率
在风–光–氢三主体里,存在一个自然的一致性约束:风电输出的 Ps_w_h(t) 必须等于氢能系统接收的 Pw_h(t);光伏同理。
ADMM 标准形式会引入一个全局变量 Z(t),把原问题改写成:
min Σ f_i(x_i),s.t. x_w_h(t) − Z(t) = 0,x_v_h(t) − Z(t) = 0
x_i 是各主体局部决策的交互功率,Z 是共享变量。每个主体迭代求解带增广拉格朗日项的子问题,再更新乘子。
实操中我使用步长惩罚系数 ρ,越大算法越容易收敛,但过大会让变量在迭代初期剧烈波动。一般取 0.5~2 之间,视功率量级而定。
ADMM 迭代结构(伪代码):
code复制初始化: 风电交互功率 Pw_h^0, 光伏交互功率 Pv_h^0, 乘子 λ^0=0
重复:
1. 氢能主体接收 Pw_h^k, Pv_h^k,求解自身子问题,更新 P_el, S, H_prod
2. 风电主体根据氢能返回的需求,求解自身子问题,更新 Pw_h^{k+1}
3. 光伏主体同样求解自身子问题,更新 Pv_h^{k+1}
4. 计算平均交互变量 z^{k+1} = (Pw_h^{k+1}+Pv_h^{k+1})/2
5. 更新乘子 λw^{k+1} = λw^k + ρ(Pw_h^{k+1} − z^{k+1})
6. 更新乘子 λv^{k+1} = λv^k + ρ(Pv_h^{k+1} − z^{k+1})
判断原残差和偶残差是否小于容差
这一步里的 z 更新很关键,它把“风电说自己送了多少”和“氢能自己接收了多少”拉到同一个基准点上。如果直接把 Pw_h 和 Pv_h 在各自子问题里固定成一个数,那就不叫分布式解了,容易出现迭代震荡。
初始乘子对收敛速度影响不明显,但初始功率取独立运行时的边界值或零值差别较大,建议先用集中式求解一次作为参考值(如果实验环境不在意隐私),或者用冷启动法调多组初值。
4.3 收敛判据与迭代容差怎么设才能既快又稳
工程上常看两条残差曲线:
- 原始残差:r^k = Pw_h^k + Pv_h^k − z^k(或单独看每个通道),反映一致性约束不满足程度。
- 对偶残差:s^k = z^k − z^{k-1},反映全局变量变化幅度。
判据可以设定为 max(r_k, s_k) ≤ ε,ε 取 1e-4~1e-6 比较常见。氢能系统中储氢罐状态等式约束是强耦合的,如果储能初始状态没设置好,有时需要几十步甚至上百步迭代才能收敛。
我习惯在迭代 50 次后画一下残差曲线,若出现来回摆动而残差不降,优先怀疑 ρ 太大或太小的原因。还要注意交互功率的单位一致性问题,如果风电按 MW、氢能电解槽却按 kW 建模,初始不统一会导致所有残差量纲错乱,算出来的“默认收敛”没有任何意义。
5. 仿真算例怎么搭、参数怎么设、图怎么出
前面的模型和算法只是“骨架”,实际复现时最耗精力的往往是算例设计和参数赋值。下面用一套我常用的中规模算例作为示例。
5.1 典型日数据与成本参数参考
建议选择夏季光照强、冬季风大的两个典型日分别测试,这样比较有说服力。单日时间尺度取 24 小时,步长 1 小时;
主要设备容量和参数可以参考下表(这是一组常见文献量级的参考值,你再结合自己的算例调整):
| 参数项 | 数值 | 备注 |
|---|---|---|
| 风电装机容量 | 100 MW | 出力倍数取 0~0.95 |
| 光伏装机容量 | 80 MW | 出力倍数取 0~0.9 |
| 电解槽额定功率 | 50 MW | 转换效率 60% |
| 储氢罐容量 | 2000 kg | 初始储氢 30% |
| 氢负荷 | 800~1200 kg/h | 可分时变化 |
| 上网电价 | 0.45 元/kWh | 可设峰谷分时 |
| 电网购电电价 | 0.6 元/kWh | 高于风光售电价格 |
| 售氢价格 | 35 元/kg | |
| 弃风弃光惩罚 | 0.2 元/kWh | 体现消纳压力 |
风力、光伏出力的典型曲线,可以从开源数据或历史气象数据中提取,不必凭空捏造;关键是两条曲线在时间相位上要有互补性,比如白天光伏高、夜间风电高,方便展现合作和储能的价值。
约束边界需要注意:储氢罐储氢的最小储量不能设成 0,由于氢气系统每天要从较低储量开始逐渐调节,建议设 S_min = 20% S_max,否则终期约束和初始约束会产生矛盾。
5.2 核心结果图至少需要哪几张,每张想说明什么
评审或答辩时最关心的几个点,基本就是论文需要输出结果图的地方:
- 合作前后的各主体收益对比柱状图:直接展示纳什谈判结果是否使每个主体收益提升,这是验证个体理性的第一张图。
- 各主体间交互功率曲线图:风电、光伏输送给氢能系统的功率随时间变化,看是否存在弃风弃光时段被有效消纳。
- 储氢罐储氢量与电解槽功率时序图:说明氢能系统的运行是否合理,储氢状态是否越限。
- 谈判前后电网购电功率对比曲线:看氢能主体是否显著减少了向电网购电,这也是“多主体协同”提升可再生能源本地消纳率的关键指标。
- ADMM迭代残差收敛曲线:验证算法收敛性能,审稿人常用的图。
如果案例扩展到多典型日,还需要加表格展示不同季节、不同风光场景下的收益和消纳情况汇总。
5.3 结果解读最常见的误区:分钱之后总收益哪里去了
初学者算完结果常会问:为什么联盟总收益不是三个主体各自增加收益的直接加总?原因是联盟总收益还包含系统内部的购电成本转移。风电卖给氢能系统的电,对联盟来说不能又算售电收入又算购电成本,只能算一次。支付分配阶段,内部功率结算金额只是调节变量,并不增加联盟总产出。
所以看三主体收益变化时要明确:氢能系统的收益增加可能来自以较低内部电价替代高价电网购电;风电、光伏的收益增加来自消纳了原本要弃掉的电量;三者的个体收益之和理论上应等于联盟整体收益。如果差额较大,很可能说明你在第二个分配子问题中没有加入总收益守恒约束,这是很常见的编码错误。
6. 复现过程中最值得记住的几个坑
最后分享几段真实的排坑经验,这些大多是论文里不会写,但我实际踩过或帮人排查过的问题。
6.1 谈判破裂点基准收益算错,后面全白做
整个模型的第一步就是算三个主体独立运行时的收益。这里的一个坑在于:独立运行时,风电场和光伏电站如何处理“卖不掉的电”?有的文献假设全额上网,风电场电全部卖电网,光伏也一样;也有的文献假设超过一定比例后只能弃掉并产生惩罚。
两种假设下的 U0w 和 U0v 差异很大,直接影响纳什谈判的可行性。建议至少做两组对比:独立运行时全网全额消纳、独立运行时允许一定弃风弃光。只有后者体现的合作空间才真实可信,因为如果独立运行本来就能全额消纳,风光系统为什么要和氢能合作?这是个逻辑问题,不是数学问题。
6.2 储氢罐约束导致迭代不收敛,优先查初值
ADMM 迭代时,储氢罐的跨时段递推约束对状态序列非常敏感。如果初始储氢量 S(0) 设置过高或过低,而终端时刻又允许自由变化,那么氢式子问题的可行域与风电、光伏送电功率的区间可能无法匹配,导致每次迭代都要大范围修改电解槽出力,使得交互功率残差反复振荡。
解决方法是先用集中式模型做一个可行性测试:在给定风光功率范围内,看是否存在一组 Pw_h(t)、Pv_h(t) 能让氢能系统的储氢量停留在上下限内。如果没有可行域,再调氢负荷曲线或扩大储氢量,别急着调 ADMM 参数。
6.3 迭代权重量纲不一致,收敛判据形同虚设
如果功率用 MW 表示、成本用万元表示,或一方的目标函数数量级在 1e2,另一方在 1e6,ADMM 乘子更新时很容易出现“大数吃小数”。
建议把每个子问题的目标函数数量级调整到相近范围,或者对交互功率进行标幺化处理。坐标归一化不是“为了好看”,而是直接影响分布式算法的收敛表现,尤其是增广拉格朗日项的权重 ρ。
6.4 案例设计只有单一场景,审稿人会很不满意
只做一天 24 小时例子的论文,结果往往不具有代表性。你至少要构造三类场景:强风弱光日、弱风强光日、风光双低日。每类场景下再区分“合不合作”、“是否允许内部购电”,才能体现出纳什谈判下合作策略的鲁棒性。
更进一步的扩展思路很多:把二氧化碳排放约束放进去做低碳经济调度,引入绿色证书交易或碳交易形成新的可谈判收益,或者把氢能系统扩展为“电–氢–气–热”多能互补系统,让主体之间不仅有电力交易还有氢、热交易。这些方向跟纳什谈判结构是兼容的,每个方向都能派生出新的模型和算例。
我在实际应用里还有一个小习惯:先不管分布式算法,把集中式两阶段模型完全跑通,得到正确的最优解;再改用 ADMM 做分布式求解,并把收敛结果与集中式结果对比。这样一旦分布式结果有偏差,可以确认是算法收敛问题而不是上层模型逻辑出了问题。等你跑通了第一个风–光–氢三主体纳什谈判算例,这套“建模–拆解–求解–验证–扩展”的流程,就能很顺畅地平移到其他多主体综合能源系统研究中去。
