⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fm_gams2.gms

📁 这是一个很适合研究和学习用的电力系统仿真软件
💻 GMS
📖 第 1 页 / 共 2 页
字号:
$if %flow% == 0 $goto jfloweqc

equations Pijceq(H,L),
	  Pjiceq(H,L);

$label jfloweqc

Peq(H,B).. sum(G,Ps_idx(B,G)*Ps(H,G)) -
	   sum(C,Pd_idx(B,C)*Pd(H,C)) +
	   Ch(H)*X(B,'Pg0') - Ch(H)*X(B,'Pl0') -
	   V(H,B)*sum(BB,V(H,BB)*(Gh(B,BB)*cos(a(H,B)-a(H,BB)) +
	   Bh(B,BB)*sin(a(H,B)-a(H,BB)))) =e= 0;

Qeq(H,B).. Qg(H,B) - Ch(H)*X(B,'Ql0') -
	   sum(C,Pd_idx(B,C)*(D(C,'tgphi')*Pd(H,C)))
	   - V(H,B)*sum(BB,V(H,BB)*(Gh(B,BB)*sin(a(H,B)-a(H,BB)) -
	   Bh(B,BB)*cos(a(H,B)-a(H,BB)))) =e= 0;

Thetaref(H,B)$Br(B).. a(H,B) =e= 0;

Pceq(H,B).. (1+lambdac(H)+kg(H))*(sum(G,Ps_idx(B,G)*Ps(H,G)) +
	    Ch(H)*X(B,'Pg0')) 
	    - (1+lambdac(H))*(sum(C,Pd_idx(B,C)*Pd(H,C)) +
	    Ch(H)*X(B,'Pl0'))
	    - Vc(H,B)*sum(BB,Vc(H,BB)*(Ghc(B,BB)*cos(ac(H,B)-ac(H,BB)) +
	    Bhc(B,BB)*sin(ac(H,B)-ac(H,BB)))) =e= 0;

Qceq(H,B).. Qgc(H,B) - (1+lambdac(H))*(Ch(H)*X(B,'Ql0') +
	    sum(C,Pd_idx(B,C)*(D(C,'tgphi')*Pd(H,C)))) -
	    Vc(H,B)*sum(BB,Vc(H,BB)*(Ghc(B,BB)*sin(ac(H,B)-ac(H,BB)) -
	    Bhc(B,BB)*cos(ac(H,B)-ac(H,BB)))) =e= 0;

Thetacref(H,B)$Br(B).. ac(H,B) =e= 0;

$goto floweq

* ==============================================================================
* =========== M A X I M U M   L O A D I N G   C O N D I T I O N ================
* ==============================================================================

$label mlcopf

* ------------------------------------------------------------------------------
* local variables
* ------------------------------------------------------------------------------

variables kg(H),
	  lambdac(H);

* ------------------------------------------------------------------------------
* initial values
* ------------------------------------------------------------------------------

kg.l(H) = 0;
lambdac.l(H) = 1;

* ------------------------------------------------------------------------------
* limits
* ------------------------------------------------------------------------------

* Bid Blocks
Ps.up(H,G) = S(G,'Ps0');
Pd.up(H,C) = Ch(H)*D(C,'Pd0');
Ps.lo(H,G) = S(G,'Ps0');
Pd.lo(H,C) = Ch(H)*D(C,'Pd0');
* Loading Parameter
kg.lo(H) = -1;
kg.up(H) =  1;
lambdac.lo(H) = 0;

* ------------------------------------------------------------------------------
* objective function
cost.. obj =e= sum(H,-lambdac(H));
* ------------------------------------------------------------------------------

Peq(H,B).. (lambdac(H)+kg(H))*(sum(G,Ps_idx(B,G)*Ps(H,G)) +
	   Ch(H)*X(B,'Pg0')) -
	   lambdac(H)*(sum(C,Pd_idx(B,C)*Pd(H,C)) + Ch(H)*X(B,'Pl0')) -
	   V(H,B)*sum(BB,V(H,BB)*(Gh(B,BB)*cos(a(H,B)-a(H,BB)) +
	   Bh(B,BB)*sin(a(H,B)-a(H,BB)))) =e= 0;

Qeq(H,B).. Qg(H,B) - lambdac(H)*(Ch(H)*X(B,'Ql0') +
	   sum(C,Pd_idx(B,C)*(D(C,'tgphi')*Pd(H,C)))) -
	   V(H,B)*sum(BB,V(H,BB)*(Gh(B,BB)*sin(a(H,B)-a(H,BB)) -
	   Bh(B,BB)*cos(a(H,B)-a(H,BB)))) =e= 0;

