-
Notifications
You must be signed in to change notification settings - Fork 61
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
Value of bound
output during training with risk aversion and first stage uncertainty
#803
Comments
This is expected behaviour. If there is first-stage uncertainty, we do not (and cannot) optimise the risk-adjusted cost at the root node. The risk measures apply only to the cost to go of the first and subsequent nodes. Note that if you have uncertainty in the first stage, you are in effect solving N independent risk-averse SDDP problems, and minimizing the expectation of their risk-averse bound. |
Thinking on this for a few minutes though, perhaps we could add a |
Indeed, the first-stage problems are separable, so minimizing the cost of each realization of On a different note (but not sure it applies), does this have an impact on periodic models? If I understand correctly, the lower bound reported would be the expectation of the first-stage costs (if it has uncertainty, which is probably a often the case in |
I don't think so. Not in this detail.
Yes this applies to cyclic graphs.
Correct. I'm hesitant to go changing existing behaviour, so any new feature has to be opt-in. I have an idea. I'll make a PR. |
Is this what you had in mind? #804 |
With this I guess that I will have the log that I expected! If this makes sense for you in the codebase, I appreciate it. Thanks, Oscar! |
Hi Oscar,
When evaluating a simple hydrothermal dispatch problem with SDDP.jl for comparing it's lower bound with other methods, the column
bound
that is printed in theSDDP.log
file contained values that were consistently below what I found that was the optimal value.However, by calling
SDDP.calculate_bound()
externally it was possible to obtain a much better value. A sample of code that reproduces this behavior is:By fixing the noise terms applied to the first stage to a constant value (e.x. = 0), this behavior was no more. Also, while running the same code with
risk_measure = SDDP.Expectation()
, it did not happen anymore.While inspecting the source, in the function
iteration
inalgorithm.jl
, it seems that the bound that is calculated while training the policy always considersSDDP.Expectation
as a risk_measure:SDDP.jl/src/algorithm.jl
Lines 948 to 950 in f3447e9
Is this the actual expected behavior? When comparing risk-averse approaches, it seems that the
bound
column, and also the content of what it printed with functions likeSDDP.write_log_to_csv
leads the user to think that the evolution of the estimated bound is "worse" than it actually is.The text was updated successfully, but these errors were encountered: