☰
合作型Stackelberg博弈与CVaR的微网动态定价优化调度策略
2026/10/21 2:57:45 网站建设 项目流程

近两年跑微网示范项目,最让人头疼的往往不是储能容量配多大,而是电价怎么定。电价定高了,园区用户转头就退出需求响应;定低了,光伏和储能这些资产的回收期又被拉得很长。所以“基于合作型Stackelberg博弈与条件风险价值的微网动态定价优化调度策略”这个方向,本质上是在回答一个现实问题:微网运营商如何用动态电价把需求侧的灵活性调动起来,同时压住自身收益的尾部风险,让运营商和用户都拿到比原来更好的结果。

这篇文章我会从模型动机、双层博弈建模、CVaR风险度量、求解器实现、典型算例一直到工程落地中的坑,完整梳理一遍这类项目中的建模思路和实操经验。适合正在做园区微网、虚拟电厂聚合、需求响应策略的研究人员或工程开发者参考,尤其是想搞明白“主从博弈+风险价值”组合拳到底怎么用的人。

1. 为什么单层优化解决不了:价格与调度是咬合在一起的两个问题

1.1 价格与电量必须同时迭代

很多常规的做法是把微网调度做成一个单层优化问题:把负荷当成已知的外生参数,给一天的运行设定目标,求解出机组出力和储能充放电计划。这种思路在传统配电网里问题不大,因为终端用户对电价的感知确实不敏感,负荷弹性很小,忽略弹性造成的误差在可接受范围内。

可一旦进入微网动态定价场景,情况就变了。运营商的决策变量是电价,而用户会根据电价改变用电行为,负荷反过来又影响潮流和调度成本。如果还按“负荷给定”来算,电价信号就只是单向输出,完全没有考虑用户跟随者反应,算出来的价格一定和真实运行状态偏差很大。这就是Stackelberg博弈建模的起点:运营商是上层领导者,先把动态电价公布出去;用户是下层跟随者,根据电价调整负荷;运营商再根据调整后的负荷重新核算调度计划。

1.2 从非合作主从到合作型策略的变化

传统的Stackelberg主从博弈是典型非合作结构,上层做决策时只考虑自身收益最大化,跟随者只能被动接受。在微网定价里,这种结构很容易出现一个局面:运营商把价格抬到用户群体的效用底线附近,短期自己赚得多,但用户参与感下降,后续需求响应项目根本推不动。

合作型Stackelberg博弈在这里就派上用场了。它并不是要推翻主从结构,而是在上下层博弈之外加了一层“合作契约”:任何一方参与联合调度之后的收益,都不能低于不参与时的基准收益,否则合作不成立。这样一来,上层定价不再是随心所欲,必须把用户的参与约束当成硬条件写进模型。目标函数也相应从“运营商利润最大化”扩展成“社会福利最大化”,也就是在运营商净收益和用户净效用之间做整体权衡。

1.3 动态定价的真正含义

这里的“动态”不是指随意波动,而是指电价随时间段、随系统状态而变化。静态分时电价往往提前很久定死,缺少对当天光伏大发、负荷尖峰这些实时信息的响应能力。动态定价则允许电价在一天内连续调整,前提是调整幅度和频率都在用户可接受范围内,比如每小时给出一个价格信号,让用户有足够时间调整空调、热水器、充电桩这类柔性负荷。

把动态定价和调度放在同一个框架里联合优化,最大的好处是能用一个信号同时驱动供给侧和需求侧。供给侧按照价格信号安排分布式电源出力,需求侧按照同一信号调整用电行为,最终达到的调度点比任何单侧独立优化都更接近系统最优。

2. 建模步骤拆解:上层定电价、下层调负荷

2.1 上层净收益函数的构成

上层是微网运营商的优化问题。决策变量主要是未来24小时每个时段的动态电价 p_t,以及对应时段的分布式电源出力、储能充放电功率等调度变量。净收益不能只看售电收入,还要扣除一堆成本:从上级电网购电的成本、柴油机这类可控机组的燃料成本、储能循环带来的寿命折损成本。

我把上层目标函数写成这样的思路:

净收益 = 售电收入 - 购电成本 - 可控机组运行成本 - 储能损耗成本

