☰
电力市场博弈论报价模型:从纳什均衡到供给函数均衡
2026/11/3 4:22:31 网站建设 项目流程

简介:电力市场讲义(博弈论)PPT面向电力市场、能源经济与数学建模方向的学习者,聚焦如何用博弈论刻画发电厂商报价与竞争决策。内容从参与人、行动、信息、战略、支付、结果和均衡等基本概念切入,说明博弈规则与战略式表述,并区分完全信息与不完全信息、完美信息与共同知识、静态与动态博弈,梳理纳什均衡、子博弈精炼纳什均衡、贝叶斯纳什均衡等均衡概念。讲义还结合电力寡头市场,介绍古诺模型、伯特兰德模型和供给函数均衡模型,帮助读者把抽象均衡分析落到发电厂报价场景。包内为1个PPT文件,约847KB,结构紧凑,适合课堂讲授、专题汇报或自学时快速建立知识框架。已有173人学习,可作为电力市场博弈论入门与复习的轻量资料。

1. 报价单上的数字不是成本加利润:博弈论在电力市场里改写了什么

发电厂商在报价单上填的那个数字,很多人的第一反应是成本加合理利润。这个直觉在按报价出清、多家竞价的电力市场里经常翻车——你的收益不取决于你把自己的成本算得多准,而取决于别人报了多少。这正是博弈论被放进电力市场课程的原因:它把“我该报什么价”这个看着像会计问题的东西,重新定义成“给定其他厂商的战略,我的最优战略是什么”。这份电力市场讲义(博弈论)PPT 没有停在概念罗列,它把参与人、行动、信息、战略、支付、结果、均衡七个要素拆开,再把静态与动态、完全信息与不完全信息交叉成四类博弈,最后落到古诺、伯特兰德、供给函数均衡三个寡头模型。看懂这条链路,报价模型对你来说才不是黑匣子。

2. 博弈规则的最小完备集:七个要素里为什么只有三个不能删

七个概念听起来像术语表,其实是有层级的。讲义里明确划了一刀:参与人、战略、支付是描述一个博弈所需的最少要素,行动和信息是搭起这个结构的“积木”,而参与人、行动、结果合起来叫博弈规则。这个分层不是修辞,它决定了你建模时哪部分可以简化、哪部分一简化模型就废了。少了支付函数,你不知道谁想干什么;少了战略空间,你不知道谁能在什么条件下动;少了参与人,连“谁跟谁博弈”都说不清。反过来,行动顺序、信息结构这些细节可以在特定场景下退化成默认假设,但退化的代价必须自己清楚。

2.1 参与人与行动:决策主体和决策变量

参与人是博弈中的决策主体,目标是通过选择行动或战略最大化自己的支付水平。它可以是自然人,也可以是团体。讲义特意点明,在电力市场环境下参与人指的是发电厂商。这个界定看着平淡,实际影响很大:把一家发电集团下属的不同电厂算作一个参与人,还是拆成多个参与人,会直接改变战略空间的维度和均衡的位置。粒度选错,后面所有计算都建立在一个错误的博弈结构上。

行动是参与人在某个时点的决策变量,可以是离散的也可以是连续的。报价场景里通常是连续的——一条价格与电量对应的曲线,而不是“报高价或报低价”两个选项。n 个参与人的行动构成有序集,叫行动组合。和行动绑在一起的一个关键问题是行动顺序:同样的参与人、同样的行动组合,顺序变了,每个人的最优选择就变了,结果也变了。静态博弈和动态博弈的分野,本质上就是行动顺序做没做出区分。

2.2 信息集与战略:从“选一个动作”到“相机行动方案”

信息是参与人有关博弈的知识,包括自然的选择、其他参与人的特征和行动。信息集则是描述信息特征的基本概念,可以理解为参与人在特定时刻关于变量取值的知识。这里有个容易滑过去的点:信息集不是“我知道多少”,而是“我在做决策的这一刻,能区分哪些情形”。两个不同的历史路径如果在你眼里长得一模一样,它们就落在同一个信息集里,你的战略就必须对它们给出同一个动作。

