Skip to content

Variational inequalities #2463

Description

@odow

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 $x$ such that $0 \in F(x) + N_C(x)$, where $F(x)$ is a $R^n \rightarrow R^n$ nonlinear function and $N_C$ is the normal cone of $C$ where $x\in C$.

Currently, we use the Complements set $F(x) \perp x$ to be interpreted as a rectangular variational inequality, where the set $C$ is the variable bounds on x.

The new version will support $C = \{x: Ax <= b\}$.

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

  1. a vector $F(x)$
  2. an ordering $x$ to align with $F(x)$
  3. 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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions