optlang icon indicating copy to clipboard operation
optlang copied to clipboard

Bi-level MILPs

Open zakandrewking opened this issue 9 years ago • 2 comments
trafficstars

To support bi-level MILPs like OptKnock, it would be nice to add a convenience method for taking the dual of a problem and combining it with the original problem.

See here for COBRApy implementation:

https://github.com/opencobra/cobrapy/blob/a57e4d6c58f99a948c78280e0db11138b7676881/cobra/design/design_algorithms.py#L175

Doing this in COBRApy, I would up with a bug that prevents me from implementing the 3-level optimization RobustKnock, and I gave up on it. Maybe OptLang provides a core library that will be easier to debug.

zakandrewking avatar Jun 02 '16 15:06 zakandrewking

Hi Zach

Thanks for your comment. I agree that it would make sense to have such a method in optlang as it's a common and useful procedure when working with optimisation problems. I've also run into this need myself trying to implement RobustKnock, but I haven't gotten around to implementing it yet.

We have a dualising method in cameo (which will be moved to optlang at some point, since that's where it really belongs) that we use to implement OptKnock, but it currently doesn't handle mixed integer problems, so it won't work for RobustKnock (without some extra work at least).

KristianJensen avatar Jun 13 '16 07:06 KristianJensen

Hi, I have that working for bi-level problems in a different code base using a slimmer dualizing method that is a bit faster than the optlang default. The major problem I have is how to deal with weak Pareto optimality in that case (many equally "good" optimal solutions). Also it is pretty slow for large models with a few thousand variables. Maybe scalarization or lexicographic methods might be a better fit in general...

But if you want I would be happy to contribute the solution to optlang.

cdiener avatar Mar 28 '17 19:03 cdiener