Complementarity.jl icon indicating copy to clipboard operation
Complementarity.jl copied to clipboard

Upcoming refactoring of JuMP's nonlinear API

Open odow opened this issue 2 years ago • 2 comments

The upcoming release of JuMP v1.2 will break Complementarity. Read more here: https://discourse.julialang.org/t/ann-upcoming-refactoring-of-jumps-nonlinear-api/83052

The breakage looks pretty minor, and is mostly hacks that were added to delete nonlinear constraints: https://github.com/chkwon/Complementarity.jl/blob/c1afb671907edbfb205300cf0fff46d695c2f4f0/src/mcp.jl#L235-L237

x-ref: https://github.com/jump-dev/JuMP.jl/pull/2955

Please ping me if you have questions.

odow avatar Jun 20 '22 21:06 odow

Thanks for notifying me. I'll watch the change closely.

chkwon avatar Jun 27 '22 04:06 chkwon

Instead of deleting the nonlinear constraints, we can just keep track of how many constraints have been added:

+    offset = get(m.ext, :MCP_EXPRESSIONS_ADDED, 0)
+    for i in (offset+1):n
+        JuMP.@NLconstraint(m, mcp_data[p[i]].F == 0)
+    end
+    m.ext[:MCP_EXPRESSIONS_ADDED] = n

But that doesn't get us to v1.2.0, because embedding macros in macros like this: https://github.com/chkwon/Complementarity.jl/blob/1cb30ad2c021c3df3ab115995e05603c8948d47d/src/mpec.jl#L265 is unsafe and leads to scoping errors. I'll have a go at rewriting to use the function form of the API.

odow avatar Jul 03 '22 22:07 odow