OSeMOSYS / OSeMOSYS_GNU_MathProg

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

Depreciation Method does not work in OSeMOSYS_fast #104

Open trevorb1 opened 3 months ago

trevorb1 commented 3 months ago

The Issue

In OSeMOSYS there are two types of depreciation methods; sinking-fund and straight-line. Depreciation Method is a binary parameter which can take on the value of 1 or 2 (sinking-fund and straight-line respectively). In OSeMOSYS_fast, the parameter DepreciationMethod is still defined in the model file, yet, users are locked to only using sinking-fund depreciation method (which is a little confusing!). I would assume using OSeMOSYS_fast should not prohibit me from choosing different depreciation methods?

Description

In the regular OSeMOSYS version, if deprecation method is 1, the SV1 constraint is activated (assuming discount rate is greater than zero). If deprecation method is 2, the SV2 constraint is activated. These work correctly when running the regular osemosys model.

s.t. SV1_SalvageValueAtEndOfPeriod1{r in REGION, t in TECHNOLOGY, y in YEAR: DepreciationMethod[r]=1 && (y + OperationalLife[r,t]-1) > (max{yy in YEAR} max(yy)) && DiscountRate[r]>0}: SalvageValue[r,t,y] = CapitalCost[r,t,y] * NewCapacity[r,t,y] * CapitalRecoveryFactor[r,t] * PvAnnuity[r,t] *(1-(((1+DiscountRate[r])^(max{yy in YEAR} max(yy) - y+1)-1)/((1+DiscountRate[r])^OperationalLife[r,t]-1)));

s.t. SV2_SalvageValueAtEndOfPeriod2{r in REGION, t in TECHNOLOGY, y in YEAR: (DepreciationMethod[r]=1 && (y + OperationalLife[r,t]-1) > (max{yy in YEAR} max(yy)) && DiscountRate[r]=0) || (DepreciationMethod[r]=2 && (y + OperationalLife[r,t]-1) > (max{yy in YEAR} max(yy)))}: SalvageValue[r,t,y] = CapitalCost[r,t,y] * NewCapacity[r,t,y] * CapitalRecoveryFactor[r,t] * PvAnnuity[r,t] *(1-(max{yy in YEAR} max(yy) - y+1)/OperationalLife[r,t]);

In OSeMOSYS_fast. the equivalent salvage value equations are defined as follows. Depreciation method is removed from both of them. Moreover, the only spot depreciation method appears in OSeMOSYS_fast is in commented out storage salvage value equations.

s.t. SV1_SalvageValueAtEndOfPeriod1{r in REGION, t in TECHNOLOGY, y in YEAR: (y + OperationalLife[r,t]-1) > (max{yy in YEAR} max(yy)) && DiscountRate[r]>0}: SalvageValue[r,t,y] = CapitalCost[r,t,y] * NewCapacity[r,t,y] * CapitalRecoveryFactor[r,t] * PvAnnuity[r,t] * (1-(((1+DiscountRate[r])^(max{yy in YEAR} max(yy) - y+1)-1)/((1+DiscountRate[r])^OperationalLife[r,t]-1)));

s.t. SV2_SalvageValueAtEndOfPeriod2{r in REGION, t in TECHNOLOGY, y in YEAR: (y + OperationalLife[r,t]-1) > (max{yy in YEAR} max(yy)) && DiscountRate[r]=0}: SalvageValue[r,t,y] = CapitalCost[r,t,y] * NewCapacity[r,t,y] * CapitalRecoveryFactor[r,t] * PvAnnuity[r,t] * (1-(max{yy in YEAR} max(yy) - y+1)/OperationalLife[r,t]);

Steps to Reproduce

I used Simplicity and OSeMOSYS_fast to generated two *.lp files; one where DepreciationMethod was set to 1 and one where DepreciationMethod was set to 2. I did a diff on these two LP files and they are the exact same!

Anything Else

Tagging @hannahluscombe as she originally spotted this issue!