Thetaref(H,B)$Br(B).. a(H,B) =e= 0;

* ------------------------------------------------------------------------------
* flow limit equations
* ------------------------------------------------------------------------------

$label floweq

$if %flow% == 0 $goto solvestat
$if %flow% == 1 $goto iflows
$if %flow% == 2 $goto pflows
$if %flow% == 3 $goto sflows

$label pflows

Pijeq(H,L).. Pij(H,L) =e= N(L,'g0')*sum(B,Li(L,B)*V(H,B)*V(H,B)) -
	     N(L,'b')*sum(B,Li(L,B)*V(H,B)*sin(a(H,B)))*
	     sum(B,Lj(L,B)*V(H,B)*cos(a(H,B))) +
	     N(L,'b')*sum(B,Li(L,B)*V(H,B)*cos(a(H,B)))*
	     sum(B,Lj(L,B)*V(H,B)*sin(a(H,B))) -
	     N(L,'g')*sum(B,Li(L,B)*V(H,B)*cos(a(H,B)))*
	     sum(B,Lj(L,B)*V(H,B)*cos(a(H,B))) -
	     N(L,'g')*sum(B,Li(L,B)*V(H,B)*sin(a(H,B)))*
	     sum(B,Lj(L,B)*V(H,B)*sin(a(H,B)));

Pjieq(H,L).. Pji(H,L) =e= N(L,'g0')*sum(B,Lj(L,B)*V(H,B)*V(H,B)) -
	     N(L,'b')*sum(B,Lj(L,B)*V(H,B)*sin(a(H,B)))*
	     sum(B,Li(L,B)*V(H,B)*cos(a(H,B))) +
	     N(L,'b')*sum(B,Lj(L,B)*V(H,B)*cos(a(H,B)))*
	     sum(B,Li(L,B)*V(H,B)*sin(a(H,B))) -
	     N(L,'g')*sum(B,Lj(L,B)*V(H,B)*cos(a(H,B)))*
	     sum(B,Li(L,B)*V(H,B)*cos(a(H,B))) -
	     N(L,'g')*sum(B,Lj(L,B)*V(H,B)*sin(a(H,B)))*
	     sum(B,Li(L,B)*V(H,B)*sin(a(H,B)));

$if %control% == 3 $goto solvestat 
$if %control% == 5 $goto solvestat 

N(L,'b')$(ord(L) eq lambda('line')) = -1E-6;
N(L,'g')$(ord(L) eq lambda('line')) = 0;
N(L,'b0')$(ord(L) eq lambda('line')) = 0;
N(L,'g0')$(ord(L) eq lambda('line')) = 0;

Pijceq(H,L).. Pijc(H,L) =e= N(L,'g0')*sum(B,Li(L,B)*Vc(H,B)*Vc(H,B)) -
	      N(L,'b')*sum(B,Li(L,B)*Vc(H,B)*sin(ac(H,B)))*
	      sum(B,Lj(L,B)*Vc(H,B)*cos(ac(H,B))) +
	      N(L,'b')*sum(B,Li(L,B)*Vc(H,B)*cos(ac(H,B)))*
	      sum(B,Lj(L,B)*Vc(H,B)*sin(ac(H,B))) -
	      N(L,'g')*sum(B,Li(L,B)*Vc(H,B)*cos(ac(H,B)))*
	      sum(B,Lj(L,B)*Vc(H,B)*cos(ac(H,B))) -
	      N(L,'g')*sum(B,Li(L,B)*Vc(H,B)*sin(ac(H,B)))*
	      sum(B,Lj(L,B)*Vc(H,B)*sin(ac(H,B)));

Pjiceq(H,L).. Pjic(H,L) =e= N(L,'g0')*sum(B,Lj(L,B)*Vc(H,B)*Vc(H,B)) -
	      N(L,'b')*sum(B,Lj(L,B)*Vc(H,B)*sin(ac(H,B)))*
	      sum(B,Li(L,B)*Vc(H,B)*cos(ac(H,B))) +
	      N(L,'b')*sum(B,Lj(L,B)*Vc(H,B)*cos(ac(H,B)))*
	      sum(B,Li(L,B)*Vc(H,B)*sin(ac(H,B))) -
	      N(L,'g')*sum(B,Lj(L,B)*Vc(H,B)*cos(ac(H,B)))*
	      sum(B,Li(L,B)*Vc(H,B)*cos(ac(H,B))) -
	      N(L,'g')*sum(B,Lj(L,B)*Vc(H,B)*sin(ac(H,B)))*
	      sum(B,Li(L,B)*Vc(H,B)*sin(ac(H,B)));