其中售电收入是用户负荷需求 d_t 和动态电价 p_t 的乘积累加。可以看出,收入端天然和用户行为耦合,只要 d_t 变了,收益就变;而 d_t 是由下层用户决策推导出来的,这也是为什么必须把两层放在一起解的原因。

2.2 下层用户侧模型:效用函数和价格弹性

下层用户的问题相对直观:给定电价序列,如何安排各时段用电量,让自己的净效用最大。净效用定义成“用电带来的满意度效用”减去“电费支出”。效用函数我一般用二次凹函数,比如 a·d_t² + b·d_t,其中系数取负值保证凹性,这样用户的边际效用递减,符合直觉。

用户优化之后会形成一个典型规律:当电价升高时,用户会削减非刚性负荷;当电价降低时,用户会增加弹性用电。这种规律等价于一条价格响应曲线。需要注意,不同用户类别的弹性差异非常大,所以在算例里我不会只用一个“总负荷”,而会细化成居民、商业、工业三类,分别给出不同弹性系数。

2.3 合作契约:收益分配约束怎么写

合作型博弈和普通主从博弈最实质的区别,在于必须把“合作后收益不低于合作前”的约束显式写进模型。具体到实现层面,我会设置两个底线约束:

运营商合作后净收益 ≥ 运营商独立运行时的净收益;用户合作后总效用 ≥ 用户不参与价格响应时的总效用。

这两条叫个体理性约束,是合作成立的底线。如果连底线都达不到,所谓的合作就没有可持续性。进一步地,当整体社会福利增量算出来之后,还需要一套分配机制把这部分增量分给参与方。比较严谨的做法是用Shapley值法计算各方的边际贡献,但Shapley值在多参与方、多时段场景下计算量很大,工程上经常用简化的纳什谈判模型或者按贡献比例分配替代。我在实际项目里基本都是先用简化分配方案跑通,再在论文或精确分析时上Shapley值。

2.4 联合约束条件不能漏

除了博弈双方的收益约束,系统运行约束一个都不能少。功率平衡约束保证每个时段的发电加购电加储能放电量等于负荷加储能充电量;储能约束包括SOC递推、充放电功率上下限、充放电不能同时进行的整型约束;可控机组约束包括出力上下限和爬坡速率限制。光伏、风电则按预测出力加上随机偏差处理,作为不确定性场景输入。

这些约束写完之后,整个模型就是典型的双层优化结构:上层有连续价格变量和调度变量,下层有用户负荷决策变量。如果在数学上把所有变量展开,规模会相当大,后面需要借助KKT条件做单层化。

3. CVaR进入目标函数:别让期望值骗了你

3.1 为什么只看期望收益会踩雷

做微网定价时,光伏出力、风电出力、负荷需求、现货电价都有不确定性。最简单的处理方式是取期望值,把不确定参数用平均值代替,得到一个确定性优化问题。这样算出来的方案通常在“平均场景”下看起来很美,但一旦遭遇连续阴天加负荷高峰,收益可能出现断崖式下滑。

举例说明更直观。假设某套定价方案在90个正常场景下每天盈利1万元,在10个极端场景下每天亏损5万元,期望收益是0.4万元,表面看仍然为正。但对实际运营者来说,那10天可能直接把一整月的利润吞掉,甚至触发现金流问题。如果只看期望值,这种方案会被选中;而用CVaR来度量尾部风险,就能把这10个极端场景的平均损失纳入考量,从根源上筛掉那些“期望值好看但尾部风险极大”的方案。

3.2 CVaR的数学拆解

条件风险价值CVaR的定义可以从VaR延伸理解。先取一个置信水平α,通常在0.9到0.95之间。VaR_α表示在α概率之内损失不会超过的那个阈值;CVaR_α则表示损失超过VaR_α之后,超过部分的平均损失值。可以简单理解为“最坏那(1-α)比例场景下的平均损失程度”。

在优化问题里直接套定义会比较麻烦,常用的是一个连续化表达式:把CVaR和最优辅助变量η结合,在目标函数中写成一个线性函数加一个损失惩罚项的形式。这样做的好处是,只要场景集合给定,CVaR部分可以转换成线性约束,求解器处理起来很友好,不会引入非线性求解困难。

3.3 目标函数里怎么嵌入风险项

