$title Turkey Power Planning Model (TURKPOW,SEQ=54) $onText This is an investment planning model for the Turkish power sector to determine the least cost expansion pattern. Turvey, R, and Anderson, D, Chapter 8: Electricity Development in Turkey: A Case Study using Linear Programming. In Electricity Economics: Essays and Case Studies. Johns Hopkins University Press, Baltimore and London, 1977. Keywords: linear programming, investment planning, energy economics $offText $sTitle Set Definitions Set time 'time periods' / 1975*2005 / te(time) 'extended time horizon' / 1975, 1978, 1983, 1988, 1993, 1998, 2005 / t(te) 'time periods excluding base year' / 1978, 1983, 1988, 1993, 1998, 2005 / b 'load blocks' / peak, high, medium, low / m 'plant types' / hydro-1*hydro-13, gas-t, oil, lignite-1*lignite-3, nuclear / mh(m) 'hydro units' / hydro-1*hydro-13 / mt(m) 'thermal units - with vintage' mc(m) 'thermal units with limitations on total new capacity' / lignite-1*lignite-3 /; Alias (t,v), (b,bp); mt(m) = not mh(m); display mt; $sTitle Data: Set labels 'for plant data' / initcap 'initial capacities (mw)' avail 'operational availability' e-fact 'energy factor for hydro plants' opcost 'operating costs (mill tl per mw-year)' opcost-g 'annual rate of decrease in operating costs (%)' capcost 'capital costs (mill tl per mw)' capcost-g 'annual rate of decrease in capital costs (%)' life 'life of units (years)' maxcap 'maximum capacity - on total new capacity (mw)' /; Table mdatah(m,labels) 'data for hydro plants' initcap avail e-fact opcost capcost life maxcap * (mw) (mill tl (mill tl (years) (mw) * per mw-yr) per mw) hydro-1 .9 .4 .09 1.4 50 684 hydro-2 .9 .4 .09 4 50 1484 hydro-3 .9 .4 .09 6.5 50 844 hydro-4 .9 .4 .09 7 50 250 hydro-5 1829 .9 .6 .09 3 50 2000 hydro-6 .9 .6 .09 6.8 50 814 hydro-7 .9 .8 .09 4.3 50 890 hydro-8 .9 .4 .09 2.7 50 1366 hydro-9 .9 .4 .09 4.6 50 656 hydro-10 .9 .4 .09 6.1 50 192 hydro-11 .9 .6 .09 3.9 50 1002 hydro-12 .9 .6 .09 5.6 50 947 hydro-13 .9 .8 .09 6.1 50 81; Table mdatat(m,labels) 'data for thermal plants' initcap avail opcost opcost-g capcost capcost-g life maxcap * (mw) (mill tl (%) (mill tl (%) (years) (mw) * per mw-yr) per mw) gas-t 120 .8 1.7 -.005 2.5 30 +inf oil 847 .9 1.1 -.005 4.5 -.01 30 +inf lignite-1 960 .8 .6 -.005 5 -.01 30 lignite-2 .8 .2 -.005 7 -.01 30 2500 lignite-3 .8 .2 -.005 7 -.01 30 3500 nuclear .8 .3 -.005 9 -.02 30 +inf; Parameter hlo(m,te) 'lower bound: hydro unit expansions (mw)' / hydro-4.1978 250 / hup(m,te) 'upper bound: hydro unit expansions (mw)' / (hydro-1*hydro-3, hydro-5*hydro-7).(1978,1983) inf (hydro-1*hydro-13).(1988,1993,1998,2005) inf hydro-4.1978 250 / tlo(m,te) 'lower bound: thermal unit expansions (mw)' / gas-t.1983 100, gas-t.1988 200, gas-t.1993 360 gas-t.1998 600, gas-t.2005 1600 /; Table tup(m,te) 'upper bound on thermal unit expansions (mw)' 1978 1983 1988 1993 1998 2005 gas-t 230 390 650 1110 1580 3580 nuclear 600 2500 5000 10000 inf lignite-3 inf inf inf inf (oil,lignite-1,lignite-2) inf inf inf inf inf inf; Table dd(b,*) 'demand data for 1975' * In the reference the data presented in the tables actually use two sets of growth * rates for determining future demand, and not one as stated in the text. Here the * single growth rate (11% annually) is used. duration demand * hrs per yr) (mw) peak 526 3365 high 2540 2550 medium 3066 2050 low 2628 1520; Scalar rho 'interest rate' / .11 / prr 'peak reserve requirement (%)' / .05 / r 'maximum aggregate hydro capacity' / .5 / g 'demand growth rate (annual %)' / .11 /; Parameter length(time) 'distance from base year' d(b,te) 'power demand by block (mw)' dur(b) 'load duration of block (fraction of year)' opcostt(m,v,t) 'operating cost for thermal units (million tl per mw-yr)' capcostt(m,v,t) 'capital cost for thermal units (million tl per mw)' sigma(m) 'capital recovery factor' delta(t) 'discount factor' bs(b,b) 'load order matrix' vs(t,v) 'vintage time matrix' kit(m,v) 'initial capacity for thermal units (mw)'; length(time) = ord(time) - 1; bs(b,bp) = (ord(b) >= ord(bp)); vs(t,v) = (ord(t) >= ord(v)); opcostt(m,v,t)$vs(t,v) = mdatat(m,"opcost")* (1 + mdatat(m,"opcost-g"))**length(v); capcostt(m,v,t)$vs(t,v) = mdatat(m,"capcost")*(1 + mdatat(m,"capcost-g"))**length(v); d(b,te) = round(dd(b,"demand")*(1 + g)**length(te),0); dur(b) = sum(bp$bs(b,bp), dd(bp,"duration"))/sum(bp, dd(bp,"duration")); delta(t) = (1 + rho)**(-length(t)); sigma(mt) = rho/(1 - (1 + rho)**(-mdatat(mt,"life"))); sigma(mh) = rho/(1 - (1 + rho)**(-mdatah(mh,"life"))); kit(mt,"1978") = mdatat(mt,"initcap"); display length, bs, vs, opcostt, capcostt, dd, d, dur, delta, sigma; $sTitle Model Definition Variable phi 'total discounted cost (million tl)' phic(te) 'capital charges (million tl)' phio(te) 'operating costs (million tl)' hh(m,te) 'capacity additions: hydro units (mw)' ht(m,v) 'capacity additions: thermal units (mw)' htt(m) 'capacity additions: total thermal unit over time (mw)' zh(m,b,t) 'power output: hydro (mw)' zt(m,v,b,t) 'power output: thermal (mw)'; Positive Variable zh, zt, hh, ht; Equation db(b,te) 'demand balance (mw)' pr(te) 'peak and reserve requirements (mw)' cch(m,te) 'capacity constraint: hydro (mw)' cct(m,v,te) 'capacity constraint: thermal (mw)' ech(m,te) 'hydro energy constraint (mw-yr)' hcc(te) 'hydro capacity constraint (mw)' rch(m) 'resource constraint: maximum new capacity on hydros (mw)' cat(m) 'capacity accounting: total new capacity for unit (mw)' ak(te) 'accounting: capital charges (million tl)' ao(te) 'accounting: operating costs (million tl)' obj 'total discounted cost (million tl)'; db(b,t).. sum(bp$bs(bp,b), sum(mh, zh(mh,bp,t)) + sum((mt,v)$vs(t,v), zt(mt,v,bp,t))) =g= d(b,t); pr(t).. sum(mh, mdatah(mh,"avail")*(mdatah(mh,"initcap") + sum(v$vs(t,v), hh(mh,v)))) + sum(mt, mdatat(mt,"avail")*sum(v$vs(t,v), kit(mt,v) + ht(mt,v))) =g= (1 + prr)*d("peak",t); cch(mh,t).. sum(b, zh(mh,b,t)) =l= mdatah(mh,"avail")*(mdatah(mh,"initcap") + sum(v$vs(t,v), hh(mh,v))); cct(mt,v,t)$vs(t,v).. sum(b, zt(mt,v,b,t)) =l= mdatat(mt,"avail")*(kit(mt,v) + ht(mt,v)); ech(mh,t).. sum(b, dur(b)*zh(mh,b,t)) =l= mdatah(mh,"e-fact")*( mdatah(mh,"initcap") + sum(v$vs(t,v), hh(mh,v))); hcc(t).. sum(mh, mdatah(mh,"initcap") + sum(v$vs(t,v), hh(mh,v))) =l= r*d("peak",t); rch(mh).. sum(t, hh(mh,t)) =l= mdatah(mh,"maxcap"); cat(mt).. htt(mt) =e= sum(v, ht(mt,v)); ak(t).. phic(t) =e= sum(mh, sigma(mh)*mdatah(mh,"capcost")*sum(v$vs(t,v), hh(mh,v))) + sum(mt, sigma(mt)*sum(v, capcostt(mt,v,t)*ht(mt,v))); ao(t).. phio(t) =e= sum(mh, mdatah(mh,"opcost")*sum(b, dur(b)*zh(mh,b,t))) + sum((mt,v)$vs(t,v), opcostt(mt,v,t)*sum(b, dur(b)*zt(mt,v,b,t))); obj.. phi =e= sum(t, delta(t)*(phic(t) + phio(t))); hh.lo(mh,t) = hlo(mh,t); hh.up(mh,t) = hup(mh,t); ht.lo(mt,t) = tlo(mt,t); ht.up(mt,t) = tup(mt,t); htt.up(mt) = mdatat(mt,"maxcap"); Model turkey / all /; solve turkey minimizing phi using lp; $sTitle Report Parameter report 'summary report'; Set reporder / power, capacity, duration, energy, e-limit, op-cost /; report(mt,b,t) = sum(v, zt.l(mt,v,b,t)); report(mh,b,t) = zh.l(mh,b,t); report("power",b,t) = d(b,t); report("duration",b,t) = dur(b); report("power","power",t) = sum(b, report("power",b,t)); report(m,"power",t) = sum(b, report(m,b,t)); report(mt,"capacity",t) = sum(v$vs(t,v), kit(mt,v) + ht.l(mt,v)); report(mh,"capacity",t) = mdatah(mh,"initcap") + sum(v$vs(t,v), hh.l(mh,v)); report("energy",b,t) = report("power",b,t)*report("duration",b,t); report("energy","energy",t) = sum(b, report("energy",b,t)); report(m,"energy",t) = sum(b, dur(b)*report(m,b,t)); report(mh,"e-limit",t) = report(mh,"capacity",t)*mdatah(mh,"e-fact"); report(mh,"op-cost",t) = report(mh,"energy",t)*mdatah(mh,"opcost"); report(mt,"op-cost",t) = sum(v$vs(t,v), opcostt(mt,v,t)*sum(b, dur(b)*zt.l(mt,v,b,t))); report("op-cost","op-cost",t) = sum(m, report(m,"op-cost",t)); report("op-cost",b,t) = sum(mh, dur(b)*mdatah(mh,"opcost")*zh.l(mh,b,t)) + sum((mt,v)$vs(t,v), dur(b)*opcostt(mt,v,t)*zt.l(mt,v,b,t)); display hh.l, ht.l, report;