ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

主从博弈与共享储能:综合能源微网双层优化建模与求解实践

主从博弈与共享储能:综合能源微网双层优化建模与求解实践 这个项目做下来最深的感受是“主从博弈共享储能综合能源微网”这三个词拆开看都不算新概念但把它们拧在一起就会逼你把商业模式、物理模型和算法实现全部重新捋一遍。这篇文章我就直接把这套东西摊开讲从为什么选这个框架到模型怎么搭、KKT条件怎么转、迭代怎么收敛再到算例里那些拧巴的数据怎么解读最后把我在代码层面踩过的坑一并列出来希望对做园区级能源优化、储能运营策略或微网调度的朋友有实际帮助。1. 项目立意的三条主线为什么非要这么组合1.1 微网侧的“多元供能”让运行优化变得棘手综合能源微网不是简单把几台设备接在一起它的核心特征是能源种类多、时间常数差异大、运行耦合强。我在前期梳理需求时发现典型园区微网里同时存在光伏、风电、燃气轮机、电锅炉、蓄热罐和电制冷机电、热、冷三条母线通过设备耦合在一起。比如燃气轮机发电的同时产生余热余热既可以进蓄热罐也可以直接供热电锅炉烧热水则是在电价低谷时替代燃气轮机供热从而把燃气省下来。这种耦合关系让“多能互补”听起来很美实际建模时全是耦合变量和耦合约束。这还不是最麻烦的部分。更麻烦的是如果一个区域里有多个微网每个微网都有各自的负荷曲线、设备容量和用能成本它们之间如果彼此独立运行就会出现一个典型的“错配”现象A微网中午光伏大发、用不完只能限功率B微网下午负荷高峰、电费昂贵。这种空间上的错配本质上就是缺一个可以跨微网搬运电量的公共资源池。我的结论是与其让每个微网自己配一套储能不如引入一座共享储能电站用容量租赁加充放电服务的方式服务多个微网。这个思路下运行优化问题就被拆成了“储能为谁充、为谁放、收多少钱”和“微网怎么根据价格安排自己的机组出力”两个层次天然适合用主从博弈来描述因为储能运营商和微网之间存在明确的先后决策顺序不是一个纯合作博弈问题。1.2 共享储能的经济性需要商业模式支撑共享储能最大的特点是容量复用率高。一个2兆瓦/8兆瓦时的储能电站如果只服务一个用电负荷很平稳的微网一天可能只需要充放一到两个循环大部分容量是闲置的。但服务三个负荷特性互补的微网同一块电池一天可能跑到两到三个循环单位容量的收益自然就提高了。经济账算下来微网侧不用承担储能建设的一次性投资只需按充放电量和租赁容量付费储能侧则通过错峰套利和容量服务费回收成本并获得利润。问题在于如果只按固定容量租赁费收费储能运营商没有动力去主动优化充放电行为如果只按充放电量收费微网又会希望电价越低越好。这时候就必须引入一个价格形成机制让储能运营商作为上层决策者发布充放电价微网作为下层跟随者响应报价并向上层反馈调整后的购售电功率而储能运营商再根据微网反馈的动作优化下一轮报价形成斯坦克尔伯格博弈结构。1.3 主从博弈框架在什么条件下才成立主从博弈不是万能的我在项目里反复确认过一个前提储能运营商必须拥有定价权而微网只能接受价格并调整自身的运行策略。换句话说储能侧是价格制定者负荷侧是价格接受者。如果微网数量很少且谈判能力很强或者储能运营商本身就是某个微网的子部门博弈结构就会变成合作博弈或者完全由调度中心集中优化再套用主从博弈反而是错的。此外信息结构也很关键。主从博弈要求下层微网在观测到上层价格后能够独立求解自己的优化问题并且把最优解返回给上层。如果微网之间的隐私约束很强不允许把任何内部运行数据给储能运营商那么只能走分布式优化比如ADMM如果双方愿意共享设备参数和约束那集中式优化也可以。我最终选择主从博弈是因为项目场景下储能运营商与微网分属两家公司、各自独立决策价格是唯一交互信号这就为双层建模提供了天然的物理与商业基础。2. 双层模型搭建从物理架构到数学表达2.1 系统拓扑与角色定义先明确物理拓扑。区域配电网上挂了三个综合能源微网编号为MG1、MG2、MG3另外挂一座共享储能电站储能电站由独立的运营商运营与三个微网都通过并网点连接。微网内部设备包括光伏、风电机组MG2有、燃气轮机、电锅炉和蓄热罐微网与外部电网之间有一条联络线允许从外部购电但不允许向外部电网倒送功率这是出于调度安全考虑算例里我直接设成P_grid 0。储能侧配置为锂离子电池额定功率2兆瓦容量8兆瓦时充放电深度设为90%自放电率每小时0.1%充放电效率各取95%。角色上上层是储能运营商决策变量是24小时内的充电电价和放电电价记为λ_c(t)、λ_d(t)以及储能自身的充放电功率P_c(t)、P_d(t)。下层是微网决策变量包括燃气轮机出力、电锅炉出力、蓄热罐充放热功率以及从储能买入或卖出的功率。目标函数分别是储能运营商最大化总收益微网最小化总运行成本。清晰定义完角色后我意识到如果只让储能运营商定电价而微网没有其他选择定价就会非常高因此必须给储能运营商设一个价格上限约束同时在模型里保留微网向外部电网购电的选项这样微网才不会完全被储能“套牢”博弈才真实。2.2 储能运营商的收益模型与约束储能运营商的目标函数写成数学形式是max Σ [λ_d(t) * P_d(t) - λ_c(t) * P_c(t)]这里P_d(t)是储能向所有微网释放的总功率P_c(t)是储能从所有微网吸收的总功率。注意储能运营商自身不关心某个微网的具体用能结构它只通过电价和总功率与下层交互。储能侧约束包括荷电状态递推方程SOC(t1) SOC(t) - P_d(t)/η_d * Δt η_c * P_c(t) * ΔtSOC上下限约束0.1≤SOC≤0.9充放电功率上下限0≤P_c≤2兆瓦0≤P_d≤2兆瓦以及时段内充放电互斥约束P_c(t) * P_d(t) 0。这个互斥约束在优化里是非线性等式直接交给求解器容易出问题我后面在算法里用整数变量加Big-M方式做了线性化。价格方面我设了上限约束λ_c≤0.4元/千瓦时、λ_d≤0.9元/千瓦时。这个约束很重要没有它的话上层很容易推出极端价格理论上能收敛但工程上完全不可用。我最初做优化时发现放电价跑到1.8元微网干脆一滴电都不买全部走电网博弈退化成了储能零收益之后我才理解必须让价格约束贴合微网的外部购电替代成本价格为0.85左右时微网才会在峰时段愿意买储能的电。2.3 微网运行模型的关键方程与耦合关系每个微网内部是独立的小型综合能源系统。以MG1为例它的设备包括额定功率0.8兆瓦的燃气轮机、0.5兆瓦的光伏、0.6兆瓦的电锅炉以及一个0.8兆瓦/2.4兆瓦时的蓄热罐。目标函数是最小化全天运行成本min Σ [P_grid(t) * π_grid(t) P_gas(t) * π_gas P_buy(t) * λ_c(t) - P_sell(t) * λ_d(t)]其中P_grid(t)是从外部电网购电功率π_grid(t)是分时电价P_gas(t)是燃气轮机耗气功率π_gas是天然气价格P_buy(t)、P_sell(t)分别是微网从储能购电、向储能售电的功率。电力平衡约束为P_PV(t) P_gas_elec(t) P_grid(t) P_sell(t) P_load(t) P_buy(t) P_EB(t) P_HP(t)注意P_buy和P_sell在同一时段不能同时非零这也是通过整数变量处理的。热力平衡约束为P_gas_heat(t) P_EB_heat(t) P_HS_dis(t) H_load(t) P_HS_ch(t)其中P_gas_heat是燃气轮机余热回收功率P_EB_heat是电锅炉制热功率蓄热罐的充放热也要满足容量和互斥约束。微网与储能的交互还有个特殊之处微网向储能售电的行为其实发生在光伏大发时段此时储能用低价吸收光伏电量等到晚高峰再高价放出。正是因为有了储能这个缓冲微网才敢在午间把光伏出力全部放开否则只能限功率弃光。我在算例里统计过不接入共享储能时三个微网的弃光量加起来约1.2兆瓦时接入后弃光量降到0.1兆瓦时以下这个指标变化非常直观。2.4 双向耦合博弈表达我先动你跟上主从博弈的交互逻辑可以概括为储能运营商先给定一组24小时充放电价三个微网看到价格后分别求解自己的运行优化问题将最优购售电功率反馈给储能运营商储能运营商根据反馈更新目标函数中P_c、P_d的值调整价格再发给微网如此循环。上下层的耦合变量就是充放电价与微网购售电功率。这个博弈要想有稳定解必须满足两个条件一是下层对上层每个给定策略都有非空最优响应集合二是上层能通过调整策略使得自己的收益最大而微网不会因为价格小幅波动而剧烈跳变。前者在微网优化问题是连续线性可解的框架下自然满足后者则需要在迭代算法中反复检验。我用的迭代框架其实就是不动点迭代具体算法流程是初始化电价λ微网解LP问题得到功率P_buy/P_sell代入上层模型更新λ循环直到价格变动小于阈值。需要说明的是这个迭代过程不保证必然收敛到全局纳什均衡但在我实测的场景下多起始点验证后基本都能收敛到同一组均衡价格结果可信度是比较高的。3. 求解链路实现KKT转换、线性化与迭代算法3.1 为什么要把下层问题替换成KKT条件双层的核心求解难点在于直接把两个优化问题嵌套在一起扔给求解器是行不通的因为上层目标函数中隐含了下层优化问题的最优解函数本质是一个带均衡约束的数学规划问题MPEC。求解MPEC最常用的方式之一就是把下层微网优化问题用其最优性条件替代也就是KKT条件从而把双层问题转化为单层问题。微网优化是一个线性规划问题它的KKT条件包括原问题可行条件、对偶问题可行条件、稳定性和互补松弛条件。把KKT条件作为约束加入上层储能运营商的目标函数中就能得到一个可以用商业求解器处理的单层混合整数线性规划MILP。实际操作的时候我对比过两种路径一种是用KKT直接转单层另一种是用迭代算法反复调用两层求解。KKT方法的优点是收敛速度快、解更精确但要求下层必须完全线性且凸迭代算法的优点是对下层模型结构宽容哪怕下层是非凸的也能尝试逼近缺点就是慢、且容易震荡。我这个项目里微网模型是线性的所以主路径用了KKT转换同时保留了一个迭代求解器作为交叉验证工具两种方法得到的结果一致性很好。3.2 互补松弛条件的线性化处理KKT条件里最棘手的是互补松弛约束例如0≤P_buy(t) ⊥ γ(t)≥0表示P_buy(t)和对应拉格朗日乘子的乘积为零。这种约束是非线性的不能直接交给MILP求解器。解决方法是引入二进制变量z和足够大的常数M把互补松弛转换成两个不等式P_buy(t) ≤ Mz(t)γ(t) ≤ M(1-z(t))。如果z1则P_buy可以非零但γ必须为0如果z0则γ可以非零但P_buy必须为0。这样逻辑就完整了。但这里有个大坑M的取值不能太大。我一开始为了保险把M设成1e6结果求解器直接陷入数值病态最优解里的价格出现振荡储能功率在相邻时段来回跳。后来我把M根据物理边界重新估计比如P_buy的M值设为微网最大负荷1.5兆瓦电价类乘子的M值设为15也就是外部电网最高电价加一个裕量求解速度和稳定性才恢复正常。这个经验真的值得记一下Big-M不是越大越好要贴合物理量纲。3.3 充放电互斥约束与整数变量的Big-M实现储能侧的充放电互斥约束P_c(t)P_d(t)0微网侧的购售电互斥约束P_buy(t)P_sell(t)0这两个约束本质上都是不可以在同一个时段同时买东西又卖东西。虽然物理上可以靠逻辑判断但优化模型里必须显式建模。我用了整数变量b_storage(t)约束写成P_c(t) ≤ Mb_storage(t)、P_d(t) ≤ M(1-b_storage(t))b_storage取1时强制P_d0取0时强制P_c0。微网侧同样引入b_trade(t)控制P_buy和P_sell互斥。需要注意的一点是整数变量会增加计算复杂度每个微网24个时段引入24个0-1变量三个微网加上储能侧一共96个0-1变量规模不算大。但如果微网数量扩展到10个以上整数变量数量会线性增长单纯用Big-M线性化求解时间会快速上升到那时候就可能需要换思路比如用深度学习代理模型替代下层优化或者用启发式算法直接搜索上层电价这些我在项目后期也做了预研但不在这次展开。3.4 迭代求解算法伪代码与收敛判据迭代求解的伪代码如下这个版本是我实际调试后稳定下来的初始化λ_c(t)0.25, λ_d(t)0.6迭代次数k0 重复 1. 将λ_c、λ_d下发给三个微网 2. 每个微网求解LPmin F_i(P_grid, P_gas, P_buy, P_sell) s.t. 电/热平衡约束、设备上下限、蓄热罐约束、购售电互斥约束 3. 收集所有微网的P_buy_i(t)、P_sell_i(t) 4. 计算储能运营商总收益 R Σ[λ_d*P_d - λ_c*P_c] 5. 求解上层收益最大化约束下的KKT修正问题得到新λ_c、λ_d 6. 检查收敛max|λ_c - λ_c| ≤ δ且max|λ_d - λ_d| ≤ δδ取0.001 7. 更新λ并令kk1 直到收敛或k达到最大迭代次数我设为300这里需要说明第5步中KKT修正问题的本质是带互补约束的MPEC实路上我用的是把KKT条件和上层目标放在一起的MILP而不是纯迭代。这里的循环主要用于多起始点的全局校验。多起始点方面我设置了五组初始电价低价偏置、高价偏置、跟随电网分时电价、完全平值以及随机值分别跑完整流程后对比收敛点和目标函数一致性很好时我才认为结论可靠。4. 仿真算例设计与结果复盘4.1 算例基础数据设备容量、负荷曲线与能源价格为了让结果有说服力我把三个微网设计成差异明显的场景。MG1代表工业园区负荷高峰在白天光伏装机0.5兆瓦燃气轮机容量较大MG2代表商业综合体负荷呈现双峰特性具备风电0.3兆瓦MG3代表居民社区负荷晚高峰突出光伏装机0.4兆瓦。三个微网的热负荷峰值分别是0.8兆瓦、0.5兆瓦和1.0兆瓦天然气价格取2.6元/立方米折合热值后单位供电成本约0.65元/千瓦时电网分时电价在低谷、平段、高峰分别为0.32、0.62、1.05元/千瓦时。结算周期为1小时调度周期24小时。共享储能参数为额定功率2MW容量8MWh初始SOC设为0.2末端SOC要求恢复到0.2这样便于做多日循环对比。储能的单位投资成本折算到运行层面为每千瓦时0.18元运维成本我会在储能运营商收益中扣除这笔费用确保收益表达是真实净利润。4.2 四种方案对比直接从数据看收益差距我设置了四种方案方案A是各微网独立配置储能每个微网配1兆瓦/2兆瓦时的小储能方案B是共享储能但采用固定容量租赁价格不优化充放电价方案C是共享储能主从博弈定价即项目核心方案方案D是集中式优化假设储能运营商和所有微网同属一个调度中心以总成本最小为目标的理想参考值。结果如下方案微网日均总成本/元储能日净收益/元弃光率储能日均循环次数A独立储能18420-350运维亏损6.8%0.9B共享租赁1726010804.2%1.5C共享主从博弈1618519350.8%2.1D集中优化15490/0.3%2.3可以明显看到方案C相比方案A微网总成本下降了约12.1%储能的日净收益也从负转正并达到1935元。方案D是理想界比C更好但在分布式决策场景下无法实现C与D的差距正是博弈造成的效率损失大约4.3%这个损失换来了各主体信息隐私和独立决策权商业上完全可以接受。4.3 分时段运行结果晚高峰储能的放电压制逻辑我重点看了典型日16到21时段的数据。16时段光伏尚有余量但MG1的电负荷上升储能的放电价设为0.78元/千瓦时低于电网高峰价1.05元所以MG1选择从储能买入0.6兆瓦电量到了18到19时段三个微网负荷叠加储能放电功率达到1.8兆瓦接近上限SOC从0.62降到0.21部分负荷由燃气轮机电出力兜底。这个过程中储能运营商主动把19时段的放电价提高到0.86元利用稀缺性获得了更高的峰时段收益。反过来在午间11到13时段光伏大发储能的充电价压到0.2元以下三个微网都愿意把过剩电量卖给储能储能SOC从0.15快速回升到0.7以上。这个分时复盘带来一个很重要的结论储能运营商的电价策略不是简单跟随电网峰谷而是要结合自身SOC和下层微网的电量需求动态调整等价于一个“容量受限的中间商”在做动态库存管理。博弈算法算出来的电价曲线明显比固定分时电价平滑性差、波动性更高这是合理的因为它在主动引导微网改变用能行为。4.4 从数据看博弈的收敛过程与均衡特征迭代收敛曲线方面我从初始平值电价0.5元开始迭代前10轮价格波动全都在0.05到0.08元之间打转到第18轮左右放电价基本稳定在0.73到0.86元充电价稳定在0.16到0.22元到第30轮最大价格变化已经小于0.001元判定收敛。这里我特别记录了微网购售电策略的变化在第一轮到第五轮MG3的购电功率还有来回跳变的情况之后逐渐收敛到固定序列。这说明博弈的均衡不是一次达成的而是逐步寻找互相最优的过程。我还检验了均衡的唯一性。采用五组不同初始价格分别启动迭代有三组收敛到几乎相同的价格序列最大偏差0.02元一组收敛到局部均衡放电价整体偏低0.08元一组价格长期振荡无法完全收敛。这也提醒我在做结论时必须排除局部均衡的干扰否则很可能把次优解当成最优解汇报后续我在论文和报告中都明确标注了多起始点检验的误差边界。5. 实操问题备忘与避坑经验5.1 求解器数值稳定性M值统一校准这个项目在Gurobi和CPLEX上都跑过最大的坑在于KKT转单层后数值稳定性对Big-M值极其敏感。我的经验是所有M值的选取都要基于物理边界推导不能图省事统一填1e5或1e6。具体做法是先把每个约束涉及的变量列出来查它的物理上限比如储能功率上限2兆瓦、微网购电上限1.5兆瓦M就设成上述数字再酌情乘1.2的安全系数。斜率类、乘子类约束M值取价格上限或对偶变量的量纲上限。这么改完之后求解时间从原来的超过600秒压到90秒左右迭代稳定性也大幅提升。5.2 收敛震荡价格更新加阻尼我遇到过充放电价在相邻两轮之间来回跳变的情况尤其在晚高峰时段放电价一会儿0.75、一会儿0.91导致微网在买储能电和自发电之间反复切换迭代不收敛。排查下来原因是上层目标函数关于价格不是严格凹的多个微网同时响应会把价格解往外推。解决办法是引入阻尼更新机制新的价格为λ_new α*λ_candidate (1-α)*λ_oldα取0.3到0.5。加阻尼之后收敛迭代次数从最高70轮降到25到30轮效果立竿见影这也是在实际工程中非常实用的一招。5.3 储能末状态SOC约束不能省第一次试算的时候为了释放储能调节空间我把末端SOC约束去掉结果发现储能运营商会在最后一个时段把SOC直接放到最低然后第二天再从最低开始工作。连续三天的仿真数据里第二天储能容量明显虚低晚高峰放不出电来整个优化策略第三天就崩了。后来我恢复末端SOC等于初始SOC的约束并且把目标函数中加了SOC偏移惩罚项效果才好起来。现在做这类项目我养成了习惯任何带储能的优化问题先检查SOC边界不然优化结果很漂亮但没有复现价值。5.4 隐私与数据交互的工程实现细节现实中微网不会把设备约束全量发给储能运营商所以迭代求解必须设计成黑箱式的交互。我的实现方式是在每轮迭代中储能中心只下发价格向量微网内部求解器基于本地数据返回功率向量双方只交换这组双向量不暴露具体设备参数。为了验证这种交互方式也能收敛我做了仿真对比全信息公开下的KKT转单层结果和黑箱迭代结果最终价格偏差在1.5%以内功率序列基本一致。这也让整个方案在商业落地上更有说服力双方不用共享商业秘密只靠一个价格信号就能完成博弈收敛。5.5 扩展方向多储能阵列、可平移负荷与碳价耦合项目做到后期我考虑过把模型进一步扩展到多座储能电站竞争的格局也就是上层从单一运营商变成多个运营商竞价这就变成了多领导者多跟随者的均衡问题求解要复杂很多。另一个很实际的扩展是引入可平移负荷比如工业生产线的工序切换、充电桩的集群调控。这两类场景下微网不再只是被动价格接受者还拥有了主动调整负荷时段的灵活性博弈结构会变成微网和储能双向报价可能需要用到鲁棒博弈或演化博弈的方法。碳价耦合方面如果政策端对碳排放定价微网的燃气轮机单位成本会上升储能消纳绿电的收益就会被拉高但这类政策变量不能体现在物理模型里我只能从方法角度给一个接口预留真正落地还需要等交易规则明确。回到这个项目本身我在实际运行中的体会是主从博弈模型的价值不在理论推导多么漂亮而在它能让调度边界截然不同的主体之间形成一个相对公平的交易律。储能运营商靠价格引导微网微网凭真实用能需求回应价格反复迭代后收敛出来的那个电价曲线既不是政府统一定价也不是内部结算价而是两个利益主体之间“试”出来的市场信号。如果后面做相似项目我建议你也从最简场景出发先跑通两个微网加一座储能的迭代闭环再逐步加设备约束和主体数量优化和博弈的耦合关系一旦熟练再复杂的问题都只是往模型里加块积木而已。
返回列表