战略因此被定义成给定信息集下的行动规则,它规定参与人在什么时候选择什么行动。讲义用了“相机行动方案”这个词,很准确——战略不是单个动作,而是一张“如果看到 X 就做 Y”的对照表。在静态博弈里,参与人同时行动,看不到别人做了什么,战略和行动几乎重合,所以很多教材混着用;一旦进入动态博弈,两者就必须分开。日前市场报一次价、实时市场根据出清结果再调整一次,这不是两个孤立的行动,而是一个包含两个节点的战略。把动态问题按静态方式建模,通常不会报错,但会悄悄给出一个偏乐观的均衡。

2.3 支付函数:为什么你的收益写在别人的战略里

支付是在特定战略组合下参与人得到的确定效用水平,或者期望效用水平。参与人的目标是选择战略以最大化支付。但博弈的一个基本特征是,你的支付不只取决于你自己的战略,还取决于所有其他人的战略选择——它是整个战略组合的函数。这一条是博弈论和单人多目标优化的分水岭。单人优化里约束是外生的,你可以对着一个固定的市场环境求最优;博弈里“市场环境”本身就是别人的决策,你优化的时候,别人也在优化,两个优化问题互相嵌套。

结果和均衡要区分开。结果是博弈分析者感兴趣的东西,包括均衡战略组合、均衡行动组合、均衡支付组合;均衡只是结果的一种,是所有人都没有单方面偏离动机的那个特定结果。很多人把“求均衡”当成“求最优”,这是后面一系列踩坑的源头。

讲义只给了战略式表述,把博弈压缩成三样东西:

要素记号在电力市场里的对应物
参与人集合N = {1, 2, …, n}参与竞价的发电厂商
战略空间S_i,i ∈ N每家可提交的报价曲线集合
支付函数u_i(s_1, …, s_n)结算规则下的利润

一般记作 G = {S_1, …, S_n; u_1, …, u_n}。扩展式表述能刻画行动顺序和信息集,但战略式在求均衡时更好用——只要你能把“相机行动方案”完整枚举出来,动态博弈也能压成战略式,代价是战略空间会指数膨胀。

3. 四类博弈四种均衡:信息结构和行动顺序怎么把解概念锁死

博弈分类的两个维度不是随便挑的,它们恰好对应解概念需要的两样信息。行动顺序决定你能不能观察前人动作,从而决定要不要用子博弈精炼;信息结构决定你对别人支付函数知道多少,从而决定要不要引入概率belief。两个维度一交叉,均衡概念就唯一确定了:完全信息静态对应纳什均衡,完全信息动态对应子博弈精炼纳什均衡,不完全信息静态对应贝叶斯纳什均衡,不完全信息动态对应精炼贝叶斯纳什均衡。这不是四选一的偏好问题,是模型结构决定的唯一出口。

3.1 完美信息与完全信息:一对最容易被混用的概念

讲义专门辨析了这两个词,因为它们中文长得太像。完美信息指的是一个参与人对其他参与人(包括自然)的行动选择有准确了解——关键词是“行动可观察”。完全信息指的是自然不首先行动,或者自然的初始行动被所有参与人准确观察到,也就是没有事前的不确定性——关键词是“类型和支付函数已知”。

差别在哪儿?举个电力市场的场景:几家厂商同时提交报价,事后所有报价都公开。这是完全信息,但不是完美信息——大家同时行动,谁也看不到别人当下选了什么。反过来,如果某家厂商的成本类型是私有信息,但它的动作你能实时看到,那就是完美信息但不完全信息。这两个概念错配,选出来的均衡概念就是错的,后面所有推导都白做。

3.2 纳什均衡的最优化写法:不动点而不是最大值

纳什均衡是完全信息静态博弈解的一般概念。n 个参与人的战略式表述博弈里,战略组合 (s_1*, …, s_n*) 是一个纳什均衡,如果对每个 i,s_i* 是给定其他人选择 s_{-i}* 时的最优战略:

u_i(s_i*, s_{-i}*) ≥ u_i(s_i, s_{-i}*),对任意 s_i ∈ S_i,任意 i

