
简介这份电力市场讲义PPT面向电力经济、能源管理及相关专业的学生与研究人员聚焦博弈论在发电厂商报价决策中的应用帮助读者建立从基本概念到寡头市场均衡模型的完整分析框架。压缩包内仅含1个PPT文件约847KB以图文讲义形式系统梳理参与人、行动、信息、战略、支付、结果与均衡等核心要素并延伸至博弈的战略式表述与分类。内容重点讲解完全信息静态与动态、不完全信息静态与动态四类博弈及其对应的纳什均衡、子博弈精练纳什均衡、贝叶斯纳什均衡与精练贝叶斯纳什均衡同时引入古诺模型、伯特兰德模型和供给函数均衡模型剖析电力寡头市场的博弈结构。目前已有173人学习适合作为课堂补充或自学材料便于快速把握电力市场博弈分析的关键概念与建模思路。1. 电力市场讲义博弈论PPT从机组报价到纳什均衡一份能直接讲的实战框架如果你正在准备电力市场相关的培训或内部分享手里只有一份空白的 PPT 模板却要讲清楚“博弈论怎么用在机组报价上”那这篇笔记就是为你写的。电力市场讲义博弈论PPT 的核心难点不在于博弈论本身有多深而在于怎么把纳什均衡、古诺模型、供应函数均衡这些概念和机组边际成本、报价曲线、出清价格这些电力市场的日常语言对上号。我见过太多 PPT 把博弈论讲成了数学课听众听完只记住了一堆公式却不知道明天报价时该怎么调整策略。这份讲义框架的目标很明确让听众在 90 分钟内理解“为什么机组报价是一个博弈问题”并且能带走一套可操作的报价分析思路。适合发电企业报价人员、电力交易中心分析师、以及需要给业务部门做博弈论入门培训的工程师。2. 先搞清楚电力市场里到底谁在和谁博弈2.1 电力市场的三个博弈层级机组、用户、调度很多人一上来就讲纳什均衡的定义听众直接懵。我一般会先画一张图把电力市场里的博弈关系拆成三层。第一层是发电侧机组之间的博弈这是最经典的囚徒困境场景两台机组都想多发电但总需求有限谁报价低谁中标结果双方都压价到边际成本附近利润趋近于零。第二层是发电侧和用户侧的博弈用户希望电价低发电希望电价高但双方都不知道对方的真实成本或效用函数。第三层是机组和调度之间的博弈调度要保证系统安全机组要追求利润最大化这里涉及容量申报和调频辅助服务市场的策略互动。在 PPT 里这一页不要放公式放一个 2×2 的收益矩阵就够了。左边写“机组 A 高价”右边写“机组 A 低价”上边写“机组 B 高价”下边写“机组 B 低价”。四个格子里的数字用具体例子填假设边际成本 200 元/MWh高价报 300低价报 220。如果双方都报高价各发 50% 电量利润是 (300-200)×505000 元。如果 A 报高价 B 报低价B 全发A 利润 0B 利润 (220-200)×1002000 元。如果双方都报低价各发 50%利润 (220-200)×501000 元。这个矩阵一放囚徒困境的结论自己就跳出来了双方都有动机从高价转向低价最终稳定在低价低价尽管高价高价对整体更有利。注意这里的数字是示意性的实际讲义中要根据听众所在市场的规则调整。比如有些市场是统一出清价有些是按报价支付收益矩阵的填法完全不同。2.2 为什么古诺模型和供应函数均衡是绕不开的起点电力市场博弈论讲义里古诺模型和供应函数均衡是两个必须讲清楚的基准模型。古诺模型假设机组通过选择发电量来竞争价格由市场需求曲线决定。这个模型适合描述中长期合约市场或者容量市场因为在这些市场里机组确实是在决策“发多少”而不是“报什么价”。供应函数均衡则更贴近日前现货市场机组提交的是价格-电量曲线市场运营方根据所有机组的曲线和需求曲线求交点得到出清价格和每台机组的中标电量。在 PPT 里我一般用一张对比表来呈现这两个模型的适用场景模型决策变量适用市场求解难度典型结论古诺模型发电量中长期合约、容量市场低均衡价格高于边际成本供应函数均衡价格-电量曲线日前现货、实时市场高均衡价格取决于需求弹性和机组数量伯特兰模型价格完全竞争零售市场低均衡价格等于边际成本这张表放在 PPT 里听众一眼就能看出为什么日前市场要用供应函数均衡而不是古诺模型。但要注意供应函数均衡的求解需要用到数值方法PPT 里不要展开算法细节放一个收敛曲线图就够了横轴是迭代次数纵轴是出清价格曲线从初始猜测值逐渐收敛到均衡点。然后口头解释一句“实际市场中机组通过历史报价数据学习均衡策略这个过程和迭代求解的逻辑是一致的”。2.3 用 Python 算一个两机组古诺均衡的最小例子讲完概念必须给一个能动手算的例子。我一般会在讲义里附一段 Python 代码让听众课后自己跑一遍。假设市场需求曲线是 P 1000 - 0.5Q两台机组的边际成本分别是 c1 200 和 c2 250没有固定成本。古诺均衡的求解代码如下import numpy as np from scipy.optimize import fsolve # 市场需求参数 a 1000 # 截距 b 0.5 # 斜率 c1 200 # 机组1边际成本 c2 250 # 机组2边际成本 # 古诺均衡的一阶条件 # 机组1: P q1 * dP/dQ - c1 0 # 机组2: P q2 * dP/dQ - c2 0 # 其中 P a - b*(q1q2), dP/dQ -b def equations(vars): q1, q2 vars P a - b * (q1 q2) eq1 P - b * q1 - c1 # 机组1利润最大化条件 eq2 P - b * q2 - c2 # 机组2利润最大化条件 return [eq1, eq2] # 初始猜测 q1_init, q2_init 300, 200 solution fsolve(equations, [q1_init, q2_init]) q1_eq, q2_eq solution P_eq a - b * (q1_eq q2_eq) print(f机组1均衡电量: {q1_eq:.2f} MW) print(f机组2均衡电量: {q2_eq:.2f} MW) print(f均衡出清价格: {P_eq:.2f} 元/MWh) print(f机组1利润: {(P_eq - c1) * q1_eq:.2f} 元) print(f机组2利润: {(P_eq - c2) * q2_eq:.2f} 元)这段代码的逻辑很直接古诺均衡要求每台机组在给定对方电量的情况下自己的电量是最优的。一阶条件就是利润对电量求导等于零。fsolve用来解这个二元方程组。参数说明a和b决定了需求曲线的位置和斜率c1和c2是边际成本。运行结果会显示机组1电量约 533 MW机组2约 267 MW出清价格约 600 元/MWh。这个结果和理论一致成本低的机组发电更多利润也更高。提示如果听众里有做实际报价的可以追问一句“如果机组2把边际成本降到 220均衡会怎么变”让他们自己改参数跑一遍比讲十遍“成本优势”都管用。3. 把博弈论映射到报价策略从均衡到实际决策3.1 报价曲线不是价格而是一个条件函数很多新手会把报价曲线理解成“我报 300 元/MWh”其实不对。在日前现货市场里机组提交的是一条分段阶梯曲线第一段报 0 元/MWh 对应最小技术出力第二段报 200 元/MWh 对应 50% 容量第三段报 350 元/MWh 对应 80% 容量第四段报 500 元/MWh 对应满发。市场运营方把所有机组的曲线按价格从低到高排序依次满足需求最后一台中标机组的报价就是出清价格。这个机制下博弈论的作用是帮你决定每一段报什么价。如果报太低中标概率高但利润薄如果报太高可能完全不中标。我一般会在 PPT 里放一个“报价决策矩阵”策略报价水平中标概率单次利润长期风险保守边际成本5%高低收益稳定但难以覆盖固定成本中性边际成本20%中中需要准确预测竞争对手报价激进边际成本50%低高可能连续不中标导致现金流断裂这张表不是让你选一个策略就完事而是让你根据机组类型、合约覆盖率和市场供需形势动态调整。比如一台承担基荷的机组合约覆盖了 80% 的容量剩余 20% 在现货市场报价那就可以偏激进因为即使不中标也不会影响基本收入。反过来一台没有合约的调峰机组就必须偏保守保证至少能中标一部分。3.2 用历史出清数据反推竞争对手的报价区间博弈论讲义里最实用的一页我一般留给“如何用公开数据估计对手策略”。很多电力交易中心会公布历史出清价格、总中标电量、甚至各机组的中标电量有些市场会延迟公布。拿到这些数据后可以用一个简单的回归模型反推竞争对手的报价区间。假设你有一台机组 A边际成本 200 元/MWh容量 300 MW。你观察到过去 30 天里出清价格在 250 到 450 之间波动你的中标电量在 100 到 250 MW 之间。你可以建立一个线性模型中标电量 α β × (出清价格 - 你的报价)。如果 β 显著为负说明你的报价越高中标越少这符合直觉。但更有用的是残差分析如果某几天残差特别大说明那几天竞争对手的报价行为异常可能是机组检修或者燃料成本突变。import pandas as pd import statsmodels.api as sm # 模拟历史数据出清价格、你的报价、中标电量 data pd.DataFrame({ clearing_price: [250, 280, 310, 350, 400, 420, 380, 330, 290, 260], your_bid: [240, 260, 280, 300, 320, 340, 330, 300, 270, 250], awarded_mw: [220, 200, 180, 150, 120, 100, 130, 170, 190, 210] }) # 构造价差特征 data[spread] data[clearing_price] - data[your_bid] X sm.add_constant(data[spread]) y data[awarded_mw] model sm.OLS(y, X).fit() print(model.summary()) # 预测如果价差为 50预期中标电量是多少 pred model.predict([1, 50]) print(f价差 50 时的预期中标电量: {pred[0]:.1f} MW)这段代码的核心是spread变量它衡量了出清价格和你报价之间的差距。回归系数 β 告诉你每增加 1 元价差中标电量变化多少。如果 β 是 -2意味着价差每扩大 1 元中标电量减少 2 MW。这个数字可以直接用在报价决策里如果你想把中标电量提高 20 MW就需要把报价降低 10 元。参数说明data是模拟数据实际使用时替换成从交易中心导出的 CSV 文件sm.OLS是普通最小二乘回归适合线性关系明显的情况如果关系非线性可以加二次项或者用分位数回归。注意这个模型假设竞争对手行为稳定如果市场规则调整或者新机组投产历史数据的参考价值会下降。我一般会建议每季度重新估计一次参数。3.3 纳什均衡在重复博弈中的修正为什么实际报价不会停在理论均衡点理论上的纳什均衡是一次性博弈的结果但电力市场是每天重复的。重复博弈里机组可以通过“触发策略”维持高于边际成本的报价如果对方今天报低价抢电量我明天也报低价报复直到对方回到合作报价。这种默契在机组数量少、需求稳定的市场里特别常见。在 PPT 里我会用一个简单的重复博弈模拟来展示这个逻辑。假设两台机组边际成本都是 200需求曲线 P 1000 - 0.5Q。如果双方合作各报 400各发 300 MW利润 (400-200)×300 60000 元。如果一方背叛报 250背叛方全发 500 MW利润 (250-200)×500 25000 元但对方利润为 0。如果双方都背叛各报 250各发 250 MW利润 (250-200)×250 12500 元。在无限重复博弈中如果贴现因子足够大比如 0.9合作是可以维持的。因为背叛的短期收益 25000 减去合作收益 60000 是负的而未来每一期都能拿到 60000长期收益远大于背叛。这个结论解释了为什么实际市场中出清价格往往高于边际成本但又不会高到垄断水平。# 重复博弈的贴现收益计算 def discounted_payoff(payoff_per_period, discount_factor, periods100): return sum(payoff_per_period * (discount_factor ** t) for t in range(periods)) cooperate 60000 defect_once 25000 punishment 12500 # 合作策略每期都拿 60000 coop_total discounted_payoff(cooperate, 0.9) # 背叛策略第一期拿 25000之后每期拿 12500 defect_total defect_once discounted_payoff(punishment, 0.9, periods99) print(f合作总收益: {coop_total:.0f}) print(f背叛总收益: {defect_total:.0f}) print(f合作优势: {coop_total - defect_total:.0f})运行结果会显示合作总收益远大于背叛总收益。这个计算放在 PPT 里比讲一堆“无限重复博弈的民间定理”要直观得多。参数说明discount_factor是贴现因子反映机组的耐心程度0.9 意味着下一期的 1 元相当于现在的 0.9 元periods是博弈期数设为 100 是为了近似无限期。4. 避坑做电力市场博弈论讲义时最容易翻车的五个地方4.1 把纳什均衡当成“最优解”讲现象听众听完后问“所以纳什均衡就是利润最大的点吗”然后你发现很难用一句话解释清楚。原因纳什均衡是“给定对方策略没人愿意单方面改变”的状态它不一定是帕累托最优。在囚徒困境里均衡低价低价对双方整体来说比高价高价更差。解决在 PPT 里专门放一页对比“纳什均衡”和“社会最优”。用收益矩阵标出两个点然后写一句“均衡是稳定的但不一定是好的”。如果听众里有做报价的补一句“你的目标不是找到均衡而是在均衡附近找到自己的最佳应对”。4.2 忽略市场规则对博弈结构的改变现象用古诺模型讲日前市场听众反馈“我们市场是报量不报价”或者“我们是按报价支付”模型对不上。原因不同电力市场的出清机制差异很大。统一出清价、按报价支付、节点边际电价这三种机制下的博弈结构完全不同。解决在讲义开头加一页“市场规则速查表”列出听众所在市场的关键规则出清机制、报价形式、结算方式、容量补偿机制。然后说明“接下来的模型假设是统一出清价如果你的市场是按报价支付古诺模型的结论需要修正”。不要试图用一个模型覆盖所有市场。4.3 参数设置脱离实际机组数据现象用 Python 算出来的均衡价格是 600 元/MWh但听众说“我们市场出清价从来没超过 400”。原因需求曲线参数a和b是拍脑袋定的没有用实际负荷数据和价格弹性校准。解决在代码里加一段参数校准的说明。比如a可以用历史最高出清价加上b乘以最大负荷来估计b可以用历史价格和负荷的回归系数来估计。如果拿不到数据就用“假设值”并在 PPT 上标注“示意参数实际需校准”。4.4 把供应函数均衡的求解过程讲得太数学现象讲到供应函数均衡时开始推导最佳反应函数和不动点定理听众开始看手机。原因供应函数均衡的数学门槛确实高但讲义的目标是让听众理解概念和用法不是让他们自己推导。解决把求解过程压缩成三步第一步假设每台机组的最优报价是剩余需求的函数第二步用迭代法求解这个函数的不动点第三步验证收敛性。每一步配一张图不要写公式。如果听众里有研究生可以课后单独给推导文档。4.5 没有区分短期博弈和长期博弈现象听众问“如果大家都报低价长期怎么生存”你发现讲义里只讲了单期博弈。原因电力市场的投资决策是长期博弈机组进入退出、容量投资、燃料合同都是跨期决策。短期报价博弈的均衡在长期可能被投资行为打破。解决在最后一章加一节“长期博弈的扩展”讲清楚“短期均衡价格低于新机组投资成本时长期会出现容量短缺然后价格飙升吸引新投资”。这个逻辑可以用一个简单的两阶段模型展示第一阶段报价博弈第二阶段投资决策。不需要复杂数学用文字加一张供需曲线图就够了。5. 让讲义真正能讲从 PPT 到课堂的最后一公里5.1 用“报价模拟器”做课堂互动我一般会在讲义最后附一个简化版的报价模拟器用 Excel 或者 Python 写都行。规则很简单三台机组需求曲线固定每台机组提交一个报价市场按统一出清价结算。让听众分组扮演机组每轮提交报价现场计算出清价格和中标电量然后公布利润排名。这个互动能在 20 分钟内让听众亲身体验“为什么报价高了不中标报价低了不赚钱”的纠结。模拟器的核心逻辑用 Python 写出来大概是这样def market_clearing(bids, demand_intercept1000, demand_slope0.5): bids: list of tuples (capacity, price) 返回: 出清价格, 各机组中标电量, 各机组利润 # 按报价从低到高排序 sorted_bids sorted(enumerate(bids), keylambda x: x[1][1]) remaining_demand demand_intercept # 初始需求 clearing_price 0 awarded [0] * len(bids) for idx, (capacity, price) in sorted_bids: if remaining_demand 0: break # 该机组中标电量 min(容量, 剩余需求) awarded_mw min(capacity, remaining_demand) awarded[idx] awarded_mw remaining_demand - awarded_mw clearing_price price # 最后一台中标的报价 # 计算利润假设边际成本统一为 200 marginal_cost 200 profits [(clearing_price - marginal_cost) * awarded[i] for i in range(len(bids))] return clearing_price, awarded, profits # 示例三台机组容量和报价 bids [(300, 250), (400, 300), (500, 350)] price, awarded, profits market_clearing(bids) print(f出清价格: {price} 元/MWh) print(f中标电量: {awarded} MW) print(f各机组利润: {profits} 元)这段代码的逻辑是按报价排序依次满足需求最后一台中标的报价就是出清价格。参数说明bids是每台机组的容量和报价demand_intercept和demand_slope决定需求曲线。实际课堂使用时可以让每组修改自己的报价然后重新运行函数实时看到结果变化。提示这个模拟器忽略了很多实际约束比如机组爬坡率、最小技术出力、网络阻塞。但作为课堂互动它的简单性反而是优势——听众能立刻理解报价和结果之间的因果关系。5.2 讲义节奏控制90 分钟怎么分配我一般把 90 分钟拆成四块前 15 分钟讲电力市场博弈的基本概念和收益矩阵中间 30 分钟讲古诺模型和供应函数均衡的对比接着 25 分钟做报价模拟器互动最后 20 分钟讲避坑和长期博弈扩展。每块之间留 2 分钟提问但不要超过 2 分钟否则后面讲不完。如果听众基础较好可以把古诺模型的 Python 代码现场跑一遍让他们看结果。如果听众偏业务就跳过代码直接用收益矩阵和模拟器。关键是不要试图把所有内容都讲完而是让听众带走一个核心认知报价是一个博弈问题你的最优策略取决于你对别人策略的判断。5.3 一个我反复用的收尾技巧讲义最后一页不要放“谢谢”或者“总结”放一个开放问题“如果市场里新增一台边际成本 150 的机组你的报价策略会怎么变”让听众带着这个问题离开。下次培训时用前 10 分钟收集答案然后引出新的博弈均衡分析。这个习惯让讲义变成了一个持续迭代的工具而不是一次性的幻灯片。我自己做这份讲义最大的教训是第一版塞了太多数学推导结果听众反馈“听不懂”。后来把公式全删了换成收益矩阵、对比表和模拟器反而效果更好。电力市场博弈论的核心不是数学而是对市场规则和对手行为的理解。希望这份框架能帮你做出一份听众真正能用上的讲义帮到你。本文还有配套的精品资源点击获取