OSeMOSYS / OSeMOSYS_GNU_MathProg

The GNU MathProg implementation of OSeMOSYS
Apache License 2.0
9 stars 14 forks source link

Implemement performance improvements from MEESA model #49

Open willu47 opened 4 years ago

willu47 commented 4 years ago

The following conditional operators are added to the GAMS encoded MEESA model, which may offer some performance improvements to the GNU MathProg version too.

Tatarewicz, I., Lewarski, M., Skwierz, S., (2020) The MEESA Model, ver.1.0, Institute of Environmental Protection - National Research Institute / National Centre for Emissions Management (KOBiZE), Warsaw. Available from: http://climatecake.pl/wp-content/uploads/2020/05/CAKE_MEESA_energy-model_documentation.pdf

EQ_SpecifiedDemand(r, l, f, y)$(SpecifiedAnnualDemand(r,f,y)<>0)..
SpecifiedAnnualDemand(r,f,y)*SpecifiedDemandProfile(r,f,l,y) /
YearSplit(l,y)=e=RateOfDemand(r,l,f,y);

CAa1_TotalNewCapacity(r,t,y)$(OperationalLife(r,t)<>0).. AccumulatedNewCapacity(r,t,y) =e=
sum(yy$((YearVal(y)-YearVal(yy)) < OperationalLife(r,t) and (YearVal(y)-YearVal(yy))>=0),
NewCapacity(r,t,yy));

CAa2_TotalAnnualCapacity(r,t,y)$(OperationalLife(r,t)<>0).. AccumulatedNewCapacity(r,t,y)+
ResidualCapacity(r,t,y) =e= TotalCapacityAnnual(r,t,y);

CAa3_TotalActivityOfEachTechnology(r,l,t,y)$(OperationalLife(r,t)<>0).. sum(m,
RateOfActivity(r,l,t,m,y)) =e= RateOfTotalActivity(r,l,t,y);

CAa4_Constraint_Capacity(r,l,t,y)$(OperationalLife(r,t)<>0).. RateOfTotalActivity(r,l,t,y) =l=
(sum(yy$((YearVal(y)-YearVal(yy)) < OperationalLife(r,t) AND (YearVal(y)-YearVal(yy)>=0)),
NewCapacity(r,t,yy)*CapacityFactor(r,t,l,yy))+ResidualCapacity(r,t,y)* smin(y0,
CapacityFactor(r,t,l,y0)))*CapacityToActivityUnit(r,t)

CAb1_PlannedMaintenance(r,t,y)$(OperationalLife(r,t)<>0)..
sum(l,RateOfTotalActivity(r,l,t,y)*YearSplit(l,y)) =l= sum(l,(sum(yy$((YearVal(y)-YearVal(yy)) <
OperationalLife(r,t) AND (YearVal(y)-YearVal(yy)>=0)),
NewCapacity(r,t,yy)*CapacityFactor(r,t,l,yy))+ResidualCapacity(r,t,y)* smin(y0,
CapacityFactor(r,t,l,y0)))* YearSplit(l,y))*AvailabilityFactor(r,t,y)*CapacityToActivityUnit(r,t)

CAb2_PlannedMaintenance(r,t,l,y)$(OperationalLife(r,t)<>0).. sum(m,
RateOfActivity(r,l,t,m,y)*YearSplit(l,y)) =g= ((sum(yy$((YearVal(y)-YearVal(yy) < OperationalLife(r,t))
AND (YearVal(y)-YearVal(yy) >=0)), NewCapacity(r,t,yy))+
ResidualCapacity(r,t,y))*CapacityFactorMIN(r,t,y)*YearSplit(l,y))*
AvailabilityFactor(r,t,y)*CapacityToActivityUnit(r,t);

EBa2_RateOfFuelProduction2(r,l,f,t,y)$(sum(m,OutputActivityRatio(r,t,f,m,y)<>0))..
sum(m$(OutputActivityRatio(r,t,f,m,y) <>0), RateOfProductionByTechnologyByMode(r,l,t,m,f,y)) =e=
RateOfProductionByTechnology(r,l,t,f,y)
EBa3_RateOfFuelProduction3(r,l,f,y).. sum(t$(sum(m,OutputActivityRatio(r,t,f,m,y)<>0)),
RateOfProductionByTechnology(r,l,t,f,y)) =e= RateOfProduction(r,l,f,y);

EBa5_RateOfFuelUse2(r,l,f,t,y)$(sum(m,InputActivityRatio(r,t,f,m,y)<>0))..
sum(m$(InputActivityRatio(r,t,f,m,y)<>0), RateOfUseByTechnologyByMode(r,l,t,m,f,y)) =e=
RateOfUseByTechnology(r,l,t,f,y);

EBa6_RateOfFuelUse3(r,l,f,y).. sum(t$(sum(m,InputActivityRatio(r,t,f,m,y)<>0)),
RateOfUseByTechnology(r,l,t,f,y)) =e= RateOfUse(r,l,f,y);

Acc1_FuelProductionByTechnology(r,l,t,f,y)$(sum(m,OutputActivityRatio(r,t,f,m,y))<>0)..
RateOfProductionByTechnology(r,l,t,f,y) * YearSplit(l,y) =e= ProductionByTechnology(r,l,t,f,y);

Acc2_FuelUseByTechnology(r,l,t,f,y)$(sum(m,InputActivityRatio(r,t,f,m,y))<>0)..
RateOfUseByTechnology(r,l,t,f,y) * YearSplit(l,y) =e= UseByTechnology(r,l,t,f,y);

RE1_FuelProductionByTechnologyAnnual(r,t,f,y)$(sum(m,OutputActivityRatio(r,t,f,m,y))<>0).. sum(l,
ProductionByTechnology(r,l,t,f,y)) =e= ProductionByTechnologyAnnual(r,t,f,y);

RE5_FuelUseByTechnologyAnnual(r,t,f,y)$(sum(m,InputActivityRatio(r,t,f,m,y))<>0).. sum(l,
RateOfUseByTechnology(r,l,t,f,y)*YearSplit(l,y)) =e= UseByTechnologyAnnual(r,t,f,y);

EBa10_EnergyBalanceEachTS4(r,rr,l,f,y)$(TradeRoute(r,rr,f,y)<>0).. Trade(r,rr,l,f,y) =e= -
Trade(rr,r,l,f,y);

EBb3_EnergyBalanceEachYear3(r,rr,f,y)$(TradeRoute(r,rr,f,y)<>0).. sum(l, Trade(r,rr,l,f,y)) =e=
TradeAnnual(r,rr,f,y);