$goto solvestat

$label iflows

Pijeq(H,L).. Pij(H,L) =e= sqrt(
	     sqr(N(L,'g')*sum(B,Li(L,B)*V(H,B)*cos(a(H,B)))-
	     N(L,'g')*sum(B,Lj(L,B)*V(H,B)*cos(a(H,B)))-
	     N(L,'b')*sum(B,Li(L,B)*V(H,B)*sin(a(H,B)))+
	     N(L,'b')*sum(B,Lj(L,B)*V(H,B)*sin(a(H,B)))-
	     N(L,'b0')*sum(B,Li(L,B)*V(H,B)*sin(a(H,B))))+
	     sqr(N(L,'b')*sum(B,Li(L,B)*V(H,B)*cos(a(H,B)))-
	     N(L,'b')*sum(B,Lj(L,B)*V(H,B)*cos(a(H,B)))+
	     N(L,'g')*sum(B,Li(L,B)*V(H,B)*sin(a(H,B)))-
	     N(L,'g')*sum(B,Lj(L,B)*V(H,B)*sin(a(H,B)))+
	     N(L,'b0')*sum(B,Li(L,B)*V(H,B)*cos(a(H,B)))));

Pjieq(H,L).. Pji(H,L) =e= sqrt(
	     sqr(N(L,'g')*sum(B,Lj(L,B)*V(H,B)*cos(a(H,B)))-
	     N(L,'g')*sum(B,Li(L,B)*V(H,B)*cos(a(H,B)))-
	     N(L,'b')*sum(B,Lj(L,B)*V(H,B)*sin(a(H,B)))+
	     N(L,'b')*sum(B,Li(L,B)*V(H,B)*sin(a(H,B)))-
	     N(L,'b0')*sum(B,Lj(L,B)*V(H,B)*sin(a(H,B))))+
	     sqr(N(L,'b')*sum(B,Lj(L,B)*V(H,B)*cos(a(H,B)))-
	     N(L,'b')*sum(B,Li(L,B)*V(H,B)*cos(a(H,B)))+
	     N(L,'g')*sum(B,Lj(L,B)*V(H,B)*sin(a(H,B)))-
	     N(L,'g')*sum(B,Li(L,B)*V(H,B)*sin(a(H,B)))+
	     N(L,'b0')*sum(B,Lj(L,B)*V(H,B)*cos(a(H,B)))));

$if %control% == 3 $goto solvestat 
$if %control% == 5 $goto solvestat 

N(L,'b')$(ord(L) eq lambda('line')) = -1E-6;
N(L,'g')$(ord(L) eq lambda('line')) = 0;
N(L,'b0')$(ord(L) eq lambda('line')) = 0;
N(L,'g0')$(ord(L) eq lambda('line')) = 0;

Pijceq(H,L).. Pijc(H,L) =e= sqrt(
	      sqr(N(L,'g')*sum(B,Li(L,B)*Vc(H,B)*cos(ac(H,B)))-
	      N(L,'g')*sum(B,Lj(L,B)*Vc(H,B)*cos(ac(H,B)))-
	      N(L,'b')*sum(B,Li(L,B)*Vc(H,B)*sin(ac(H,B)))+
	      N(L,'b')*sum(B,Lj(L,B)*Vc(H,B)*sin(ac(H,B)))-
	      N(L,'b0')*sum(B,Li(L,B)*Vc(H,B)*sin(ac(H,B))))+
	      sqr(N(L,'b')*sum(B,Li(L,B)*Vc(H,B)*cos(ac(H,B)))-
	      N(L,'b')*sum(B,Lj(L,B)*Vc(H,B)*cos(ac(H,B)))+
	      N(L,'g')*sum(B,Li(L,B)*Vc(H,B)*sin(ac(H,B)))-
	      N(L,'g')*sum(B,Lj(L,B)*Vc(H,B)*sin(ac(H,B)))+
	      N(L,'b0')*sum(B,Li(L,B)*Vc(H,B)*cos(ac(H,B)))));