写成最优化形式:

s_i* ∈ argmax_{s_i ∈ S_i} u_i(s_i, s_{-i}*)

看仔细:argmax 的右边,别人的战略是钉死在均衡值上的。所以这不是“全局最优”,而是“相互最优”——n 个最优化问题必须联立求解,每个问题的参数都包含其他问题的解。这就是为什么纳什均衡在数学上是一个不动点问题,而不是一个极值问题。求解思路完全不同:极值问题可以直接梯度上升,不动点问题要么解方程组,要么做最优反应迭代。

理解这一点,才能理解为什么纳什均衡可能不存在(纯战略下)、可能不唯一(多重均衡)、也可能在迭代时不收敛。这三种情况在实际报价模型里都出现过,而且往往被当成“程序出错”。

3.3 共同知识的强假定与它崩塌的后果

共同知识指的是“所有参与人知道,所有参与人知道所有参与人知道,所有参与人知道所有参与人知道所有参与人知道……”的知识。这个无限递归的定义看着像文字游戏,其实是整个均衡体系的地基:均衡的成立要求所有人对规则、理性、战略空间都有共识。你不仅要相信对手是理性的,还要相信对手相信你是理性的,一层层往上叠。

工程上这意味着什么?意味着当你把模型交给一个真实市场时,你实际在假设:市场规则被所有人以同样方式理解、没有厂商会做非理性报价、没有人对别人的成本结构有私下的额外信息。任何一条不成立,均衡的预测力就开始打折。讲义说这是“一个很强的假定”,用词很克制。我的理解是,共同知识是模型可信区间的边界标记,而不是可以随手勾选的默认项——你把这条假设写下来,等于同时写下了模型什么时候会失效。

4. 三个寡头模型:电力市场为什么最终停在供给函数均衡上

古诺、伯特兰德、供给函数均衡这三个模型,教材里经常并列介绍,好像可以随便挑一个用。实际上它们是三个不同层次的抽象,区别在于“决策变量是什么”以及“市场规则允许你提交什么”。选错模型的后果不是精度差一点,而是结论方向都可能反过来。电力市场规则的演化史,某种程度上就是迫使建模者从古诺和伯特兰德一路走到 SFE 的过程。

4.1 建模公共底座:反需求曲线、成本函数与目标函数

