## Complementarity.jl

Provides a modeling interface for mixed complementarity problems (MCP) and math programs with equilibrium problems (MPEC) via JuMP
Popularity
68 Stars
Updated Last
7 Months Ago
Started In
April 2016

# Complementarity.jl

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.

## Mixed Complementarity Problems (MCP)

NOTE: Differences between PATHSolver.jl and Complementarity.jl:

• PATHSolver.jl provides a wrapper for the C API of the PATH solver.
• PATHSolver.jl also enables JuMP for solving MCP, but limited to linear problems.
• Complementarity.jl provides a JuMP extension for solving MCP, both linear and nonlinear, using the C API wrapper in PATHSolver.jl.

MCP 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)```

## Mathematical Programs with Equilibrium Constraints (MPEC)

NOTE: For solving MPEC, JuMP.jl `v0.21` has started supporting complementarity constraints. At this moment, GAMS.jl and KNITRO support complementarity constraints.

MPEC 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(Ipopt.Optimizer)
@variable(m, x>=0)
@NLobjective(m, Min, x^3)
@complements(m, 0 <= x+2,   x >= 0)
solve(m)
@show getvalue(x)```

# Installation

`Pkg.add("Complementarity")`

This will also install a few other packages.

### Required Packages

View all packages