-
Notifications
You must be signed in to change notification settings - Fork 43
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
Vector of optimizers in Formulation
#534
Conversation
I do not like having an optional argument in the Why not put Also, the purpose of |
Since the argument is optional, you'll not have an error but you always have to use the first optimizer which is for me a major drawback. I tried to follow what I said in the discussion in your PR and to be quite conservative before having discussion.
These are the two options I saw this afternoon when working on this PR :
What do you think ? |
If you have an optional argument, you will use it at least once. In the call when this argument is used, you cannot use another algorithm which does not have this argument in the
I do not see a problem here. If parameterisation is inconsistent, there should be an error, it is normal for me. We cannot expect the user to always give a consistent parameterisation, especially if we mix paramerization in the algorithms and through I propose to put |
We should avoid that of course |
Ok, I like the current version better. |
pricing_prob_solve_alg = ClA.DefaultPricing( | ||
optimizer_id=2, pricing_callback = PricingCallback(stage=1) | ||
pricing_prob_solve_alg = ClA.SolveIpForm( | ||
optimizer_id=2, user_params = ClA.UserOptimize(stage=1) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If user may define several solvers, he can define several callbacks (one heuristic and second exact). This way we can avoid stage
parameter: user will just define optimizer_id=2
and optimizer_id=3
. @guimarqu, what do you think about this?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I thought about that but forgot. So it's ok for me.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I open a new issue to adapt this
I was planning to write a comment to explain the changes after my break.
I'm going to fix your comments. |
opt = getoptimizer(form, algo.optimizer_id) | ||
params = _optimizer_params(algo, opt) | ||
if params !== nothing | ||
return run!(params, env, form, input; optimizer_id = algo.optimizer_id) | ||
end |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think that there is some dispatch happening in runtime on lines 86, 87 and 89.
I think we should open an issue to investigate the impact later
Co-authored-by: Vitor Nesello <[email protected]>
Ok for me, but I think the tests should pass before approving. |
Tests pass on my machine. These changes need BlockDecomposition#master & when I push the Manifest, it breaks the CI. I don't want to release a new version of BlockDecomposition before having custom model/solver. |
* dev branch to prepare release of 0.4.0 * Move storage & records in ColunaBase (#507) * Renaming in storage (#509) * RecordContainer -> RecordWrapper * state -> record * rename lot of things, remove getters of Storage not used by Algorithms * Storage -> StorageUnitWrapper * Deletion of `AbstractData` (#510) * RecordContainer -> RecordWrapper * state -> record * rename lot of things, remove getters of Storage not used by Algorithms * start removing AbstractData structs * tests ok * getunit -> getstorageunit; StorageDict -> Storage * fix docstring * Bijection StorageUnit -> Record (#518) * Bijection StorageUnit -> Record * address Ruslan's comments * Implementation of column generation stages (#525) * Implementation of column generation stages (for example, heuristic and exact stage) * Update after conversation with Guillaume + stabilization correction * Simplification for ColCutGenConquer * Some more modifs due to Guillaume comments * Counting the number of exact calls when testing the pricing stages (#530) * Add bound callback tests (#532) * add bound callback tests * include bound callback in runtests * fix test * Apply suggestions from code review Co-authored-by: Guillaume Marques <[email protected]> * add comment * Apply suggestions from code review Co-authored-by: Guillaume Marques <[email protected]> Co-authored-by: Guillaume Marques <[email protected]> * Vector of optimizers in `Formulation` (#534) * vector of optimizers in formulation * solver_id -> optimizer_id * add Manifest * update Manifest * remove Manifest because does not work * changes * rm files * address Ruslan's comment * Update src/MathProg/optimizerwrappers.jl Co-authored-by: Vitor Nesello <[email protected]> * add Manifest * change ci * remove ci change * rm Manifest Co-authored-by: Vitor Nesello <[email protected]> * UnitsUsageDict -> UnitsUsage (#522) * UnitsUsageDict -> UnitsAccess * wip * improve * tests ok * Custom data for variables and constraints (#495) * draft for support of customer data * custom data in solution * custom data for cut callback * computecoeff * store custom data of solutions in manager * add Manifest * rm Manifest * Support to custom cuts over custom data assigned to columns with new test * tests ok Co-authored-by: Artur Alves Pessoa <[email protected]> * Prototyping custom model/optimizer (#535) * Start example * wip draft * continue * add map * works with caching optimizer * varids in Env * wrong result * multiply costs by -1 * fix scaling * Apply suggestions from code review * Update test/interfaces/model.jl Co-authored-by: Lara Pontes <[email protected]> * Follow up of "custom data" (#538) * add AbstractCustomData and set/get inc_val * fix bugs * remove duplicate methods * delete unnecessary prefixes and fix some bugs * revert some changes and update docstring * custom information for dw sp (#542) * docstring for restricted master heuristic (#543) * docstring for restricted master heuristic * Update src/Algorithm/conquer.jl * Refactoring `ObjValues` & `OptimizationState` (#544) * clean + doc * move doc from objvalues to optstate; tests of objvalues; update ci * update * update branching priorioty deprecated method * tests ok * tests ok * tests ok * delete duplicated tests Co-authored-by: Ruslan Sadykov <[email protected]> Co-authored-by: Artur Pessoa <[email protected]> Co-authored-by: Lara di Cavalcanti Pontes <[email protected]> Co-authored-by: Vitor Nesello <[email protected]> Co-authored-by: Lara Pontes <[email protected]>
- needs Manifest because it uses master branch of BlockDecompositionDesign changes :
run! methods ofSee Vector of optimizers inSolveIpForm
,SolveLpForm
, andPricingCallback
receive a new optional argumentoptimizer_id
which is the index of the optimizers attached to the Formulation.Formulation
#534 (comment)