三个模型共享一套骨架。每个厂商的产出记作 q_i,市场需求用 Q = D(p) 表示,p 是价格。要求反需求曲线 p = P(Q) 二阶连续可微,且单调递减(P' < 0),这样才能保证需求曲线向下倾斜。每个厂商的成本函数 C_i(q_i) 也要求二阶连续可微,边际成本非负、非递减。发电商还可以有供给函数 S_i(p),表示价格与供给量的关系,同样要求二阶连续可微。

目标是最大化利润:

max π_i = P(Q) · q_i − C_i(q_i)

关键在于 P(Q) 里包含 q_i,因为 Q 是所有厂商产量之和。这个耦合项就是“博弈”两个字的数学体现。三个模型的区别,只是把哪个量当成决策变量、以及市场怎么出清。

4.2 古诺模型:把对手产量当常数,一阶条件与二阶条件

古诺模型又叫产量竞争模型。厂商以产量为竞争策略,同时决策,每家都认识到自己的产量会影响价格,但认为自己的决策不影响别人的产量决策。本质是把竞争者的产量水平当作固定的,来决定自己生产多少。

利润最大化的一阶条件是:

P(Q) + q_i · P'(Q) − C_i'(q_i) = 0

第一项是价格,第二项是“增产导致价格下跌”给自己带来的损失,第三项是边际成本。三项一平衡,就是最优产量。二阶条件是:

2P'(Q) + q_i · P''(Q) − C_i''(q_i) ≤ 0

讲义里通过符号判断这个式子恒小于等于零,所以一阶条件的解确实是极大值点。这一步在课堂上常被跳过,但它是整个模型成立的前提——尤其在成本函数非凸、或者需求曲线有拐点的场景下,二阶条件不成立会让一阶条件解出的是极小值。

实际求解时,n 个一阶条件方程联立,就能得到古诺解。对称情形下有个闭式表达。下面用线性需求做最优反应迭代,验证不动点是怎么收敛的:

# 线性反需求 p = a - b*Q,n 家同质厂商,边际成本 c # 用最优反应迭代逼近古诺纳什均衡(不动点) a, b, c, n = 100.0, 1.0, 20.0, 3 q = [1.0] * n # 初始产量,任意正数即可 for it in range(500): q_new = q[:] for i in range(n): # 对手产量之和,这是"把别人产量当常数"的实现 Q_others = sum(q[j] for j in range(n) if j != i) # 由一阶条件 a - b*(Q_others + q_i) - b*q_i - c = 0 解出 q_i q_new[i] = (a - c - b * Q_others) / (2 * b) # 当所有人都不再改变产量,战略组合就是不动点 if max(abs(q_new[i] - q[i]) for i in range(n)) < 1e-10: q = q_new break q = q_new p = a - b * sum(q) print(q, p) # 对称均衡解与均衡价格

这段代码把纳什均衡的“相互最优”落成了具体动作:每次迭代,每家厂商都在给定对手上一轮产量的前提下求自己的最优反应;当所有反应函数同时不动了,就是古诺均衡。参数 a 是需求截距,代表市场容量;b 是需求斜率,代表价格对产量的敏感度;c 是边际成本;n 是参与人数。迭代次数上限设 500 是为了防止发散时死循环——如果需求斜率和成本结构不满足收敛条件,最优反应迭代会震荡或者发散,这在数学上是模型本身的性质,不是代码写错了。

对称均衡的理论解是 q* = (a − c) / (b(n+1))。拿它对照程序的输出,可以验证迭代逻辑有没有写错。这一步别省,血泪经验:模型输出和理论解对不上的时候,八成的错误在代码,两成在参数含义搞反了。

4.3 伯特兰德模型:价格战为什么会退到边际成本

伯特兰德模型把决策变量换成价格。厂商生产同一产品,同时决定售价,假设产品之间没有差异,也没有容量限制。利润最大化的一阶条件相应变形,联立求解得到伯特兰德解。这个解有个刺眼的名字:准竞争解——在最终均衡中价格等于边际成本,每个厂商都近似是价格的接受者,利润趋近于零。

这个结论在经济学上很漂亮,但拿到电力市场直接用就会翻车。原因有二:一是它有容量约束,机组有最大出力,供给不可能无限;二是电力的产品同质性高,但输电约束、启停成本、爬坡率这些让“无差异产品”假设很难成立。一旦容量约束回来,价格就等于边际成本这个结论立刻失效,因为对手想抢量也抢不到,高价就有了生存空间。所以伯特兰德模型在电力市场里更多是作为“竞争足够激烈时”的基准参照,而不是求解工具。

4.4 供给函数均衡:电力市场规则为什么逼出这个模型

供给函数均衡(SFE)方法是研究者为了处理需求随机变动下的利润最大化均衡问题提出的,后来被大量用于电力市场分析。原因很直接:电力市场规则要求各发电商递交供给函数,表明在不同价格下愿意提供的发电量。既然规则就是这么定的,模型里的决策变量就该是供给函数,而不是产量或者单一价格。

在 SFE 模型里,各厂商决定自己的供给函数,即价格与供给量之间的关系函数,市场价格由市场总需求和所有厂商的供给函数共同决定。目标函数写成对供给函数系数的优化:

max_{β_i} π_i = (p − C_i'(·)) · S_i(p),其中 p 由 Σ S_i(p) = D(p) 出清

该优化问题的实质是求最优供给函数的系数,使得厂商获得最大利益。理论上联立 n 个一阶条件方程,就能解出各供给函数的系数。文献里证明了线性供给函数均衡是稳定且唯一的——这一条很重要,它意味着模型给的是可复现的结果,而不是一堆可能解。

求解上可以照搬古诺那套不动点迭代,只是决策变量从产量换成了供给函数的系数:

# 线性供给函数 S_i(p) = beta_i * p(无截距简化形式) # 需求 D(p) = a - b*p,出清条件 sum(S_i(p)) = D(p) # 对每个厂商做一维最优搜索,再迭代到无人愿意改 beta a, b, cost = 200.0, 2.0, 10.0 n = 3 betas = [1.0] * n def clearing_price(betas): # sum(betas)*p = a - b*p => p = a / (b + sum(betas)) return a / (b + sum(betas)) def profit(beta_i, others, a, b, cost): p = clearing_price(others + [beta_i]) return (p - cost) * beta_i * p # 价差 × 自己供给量 for it in range(300): new_betas = betas[:] for i in range(n): others = [betas[j] for j in range(n) if j != i] # 在候选区间上网格搜索自己最优的 beta_i best_b, best_pi = betas[i], -1e18 for k in range(1, 2000): cand = k * 0.01 pi = profit(cand, others, a, b, cost) if pi > best_pi: best_b, best_pi = cand, pi new_betas[i] = best_b if max(abs(new_betas[i] - betas[i]) for i in range(n)) < 1e-6: betas = new_betas break betas = new_betas

出清价格那一行是整个模型的重心:所有人的 β 加在一起决定价格,价格又反过来决定每个人的实际供给量。利润函数里的 (p − cost) 是单位价差,β_i·p 是自己的供给量,两者相乘才是总利润。网格搜索之所以够用,是因为这里是单变量优化,候选区间设成 0 到 20 已经覆盖了合理报价斜率。如果发现最优 β 落在搜索边界上,说明区间设窄了,要往外扩——这也是踩过坑之后才养成的习惯。

5. 避坑:报价模型里最容易踩的五个建模错误

博弈论这套东西最麻烦的地方在于,错了不一定报错。你照样能跑出一个数,照样能画出一条漂亮的报价曲线,但那个数背后的博弈结构可能根本不是你以为的那个。下面五条都是从实际建模里攒出来的,按“现象、原因、解决”写。

5.1 只解一阶条件,不验二阶条件

现象:模型稳定输出一个“最优报价”,但稍微改一下成本函数的曲率,输出就跳到另一个完全不同的点上,而且跳跃没有明显规律。

原因:一阶条件只是驻点条件,驻点可以是极大值、极小值,也可以是鞍点。古诺模型里那条二阶条件 2P'(Q) + q_i·P''(Q) − C_i''(q_i) ≤ 0,在需求单调递减、成本凸的常规假设下自然成立,所以没人检查。一旦引入非凸成本(比如分段煤耗曲线)或者带拐点的需求,它就可能变号。

解决:把二阶条件的符号检查写成断言,放在每次求解之后。数值上可以用两次扰动求差分来验 Hessian 的定性,符号不对就直接抛出异常,而不是让它悄悄输出一个极小值解。

5.2 信息结构标错,解概念整个失效

现象:模型按完全信息建模,求出纳什均衡,但实际市场里各家成本是私有信息,模型预测的报价和实际报价系统性偏差,而且偏差方向不固定。

原因:完全信息假设的是所有人的支付函数都是共同知识。一旦有私有成本,正确的框架是不完全信息静态博弈,解概念应该是贝叶斯纳什均衡——参与人要对别人的类型分布求期望,而不是对着一个确定的支付函数求最优。

解决:建模前先画一张“谁知道什么”的表,把每个参与人的类型、可观察信号、共同知识范围列清楚,再对照四象限确定解概念。结构标错的时候,参数调得再准也只是在拟合噪声。

5.3 把共同知识当成默认前提

现象:模型在仿真里表现很好,一放到真实市场就失效;复盘时发现规则理解有歧义,不同厂商对同一条出清规则的解释不一样。

原因:均衡的存在和唯一性建立在一个很强的假设上——所有人对规则、理性、战略空间有无限层级的共识。真实市场里连“这条规则怎么算”都可能有分歧,共同知识这个前提就断了。

解决:把共同知识拆成可检查的条目:规则文档是否唯一、结算公式是否公开、违规处罚是否可预期。任何一条有歧义,就在模型里引入相应的不完全信息,而不是硬套完全信息均衡。这条我一般会写在模型说明的第一段,提醒自己预测力的边界在哪里。

5.4 供给函数系数解不存在或多解,直接当成程序故障

现象:SFE 模型跑出来 β 有负数,或者换一个初始值就收敛到完全不同的系数组合。

原因:SFE 的均衡解需要满足一阶条件方程组,而这个方程组在非线性的成本或需求下可能没有实数解,也可能有多个解。线性供给函数均衡的稳定性和唯一性是有前提的,前提不满足,唯一性就不成立。

解决:先确认模型落在“线性供给函数 + 常规需求”的范围内,再谈唯一解;非线性情形下改用不动点迭代加多初值扫描,把所有收敛点都记录下来,观察它们的利润差异。如果多个均衡的利润接近,说明模型对市场结构本身不敏感,这时候报告区间比报告点估计更诚实。

5.5 忽略容量约束,把伯特兰德结论生搬硬套

现象:套用伯特兰德模型分析某个集中度较高的市场,得出结论“价格会趋近边际成本”,但实际出清价格长期高于边际成本,模型被判定为不可用。

原因:伯特兰德的核心假设是产品同质且无容量限制。电力市场里机组有最大出力,一旦负荷高峰把所有机组都顶到上限,价格就脱离边际成本,由需求侧的稀缺性定价。容量约束一回来,“降价抢量”的策略就失效了。

解决:判断市场是否接近伯特兰德竞争,先看两个指标:市场集中度和剩余容量。剩余容量充裕、厂商数量多,伯特兰德作为下限参照才有意义;否则应该用带容量约束的供给函数模型。拿一个前提不成立的模型去解释现实,结论错了不冤。

6. 模型边界:从讲义里的均衡到真实报价决策的可信区间

把讲义读完,最容易产生的误解是“学会了三个模型,就能算出最优报价”。实际不是。古诺、伯特兰德、SFE 给的是均衡——一个所有人都没有单方面偏离动机的状态。它回答的是“如果所有人都理性且都知道彼此理性,市场会停在哪里”,而不是“明天我该报多少”。这两者之间隔着一整层参数不确定性:需求预测误差、对手成本分布的估计误差、机组可用率的随机性。

所以我的用法是把模型当坐标系而不是计算器。先用四象限确定结构(谁先动、谁掌握什么信息),再用三个寡头模型中的一个给出均衡的参照位置,最后拿实际报价和参照位置的偏差反过来判断市场里多了什么——是容量约束在起作用,还是有人在利用信息不对称。偏差本身就是信息,比一个精确但错误的点估计有用得多。

模型假设现实偏差来源偏差的表现
同时决策、单阶段日前与实时两阶段耦合均衡位置偏移,动态博弈更合适
完全信息成本与检修计划私有报价系统性高于完全信息均衡
无容量约束机组出力上限、爬坡限制高价时段价格脱离边际成本
单一时段出清跨时段的水电与储能机会成本进入报价,需多阶段模型

验证方法上,我一般做三件事:一是用对称情形的理论闭式解校验数值求解器,这一步能排掉大部分实现错误;二是做参数敏感性扫描,看均衡对需求斜率和边际成本变化的响应是连续还是跳变,跳变意味着模型在该区域不可靠;三是把模型输出的战略组合代回每个参与人的支付函数,逐个验证单方面偏离不会增加收益——这是纳什均衡定义最直接的数值检验,比看迭代是否收敛可靠得多。

从那以后我每次拿到一份新的市场规则,都会先把参与人粒度、信息结构、行动顺序这三项写在一张纸上,再去动模型参数。顺序错了,参数调得再准也是白搭,而且错得悄无声息——这大概就是博弈论建模最贵的坑,没有后悔药。这份讲义的价值也在这里:它把该在动参数之前想清楚的东西,按七要素、四象限、三个模型的顺序摆在了你面前。希望帮到你。

本文还有配套的精品资源,点击获取

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

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

立即咨询