! Max Flow (dual of Min cut) problem;
! Given a network, e.g., a railroad network,
where each arc (i,j) has a capacity c(i,j),
and a source node and a sink, 
find the maximum possible flow from the source
to the sink;
! References: Ford and Fulkerson, Harris and Ross;
! Keywords: Min cut, Max flow, Network, Interdiction;

SETS:
 NODE;
 ARC( NODE, NODE): C, FLO;
ENDSETS
DATA: NODE = S 1 2 3 4 5 6 7 8 9 T; ! The arcs and their capacities; ARC, C = S 1 23 S 2 29 1 3 6 1 4 9 2 3 19 3 4 9 3 5 17 4 6 11 4 7 13 5 6 8 5 8 7 6 7 12 6 9 14 6 T 6 7 T 21 8 9 15 9 T 16; ENDDATA ! Variables: FLO(i,j) = flow from node i to node j; ! Get number of nodes in network; NODET = @SIZE( NODE); ! Maximize flow out of S ; MAX = @SUM( ARC(i,j) | i #EQ# 1: FLO(i,j)); ! Conservation of flow at each intermediate nodes; @FOR( NODE( k) | k #GT# 1 #AND# k #LT# NODET: [Y] @SUM( ARC(i,k): FLO(i,k)) = @SUM( ARC(k,j): FLO(k,j)); ); ! Flow out of 1/S = Flow into NODET/T; [Y1] @SUM( ARC(k,j) | k #EQ# 1: FLO(k,j)) =@SUM( ARC(i,k) | k #EQ# NODET: FLO(i,k)); ! Upper limit on flow on each arc; @FOR( ARC(i,j): [Z] FLO(i,j) <= C(i,j); );