MOED : Multi-objective Economic-Environmental Load Dispatch

Reference

  • Alireza Soroudi, Power System Optimization Modelling in GAMS, Model MOED (Gcode3.4) in chapter Power Plant Dispatching, 2017

Category : GAMS PSOPT library


Mainfile : MOED.gms

$title Multi-objective Economic-Environmental Load Dispatch

$onText
For more details please refer to Chapter 3 (Gcode3.4), of the following book:
Soroudi, Alireza. Power System Optimization Modeling in GAMS. Springer, 2017.
--------------------------------------------------------------------------------
Model type: QCP
--------------------------------------------------------------------------------
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
   Gen     / g1*g5  /
   counter / c1*c11 /;

Parameter report(*), rep(counter,*), rep2(counter,gen);

Scalar
   load   / 400 /
   Eprice / 0.1 /
   Elim;

Table data(Gen,*)
       a     b      c       d     e      f     Pmin  Pmax
   G1  3     20     100     2     -5     3     28    206
   G2  4.05  18.07  98.87   3.82  -4.24  6.09  90    284
   G3  4.05  15.55  104.26  5.01  -2.15  5.69  68    189
   G4  3.99  19.21  107.21  1.1   -3.99  6.2   76    266
   G5  3.88  26.18  95.31   3.55  -6.88  5.57  19    53;

Variable P(gen), OF, TE, TC;
Equation eq1, eq2, eq3;

eq1.. TC =e= sum(gen, data(gen,'a')*P(gen)*P(gen) + data(gen,'b')*P(gen) + data(gen,'c'));
eq2.. sum(gen, P(gen)) =g= load;
eq3.. TE =e= sum(gen, data(gen,'d')*P(gen)*P(gen) + data(gen,'e')*P(gen) + data(gen,'f'));

P.lo(gen) = data(gen,'Pmin');
P.up(gen) = data(gen,'Pmax');

Model END / eq1, eq2, eq3 /;
solve END using qcp minimizing TC;
report('maxTE') = TE.l;
report('minTC') = TC.l;

solve END using qcp minimizing te;
report('maxTC') = TC.l;
report('minTE') = TE.l;

loop(counter,
   Elim  = (report('maxTE') - report('minTE'))*((ord(counter) - 1)/(card(counter) - 1)) + report('minTE');
   TE.up =  Elim;
   solve END using qcp minimizing TC;
   rep(counter,'TC') = TC.l;
   rep(counter,'TE') = TE.l;
   rep2(counter,gen) = P.l(gen);
);
display rep, rep2;