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.