Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Multi-period investments are biased since the remaining value is not accounted for #977

Closed
jokochems opened this issue Sep 17, 2023 · 3 comments · Fixed by #982
Closed

Comments

@jokochems
Copy link
Member

Background

In v0.5.1, multi-period investments have been introduced. For those not familiar with the concept: The idea is to allow multiple time steps where investments are allowed, namely at the beginning of every period, e.g. year, and to introduce discounting for costs that occur at different periods resp. time steps as well as perform life time tracking. So it is especially useful for long-term system planning.

Problem description

Investments are accounted for by their annuities (annual equivalent of capital expenditures) over the full lifetime of a plant. So far all good since this is what you want to have. However, there is an implicit bias towards earlier investments introduced by this. It is not as attractive to invest in later periods as the plant might not run for its full lifetime, but still carries the total capital expenditures.

Suggestion

Thus, it would be sensible to account for remaining values at the end of the optimization horizon. What I have in mind is to simply evaluate for each InvestmentFlowBlock - and the other blocks allowing for investments (storages, demand repose) - what the remaining lifetime at the end of the simulation is and to decrement the costs by the respective annuities. E.g., if you have a plant with 20 years lifetime that has been operating for 8 years at the end of the optimization horizon, subtract 12 times the annuity of that plant to account for its remaining value.

With the newly introduced periods_matrix of the energy system, see #957, it should be easier to introduce this approach.

@nailend and @p-snft

  • What is your take on the general idea?
  • I'd self-assign and provide a fix somewhat soon. I'd be happy for at least one of you to review.
@nailend
Copy link
Contributor

nailend commented Sep 18, 2023

I'm happy to help with that and give a review. It's also on our to-do list, just hasn't moved up far enough yet.

Your suggestion sounds reasonable. I'm not really familiar with financial mathematics, but subtracting the annuity outside the optimization horizon seems straightforward, and I believe it's done that way in OSeMOSYS as well.

@p-snft
Copy link
Member

p-snft commented Sep 27, 2023

Uh! How could we let this slip through? ;P

This should definitely be fixed. Alternatively to the proposed or as an additional aspect of the implementation, the investment object could take a value for the remaining value at the end of the optimization period, analogue to the value for the investment. The (possibly default) value would be the summed annuity of the remaining lifetime, but it should be possible to choose differently. For example, one might decide that the remaining value considers a learning curve, modelling the fact that later installations can be cheaper.

@jokochems
Copy link
Member Author

Uh! How could we let this slip through? ;P

This should definitely be fixed. Alternatively to the proposed or as an additional aspect of the implementation, the investment object could take a value for the remaining value at the end of the optimization period, analogue to the value for the investment. The (possibly default) value would be the summed annuity of the remaining lifetime, but it should be possible to choose differently. For example, one might decide that the remaining value considers a learning curve, modelling the fact that later installations can be cheaper.

Thanks for pointing this out, @p-snft. Since the investment expenses are defined on a per-period basis, it should be possible to do the accounting here on the basis of the values in the last period.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants