1
Streamlined implementation of the bounded variable simplex method on the network.
(See Application 9.6 for an application of the minimum cost flow problem.)
Formulation: N is n
m matrix min cx s.t. Nx = b
0
x
u
Optimality conditions of the bounded variable simplex method:
Let
denote the dual variable associated with the mass balance constraints.
N ij
: a column of N corresponding to arc (i, j) = e reduced cost c ij
= c ij
– (
(i) -
(j)) = c ij i
– e j
-
(i) +
(j)
c ij
.
Network Theory and Applications 2010
2
For nonbasic variables:
If c
If c ij
ij
0
x ij
0
x ij
For basic variables:
= 0
= u ij c ij
= 0
The set of basic variables corresponds to a spanning tree in the network.
How to represent the spanning tree and perform operations on the spanning tree?
Use three arrays pred(i), depth(i), and thread(i) to represent a spanning tree.
Network Theory and Applications 2010
3
1
8
2
6
5
7
3
4
9 i pred(i)
1 2 3 4 5 6 7 8 9
0 1 2 3 2 5 5 6 6 depth(i) 0 1 2 3 2 3 3 4 4 thread(i) 2 5 4 1 6 8 3 9 7
thread: define a traversal of a tree. obtained by depth-first search of nodes
(follows the contour of the tree ignoring revisited nodes, preorder)) can find all descendants of a node i easily (using depth).
Network Theory and Applications 2010
4
Rank of N
(n-1) (sum of rows = 0)
Show than rank(N)
(n-1) by showing (n-1) linearly independent columns of
N (spanning tree)
Ex) rearrange rows and columns of the submatrix for a spanning tree starting from leaf of the tree using preorder (reverse order)
1
3
2
5 4
Network Theory and Applications 2010
5
3
1
4
2
(2, 4) (1, 2) (3, 5) (3, 1) artif
1
1
0
0
0
0
0
0
1
1
0
0
1
0
1
0
0
0
1
1
0
0
0
0
1
5
Converse) (n-1) linearly independent columns of N
spanning tree
Pf) Suppose not a spanning tree, then there exists a cycle W.
Take
(i, j)
W
(
1)N ij
=
for backward arc in W.)
(i, j)
W
(
1)(e(i) – e(j)) = 0. (Use +1 for forward arc, -1
Hence the columns are linear dependent.
Thm) (n-1) linearly independent columns of N
spanning tree.
2 approaches:
Drop one constraint
Add an artificial variable to a row of N (take the node as root of the tree)
(can take the dual value
(r) = 0 for the root node from
B = c
B for basis B)
Network Theory and Applications 2010
6
LP operations:
Computing basic feasible solution and dual solution
: x
B
: Bx
B
= b – Lx
L
Bx
B
= b’,
– Ux
U
, B: lower triangular solve by substitution
(on network, determine flows starting from leaf nodes)
:
B = c
B
, solve by substitution
(on network, determine
starting from root node using c ij
-
(i) +
(j) = 0 )
Actually, x and
are updated, rather than computed again from scratch.
Finding an entering nonbasic variable:
c ij
c ij
< 0 and x ij
> 0 and x ij
= 0 (x
= u ij ij
(x ij
< u ij
): want to increase flow on arc (i, j)
> 0): want to decrease flow on arc (i, j)
Leaving basic variable: Have x
B
= B -1 b – B -1 Lx
L
– B -1 Ux
U
If increase entering x
If decrease entering x j j
(x
(x j j
x j
x j
+ t): x determine largest t satisfying l
B
B
x
B
(t) = x
u
B
B
* - td (d: updated column of x
- t): x
B
(t) = x
B
* + td j
)
Update solution
Network Theory and Applications 2010
7
Operations on the network:
Computing
:
set
(1) = 0 (root)
Following thread(i) index, use c ij
-
(i) +
(j) = 0 i = pred(j)
(i, j)
A
(j) =
(i) – c ij
(j, i)
A
(j) =
(i) + c ij
Computing x
B
:
For (i, j)
U, set x ij
= u ij
, b’(i) = b(i) – u ij
, b’(j) = b(j) + u ij
.
Then determine tree arc flow starting from leaf node.
if j is leaf node, (i, j)
A
x ij if j is leaf node, (j, i)
A
x ij
= -b’(j), b’(i)
= b’(j), b’(i)
b’(i) – x b’(i) + x ij ij
= b’(i) + b’(j)
= b’(i) + b’(j)
Read thread(i), and put them into a stack. Pop operation chooses leaf nodes always.
Network Theory and Applications 2010
8
(continued)
Finding initial tree: no details here
Choosing an entering arc: some rules possible
Determining leaving arc:
Suppose arc (k, l) entering
creates a cycle W orientation of cycle: same as (k, l) if x kl
= 0, opposite direction of (k, l) if x kl
= u ij
.
(want to increase flow along the cycle)
ij
= u ij x ij
,
– x ij
, if (i, j)
W and forward arc if (i, j)
W and backward arc
= min{
ij
: (i, j)
W}.
Augment
units of flow on W. A blocking arc leaves tree.
In simplex method, x
B
(t) = x
B
* - td (increase case) d = B -1 N kl or Bd = N kl
(N kl
+
W
(
1)N ij
= 0, +1 for forward, -1 for backward) choose d ij
= -1, if (i, j) is forward arc in W
= +1, if (i, j) is backward arc in W
= 0, otherwise is solution
corresponds to flow augmentation on W.
Network Theory and Applications 2010
9
(continued)
Identifying the cycle:
Identify apex (join) of the cycle W. Use predecessor, depth index to identify apex.
Also compute
at the same time.
Updating the tree:
No details here. Refer Chapter 19, Linear Programming, Vasek Chvatal, 1983.
Can use thread to update the representation of the tree easily.
Network Theory and Applications 2010
10