-
Notifications
You must be signed in to change notification settings - Fork 37
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
Implementation Column Manager #18
Comments
@jkinable Any thoughts on this? |
Sorry for the delay, I've been swamped by work over the last few weeks. Joris On Thu, Oct 20, 2016 at 5:00 AM, Rowan Hoogervorst <[email protected]
|
No problem, it was just that I wanted to remind you of the issue. A small further idea that I thought of regarding a column manager is that we might also want to have a way to quickly price columns that have been previously deleted from the model. |
Alright, finally got a chance to look at this in detail. I'm on the job market, facing a ton of publication deadlines, chairing a conference session and I'm lacking behind with both code and paper reviews... Nevertheless I apologize for the delay :(. I like your proposal!
Wrt to the discussion points:
Something else that should preferably be taken into account is the following. Currently, most of the BranchAndPrice (BaP) implementation is single-threaded. I would like to change this in the future to a distributed implementation as follows. To ensure scalability, you don't want to exchange too much information between workers. So an interesting question is: do you want a global column manager which manages the columns of all workers, or do you want a local column manager which only manages the columns of 1 worker? I think the answer to this question should ideally be: let the user decide. The next 3 weeks will be insanely busy for me, after that things should revert back to normal :) |
No problem, I know the feeling. Ok good:
And for the discussion points:
Ok, I will try to take a look at the article if I have some time. The idea of a global manager does seem interesting, especially when one can also use that to price columns. However, there is a need to be careful as not all columns may still be feasible for each node. |
This mail from the Scip mailing list might also provide some useful ideas when implementing column management in a parallel setting: http://listserv.zib.de/pipermail/scip/2013-October/001688.html |
Column Manager
Hereby the proposed issue to discuss the design of a column manager. While the design that I have in mind is not fully complete yet, I think there are some interesting issues to discuss.
Design
The column manager should be flexible in my opinion. That should mean that the user should be able to use problem-specific knowledge if needed, but that at the same time some good base implementations should be available.
My suggestion is thus to go for an interface
ColumnManager
, which contains the methodsvoid addColumns(List<W> columns)
void updateColumns()
pointsList<W> getCurrentColumns()
to control the current columns. Possibly, the second method could be combined with the first or third, depending on the actual implementation (see also below).
Further, we could e.g. provide the class
AgingColumnManager implements ColumnManager
andBasicColumnManager implements ColumnManager
, which respectively use an aging strategy and simply retain all columns. (Or some similar strategies based on the most common used methods.)Discussion points
One major point of interest is how the actual columns in the master problem are managed. Namely, a change in the chosen columns in the column manager should be reflected in the master problem. One option would be to add a
removeColumn
method in the Master problem.Another major point of interest is the integration with a strong branching framework. Namely, in such methods, the RMP has to be solved multiple times. For this reason, I would propose to have the actual updating separated from the addition of columns to the master problem. However, I would say it would be good to include such considerations already now, instead of having to redesign after the implementation of strong branching.
Another point of interest is how the user chooses between different column managers. One option is to simply make the user choose one in implementing his version of the master problem. However, this makes it less easy to switch between managers. An alternative would be to pass it in the constructor of the Master problem.
The text was updated successfully, but these errors were encountered: