TulipaEnergyModel.jl icon indicating copy to clipboard operation
TulipaEnergyModel.jl copied to clipboard

Rolling horizon tutorial

Open abelsiqueira opened this issue 2 months ago • 8 comments

~BLOCKED until other rolling horizon PRs are merged.~

Create a tutorial for rolling horizon with a similar output to the JuMP tutorial https://jump.dev/JuMP.jl/stable/tutorials/algorithms/rolling_horizon/.

Related issues

Closes #1385 Part of #1365

Checklist

  • [x] I am following the contributing guidelines
  • [x] Tests are passing
  • [x] Lint workflow is passing
  • [x] Docs were updated and workflow is passing

abelsiqueira avatar Oct 10 '25 16:10 abelsiqueira

:robot: CompareMPS report

:white_check_mark: MPS files match

github-actions[bot] avatar Oct 10 '25 16:10 github-actions[bot]

Codecov Report

:x: Patch coverage is 97.29730% with 4 lines in your changes missing coverage. Please review. :white_check_mark: Project coverage is 98.47%. Comparing base (eb442c5) to head (bdbab55). :warning: Report is 4 commits behind head on main.

Files with missing lines Patch % Lines
src/rolling-horizon/rolling-horizon.jl 90.47% 4 Missing :warning:
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #1387      +/-   ##
==========================================
- Coverage   98.61%   98.47%   -0.14%     
==========================================
  Files          38       42       +4     
  Lines        1368     1511     +143     
==========================================
+ Hits         1349     1488     +139     
- Misses         19       23       +4     

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.

:rocket: New features to boost your workflow:
  • :snowflake: Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

codecov[bot] avatar Oct 10 '25 16:10 codecov[bot]

:memo: Check the documentation preview: https://tulipaenergy.github.io/TulipaEnergyModel.jl/previews/PR1387

github-actions[bot] avatar Oct 13 '25 09:10 github-actions[bot]

@clizbe, the tutorial here can be reviewed in parallel to the rest of the rolling horizon changes

abelsiqueira avatar Oct 15 '25 10:10 abelsiqueira

This has been rebased and marked as ready to review

abelsiqueira avatar Oct 24 '25 12:10 abelsiqueira

Thanks for the review @clizbe, I've committed the easy and commented on the rest

abelsiqueira avatar Nov 20 '25 15:11 abelsiqueira

@clizbe, it is not on you, I am the one sorry here, I have not been able to explain myself correctly with the RH, let me try again 😜

  1. The solutions will differ as long as there are constraints connecting different time periods, such as energy storage balance, ramping constraints, and unit commitment. Since we have a battery in this case, energy storage balance constraints are crucial, leading us to expect feasible solutions.

  2. Why do we anticipate these differences? When we optimize for an entire week at once, the model benefits from perfect foresight of the optimization horizon. This means that at the beginning of the week, the model knows what will happen by the end, allowing it to optimize the storage level from the first hour based on this comprehensive information. In contrast, a rolling horizon approach limits the optimization to a two-day window. As a result, the model cannot foresee events that occur later in the week and can only optimize for the immediate two days. While this creates suboptimal outcomes for the overall week, it remains a viable solution.

  3. Why accept suboptimal solutions? There are a couple of reasons. First, solving an entire planning horizon (like a full year) may not be feasible or could take a long time. The rolling horizon approach provides a practical approximation to the perfect foresight model. Second, using smaller optimization models allows for a more accurate representation of market dynamics. With detailed considerations (like startup/shutdown processes, ramping, and DC optimal power flow), players are often limited in their foresight to just a few days, leading to suboptimal decisions. This reality is naturally reflected in the prices generated by the rolling horizon method.

  4. How do we define uncertainty in our model? Uncertainty refers to potential future scenarios that occur with specific probabilities, such as a dry weather year, a wet weather year, or an average weather year, each with associated probabilities A, B, and C, respectively.

  5. Does uncertainty affect the rolling horizon approach? Not really. The rolling horizon analysis typically focuses on a single scenario (for example, a dry weather year). The differences in the solutions arise not from uncertainty but from the fact that each optimization window is shorter than the overall horizon for that scenario.

  6. Some might argue that a shorter optimization window allows the rolling horizon to account for future uncertainty. However, as defined in Tulipa, this is not an accurate use of the term uncertainty in this context. The rolling horizon simply prevents the solution from anticipating future events that lie outside its optimization window.

  7. Is there a way in which the rolling horizon approach and the full model yield the same results? Yes, if there are no intertemporal constraints—such as those related to storage, ramping, or unit commitment—the solutions will be identical.

datejada avatar Nov 26 '25 16:11 datejada

You should make a TED talk! ;)

clizbe avatar Nov 26 '25 16:11 clizbe

@datejada, I've updated the errors now as well, let me know if that's what you're looking for

abelsiqueira avatar Dec 01 '25 12:12 abelsiqueira

Thanks for the reviews @clizbe and @datejada, the tutorial looks much better now!

abelsiqueira avatar Dec 01 '25 14:12 abelsiqueira