纳什谈判与ADMM:风-光-氢多主体系统合作优化调度方法
在电力系统优化这个圈子里“纳什谈判”这组关键词最近两年出镜率相当高。尤其配上“风–光–氢”、“多主体”和“合作博弈”之后它就变成一个完整的工程问题风电、光伏、氢能这几个独立运营的主体凭什么要联合起来规划出力联合之后多赚的钱或多省的弃电怎么分每个主体又如何在自己的算力和数据边界内完成计算这里说的“风–光–氢系统”不是把三类设备堆在一个园区里那么简单。它通常包含风电场、光伏电站、电解水制氢单元、储氢罐和燃料电池或者直接卖氢再加上与电网交互的关口。风电和光伏的出力天然波动制氢负荷又具备一定柔性——既可以当可调负荷吃多余电能也能在电价高时停机反向供电。这种结构天然具备“多主体、多时间尺度、强不确定性”的特征。这篇文章面向的是做新能源消纳策略、园区综合能源调度、微电网优化的工程师和研究生。我假定你至少有电力系统日前调度的基础但不要求你先啃过博弈论教材。我会把合作博弈怎么谈、纳什谈判怎么算、ADMM怎么分下去求解以及分布式求解里的坑一步一步讲清楚。遇到公式的部分我也尽量用口语化的解释和实际数据串起来。1. 多主体“风–光–氢”系统为什么要谈判1.1 系统构成与运行特点一个典型的风–光–氢多主体系统基本盘是这样的风电场和光伏电站各自有出力曲线和成本曲线氢能单元内部又有电解槽、压缩机、储氢罐、燃料电池这几件套。向外看整个系统跟上级电网有一点可能双向的交互通道向内看风、光、氢三个主体之间通过物理母线或者氢气管网发生耦合。运行特点有三条条条都影响建模强不确定性。风电和光伏的预测误差在日前尺度可能接近20%这直接决定“联合优化”的价值有多大。正因为单个风光主体不敢把出力计划定得太激进才需要氢负荷去“兜底”报价。多时间尺度。电解槽响应速度在分钟级到小时级之间燃料电池也能在十几分钟内并网。而交易结算往往以小时为最小单位所以模型里通常取1小时间隔把储氢的SOC约束按天衔接。利益主体异质。风电场关心的是上网电量和弃电率光伏电站除了电量收益还关心出力波动对考核的影响氢能运营商关心电解槽的利用小时数和售氢价格。三者的目标函数形式都可能不同放在同一个总目标里硬算是不符合实际的。1.2 多主体合作的内在动机如果三方各自为政——风电按自身最大收益报价光伏只考虑自己的出力最大化氢能运营则按固定电价购电——最后系统会出现两种典型坏结果第一种是弃风弃光。氢能单元如果按固定电价采购电力它没有激励去配合风电的夜间大发而风电场又不愿意低价卖给氢能运营商因为这会压低它自己的平均上网电价。结果就是夜间风大时电送不出去只能白白弃掉。第二种是削峰填谷能力闲置。电解槽本来可以在电价低谷多吃电、在电价高峰少吃甚至反向供电但如果没有跨主体协调氢能运营商看不到其他主体的实时状态只能按照自己的市场电价曲线行动灵活性完全发挥不出来。合作动机就藏在两种坏结果里。风电场让出一部分低电价时段给氢能单元氢能单元在夜间多制氢、白天电价高时把储氢放电或者卖氢这会让联盟整体收益比各自单干之和更高。高出来的部分就是“合作剩余”也是纳什谈判要分的东西。只要分配合理每个主体的收益都不低于单干合作就能谈成。1.3 为什么是纳什谈判而不是别的博弈模型这一步很多人会迷惑那么多博弈论工具为什么偏偏是纳什谈判我个人的理解是它正好卡在“合作博弈”和“非合作博弈”之间。如果纯用非合作博弈比如主从博弈、古诺模型每方都在追求自身最优最后得到的往往是一个次优纳什均衡——帕累托改进空间没有被利用。如果纯用合作博弈里的Shapley值做分配计算量大而且要求联盟内所有子集的收益都可观测在多属性收益场景下很难落地。纳什谈判做的是一件事它先假设所有主体“坐下来谈”达成一个有约束力的合作协议然后告诉你“在满足帕累托最优、对称性、线性变换不变性、无关选择独立性这四个公理的前提下支付向量应该长什么样”。这个解恰好可以通过求解一个最大化问题得到工程上都方便用现有优化器实现。这也是这几年它在综合能源系统研究里频繁出现的技术原因。2. 理论基础合作博弈与纳什谈判的计算框架2.1 合作博弈的基本定义合作博弈完整描述需要三个东西参与者集合 N、特征函数 v(S)任意子联盟 S ⊆ N 可获得的收益、支付向量 x。其中代表“分歧点”的约定非常关键为什么两个主体谈判时基准线不能是0因为如果某主体不参与合作它还能保留自己独立运行时的收益这个收益就是它在谈判桌上的“保底筹码”。在风–光–氢系统里分歧点通常取各个主体独立运行时的最优收益记为 f_i^0。合作之后每个主体拿到的收益必须满足 x_i ≥ f_i^0这被称为个体理性约束。不满足这个约束的合作协议哪怕联盟总收益再高也没人会签字。2.2 纳什谈判的公理与解析式纳什在1950年提出的谈判框架核心是四个公理。我不打算全部抄定义只讲它们在工程上意味着什么帕累托最优能改进就改进谈下来的结果不能有人还能继续获益而不损害别人。对称性除了收益边界本身博弈规则不偏袒任何一方。这保证分配公式不会因人而异只管“每个主体的处境数值”。线性变换不变性如果所有人的收益都乘同一个系数、平移同一个常数谈判结果也按相同方式变换——也就是不同货币单位下结论一致。无关选择独立性如果在更大的可行集合里谈出的解落在某个子集里去掉集合外部选项后解不变。这条保证了解不会被“扰乱选项”带偏。满足这四个公理的唯一解是最大化纳什乘积max ∏(u_i - d_i)其中 d_i 是分歧点u_i 是合作后的支付。在电力系统模型里目标函数是成本最小化时需要对上式取负号或把收益形式写成 d_i - c_i 的乘积形式来适应优化器的最小化习惯。2.3 一个生活化的分配实例我知道直接上公式有些人会觉得抽象先用一个例子把纳什谈判的精神说清楚。假设A和B两个同事合租通勤车。A不开车上班打车要100元B打车要50元两人一起拼车只需120元。合作之后总成本是120比单干150省了30。问题是怎么分摊120元。按人数均摊A出60B出60A省了40B却比原来多付10元原先只要50他肯定不签。纳什谈判的做法是求两人“节省额”乘积最大A分得 x_A 元B分得 x_B 元满足 x_A x_B 30且 x_A, x_B ≥ 0最大化 x_A × x_B。得到各分15元于是A付85、B付35都比单干省而且分配结果正好落在帕累托边界的中点。工程上风–光–氢系统的“省下来的30元”就是联盟增发、减少弃电和制氢收益提高带来的总增量。各主体谈的“分摊比例”就是各自增收多少。逻辑完全一样只是约束和变量多了几十上百个。3. 从理论到代码风–光–氢多主体优化运行的建模与分布式求解3.1 主体独立运行模型分歧点求解先算清楚分歧点。风电场独立运行目标是自己收益最大max f_1 Σ p_w(t) × λ_1(t) − C_w约束是风电出力上限 P_w^(max)(t)、爬坡约束以及电量平衡。光伏同理max f_2 Σ p_pv(t) × λ_2(t) − C_pv氢能单元独立运行目标是通过购电和售氢的差价获利max f_3 Σ [−C_elec(t) H_out(t)×π_H2(t)]C_elec(t) 里包括电解槽购电成本、储氢运维成本。这里有一个计算细节容易踩坑独立运行时氢能单元的购电价格不一定等于电网实时现货价格。很多场景下它其实有一个内部结算电价——不同园区的结算规则不同。为了方便对比通常都按同一个外部电价映射。三个独立问题各解一次得到的 f_i^0 就是分歧点。3.2 联盟联合优化模型联盟模型把三套约束放在同一个优化里目标函数是纳什乘积这里转换成了最小化负对数的形式min − Σ ln(u_i − d_i)每个主体的效用 u_i都拆成它自身目标函数的线性表达。比如风电场可以写成u_1 Σ p_w^net(t) × λ_1(t) − C_w R_1其中 p_w^net(t) 是风电向外部系统实际供出的电功率R_1 是从新能源配额碳收益、绿证等里分到的那部分。很多人做这一步时容易忘记在联合模型里加入联络线交换功率的约束。比如风电发出的电一部分卖给电网一部分直接进电解槽这两条路径必须分开建模。简单做法是设 p_w_total p_w_to_grid p_w_to_h2把 p_w_to_h2 当作耦合变量。联盟整体还包含一个系统功率平衡方程p_w_to_grid p_pv_to_grid − p_load p_fc_discharge p_h2_consume p_exportp_h2_consume 是电解槽消耗的电p_fc_discharge 是燃料电池输出p_export 是向电网出售的功率。储氢罐的动态约束也要进来E_h2(t1) E_h2(t) η_elec × p_h2_consume(t) − H_fc(t) / η_fc注意 η_elec、η_fc 分别表示电解槽制氢转换效率和燃料电池发电效率。3.3 纳什谈判模型与ADMM分布式求解的完整思路联盟模型如果集中求解数据上所有主体必须把成本函数、设备参数全部上报至中心。这种模式在学术上是合法的但在真实系统里常遇到两个阻力其一不同企业之间不愿意共享内部成本信息其二模型一旦规模扩大中心计算负担和通信压力也会上升。分布式求解因此成为工程落地的重点。用ADMM交替方向乘子法拆这个纳什谈判问题基本思路是把联盟优化拆成几个子问题通过交换“边界变量”协调。以风–光–氢为例耦合变量主要是三类风电供给电解槽的功率 p_w_to_h2光伏供给电解槽的功率 p_pv_to_h2氢能单元向系统回送的放电功率 p_fc_discharge如果存在。将各子问题的本地变量和目标约束写成增广拉格朗日形式。第 i 个主体在迭代 k 步时的子问题为min f_i(x_i) ρ/2 × ‖x_i − x_global λ_i/ρ‖²其中 x_global 是上一步所有主体交换变量后的平均值λ_i 是拉格朗日乘子。具体迭代顺序是初始化设定迭代次数 k0对所有主体的本地耦合变量赋初值λ_i0并行求解各主体子问题。此时每个主体只需要知道自己的设备数据以及上一次的全局耦合变量平均值收集各主体的耦合变量值计算新的全局平均值 x_global^(k1)更新对偶变量 λ_i^(k1) λ_i^(k) ρ × (x_i^(k1) − x_global^(k1))计算原始残差 r ‖x_i − x_global‖ 和对偶残差 s ρ × ‖x_global − x_global_prev‖检查是否满足阈值不收敛则回到第2步继续迭代收敛则进入下一时段或输出结果。3.4 参数选择与收益分配的后处理ADMM里有一个超参数 ρ 非常影响实用性。ρ 太大收敛快但容易振荡ρ 太小迭代步数明显增加。我在测试里习惯用 ρ 0.5~2 作为初值再根据残差曲线逐步调整。另外一个实用技巧是使用残差平衡法若原始残差r远大于对偶残差s就增大ρ反过来则减小ρ。纳什谈判模型在分布式求解完成后还要做一次后处理把收敛时得到的全局变量代回各主体的独立子问题重新算出每个主体的收益 u_i。由于纳什谈判模型本身保证了帕累托最优与个体理性那么 u_i − f_i^0 就是每个主体应得的合作剩余份额。工程报告里通常把这个差值作为“合作收益分配表”输出同时不应只在结果里给一个总额最好把电量收益、绿证收益、辅助服务收益分别列出来方便不同团队审核。4. 实操中的重要细节与坑4.1 收益分配与谈判破裂点处理最常见的坑是联合优化结果里某个主体的收益低于独立运行收益。理论上纳什谈判会保证个体理性但实际模型里只要你把约束或目标函数写错一种常见写法个体理性就会被破坏。比如有些实现先把总收益最大化再用另一套公式分钱分钱公式又只考虑了联盟收益没检查 x_i ≥ f_i^0。解决方法是在纳什乘积的目标函数中显式加入 x_i ≥ f_i^0 εε 是很小正数把分歧点 d_i 的求解和联合优化放在同一个脚本里不要听了业务方“先随便算一下”就用手工填一个数若某个主体在子问题里发现“合作收益低于单干”要自动返回谈判环节重新迭代而不是直接输出最优解。4.2 ADMM不收敛的排查ADMM在理论上对凸问题保证收敛但实际新能源模型常有非凸项导致在迭代中端掉。我遇到过的典型案例是电解槽的开启次数约束带进了整数变量ADMM处理不了这种0-1变量直接进入耦合约束的情况。应对思路有三种把整数启停变量从耦合约束中剥离让它在本地子问题里求解ADMM只协调连续变量功率变量对非凸项做凸松弛如线性化成本曲线等ADMM收敛后再做一次MIP修复采用ADMM的近端变体对每个子问题目标加一个小的二次惩罚项增强数值稳定性。4.3 风光预测不确定性的处理前面说过日前预测误差约20%如果谈判模型只基于单点预测输出结果会过于乐观。实际项目里我建议做两件事把风光预测出力的上下区间加入约束即 p_w(t) ∈ [P_w_pred_low(t), P_w_pred_high(t)]对纳什乘积目标做滚动时域rolling horizon更新每运行1小时就把最新预测代入重新求解一次而不是死板执行日前计划。这样做之后有个直观收益电解槽在预测产氢量偏低时会自动增加多余购电量在预测偏高时会减少购电储氢SOC始终维持在偏安全范围内不会因为单日预测失误而出现大规模氢气缺口。4.4 工程落地中的分布式计算架构分布式ADMM听起来复杂实际落地时可以采用非常轻量的架构。每个主体部署一个本地优化模块一台中心消息路由器只负责收集全局变量平均值和广播数据交换量很小。我在一个园区级项目中实测每天96个时段的调度迭代100次以内就能收敛单时段的本地求解耗时不超过2秒。所以对这种规模的工程应用其实根本不需要上“数字孪生”或者“区块链可信计算”这类重方案一台普通工控机加几根网线就够了。5. 常见问题速查与未来的横向扩展5.1 常见问题与解决方案速查表这里把我在复现和真实项目里反复遇到过的坑整理成一张表保存下来能省不少排查时间。现象主要原因处理方法某主体合作后收益低于独立运行缺少个体理性约束或分歧点算错在纳什乘积目标里显式加 x_i ≥ f_i^0ADMM迭代步数异常多惩罚参数ρ过小用残差平衡法调整ρ初始0.5~2迭代后期解振荡ρ过大或存在整数耦合变量降低ρ或将整数变量放在本地子问题中谈判结果对预测误差极敏感单点预测输入未考虑不确定性区间引入预测区间约束滚动时域更新多个主体收益加总不等于联盟总收益缺失耦合变量统一项检查联络线功率和氢流向约束是否封闭分布式求解后无法复现集中式结果子问题可线性化系数不一致统一同一时刻的量纲与单位检查潮流约束写法5.2 与现有调度系统的对接方式纳什谈判分布式优化运行要真正进入工程不能作为孤岛存在。它需要和现有的SCADA、日前调度、实时AGC系统配合。我实际采用的对接方式很简单把纳什谈判模块的输出各主体联络线功率计划、购氢计划和储氢SOC曲线写成标准CSV日前调度系统读取后自动生成报价曲线实时控制模块按5分钟滚动刷新谈判结果。有一个细节需要注意谈判模块输出的计划是小时级而AGC用的是分钟级直接平滑插值可能违反爬坡约束。所以CSV里要额外包含各时段的爬坡限制让实时控制模块在插值前先做一次可行性检查。5.3 向更多主体和更长时期扩展这套方法并不只适用于风–光–氢。理论上很自然地能扩展到包含储能系统、新能源电动汽车聚合商、工业可调负荷的多主体场景。只要每个主体都能写出“独立运行收益”和“联合运行之后的成本函数”纳什谈判框架就可以复用。往更长的时间尺度走可以把氢储能的跨周、跨月约束加进SOC模型此时需要把月内储氢的收尾库存作为终值约束对中长期收益做资本化折现。有一个方向上我认为值得强调把碳交易收益放进博弈模型。氢气本身可能是绿氢或者灰氢如果按碳足迹计价联盟的总收益函数会变得更复杂但同时也更贴近政策环境。把碳收益作为额外的“商品”进入纳什乘积同一个框架依然适用。6. 我个人的实操体会项目做了几个月之后我越来越觉得纳什谈判这套理论最大的价值不是“算出某个精确数字”而是给合作提供了一个可审计、可辩护的分配逻辑。实际谈判桌上各单位关心的往往不是方案的数学最优性而是“凭什么我家拿这么少”。纳什谈判的四个公理和个体理性约束在商务沟通中非常有用因为它能解释到“我们每个人至少保住了独立运行收益合作的增量按照帕累托最优边界分配”。如果让我给刚开始接触这个方向的人一个建议我会说先别急着上ADMM或者分布式算法先在单机集中式模型上把纳什乘积目标写对把联合收益算清楚、把分配表算出来。把“算清楚账”这一步走扎实后再引入分布式求解来应对多方数据孤岛问题你会少走很多弯路。最后再分享一个小技巧项目汇报时果断把“纳什谈判”落实到一张“合作收益分配前/后对比表”上最好把每个主体独立收益、联盟总收益、各主体谈判后收益三列数字并列。业务决策者看不懂公式但看得懂这张表——所以整个优化工作的说服力都集中在那三列数字上。这大概也是这个方向最实用、最容易被接受的呈现方式了。