📄 fm_gams2.gms
字号:
$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 + -