目录
1 竞争性博弈问题
1.1 问题转化
1.2 纳什均衡
1.3 优化问题与均衡问题的KKT等价性
2 紧凑模型
3 使用PATH求解器求解MCP模型的GAMS源码
3.1 源码文件
3.2 计算结果
本系列已发布文章列表:
Lecture01:市场出清问题的优化建模
Lecture1b: 如何由原始线性规划模型得到最优条件和对偶问题
回顾之前的电力市场的问题模型:
对发电厂而言,其目标是最大化收益;而对于用电企业而言,则是最大化效用。那么,如何计算收益和效用呢?
由此,对于每个市场参与主体,我们有如下优化问题:
根据KKT条件,我们可以将 电量平衡约束 等价为一个优化问题:
在这个优化问题中,我们试图在惩罚任何供给和需求不匹配的情况。也就是说,如果生产价格与需求价格不相等,就会有 λ 的惩罚。
由此我们得到了五个优化问题:
那么我们可以将这五个问题分开求解吗?显然是不能的。原因是:
这个问题也被称为“竞争性均衡【“competitive equilibrium】,这是一个非合作博弈,所有玩家都在追求自己的最大化利益。只有当他们作为一个联盟,实现联盟利益最大化时,他们可以构建一个合作博弈。
关于竞争性博弈的三篇经典文献:
- Kantorovich, L. V. (1960). Mathematical methods of organizing and planning production. Management science, 6(4), 366-422.
- Samuelson, P. A. (1952). Spatial price equilibrium and linear programming. The American economic review, 42(3), 283-303.
- Arrow, K. J., & Debreu, G. (1954). Existence of an equilibrium for a competitive economy. Econometrica: Journal of the Econometric Society, 265-290.
纳什均衡:没有市场参与者可以偏离均衡点而增加他自身的利益
约束只依赖于自己,而目标却与其他参与者相关联。这样的问题,我们可以称其为一个纳什均衡问题。广义的纳什均衡问题,每个参与者的目标和约束均与其他参数者相关联。显然,我们的问题是一个纳什均衡,但不是广义纳什均衡。
我们讨论纳什均衡和广义纳什均衡,那么为什么要区别他们呢?因为纳什均衡有很多很好的性质,如解的存在性,唯一性等;而广义纳什均衡并不具备同样的优秀属性。
那么,如何做到所有参与者都对市场出清价格保持满意,并且不愿意违背呢? 我们手头有计算纳什均衡和通过优化得到问题的解。实际中,我们应该采用那个方法呢?
我们先讨论均衡的方法,我们先将优化问题使用 KKT 条件进行等价变换,得到一个MCP;然后使用PATH等求解器计算,或者定义辅助的目标来解决。
接着又来了一个问题,我们由均衡模型得到的KKT,和由优化模型得到的KKT是等价的吗?如果等价,那么均衡模型和优化模型也就是等价的。显然,这里是等价的。
那么,我们求解一个优化问题,实际上也是在求解一个等价的均衡问题。因此,我们可以得到以下两个结论:
优化模型版本:
均衡模型版本:
MCP模型版本:
sets g generators /G1*G2/ n buses /N1*N3/ d demands /D1*D2/ alias(n,m) Sets MapN(n,n) Network topology / N1.N2 N1.N3 N2.N3 N2.N1 N3.N1 N3.N2/ MapG(g,n) Location of generators / G1.N1 G2.N2/ MapD (d,n) Location of demands / D1.N2 D2.N3/; Parameter PGmax(g) Capacity of generators [MW]/ G1 100 G2 80/ ; Parameter C(g) offer price of generators [$ per MWh]/ G1 12 G2 20/; Parameter L(d) Maximum load of demands [Mw]/ D1 100 D2 50/; Parameter U(d) utility of demands [$ per MWh]/ D1 40 D2 35/; Table Fmax (n,n) capacity of transmission lines [MW] N1 N2 N3 N1 0 100 100 N2 100 0 100 N3 100 100 0; Table B(n,n) susceptance of transmission lines [Ohm^{-1}] N1 N2 N3 N1 0 500 500 N2 500 0 500 N3 500 500 0; free variable p_D(d) consumption level of demand d [MW] p_G(g) Production level of generator g[Mw] theta(n) voltage angle of bus n [rad] lambda(n) Dual var.: locational marginal price [$ per MWh] gamma Dual var. associated with equality constraint introducing ref. bus ; Positive variable mu_D_min(d) Dual var. associated with lower bound of consumption level mu_D_max(d) Dual var. associated with upper bound of consumption level mu_G_min(g) Dual var. associated with lower bound of production level mu_G_max(g) Dual var. associated with upper bound of production level eta_min(n,m) Dual var. associated with transmission capacity constraints eta_max(n, m) Dual var. associated with transmission capacity constraints; Equations cons1,cons2,cons3,cons4,cons5,cons6,cons7, cons8,cons9,cons10,cons11,cons12; * Primer constraints cons1(g).. p_G(g)=g= 0; cons2(g).. - p_G(g) =g=-PGmax(g); cons3(d).. p_D(d) =g= 0; cons4(d).. - p_D(d) =g= -L(d); cons5(n,m).. [B(n,m)*(theta(n)-theta(m))] =g= -Fmax(n,m); cons6(n,m).. -[B(n,m)*(theta(n)-theta(m))] =g= -Fmax(n,m); cons7.. theta('N1') =e= 0 ; cons8(n).. - sum(g$MapG(g,n),p_G(g)) + sum(d$MapD(d,n),p_D(d)) + sum(m$MapN(n,m),B(n,m)*(theta(n)-theta(m))) =e= 0; * KKT conditions cons9(d).. -U(d)+sum(n$MapD(d,n),lambda(n)) + mu_D_max(d) - mu_D_min(d) =e= 0; cons10(g).. C(g)-sum(n$MapG(g,n),lambda(n)) + mu_G_max(g) - mu_G_min(g) =e= 0; cons11(n)$(ord(n) eq 1).. sum(m$MapN(n,m),B(n,m)*[lambda(n)- lambda(m) + eta_max(n, m) - eta_max(m, n) - eta_min(n,m) + eta_min(m,n)]) + gamma =e= 0; cons12(n)$(ord(n) <> 1).. sum(m$MapN(n,m),B(n,m)*[lambda(n)-lambda(m) + eta_max(n,m) - eta_max(m,n) - eta_min(n,m) + eta_min(m,n)]) =e= 0 ; Model Market_clearing / cons1.mu_G_min cons2.mu_G_max cons3.mu_D_min cons4.mu_D_max cons5.eta_min cons6.eta_max cons7.gamma cons8.lambda cons9 cons10 cons11 cons12/; Solve Market_clearing using mcp; option mcp =PATH; Display p_G.l, p_D.l, lambda.l;
p_G.L Production level of generator g[Mw]
G1 100.000, G2 50.000
p_D.L consumption level of demand d [MW]D1 100.000, D2 50.000
lambda.L Dual var.: locational marginal price [$ per MWh]N1 20.000, N2 20.000, N3 20.000
这与我们在Lecture01:市场出清问题的优化建模 中得到解是一致的。