-
Notifications
You must be signed in to change notification settings - Fork 0
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
latest update the code corresponding to your paper? #37
Comments
Hello. Thanks for your interest in this project. The latest update on the branch "CorePointUpdate" corresponds to the implementation mentioned in that paper. I have not merged it to the main branch with a pull request yet. In general, before the paper is going to be published in its final form I will definitely spend some time to tidy up the code so that it is more accessible for others and also gets a proper documentation. Right now it's still in a preliminary form. Maybe you've also seen that the code uses a very old Julia version - this is because I started this project and also the experiments for the paper a very long time ago, and then did not want to make disruptive changes during my experiments. Once the paper is published, I will update everything to the current version of Julia, JuMP etc. As there is no proper documentation yet: If you want to understand how the code works, it's probably best to look at the files corresponding to the case studies from the paper (CLSP, CFLP) as well as the file typedefs.jl which covers the definition of all user-controlled parameters. If you have any specific question, just let me know here or via e-mail. |
Hello. What exactly do you mean by "some parts of the script seem to be missing"? The code works as it is, I just used it two weeks ago for computational tests. Maybe you can specify what seems to be missing. Besides that, I am not quite sure what kind of SDDP script you are looking for. If you refer to running functions from SDDP.jl somewhere in my project - this is not done. When I started working on this project, I also dealt with non-convex cuts to approximate the value functions (this is however, not covered in the paper you are referring to). Compared to SDDP.jl this required some significant changes to the Bellman function implementation. Therefore, I based my code on SDDP.jl and re-used some of its code, but SDDP.jl's train function itself is not called. If you simply refer to calling the SDDiP algorithm, there is a function named DynamicSDDiP.solve() which is called in the starter.jl files of my examples and initiates a run of my version of SDDiP. The function itself is part of the algorithmMain.jl file. To be more precise: For each example in the examples directory, there is a model.jl file defining the model to be solved, a algo_config.jl file specifying most of the parameter choices for the current runs (these parameters are defined and described in typedefs.jl in the src directory) and a starter.jl file allowing to specify several runs (sharing the algo_config file) at once. If you run the starter.jl file, these runs will be started. The runs are initiated by calling the DynamicSDDiP.solve() function from algorithmMain.jl in the src directory. This function in turn then calls more specific functions for the forward pass, backward pass, solving the Lagrangian dual etc. So there is not really one single SDDP/SDDiP script, but the algorithm consists of several functions that are split across multiple files in the src directory. Hope this explanation helps. |
Thanks for your reply, I will continue to study your code. |
Okay. Just let me know if you have any further questions. |
I apologize for disturbing you again, but I am currently encountering some issues and I would appreciate your guidance:
|
It's not disturbing. Your questions are welcome – and, as I stated already, I am well aware that it’s not easy to familiarize with the code given that no proper documentation exists yet.
I am not completely sure if I understand you correctly. To clarify, the project in its current form gives you three options:
Note that you can also use combinations of 1.) and 3.). More precisely, for each type of cut that you want to construct in the algorithm, you can define using the If you intend to use the non-binarization approach, there are no adjustments required within the algorithm. You just have to make sure that
My approach follows the strategy that each time a Benders cut is computed (alternatively, this is possible also for strengthened Benders cuts) it is stored in some list for the respective node. This is Note however, that generating Benders cuts is not done automatically. So if you want to use the Chen-Luedtke method, you have to make sure that (strengthened) Benders cuts are generated at all. To do so, my code allows you to define several different For instance, you can define a
Maybe the confusion comes from my implementation of the Chen-Luedtke method being split into several parts. Note that Chen and Luedtke also proposed a more sophisticated approach where an auxiliary MIP is solved. This is not included in my project.
My suggestion would be to start with a simple implementation of SDDP (or using one that already exists). Then see where strengthened Benders cuts get you. Then try to add my ideas on LN Lagrangian cuts if it is important for you to improve the lower bounds. Importantly, my code is way more sophisticated than what you need to simply replicate the part on the LN cuts. The thing is that my code is very modular because it allows the user to switch between and even combine all kinds of different approaches from various of my papers. Finally, if you are looking to explore Lagrangian cuts in the future (which many people might say is not worth it, because solving the duals is just too costly and convergence may take way too long to leverage the tightness properties of Lagrangian cuts anyway), I think a few preprints on computational improvements should be published quite soon. At least, I attended some talks at the INFORMS Annual Meeting this year on some yet to be published ideas. |
Hello, I hope this message finds you well. I was wondering if the latest update to the code corresponds to the implementation described in your paper: "A New Framework to Generate Lagrangian Cuts in Multistage Stochastic Mixed-Integer Programming"? Thank you for your time and assistance!
The text was updated successfully, but these errors were encountered: