plasmo-dev / Plasmo.jl

A Platform for Scalable Modeling and Optimization
Other
150 stars 21 forks source link

Non linear link constraints not yet supported #42

Closed bhalonen closed 1 month ago

bhalonen commented 2 years ago

I seen in your documentation that non linear links are "not yet" supported. Is there any timeline on that? Would be a feature we would consider working on if it is a reasonable feature to start in on.

Very, very cool package.

jalving commented 2 years ago

@bhalonen Thanks for the interest!

There is not yet a timeline for non-linear link constraints. Our current priority is getting Plasmo.jl updated for JuMP v0.22, but we could certainly use help getting nonlinear link constraints to work.

I have briefly looked into nonlinear linking, and I think an OptiGraph (or OptiEdge) would need its own JuMP._NLPData object. Ideally, it's possible to re-use JuMP's nonlinear expression code without digging too much into the weeds of their implementation. Also keep in mind that MathOptInterface.jl intends to support nonlinear eventually which will change things, but probably not before JuMP 1.0.

bhalonen commented 2 years ago

To clarify, the type of constraint I need is a Mixed Integer constraint, which I assumed is some kind of non linear constraint.

We are working on getting the subproblems built in JuMP right now, so there is some work we got to do before we decide how to tie them all together.

jalving commented 2 years ago

@bhalonen In that case, Plasmo.jl might be a suitable option as is. Do you mean you have constraints over integer variables? If yes, you could create the subproblems (which contain integer variables) and use linear link-constraints to capture coupling between said subproblems. You can then use standard mixed-integer solvers like Gurobi (just like with JuMP).

If you end working on large-scale (but structured) mixed-integer problems, there would be a need to get the DSP solver interface working again.

jalving commented 1 month ago

Nonlinear linking constraints are now supported with #105.

Check out the new docs @bhalonen in case you're interested.