把CVaR嵌进微网定价目标函数,常见有两种思路。第一种是约束式:给CVaR设定一个上限,比如“在最坏5%场景下的平均损失不得超过某万元”,其余部分继续追求期望收益最大。第二种是罚函数式:目标变成“期望收益 - λ·CVaR”,其中λ是风险厌恶系数,λ越大代表运营者越保守,宁愿牺牲一部分期望收益来降低尾部风险。

我在实际建模中更倾向于先把罚函数式跑一遍,观察λ从0到2之间目标值、定价曲线和风险指标的走势,再和运营方讨论到底能承受多大风险。因为不同投资主体对风险的容忍度差别很大,电网背景的投资方通常更保守,而市场化程度高的主体可能更激进。

4. 双层优化的求解落地:KKT单层化和场景处理

4.1 下层问题的KKT单层化

把下层用户问题用KKT条件替换,是求解双层规划最常用的手段。前提是下层问题必须是一个凸优化问题,且满足约束规范。我们设的用户效用函数是二次凹函数,约束是线性不等式,天然满足这个条件,所以KKT条件是充分必要条件。

KKT条件展开之后会引入对偶变量和互补松弛条件。互补松弛条件是非线性的,因为存在“对偶变量×原始松弛量=0”这种乘积项。一步到位求解器是解不了的,需要通过大M法把乘积项拆成线性不等式组。这一步骤看起来理论性很强,但实际上只是把原问题变成一个混合整数线性规划(MILP),交给商业求解器就行。

4.2 大M参数的设置经验

做KKT线性化时,最难拿捏的就是大M的取值范围。M取太小,会把原本可行的解错误地砍掉;M取太大,又会造成数值病态,求解器在分支定界时出现大量无意义的试探,速度慢到怀疑人生。

我通常的做法是:先跑一个不含互补约束的松弛版,统计出对偶变量和原始松弛量的典型量级,再把M设为这些典型值的10到20倍。而且不同互补约束最好用不同的M,不要全局共用一个。这个细节能让求解时间差出数倍,尤其在场景数上千的大规模算例里,非常值得花时间去校准。

4.3 不确定性场景的生成与压缩

CVaR计算需要场景集合。生成场景时不能只做简单的正态抽样,因为光伏出力有明显的时序相关性,中午出力高、早晚出力低,简单的独立抽样会生成大量违背物理规律的场景。我一般先用历史气象数据拟合光照强度的分布,再通过时序抽样生成原始场景。

原始场景数量很容易冲到几千个,每个场景都要过一遍MILP,计算量极大。这时候需要做场景压缩,保留尾部分布特征。比较实用的是快速前向选择法,把相似场景合并成代表性场景并加权。场景数量从几千压缩到几百,CVaR特征基本保留,求解时间却能下降一个数量级。

4.4 求解流程与收敛性检查

完整求解流程我总结为四步。第一步,生成并压缩不确定性场景。第二步,将下层用户模型写成KKT条件,代入上层模型形成单层MILP。第三步,调用商业求解器求解,得到最优电价序列和调度计划。第四步,把最优电价代回原始下层用户模型,核对用户负荷和收益是否与单层化时的结果一致。

第四步很多人会忽略,但在工程上非常重要,因为KKT单层化本身有数值误差,如果不回代验证,拿到一个看似最优实则不可行的价格方案就很尴尬。我在这类项目里至少会抽查5到10个时段的负荷一致性,偏差超过1%就需要重新调整M参数或求解精度。

5. 典型算例设置与结果对比

5.1 场景参数与三类负荷

算例基于我常用的一个园区微网仿真配置:光伏装机3兆瓦,风电1兆瓦,柴油备用机组0.8兆瓦,储能1兆瓦时/0.5兆瓦,外部电网联络线受功率限制。24小时优化周期,1小时一个时段。光伏和风电出力分别按典型日和随机偏差生成200个场景,再压缩到20个代表性场景。

用户侧分三类:居民负荷约1.2兆瓦,价格弹性中等;商业负荷约1.5兆瓦,弹性偏低;工业负荷约1.8兆瓦,部分生产工序可以转移,弹性最高。电价约束在价格上下限之间,避免出现极端信号伤害用户。置信水平α取0.9,风险厌恶系数λ从0到1.0分档测试。

