magic.gms : Magic Power Scheduling Problem

**Description**

A number of power stations are committed to meet demand for a particular day. three types of generators having different operating characteristics are available. Generating units can be shut down or operate between minimum and maximum output levels. Units can be started up or closed down in every demand block.

**References**

- Day, R E, and Williams, H P, MAGIC: The design and use of an interactive modeling language for mathematical programming. Tech. rep., Department Business Studies, University of Edinburgh, 1982.
- Williams, H P, Model Building in Mathematical Programming. John Wiley and Sons, 1978.
- Garver, L L, Power Scheduling by Integer Programming, Tariff-Rates-Power-Generation-Problem. IEEE Trans. Power Apparatus and Systems 81 (1963), 730-735.

**Small Model of Type :** MIP

**Category :** GAMS Model library

**Main file :** magic.gms

$Title M A G I C Power Scheduling Problem (MAGIC,SEQ=12) $Ontext A number of power stations are committed to meet demand for a particular day. three types of generators having different operating characteristics are available. Generating units can be shut down or operate between minimum and maximum output levels. Units can be started up or closed down in every demand block. Garver, L L, Power Scheduling by Integer Programming, Tariff-Rates-Power-Generation-Problem, IEEE Trans. Power Apparatus and Systems, 81, 730-735, 1963 Day, R E, and Williams, H P, MAGIC: The design and use of an interactive modeling language for mathematical programming. Tech. rep., Department Business Studies, University of Edinburgh, 1982. Williams, H P, Model Building in Mathematical Programming. John Wiley and Sons, 1978. $Offtext Sets t demand blocks / 12pm-6am, 6am-9am, 9am-3pm, 3pm-6pm, 6pm-12pm / g generators / type-1, type-2, type-3 / Parameters dem(t) demand (1000mw) / 12pm-6am 15, 6am-9am 30, 9am-3pm 25, 3pm-6pm 40, 6pm-12pm 27 / dur(t) duration (hours) / 12pm-6am 6, 6am-9am 3, 9am-3pm 6, 3pm-6pm 3, 6pm-12pm 6 / Table data(g,*) generation data min-pow max-pow cost-min cost-inc start number * (1000mw) (1000mw) (l/h) (l/h/mw) (l) (units) type-1 .85 2.0 1000 2.0 2000 12 type-2 1.25 1.75 2600 1.3 1000 10 type-3 1.5 4.0 3000 3.0 500 5 Parameters peak peak power (1000mw) ener(t) energy demand in load block (1000mwh) tener total energy demanded (1000mwh) lf load factor ; peak = smax(t, dem(t)); ener(t) = dur(t)*dem(t); tener = sum(t, ener(t)); lf = tener/(peak*24); display peak, tener, lf, ener; $eject Variables x(g,t) generator output (1000mw) n(g,t) number of generators in use s(g,t) number of generators started up cost total operating cost (l) Integer Variables n; Positive Variable s; Equations pow(t) demand for power (1000mw) res(t) spinning reserve requirements (1000mw) st(g,t) start-up definition minu(g,t) minimum generation level (1000mw) maxu(g,t) maximum generation level (1000mw) cdef cost definition (l); pow(t).. sum(g, x(g,t)) =g= dem(t); res(t).. sum(g, data(g,"max-pow")*n(g,t)) =g= 1.15*dem(t); st(g,t).. s(g,t) =g= n(g,t) - n(g,t--1); minu(g,t).. x(g,t) =g= data(g,"min-pow")*n(g,t); maxu(g,t).. x(g,t) =l= data(g,"max-pow")*n(g,t); cdef.. cost =e= sum((g,t), dur(t)*data(g,"cost-min")*n(g,t) + data(g,"start")*s(g,t) + 1000*dur(t)*data(g,"cost-inc")*(x(g,t)-data(g,"min-pow")*n(g,t)) ); n.up(g,t) = data(g,"number"); Model william / all /; william.optcr = 0; Solve william minimizing cost using mip; Parameter rep summary report; rep(t,"demand") = dem(t); rep(t,"spinning") = sum(g, data(g,"max-pow")*n.l(g,t)); rep(t,"start-ups") = sum(g, s.l(g,t)); rep(t,"m-cost") = -pow.m(t)/dur(t)/1000; Display rep;