Pjiceq(H,L).. Pjic(H,L) =e= sqrt(
	      sqr(N(L,'g')*sum(B,Lj(L,B)*Vc(H,B)*cos(ac(H,B)))-
	      N(L,'g')*sum(B,Li(L,B)*Vc(H,B)*cos(ac(H,B)))-
	      N(L,'b')*sum(B,Lj(L,B)*Vc(H,B)*sin(ac(H,B)))+
	      N(L,'b')*sum(B,Li(L,B)*Vc(H,B)*sin(ac(H,B)))-
	      N(L,'b0')*sum(B,Lj(L,B)*Vc(H,B)*sin(ac(H,B))))+
	      sqr(N(L,'b')*sum(B,Lj(L,B)*Vc(H,B)*cos(ac(H,B)))-
	      N(L,'b')*sum(B,Li(L,B)*Vc(H,B)*cos(ac(H,B)))+
	      N(L,'g')*sum(B,Lj(L,B)*Vc(H,B)*sin(ac(H,B)))-
	      N(L,'g')*sum(B,Li(L,B)*Vc(H,B)*sin(ac(H,B)))+
	      N(L,'b0')*sum(B,Lj(L,B)*Vc(H,B)*cos(ac(H,B)))));

$goto solvestat

$label sflows

Pijeq(H,L).. Pij(H,L) =e= sum(B,Li(L,B)*V(H,B))*sqrt(
	     sqr(N(L,'g')*sum(B,Li(L,B)*V(H,B)*cos(a(H,B)))-
	     N(L,'g')*sum(B,Lj(L,B)*V(H,B)*cos(a(H,B)))-
	     N(L,'b')*sum(B,Li(L,B)*V(H,B)*sin(a(H,B)))+
	     N(L,'b')*sum(B,Lj(L,B)*V(H,B)*sin(a(H,B)))-
	     N(L,'b0')*sum(B,Li(L,B)*V(H,B)*sin(a(H,B))))+
	     sqr(N(L,'b')*sum(B,Li(L,B)*V(H,B)*cos(a(H,B)))-
	     N(L,'b')*sum(B,Lj(L,B)*V(H,B)*cos(a(H,B)))+
	     N(L,'g')*sum(B,Li(L,B)*V(H,B)*sin(a(H,B)))-
	     N(L,'g')*sum(B,Lj(L,B)*V(H,B)*sin(a(H,B)))+
	     N(L,'b0')*sum(B,Li(L,B)*V(H,B)*cos(a(H,B)))));

Pjieq(H,L).. Pji(H,L) =e= sum(B,Lj(L,B)*V(H,B))*sqrt(
	     sqr(N(L,'g')*sum(B,Lj(L,B)*V(H,B)*cos(a(H,B)))-
	     N(L,'g')*sum(B,Li(L,B)*V(H,B)*cos(a(H,B)))-
	     N(L,'b')*sum(B,Lj(L,B)*V(H,B)*sin(a(H,B)))+
	     N(L,'b')*sum(B,Li(L,B)*V(H,B)*sin(a(H,B)))-
	     N(L,'b0')*sum(B,Lj(L,B)*V(H,B)*sin(a(H,B))))+
	     sqr(N(L,'b')*sum(B,Lj(L,B)*V(H,B)*cos(a(H,B)))-
	     N(L,'b')*sum(B,Li(L,B)*V(H,B)*cos(a(H,B)))+
	     N(L,'g')*sum(B,Lj(L,B)*V(H,B)*sin(a(H,B)))-
	     N(L,'g')*sum(B,Li(L,B)*V(H,B)*sin(a(H,B)))+
	     N(L,'b0')*sum(B,Lj(L,B)*V(H,B)*cos(a(H,B)))));

$if %control% == 3 $goto solvestat 
$if %control% == 5 $goto solvestat 

N(L,'b')$(ord(L) eq lambda('line')) = -1E-6;
N(L,'g')$(ord(L) eq lambda('line')) = 0;
N(L,'b0')$(ord(L) eq lambda('line')) = 0;
N(L,'g0')$(ord(L) eq lambda('line')) = 0;

Pijceq(H,L).. Pijc(H,L) =e= sum(B,Li(L,B)*Vc(H,B))*sqrt(
	      sqr(N(L,'g')*sum(B,Li(L,B)*Vc(H,B)*cos(ac(H,B)))-
	      N(L,'g')*sum(B,Lj(L,B)*Vc(H,B)*cos(ac(H,B)))-
	      N(L,'b')*sum(B,Li(L,B)*Vc(H,B)*sin(ac(H,B)))+
	      N(L,'b')*sum(B,Lj(L,B)*Vc(H,B)*sin(ac(H,B)))-
	      N(L,'b0')*sum(B,Li(L,B)*Vc(H,B)*sin(ac(H,B))))+
	      sqr(N(L,'b')*sum(B,Li(L,B)*Vc(H,B)*cos(ac(H,B)))-
	      N(L,'b')*sum(B,Lj(L,B)*Vc(H,B)*cos(ac(H,B)))+
	      N(L,'g')*sum(B,Li(L,B)*Vc(H,B)*sin(ac(H,B)))-
	      N(L,'g')*sum(B,Lj(L,B)*Vc(H,B)*sin(ac(H,B)))+
	      N(L,'b0')*sum(B,Li(L,B)*Vc(H,B)*cos(ac(H,B)))));

