Optionally compute dual variables for rational problems
commitcd6de9dee985c0c1a7b9b9756dd41e2e2adf1daf
authorSven Verdoolaege <skimo@kotnet.org>
Mon, 6 Aug 2007 12:09:36 +0000 (6 14:09 +0200)
committerSven Verdoolaege <skimo@kotnet.org>
Sat, 8 Sep 2007 07:43:57 +0000 (8 09:43 +0200)
tree61fbcd7b020e1139d18f3546770ef3be5918f47f
parent0312ed9e9a2f4e524392b8cb02619f74282e7596
Optionally compute dual variables for rational problems

When looking at the lexicographical minimum as the minimum
of a standard simplex problem, the corresponding objective
function is the first unit vector e_1 (since the first variable
is minimized first).
That is, we are dealing with the problem

min e_1 x : x >= 0, M x + v >= 0

The dual of this problem is

max -u v : u >= 0, u M <= e_1

The initial tableau is

[  x  ]   [  I  ]     [  0  ]
[ z_1 ] = [ M_1 ] y + [ v_1 ]
[ z_2 ]   [ M_2 ]     [ v_2 ]

In the optimal tableau y is replaced by y = B y' + c,
where B = M_1^{-1}.  That is, we have

[  x  ]   [   B   ]      [      c      ]
[ z_1 ] = [   I   ] y' + [      0      ]
[ z_2 ]   [ M_2 B ]      [ M_2 c + v_2 ]

Let b_1 be the first row of B, then b_1 contains only
nonnegative entries (since the columns are always
lexico-positive).  Clearly b_1 M_1 = b_1 B^{-1} = e_1,
while M_1 c + v_1 = B^{-1} c + v_1 = 0 and so
b_1 M_1 c + b_1 v_1 = c_1 + b_1 v_1 = 0, where
c_1 is the first entry of c, i.e., the value of the
objective function.
The requested vector u therefore has the elements
of b_1 for the rows where the corresponding unit
vectors appear in the optimal tableau and zeros
for the other rows.

The values of the dual variables are attached
in the next_then element of the node that contains
the list of the values of the primal variables.
example/example.c
source/funcall.h
source/maind.c
source/piplib.c
source/sol.c
source/traiter.c