Description
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!