OPF3bus : Optimal power flow for a three-bus system

Reference

  • Alireza Soroudi, Power System Optimization Modelling in GAMS, Model OPF3bus (Gcode6.2) in chapter Multi-Period Optimal Power Flow, 2017

Category : GAMS PSOPT library


Mainfile : OPF3bus.gms

$title Optimal power flow for a three-bus system

$onText
For more details please refer to Chapter 6 (Gcode6.2), of the following book:
Soroudi, Alireza. Power System Optimization Modeling in GAMS. Springer, 2017.
--------------------------------------------------------------------------------
Model type: LP
--------------------------------------------------------------------------------
Contributed by
Dr. Alireza Soroudi
IEEE Senior Member
email: 
We do request that publications derived from the use of the developed GAMS code
explicitly acknowledge that fact by citing
Soroudi, Alireza. Power System Optimization Modeling in GAMS. Springer, 2017.
DOI: doi.org/10.1007/978-3-319-62350-4
$offText

Set
   bus        / 1*3   /
   slack(bus) / 3     /
   Gen        / g1*g3 /;

Scalar Sbase / 100 /;

Alias (bus,node);

Table GenData(Gen,*) 'generating units characteristics'
       b   pmin  pmax
   g1  10  0     65
   g2  11  0     100;
* -----------------------------------------------------

Set GBconect(bus,Gen) 'connectivity index of each generating unit to each bus' / 1.g1, 3.g2 /;

Table BusData(bus,*) 'demands of each bus in MW'
       Pd
   2  100;

Set conex 'bus connectivity matrix' / 1.2, 2.3, 1.3 /;
conex(bus,node)$(conex(node,bus)) = 1;

Table branch(bus,node,*) 'network technical characteristics'
        x     Limit
   1.2  0.2   50
   2.3  0.25  100
   1.3  0.4   100 ;

branch(bus,node,'x')$(branch(bus,node,'x')=0)         =   branch(node,bus,'x');
branch(bus,node,'Limit')$(branch(bus,node,'Limit')=0) =   branch(node,bus,'Limit');
branch(bus,node,'bij')$conex(bus,node)                = 1/branch(bus,node,'x');
*****************************************************

Variable OF, Pij(bus,node), Pg(Gen), delta(bus);
Equation const1, const2, const3;

***********************************************************************
const1(bus,node)$(conex(bus,node))..
   Pij(bus,node) =e= branch(bus,node,'bij')*(delta(bus) - delta(node));

const2(bus)..
   sum(Gen$GBconect(bus,Gen), Pg(Gen)) - BusData(bus,'pd')/Sbase =e= sum(node$conex(node,bus), Pij(bus,node));

const3..
   OF =g= sum(Gen,Pg(Gen)*GenData(Gen,'b')*Sbase);

Model loadflow / const1, const2, const3 /;

Pg.lo(Gen) = GenData(Gen,'Pmin')/Sbase;
Pg.up(Gen) = GenData(Gen,'Pmax')/Sbase;

delta.up(bus)   = pi;
delta.lo(bus)   =-pi;
delta.fx(slack) = 0;

Pij.up(bus,node)$((conex(bus,node))) = 1*branch(bus,node,'Limit')/Sbase;
Pij.lo(bus,node)$((conex(bus,node))) =-1*branch(bus,node,'Limit')/Sbase;
solve loadflow minimizing OF using lp;

Parameter report(bus,*), Congestioncost;
report(bus,'Gen(MW)')    = sum(Gen$GBconect(bus,Gen), Pg.l(Gen))*sbase;
report(bus,'Angle')      = delta.l(bus);
report(bus,'load(MW)')   = BusData(bus,'pd');
report(bus,'LMP($/MWh)') = const2.m(bus)/sbase;
Congestioncost = sum((bus,node), Pij.l(bus,node)*(-const2.m(bus) + const2.m(node)))/2;
display report, Pij.l, Congestioncost;