Add Logic-Based Discrete-Steepest Descent Algorithm in GDPOpt#3331
Add Logic-Based Discrete-Steepest Descent Algorithm in GDPOpt#3331blnicho merged 57 commits intoPyomo:mainfrom
Conversation
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #3331 +/- ##
==========================================
+ Coverage 88.62% 88.64% +0.01%
==========================================
Files 880 881 +1
Lines 100661 100868 +207
==========================================
+ Hits 89214 89412 +198
- Misses 11447 11456 +9
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
|
I will add tests to increase the code coverage. |
|
Hi @dovallev and @David-Linan, This PR includes a general implementation of |
Co-authored-by: Bethany Nicholson <[email protected]>
Co-authored-by: Bethany Nicholson <[email protected]>
Co-authored-by: Bethany Nicholson <[email protected]>
|
Hi @blnicho . I have resolved all the comments and the PR is ready for Jenkins tests and your review again. |
emma58
left a comment
There was a problem hiding this comment.
Sorry for the long-delayed review. A bunch of comments, most of which are minor, but I would recommend changing from the config arguments being component names to being the components themselves. I think it will be much safer and simpler, and it will allow you to validate them using the config infrastructure.
| if self.any_termination_criterion_met(config): | ||
| break |
There was a problem hiding this comment.
Minor nit, but it shouldn't be hard to add a test that exercises this--if you just choose a problem that needs more than one iteration and set a smaller iteration limit, for example.
| ], | ||
| time_limit=100, | ||
| ) | ||
| self.assertAlmostEqual(value(model.obj), -23.305325, places=4) |
There was a problem hiding this comment.
Would it be hard to check the solution (or at least the discrete part) too?
|
@ZedongPeng - the failures in doctests aren't your fault; the new sphinx version exposed an upstream bug. Nothing to do with your code. |
…lists of components instead of component names
|
Hi @emma58 . I have fixed most of your comments and it's ready for your second review now. Many thanks. |
Summary/Motivation:
This PR introduces the implementation of the Logic-Based Discrete Steepest Descent algorithm in GDPOpt.
The Logic-based Discrete-Steepest Descent Algorithm (LD-SDA) is a solution method for GDP problems involving ordered Boolean variables. The LD-SDA reformulates these ordered Boolean variables into integer decisions called external variables. The LD-SDA solves the reformulated GDP problem using a two-level decomposition approach where the upper-level subproblem determines external variable configurations. Subsequently, the remaining continuous and discrete variables are solved as a subproblem only involving those constraints relevant to the given external variable arrangement, effectively taking advantage of the structure of the GDP problem.
More details in the paper https://arxiv.org/abs/2405.05358 .
@emma58 @bernalde
Legal Acknowledgement
By contributing to this software project, I have read the contribution guide and agree to the following terms and conditions for my contribution: