set ENERGY; set ENERGY_IN; set ENERGY_OUT; set YEARS ordered; set YEARS_plus ordered; set YEARS_first ordered; set YEARS_minus ordered; set FUELS; param price {FUELS}; param supply_pot {FUELS}; param emis_fact {FUELS}; param life_plant; param Msec_per_year; param limits{ENERGY_IN,ENERGY_OUT}; param t_step; param bio_pot; param r; param veh_cost {ENERGY_IN}; param dem {ENERGY_OUT,YEARS}; param cost_inv {ENERGY_IN,ENERGY_OUT}; param effic {ENERGY_IN,ENERGY_OUT}; param lf {ENERGY_IN,ENERGY_OUT}; param init_energy {ENERGY_IN,ENERGY_OUT}; param emis_up{YEARS}; var tot_cost; var supply_1{FUELS,YEARS} >=0; var en_conv{ENERGY_IN,ENERGY_OUT,YEARS} >=0; var capital{ENERGY_IN,ENERGY_OUT,YEARS_plus} >=0; var cap_invest{ENERGY_IN,ENERGY_OUT,YEARS} >=0; var C_emission{YEARS} >=0; #var energy_prod{ENERGY_OUT,YEARS} >=0; var annual_cost{YEARS} >=0; var extra_dem{ENERGY_OUT,YEARS} >=0; var en_supply{ENERGY_OUT,YEARS} >=0; ############# # Objective # ############# minimize tot_cost_M: tot_cost; ################ # Restrictions # ################ subject to totcost_Q: tot_cost = sum{t in YEARS} t_step * annual_cost[t]/((1+r)^(t_step*(ord(t,YEARS)-1))); subject to supply_pot_Q {t in YEARS}: supply_1["bio", t] <= bio_pot; subject to supply_1_Q{f in FUELS, t in YEARS}: supply_1[f, t] = sum{eo in ENERGY_OUT} en_conv[f,eo,t]; subject to supply_2_Q{t in YEARS}: extra_dem["elec", t] = sum{eo in ENERGY_OUT} en_conv["elec",eo,t]; subject to energy_demand_Q{eo in ENERGY_OUT, t in YEARS}: dem[eo,t] + extra_dem[eo,t] = sum{ei in ENERGY_IN} en_conv[ei,eo,t] * effic[ei,eo]; subject to en_supply_Q{eo in ENERGY_OUT, t in YEARS}: sum{ei in ENERGY_IN} en_conv[ei,eo,t] = en_supply[eo,t]; subject to reserves_Q{f in FUELS}: sum{t in YEARS} t_step * supply_1[f,t] <= supply_pot[f]; subject to capital_lim_Q{ei in ENERGY_IN, eo in ENERGY_OUT, t in YEARS}: en_conv[ei,eo,t] <= capital[ei,eo,t] * lf[ei,eo] * Msec_per_year; subject to q_init_energy{ei in ENERGY_IN, eo in ENERGY_OUT,t in YEARS_first}: en_conv[ei,eo,t] <= init_energy[ei,eo]; subject to capital_Q{ei in ENERGY_IN, eo in ENERGY_OUT, t in YEARS}: capital[ei,eo,t] = t_step * cap_invest[ei,eo,t] + capital[ei,eo,prev(t,YEARS_plus)] * exp(t_step * log(1-1/life_plant)); subject to capital_init_Q{ei in ENERGY_IN, eo in ENERGY_OUT, t in YEARS_minus}: capital[ei,eo,t] = 0; subject to annual_cost_Q{t in YEARS}: annual_cost[t] = sum{f in FUELS} supply_1[f,t]*price[f] + + sum{ei in ENERGY_IN,eo in ENERGY_OUT} cap_invest[ei,eo,t]*cost_inv[ei,eo] + sum{ei in ENERGY_IN} en_conv[ei,"transp",t] * veh_cost[ei]; ######################## # Various restrictions # ######################## subject to q_limits{ei in ENERGY_IN, eo in ENERGY_OUT, t in YEARS}: en_conv[ei,eo,t]*effic[ei,eo] <= (dem[eo,t]+extra_dem[eo,t])*limits[ei,eo]; subject to emission_Q{t in YEARS}: C_emission[t] = sum{f in FUELS} emis_fact[f] * supply_1[f,t]; ################ # Upper bounds # ################ #subject to emis_UB{t in YEARS}: # C_emission[t] <= emis_up[t]; subject to cap_invest_UB_1 {ei in ENERGY_IN, eo in ENERGY_OUT, t in YEARS}: (if 15 then cap_invest[ei,eo,t] else 0) <= 1; subject to cap_invest_UB_3 {eo in ENERGY_OUT, t in YEARS}: (if ord(t)<3 then cap_invest["solar", eo,t] else 0) = 0; subject to cap_invest_UB_4 {eo in ENERGY_OUT, t in YEARS}: (if ord(t)<5 then cap_invest["solar_H2", eo,t] else 0) = 0;