草庐IT

Lecture02:均衡问题-优化问题以及KKT等价

运筹码仓 2023-04-08 原文

目录

1 竞争性博弈问题

1.1 问题转化

1.2 纳什均衡

1.3 优化问题与均衡问题的KKT等价性 

2 紧凑模型

 3 使用PATH求解器求解MCP模型的GAMS源码

3.1 源码文件

 3.2 计算结果


本系列已发布文章列表:

Lecture01:市场出清问题的优化建模

Lecture1b: 如何由原始线性规划模型得到最优条件和对偶问题

回顾之前的电力市场的问题模型:

1 竞争性博弈问题

1.1 问题转化

对发电厂而言,其目标是最大化收益;而对于用电企业而言,则是最大化效用。那么,如何计算收益和效用呢?

  • 发电厂收益:发电量 * (市场价格 - 发电成本价格)
  • 用电企业效用:用电量 * (投标价格 - 市场价格)

由此,对于每个市场参与主体,我们有如下优化问题:

根据KKT条件,我们可以将 电量平衡约束 等价为一个优化问题:

在这个优化问题中,我们试图在惩罚任何供给和需求不匹配的情况。也就是说,如果生产价格与需求价格不相等,就会有 λ 的惩罚。

由此我们得到了五个优化问题:

 那么我们可以将这五个问题分开求解吗?显然是不能的。原因是:

  • 市场出清价格  λ 在price-setter问题中是变量,而在G1,G2,D1,D2中是参数
  • 发电量和用电量在G1,G2,D1,D2中是变量,而在price-setter问题中是参数
  • 因此上述五个问题是相互关联的,我们无法将其进行拆解而单独处理。这是一个博弈论的问题。

这个问题也被称为“竞争性均衡【“competitive equilibrium】,这是一个非合作博弈,所有玩家都在追求自己的最大化利益。只有当他们作为一个联盟,实现联盟利益最大化时,他们可以构建一个合作博弈。

关于竞争性博弈的三篇经典文献:

  1. Kantorovich, L. V. (1960). Mathematical methods of organizing and planning production. Management science6(4), 366-422.
  2. Samuelson, P. A. (1952). Spatial price equilibrium and linear programming. The American economic review42(3), 283-303.
  3. Arrow, K. J., & Debreu, G. (1954). Existence of an equilibrium for a competitive economy. Econometrica: Journal of the Econometric Society, 265-290.

1.2 纳什均衡

纳什均衡:没有市场参与者可以偏离均衡点而增加他自身的利益

约束只依赖于自己,而目标却与其他参与者相关联。这样的问题,我们可以称其为一个纳什均衡问题。广义的纳什均衡问题,每个参与者的目标和约束均与其他参数者相关联。显然,我们的问题是一个纳什均衡,但不是广义纳什均衡。

我们讨论纳什均衡和广义纳什均衡,那么为什么要区别他们呢?因为纳什均衡有很多很好的性质,如解的存在性,唯一性等;而广义纳什均衡并不具备同样的优秀属性。

 那么,如何做到所有参与者都对市场出清价格保持满意,并且不愿意违背呢? 我们手头有计算纳什均衡和通过优化得到问题的解。实际中,我们应该采用那个方法呢?

 我们先讨论均衡的方法,我们先将优化问题使用 KKT 条件进行等价变换,得到一个MCP;然后使用PATH等求解器计算,或者定义辅助的目标来解决。

1.3 优化问题与均衡问题的KKT等价性 

接着又来了一个问题,我们由均衡模型得到的KKT,和由优化模型得到的KKT是等价的吗?如果等价,那么均衡模型和优化模型也就是等价的。显然,这里是等价的。

 那么,我们求解一个优化问题,实际上也是在求解一个等价的均衡问题。因此,我们可以得到以下两个结论:

  • 优化问题和均衡问题是等价的,因为他们都能推导出相同的KKT条件
  • 优化问题和均衡问题都能获得纳什均衡解,即没有市场参与者愿意偏离市场出清价格。

2 紧凑模型

优化模型版本:

 均衡模型版本:

MCP模型版本:

 3 使用PATH求解器求解MCP模型的GAMS源码

3.1 源码文件

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;

 3.2 计算结果

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:市场出清问题的优化建模 中得到解是一致的。

有关Lecture02:均衡问题-优化问题以及KKT等价的更多相关文章

  1. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

  2. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  3. ruby - 通过 rvm 升级 ruby​​gems 的问题 - 2

    尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub

  4. ruby - 通过 RVM (OSX Mountain Lion) 安装 Ruby 2.0.0-p247 时遇到问题 - 2

    我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search

  5. ruby - Fast-stemmer 安装问题 - 2

    由于fast-stemmer的问题,我很难安装我想要的任何ruby​​gem。我把我得到的错误放在下面。Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingfast-stemmer:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcreatingMakefilemake"DESTDIR="cleanmake"DESTDIR=

  6. java - 等价于 Java 中的 Ruby Hash - 2

    我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/

  7. ruby - 安装 Ruby 时遇到问题(无法下载资源 "readline--patch") - 2

    当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub

  8. java - 从 JRuby 调用 Java 类的问题 - 2

    我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www

  9. ruby-on-rails - 简单的 Ruby on Rails 问题——如何将评论附加到用户和文章? - 2

    我意识到这可能是一个非常基本的问题,但我现在已经花了几天时间回过头来解决这个问题,但出于某种原因,Google就是没有帮助我。(我认为部分问题在于我是一个初学者,我不知道该问什么......)我也看过O'Reilly的RubyCookbook和RailsAPI,但我仍然停留在这个问题上.我找到了一些关于多态关系的信息,但它似乎不是我需要的(尽管如果我错了请告诉我)。我正在尝试调整MichaelHartl'stutorial创建一个包含用户、文章和评论的博客应用程序(不使用脚手架)。我希望评论既属于用户又属于文章。我的主要问题是:我不知道如何将当前文章的ID放入评论Controller。

  10. 【高数】用拉格朗日中值定理解决极限问题 - 2

    首先回顾一下拉格朗日定理的内容:函数f(x)是在闭区间[a,b]上连续、开区间(a,b)上可导的函数,那么至少存在一个,使得:通过这个表达式我们可以知道,f(x)是函数的主体,a和b可以看作是主体函数f(x)中所取的两个值。那么可以有,  也就意味着我们可以用来替换 这种替换可以用在求某些多项式差的极限中。方法: 外层函数f(x)是一致的,并且h(x)和g(x)是等价无穷小。此时,利用拉格朗日定理,将原式替换为 ,再进行求解,往往会省去复合函数求极限的很多麻烦。使用要注意:1.要先找到主体函数f(x),即外层函数必须相同。2.f(x)找到后,复合部分是等价无穷小。3.要满足作差的形式。如果是加

随机推荐