NOTE This package will no longer be maintained. For solving Mixed Complementarity Problems via the PATH solver, use the all-new PATHSolver.jl, which provides a Julia native access to the PATH solver and integration with JuMP.jl. For solving MPEC, JuMP.jl
v0.21
has started supporting complementarity constraints. It is unclear which solvers support complementarity constraints.
Complementarity.jl only works with PATHSolver.jl v0.6.2.
This package provides modeling language for (1) mixed complementarity problems (MCP) and (2) mathematical programs with equilibrium problems (MPEC).
NOTE @complmentarity
for MCP and @complements
for MPEC.
- This package provides a modeling and computational interface for solving Mixed Complementarity Problems (MCP): modeling by JuMP.jl and computing by PATHSolver.jl and NLsolve.jl. See the documentation.
F(x) ⟂ lb ≤ x ≤ ub
A very simple example:
(x+2) x = 0, x ≥ 0, x+2 ≥ 0
using Complementarity, JuMP
m = MCPModel()
@variable(m, x >= 0)
@mapping(m, F, x+2)
@complementarity(m, F, x)
status = solveMCP(m)
@show result_value(x)
- For solving mathematical programs with equilibrium constraints (MPEC), this package provides an extension to JuMP.jl by providing a macro that accepts complementarity conditions as constraints. Then it reformulates the complementarity conditions as a set of equality and inequality constraints so that a nonlinear optimization solver such as Ipopt.jl can solve the problem. See the documentation.
min f(x)
s.t. g(x) ≤ 0
F(x) ⟂ lb ≤ x ≤ ub
A very simple example:
min x^3
s.t. (x+2) x = 0, x ≥ 0, x+2 ≥ 0
using JuMP, Ipopt, Complementarity
m = Model(solver=IpoptSolver())
@variable(m, x>=0)
@NLobjective(m, Min, x^3)
@complements(m, 0 <= x+2, x >= 0)
solve(m)
@show getvalue(x)
Pkg.add("Complementarity")
This will also install a few other packages.