Complementarities
In AIMMS, a complementarity condition is defined as follows for a given variable yk and an associated function gk(x,y). (Here the vector x represents the normal variables, and vector y the complementarity variables.)
If lk = -¥ and uk = ¥ then
either |
yk = lk |
and |
gk(x,y) ≥ 0 |
|
or |
yk = uk |
and |
gk(x,y) ≤ 0 |
|
or |
lk < yk < uk |
and |
gk(x,y) = 0. |
If lk = -¥ and uk = ¥ then
either |
yk = 0 |
and |
Lk < gk(x,y) < Uk |
|
or |
yk ≥ 0 |
and |
gk(x,y) = Lk |
|
or |
yk ≤ 0 |
and |
gk(x,y) = Uk. |
In any other situation, where exactly two of the constants lk, uk, Lk and Uk are finite, then
either |
yk = lk |
and |
Lk ≤ gk(x,y) ≤ Uk |
|
or |
yk = uk |
and |
Lk ≤ gk(x,y) ≤ Uk |
|
or |
lk < yk < uk |
and |
gk(x,y) = Lk |
|
or |
lk < yk < uk |
and |
gk(x,y) = Uk. |
Transformation
Knitro uses a different definition. In Knitro, a complementarity condition is a condition which enforces that two variables are
complementary to each other, i.e., the variables y1 and y2 are complementary if the following conditions hold:
y1 × y2 = 0, y1 ≥ 0, y2 ≥ 0.
A complementarity condition modeled in AIMMS is automatically transformed into this formulation by adding slack variables and extra constraints.