Pjiceq(H,L).. Pjic(H,L) =e= sum(B,Lj(L,B)*Vc(H,B))*sqrt(
	      sqr(N(L,'g')*sum(B,Lj(L,B)*Vc(H,B)*cos(ac(H,B)))-
	      N(L,'g')*sum(B,Li(L,B)*Vc(H,B)*cos(ac(H,B)))-
	      N(L,'b')*sum(B,Lj(L,B)*Vc(H,B)*sin(ac(H,B)))+
	      N(L,'b')*sum(B,Li(L,B)*Vc(H,B)*sin(ac(H,B)))-
	      N(L,'b0')*sum(B,Lj(L,B)*Vc(H,B)*sin(ac(H,B))))+
	      sqr(N(L,'b')*sum(B,Lj(L,B)*Vc(H,B)*cos(ac(H,B)))-
	      N(L,'b')*sum(B,Li(L,B)*Vc(H,B)*cos(ac(H,B)))+
	      N(L,'g')*sum(B,Lj(L,B)*Vc(H,B)*sin(ac(H,B)))-
	      N(L,'g')*sum(B,Li(L,B)*Vc(H,B)*sin(ac(H,B)))+
	      N(L,'b0')*sum(B,Lj(L,B)*Vc(H,B)*cos(ac(H,B)))));

$goto solvestat

* ------------------------------------------------------------------------------
* Solve Market Problem
* ------------------------------------------------------------------------------

$label solvestat
model market /all/;

option iterlim = 100000

$if %control% == 1 $goto linearmodel
$if %control% == 2 $goto linearmodel
$if %control% == 3 $goto nonlinearmodel
$if %control% == 4 $goto nonlinearmodel
$if %control% == 5 $goto nonlinearmodel
$if %control% == 6 $goto nonlinearmodel

$label linearmodel

solve market using mip minimizing obj;

parameters upar(H,G);

upar(H,G) = u.l(H,G);

equations cost2;

cost2.. obj =e= sum(H,sum(G,Ps(H,G)*S(G,'Cs')) - sum(C,Pd(H,C)*D(C,'Cd')));

Ps.up(H,G) = S(G,'Psmax')*upar(H,G);
Ps.lo(H,G) = S(G,'Psmin')*upar(H,G);

$if %control% == 1
model market2 /cost2,Pbalance/;

$if %control% == 2
model market2 /cost2,Peq,Pijeq,Thetaref/;

solve market2 using lp minimizing obj;

$goto psatoutput

$label nonlinearmodel

solve market using minlp minimizing obj;

$if not %control% == 4 $goto psatoutput

lambdac.up = lambdac.l;
lambdac.lo = lambdac.l-1.0E-5;
lambda('omega') = 0;

solve market using minlp minimizing obj;

$label psatoutput

$libinclude psatout Ps.l H G
$libinclude psatout Pd.l H C

$if %control% == 1 $libinclude psatout Pbalance.m H
$if %control% == 1 $goto end_output

$if %control% == 2 $libinclude psatout Peq.m H B
$if %control% == 2 $goto end_output

$libinclude psatout V.l H B
$libinclude psatout a.l H B
$libinclude psatout Qg.l H B
$libinclude psatout Peq.m H B
$libinclude psatout Pij.l H L
$libinclude psatout Pji.l H L

$if %control% == 5 $goto no_dual

$libinclude psatout V.m H B
$libinclude psatout Pij.m H L
$libinclude psatout Pji.m H L

$label no_dual

$if %control% == 3 $goto end_output

$libinclude psatout lambdac.l H 
$libinclude psatout kg.l H 

$if %control% == 5 $goto end_output

$libinclude psatout Vc.l H B
$libinclude psatout ac.l H B
$libinclude psatout Qgc.l H B
$libinclude psatout Pijc.l H L
$libinclude psatout Pjic.l H L

$label end_output

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -