Description
An upcoming release of PATH will support polyhedral variational inequalities. I don't have anything actionable to do yet, but I had a chat with Michael Ferris yesterday, so this issue is to record my notes.
The new release solves the problem of finding
Currently, we use the Complements
set x
.
The new version will support
Note that this is not the same as a rectangular variational inequality plus some inequality constraints, so this is not sufficient:
model = Model()
@variable(model, x[1:n] >= 0)
@constraint(model, A * x <= b)
@constraint(model, F(x) ⟂ x)
We either need some way of saying that the linear constraints are actually part of the VI:
model = Model()
@variable(model, x[1:n] >= 0)
@constraint(model, A * x <= b, VariationalInequality())
@constraint(model, F(x) ⟂ x)
or we need some entirely new syntax.
Still TBD, but I think PATH + GAMS will use this "tagging" approach of annotating the constraints that are really the VI and not constraints. We could do this with constraint attributes, or by lowering to the constraint to Ax * x - b in VariationalInequality(Nonnegatives())
.
The key thing is that we need three pieces of information
- a vector
$F(x)$ - an ordering
$x$ to align with$F(x)$ - a cone
$x \in C$
MOI.Complements
achieves 1 and 2, and 3 is left implicit. We chose the current design because it matches exactly the information that PATH expected at the time.
This has been discussed before: #771 (comment)
cc @xhub