共享储能微网调度的主从博弈建模与双层规划求解
发布时间:2026/10/2 4:58:27来源:尧图网络
1. 先看清问题共享储能为什么绕不开博弈1.1 各配各的储能算下来全是无效投资搞综合能源微网优化的人几乎都遇到过同一个尴尬场景某个园区微网光伏装机不小为了消纳和削峰填谷咬牙配了一套储能结果实际运行下来储能系统一天有十几个小时处于闲置状态。另一边同一条馈线上的另一个微网晚高峰想买电却顶着尖峰电价明明旁边的储能仓库里躺着闲着的电池就是没法用。这就是独立储能配置的核心矛盾单一微网的容量配置按照最大需量故障备用来设计但实际生产生活中大部分时间根本用不到那个峰值。储能不像变压器装上就有收益它是典型的用起来才有效益的资产闲置就是亏损。单靠一个微网去消化储能的充放电能力经济性往往撑不起投资回报。所以整条思路开始转向与其每个微网各买一套储能不如在几个微网之间共享一套储能系统用一个专门的运营商来建设、维护和调度。物理上储能站接在多个微网的公共节点商业模式上谁用谁付钱运营商按充放电量收费或者按容量收租赁费。这个问题的本质从买设备变成了改善资源配置。但共享一听就涉及到一套核心矛盾——多个微网不再是独立的个体他们围绕同一个储能展开竞争谁都想在低价时段多充、高峰时段多放谁都想让储能优先服务自己。这种场景下单纯做统一调度指令是不现实的因为各个微网的老板不是同一个人需求曲线不同、利益目标不同甚至算不过来的账都有分歧。统一调度在技术上可行在博弈上不可行。1.2 利益主体一多价格就成了解不开的死结微网之间共享储能表面问题是设备怎么接线、容量怎么分配实际问题是价格怎么定。储能运营商希望卖电价格高一点、充电价格低一点当然最好充电放电两头都赚微网则恰恰相反希望充电便宜、放电贵最好储能运营商让利。传统的微网优化调度本质上是一个单层优化问题所有设备归一个人管所有收益归同一个目标函数求解器算完直接给调度计划。但共享储能场景下决策权分散在两方手里储能运营商决定电价、决定储能充放电计划微网只能根据电价去调整自己内部的机组出力和负荷需求还要考虑跟其他微网之间的购售电关系。这就形成了典型的上下层博弈关系。更麻烦的是微网之间也有博弈。电价高的时候两个微网可能同时想多放电电价低的时候又同时想多充电。储能容量有限你今天充多了我明天可能就没得用了。这种竞争没法用一根管道、一个总表来解决必须在机制设计层面让每个微网自己表达需求并根据宏观电价调整自己的行为。还有一重复杂性来自微网内部的多元设备。所谓的综合能源微网不是只有电负荷还有燃气轮机、余热锅炉、电转气、光伏、风电、蓄热罐等等能量耦合关系复杂。电价变化不止影响电力调度还会通过电转气、电制热这些环节传导到热负荷和气负荷。也就是说博弈不仅发生在储能运营商与微网之间还发生在微网内部各能源子系统之间如何响应外部价格信号。这一层层叠下来单一目标优化彻底失效必须引入一个能描述分层决策独立决策主体的数学框架。主从博弈理论就是这个场景下最顺手的工具。1.3 主从博弈恰好卡在这个问题的缝隙里主从博弈学名Stackelberg博弈最核心的思想就是领跑者先动、追随者后动且后者必须基于前者的策略做最优反应。这跟共享储能的实际决策链条非常像储能运营商先公布充放电价微网收到价格之后根据自己的内部条件做优化调度进而产生实际的充放电行为储能运营商再根据微网的响应行为调整自己的定价策略直到双方都不愿意单方面改变策略达到均衡。用这个模型至少能解决三件事一是把双层决策结构显式建模运营商的定价策略和微网的运行计划不再是先规划再协调而是在同一框架内嵌套求解二是让价格成为协调信号微网不需要把内部全部数据交给运营商只需要根据价格做响应这在实际工程中非常重要因为微网不愿意透露成本数据三是把竞争关系纳入约束条件微网之间的相互影响通过共享储能容量约束和公共节点功率平衡体现而不是靠人为配额。很多研究者一开始会想到用纳什均衡去处理这个问题几个微网和储能运营商同时决策、同时达到均衡。但实际问题里储能运营商和微网之间根本不存在同时决策的信息基础永远是运营商先给价微网再看价下单。这个先后顺序决定了问题天然就是Stackelberg结构硬套Nash反而失真。后面我会细讲为什么选主从博弈而不选合作博弈或联合优化。2. 主从博弈框架怎么搭谁当领头羊谁当跟班2.1 角色分配领导者与跟随者的取舍搭建主从博弈模型的第一步不是写方程而是决定谁是领导者、谁是跟随者。这个选择非常关键因为领导者拥有先动优势能把自己的策略强加给整个系统在均衡结果中通常会获得更有利的地位。共享储能场景下最常见的做法是把储能运营商设为领导者微网设为跟随者。这里的理由很现实储能运营商掌握着容量分配的主动权它的定价直接决定微网的成本结构同时它自身只关心储能的充放电量、寿命损耗和套利收益决策变量相对集中。把这样一个相对简单的主体放上层下层做复杂微网调度模型层级清晰、求解路径顺畅。反过来行不行也有文献尝试把微网联盟放上层统一决策购电计划储能运营商放下层只能被动响应。这种设计在我看来有先天缺陷——微网之间的联盟本身就存在利益冲突一个联盟上层的决策变量根本不明确到底以谁的利益为上层目标是联盟总收益最大还是每个微网的单独收益最大如果联盟内部先做一轮Shapley值分配那问题的复杂度和不确定性会成倍上升反而不如把运营商放上层来得通透。这里有一个实操心得很重要如果你研究的是多运营商、多微网的大系统不要急着把所有主体全部往上塞。先把博弈层次控制在两层运营商和微网各占一层微网之间暂用同一价格下各自独立响应来模拟竞争关系。这样既能捕捉核心博弈又不至于让均衡解在数学上崩溃。2.2 决策变量与交互价格体系设计建模的第二个关键要点是定义清楚两层的决策变量和它们之间的交互物理量。上游储能运营商的决策变量包括充放电价、储能充放电功率甚至还包括备用容量租金。充放电价这里需要注意不能当成一个定值必须区分充电价和放电价而且这两个价格还得分时段否则微网没有任何理由在低电价时段多购电、高电价时段多放电博弈就没得玩了。下游微网的决策变量就复杂了燃气轮机的启停和出力、余热回收机组的热功率、光伏和风电的上网或自用比例、各类可平移负荷的启停时间、与上级电网的交换功率以及与共享储能的充放电功率。这里最重要的一个变量是微网向储能运营商购买的充放电量因为它是上下层博弈的耦合桥梁。储能运营商定电价微网根据电价决定充多少、放多少这些量形成实际结算依据。价格体系设计我建议采用两部制而非单纯电量价一部是容量费按微网占用的储能容量结算相当于预留费另一部是电量费按实际充放电量结算。容量费的作用是把储能容量占用这个稀缺资源显性定价避免微网在低电价时段无限充电、把储能当仓库用。实际算例里加入容量费之后微网会更精确地评估自己的储能需求系统的整体利用率反而提升这一点很多初做博弈模型的人容易忽略。2.3 为什么用Stackelberg而不是Nash或合作博弈我见过很多同学一上来就问为什么不用纳什均衡。这里做个简洁对比纳什均衡假设所有玩家同时行动、互相知道对方策略空间最后稳定在一个谁都不愿意单独改变策略的点。但纯纳什模型没法体现先动者对市场的塑造能力储能运营商定了价微网只能在这个价格下做最优响应——这是先后的非对称关系不是同时决策的对称关系。用Nash去近似Stackelberg结果往往会高估微网的话语权低估运营商的定价空间。合作博弈则是另一种思路假设所有主体愿意坐下来谈共享收益然后按某种规则分配。合作博弈在概念上很美好但落地几乎不可能因为微网之间是竞争关系没有哪个微网愿意主动把私有运行数据拿出来做大联盟规划。而且合作博弈需要解决超可加性和核心非空等一堆理论检查工程实用性远不如主从博弈直接。还有一个更实际的原因主从博弈可以用双层规划的标准数学工具求解析解或者用KKT条件转成单层问题交给求解器。这类工具链成熟、可复现性强非常适合工程落地。相比之下Nash均衡求解往往需要迭代寻找混合策略收敛性靠运气合作博弈的分配方案又在现实中容易被拒。所以主从博弈是理论贴切工程可解的折中最优解。3. 数学模型搭建目标函数、约束与KKT转换3.1 上层模型储能运营商的定价与收益确定框架之后进入模型搭建环节。上层是储能运营商的优化问题目标函数一般写成最大化运行收益$$\max ; \sum_{t \in T} \left( p_{dis,t} \cdot P_{dis,t}^{ESS} - p_{ch,t} \cdot P_{ch,t}^{ESS} \right) - C_{om}^{ESS} - C_{loss}^{ESS}$$其中$p_{dis,t}$和$p_{ch,t}$分别是储能运营商在时段t对外发布的放电价格和充电价格$P_{dis,t}^{ESS}$和$P_{ch,t}^{ESS}$是微网群在t时段实际从储能购买/充入的功率——注意这两个量不是运营商自己定的而是微网响应之后的结果。这就形成嵌套关系。约束方面上层要考虑储能自身的运行边界$$0 \le P_{ch,t}^{ESS} \le P_{rated}^{ESS}, \quad 0 \le P_{dis,t}^{ESS} \le P_{rated}^{ESS}$$$$SOC_{t1} SOC_t \eta_{ch} P_{ch,t}^{ESS} \Delta t - \frac{P_{dis,t}^{ESS} \Delta t}{\eta_{dis}}$$$$SOC_{min} \le SOC_t \le SOC_{max}$$还有价格上下限约束。价格不能定得太离谱现实中也要受电网目录电价约束所以通常设置 $p_{ch,min} \le p_{ch,t} \le p_{ch,max}$、$p_{dis,min} \le p_{dis,t} \le p_{dis,max}$具体数值可以按当地峰谷平电价区间去取。比如谷段充电价下限取0.3元/kWh峰段放电价上限取1.2元/kWh这样模型结果不会出现脱离实际的异常价格。这里要特别说明一个容易踩的坑运营商的收益函数里$P_{dis,t}^{ESS}$和$P_{ch,t}^{ESS}$是下层决策的结果意味着上层优化问题的可行域是被下层映射过的。换句话说上层不能想怎么定就怎么定必须考虑定这个价微网会不会来买、来买多少。3.2 下层模型微网的运行调度下层是每个微网的独立优化问题。以一个包含燃气轮机、光伏、储能、电热负荷的典型综合能源微网为例目标函数是最小化自身运行成本$$\min ; \sum_{t \in T} \left( c_{buy,t} P_{buy,t}^{grid} - c_{sell,t} P_{sell,t}^{grid} c_{gas} F_{GT,t} p_{ch,t} P_{ch,t}^{ESS} - p_{dis,t} P_{dis,t}^{ESS} \right)$$这里$c_{buy,t}$和$c_{sell,t}$是微网与上级电网的购售电价$c_{gas}$是天然气价格$F_{GT,t}$是燃气轮机消耗的气量。执行层面$p_{ch,t}$和$p_{dis,t}$由上层给定微网把它们当作已知参数决策自己的充放电量。注意式子里面用了一个巧妙的设计$p_{ch,t} P_{ch,t}^{ESS}$是充电成本$p_{dis,t} P_{dis,t}^{ESS}$是放电收益一正一负微网的充放电行为直接受储能价格引导。下层的约束包括微网内部的电功率平衡、热功率平衡、气功率平衡燃气轮机爬坡和出力上下限与上级电网的交换功率限制以及储能SOC状态方程等。对于综合能源系统电转气设备还要增加电-气耦合约束燃气锅炉和余热回收之间也要满足热力平衡。这些约束的完整程度直接决定模型中微网响应价格的行为是否真实不能为了省算力把关键约束砍掉。这里有个细节下层每个微网都是独立求解的但在共享储能场景下它们的充放电需求共用同一个储能物理容量。所以严格建模时下层各微网的充放电决策之和要等于上层储能的充放电量$$\sum_{n1}^{N} P_{ch,n,t}^{ESS} P_{ch,t}^{ESS}, \quad \sum_{n1}^{N} P_{dis,n,t}^{ESS} P_{dis,t}^{ESS}$$这个耦合约束在单层优化里是简单的求和等式但在双层博弈框架里它意味着每个微网的最优响应不能想充多少就充多少而是要通过价格机制去平衡竞争最终在均衡点满足总量约束。3.3 双线性项与强对偶把豹子关进笼子模型写完之后大部分新手会在这一步卡住下层是min问题上层是max问题两层嵌套没法直接交给求解器。这就是双层规划的经典难点。主流解法是对下层问题取KKT条件将整个双层问题转化为带均衡约束的单层数学规划MPEC然后再线性化处理。下层微网调度问题本质是线性规划。对线性规划来说KKT条件包含四部分原问题约束的可行性、对偶问题的可行性、驻点条件、互补松弛条件。前两部分是线性约束直接写出就行。麻烦的是互补松弛条件它形如 $0 \le \lambda \perp g(x) \ge 0$意思是拉格朗日乘子和对应的不等式约束不能同时松弛。此外上层目标函数里的 $p_{dis,t} \cdot P_{dis,t}^{ESS}$ 和 $p_{ch,t} \cdot P_{ch,t}^{ESS}$ 是价格变量乘以功率变量即两个决策变量相乘产生双线性项。要处理这个常用强对偶定理因为下层问题凸且满足Slater条件原问题最优值等于对偶问题最优值可以用下层满足KKT后的对偶目标与上层目标做等价替换把双线性项消掉。实际操作中这一步非常容易出现数值问题。举个例子强对偶之后会引入一组辅助变量和等式约束如果原问题约束的尺度差异大比如电价是元/kWh量级SOC是0到1量级功率是kW量级矩阵条件数会变得很差。我建议在写代码之前先把所有物理量做标幺化处理功率、电价、容量统一到同一量级否则CPLEX和Gurobi很容易报数值警告。4. 求解流程从双层规划到可计算的MILP4.1 为什么不直接硬解双层规划很多人会问既然现有的求解器这么强能不能直接把双层问题丢进去算答案是不行。原因很简单双层规划本身非凸、NP-hard上层每给出一组价格下层就要重新求解一次这个嵌套循环的搜索空间非常大。假设储能价格分24个时段、每个时段价格有10个可选档位下层有3个微网光是价格组合就有$10^{24}$种穷举不可能。更麻烦的是下层问题在给定价格下可能有多解或退化情形导致上层的目标函数值不连续经典的非线性优化算法比如序列二次规划在这种不连续目标下基本不收敛。所以标准的工程做法是降维打击把下层线性规划通过KKT条件转化为上层的一个均衡约束系统然后整个问题就变成一个单层的约束优化问题交给MILP求解器去处理。这样一改理论复杂度不变但实际求解效率大幅提升尤其是中小规模算例比如3-5个微网、24-72个时段Gurobi或CPLEX在几分钟内就能给出全局最优解或接近最优的解。4.2 KKT强对偶Big-M的标准套路下面给出一个可以直接抄的转换流程以储能运营商为上层、3个微网为下层为例第一步写出每个微网的下层优化模型确认它是线性规划。如果不是线性规划——比如含非线性效率曲线——先做分段线性化把非线性约束转成线性约束。第二步构建每个微网模型的拉格朗日函数写出KKT条件中的驻点条件、原对偶可行条件和互补松弛条件。这里要注意每一个不等式约束都要配一个拉格朗日乘子乘子数量多但大多是简单的上下界对偶乘子。第三步用Big-M法将互补松弛条件线性化。互补条件$0 \le \mu \perp (Ax-b) \ge 0$可以等价写成$$0 \le \mu \le M z, \quad 0 \le (Ax-b) \le M (1-z), \quad z \in {0,1}$$其中$z$是0-1辅助变量$M$是足够大的正常数。理论上M取所有约束上界的2-3倍就够但如果取太大比如10的8次方求解器会因为数值病态而收敛缓慢。第四步利用强对偶定理将上层目标函数中的双线性项替换为下层对偶问题的表达式。替换后上层目标变成线性函数。第五步将上层约束、下层KKT条件、强对偶等式合并为一个混合整数线性规划MILP调用求解器求解。这套流程下来原来的双层问题变成了一个可以求全局最优的MILP。我实测的体验是3微网系统、24时段、储能SOC离散到0.01精度Gurobi大约需要几十秒到几分钟。规模再大就得上分解算法或启发式算法了。4.3 外层智能算法与内层求解器配合的完整流程MILP解法在理论上是干净漂亮的但实际项目里有个致命问题当微网数量超过5个、设备模型加了离散状态燃气轮机启停变量之后MILP的整数变量动辄上万个直接硬解内存爆炸。这时候工程上更常用的是智能算法套线性规划的两层迭代法。具体做法是外层用粒子群算法或差分进化算法来优化储能运营商的定价策略每个粒子携带一组完整的价格序列24个充电价24个放电价内层把每个粒子的价格作为参数分别独立求解N个微网的线性规划调度问题得到收益响应值再把响应值传给外层做适应度评估更新粒子位置反复迭代直到收敛。这个方案最大的好处是把非线性的博弈问题分解成N个小LP 一个启发式搜索计算负担大幅降低。而且每个微网的LP相互独立天然可以并行计算开多线程之后速度会快很多。不过要提醒外层智能算法的收敛性没有MILP那样有理论保证可能出现目标函数不下降、粒子早熟等现象。我的对策是先用MILP求解一个简化算例去掉部分离散变量用它的最优解来校准智能算法的参数粒子数、惯性权重、交叉概率再回头跑完整模型。这样既保证精度又不至于让求解时间失控。归纳一下我常用的求解流程步骤操作工具/方法关键注意1数据准备微网负荷曲线、光伏风机出力曲线、储能参数数据时段对齐统一时区2建模Pyomo或YALMIP搭建双层模型变量命名规范方便排查3KKT转换对下层LP取KKT条件确认下层是线性规划4线性化Big-M法处理互补条件M取值要调试不能一刀切5求解Gurobi/CPLEX求解MILP注意数值稳定性6替代方案外层PSO内层LP大规模算例推荐7结果校验检查均衡稳定性和物理约束不越限对比单层优化结果验证改进幅度5. 常见问题与排查实录5.1 收敛震荡迭代不收敛的典型场景双层博弈迭代求解时最常见的故障是目标函数在相邻迭代间来回震荡始终达不到均衡。这类问题我在多微网算例里遇到不下三次根因大多在价格响应过于敏感。微网对电价变化非常敏感外层价格稍微调一点内层调度计划就剧烈变化导致储能容量分配出现跳变上层收益也随之跳变。解决这个问题的标准做法是给迭代加阻尼。具体来说更新价格时不直接用新粒子的最优值而是做加权平均$$p^{k1} \alpha p^{k1}_{candidate} (1-\alpha) p^{k}$$其中$\alpha$取0.3-0.5让价格变化平缓下来。还有一个更彻底的方案把上层目标函数改成带罚函数的形式微网响应偏离上次迭代值超过一定阈值时在上层目标中扣分这样能压缩搜索空间、避免跑偏。我实际测试过一个四微网系统不加速率的条件下迭代25次左右基本稳定加了阻尼之后12次就能收敛到同一均衡点而且均衡点质量更好上层收益略低但同时刻系统总成本也下降了社会福利更优。5.2 M值选取大了数值病态小了吃掉可行域Big-M线性化中的M值是整套MPEC转化里最需要手调的参数。M过大的后果是符号波动乘子和约束偏差的乘积超出求解器的数值容忍度求解器会误判约束可行性进而导致某些本应可行的解被排除或出现虚假的最优解。M过小的后果则相反会把本应满足的互补条件在取值范围上截断压缩可行域导致次优甚至错误的均衡点。我的建议是按照物理量纲逐条约束设置M而不是全局共用一个M。比如对储能功率约束的互补条件M取$P_{rated}^{ESS}$的2到3倍即可对购电功率约束M取微网购电上限的1.5倍对SOC约束M取SOC上限减去下限。逐条设置虽然麻烦但数值稳定性远超全局统一M。另外Gurobi的参数MIPFocus3和NumericFocus3在这种带有大M的模型里非常管用值得记一笔。5.3 均衡唯一性先手优势和多种均衡的问题做完博弈求解很多人会问这个均衡是不是唯一的。实话实说主从博弈的均衡在很多情况下不是唯一的。特别是储能运营商的价格上下限不对称、多个微网的结构高度相似时可能出现多个均衡同一个系统一组价格会导致微网A受益、微网B受损另一组价格正好反过来两组都满足KKT条件都稳定。处理多变均衡的实际思路是引入均衡筛选准则。我用的准则是帕累托改进优先在满足KKT条件的多个均衡解里选择让全体微网收益总和最大的那一组。这套准则的经济学含义是虽然运营商有先手优势但它定的价格如果让所有微网都活不下去合作基础就崩了所以均衡解要兼顾系统的可持续发展。实现上不复杂求解时加一个二次目标先解出最优上层收益再固定上层收益≥最优值的95%以微网收益总和最大为目标重新求解。5.4 参数敏感性算例结果好看未必靠得住最后一条是给拿这套模型写论文或做报告的人提个醒算例结果对参数设置极其敏感尤其是储能容量费系数、微网的购售电价差、燃气轮机效率这三类参数。我试过只把容量费从0.05元/kWh调到0.2元/kWh微网对储能的需求直接下降三分之一系统风光利用率掉了快10个百分点。倒不是说模型有问题而是主从博弈本身放大了参数变化的影响——价格体系一变所有决策主体的行为都跟着变。所以做结果分析时一定要做敏感性分析至少扫一遍储能容量、峰谷价差、负荷水平三个维度把均衡结果的变化趋势画出来。这样做有两个好处一是能证明模型结果不是凑参数凑出来的二是能帮决策者看清楚什么条件下共享储能真正有市场价值。6. 扩展思路与个人体会6.1 从源侧到需求侧博弈框架还能扩展最后再分享一点扩展思路。前面讲的是共享储能综合能源微网的标准场景其实这个主从博弈框架完全可以复用。比如把储能运营商换成虚拟电厂聚合商下层从微网换成大量柔性负荷用户博弈结构不变只是下层约束换成了可平移负荷、可削减负荷的约束。再比如把上层换成综合能源服务商同时售电、售热、售气下层微网的响应会从单一电功率变成多能耦合响应模型复杂度上了一个台阶但框架本身不需要推倒重来。另一个值得试的方向是把不确定性引入博弈。光伏和风电出力不确定时下层微网对电价的响应不再是确定性最优而是在期望收益下的决策问题。这需要在KKT转换之前先把下层问题写成随机规划或鲁棒优化博弈的均衡解变成分布式的均衡策略。数学上更难但更贴近实际运行调度。6.2 踩坑总结几个可以直接抄的建议根据我做这个方向的体会给后来者几条实用建议。第一建模之前先画清楚信息流图。谁给谁报价、谁给谁下调度指令、钱从谁流向谁全部画在纸上再写公式。很多人模型写到一半发现目标函数符号反了都是因为没理清耦合关系。第二不要一上来就追求全局最优。先把博弈模型跑通哪怕求解精度差一点把每个主体的收益变化趋势验证对了再回头优化算法。趋势对了说明模型逻辑正确趋势不对那一定是建模阶段就出了问题求解器再强也没用。第三底层数据一定要做归一化处理。储能商的收益和微网的成本,一个动辄万元量级、一个可能只有几百元,如果直接进同一目标函数,数值范围差的三个数量级会让求解器做大量无效搜索。把价格归一化到0到1区间,计算效率和稳定性都有明显改善。主从博弈这套方法在共享储能领域越来越受关注不是因为它名字唬人而是因为它的决策逻辑恰好匹配了工程实际中的先定价、后响应机制。只要记住上层定价要考虑下层反应下层响应要反馈到上层收益模型的骨干就立住了。在这个骨干上无论是往深度加设备细节还是往广度加参与主体都是水到渠成的事。
网站建设高端定制企业官网