5.2 三种方案的量化对比

我在同一套数据下对比了三种方案:方案A是固定分时电价加传统调度;方案B是动态电价但不考虑CVaR;方案C是动态电价加CVaR风险控制,目标函数用“期望收益 - λ·CVaR”。

从结果看,方案B相比方案A,社会福利提升明显,负荷峰谷差下降,说明动态定价确实调动了需求侧灵活性。方案C相比方案B,期望收益略有下降,但尾部风险大幅收缩。具体数字上,方案C在λ取0.5时,极端场景的平均亏损比方案B减少了约20%,而期望收益只下降了不到5%。这就是风险控制带来的典型权衡:用很小的期望损失换取显著的风险改善。

5.3 从博弈视角看社会福利上升的原因

社会福利上升不只是因为价格变灵活了,更重要的是合作约束让博弈方向发生了转变。没有合作约束时,运营商有动机把价格定在用户忍耐上限,用户只能少用或者不用,整体效率反而低。加入合作约束后,运营商必须考虑用户的参与收益底线,定价时会自觉避开“杀鸡取卵”式的极端高价,用户也更愿意保留弹性用电量,双方的总福利自然上去了。

很多同行问我,为什么加了约束反而能提升总目标?其实道理很简单:非合作均衡不一定效率最优,通过合作性约束把双方底线锁住,等于把博弈空间引向帕累托更优的方向。这一点在我们实际输出的电价曲线里看得很清楚,方案C的高峰时段电价明显比方案B温和,低谷时段电价也设置了最低保护,用户侧反馈普遍更好。

6. 工程落地中我踩过的坑和后续迭代方向

6.1 光伏大发的“伪低价”陷阱

动态定价在光伏大发时段会把电价压得很低,理论上用户应该多用电。但实际落地时,用户不可能瞬间把负荷提上来,空调、热水器、充电桩的响应都需要时间。模型如果只按瞬时弹性算,会高估低价时段的负荷增量,导致调度计划偏乐观。

我的处理办法是在用户负荷模型中增加爬坡约束,限制用户负荷在相邻时段的变化幅度。这个约束比单纯的价格弹性更接近真实,但也需要注意不要加得过紧,否则又把用户灵活性限制死了。建议爬坡上限先按每时段10%到20%步长试算,再根据实际用户性质调整。

6.2 聚合成单用户的失真问题

初始建模时为了省事,我经常把三类负荷聚合成一个总负荷来解下层问题。后来发现聚合模型出来的弹性参数过度平滑,工业用户的可转移负荷特征被居民用户“稀释”了。定价结果看起来合理,但仔细检查各时段的负荷构成,发现工业负荷根本没有被有效引导。

最终解决方案是把用户模型按类别分层求解,每类用户一组KKT条件。虽然变量数量增加了,但求解时间增加有限,结果却准确得多。做这类项目时,我强烈建议不要贪图变量少而过度聚合,否则策略很难真正落地。

6.3 从仿真到现场的信号时滞问题

最后一个坑与模型本身无关,却最影响实际效果:电价信号从下发到用户执行存在时滞,加上不少园区用户并不会自动响应价格,而是靠人工查看电价决定是否调整设备。这会导致实际负荷曲线比模型预测滞后一到两个时段,尤其在午间光伏大发时段,信号时滞会造成可观的弃光风险。

应对思路有两条。一是缩短定价周期,从小时级改成15分钟级滚动调整,让信号更贴近实时状态。二是增加用户侧自动响应终端,把电价信号直连到空调、储能和充电桩控制逻辑里,降低人工参与的延迟。这项改造在单个园区不算困难,但涉及多方产权协调,推进时要有耐心,先做示范点位,再逐步铺开。

在我经历过的几个园区微网项目里,从模型到落地走得最顺的,无一例外都是先和用户把收益分配规则谈明白,再谈技术参数。合作型Stackelberg博弈模型在数学上再漂亮,如果个体理性约束和分配方案没有被各方真正认可,现场运行依然会回到“各玩各的”状态。后续如果再扩展这个方向,我建议可以把市场出清机制和绿电交易也纳入框架,让动态定价的信号体系更完整,也更有实操价值。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询