! Min Cut (dual of Max Flow) problem;
! Given a network, e.g., a railroad network,
where each arc (i,j) has a cost to remove, C(i,j),
and a source node and a sink,
Find a minimum cost set of arcs to delete
so that there is no flow (or path) from
the source node to the sink node;
! References: Ford and Fulkerson, Harris and Ross;
! Keywords: Min cut, Max flow, Network, Interdiction;
SETS:
NODE: Y;
ARC( NODE, NODE): C, Z;
ENDSETS DATA:
NODE = S 1 2 3 4 5 6 7 8 9 T;
! The arcs and their costs to delete;
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
SUBMODEL MINCUT:
! Variables:
Z(i,j) = 1 if we delete arc i,j
Y(i) = 1 if node i is on the Source side of cut,
0 otherwise;
! Get number of nodes in network;
NODET = @SIZE( NODE);
! Minimize the cost of deleted arcs;
MIN = @SUM( ARC(i,j) : C(i,j)*Z(i,j));
! Node 1, the Source, is definitely on S side,
Node T is not;
[FLO1] Y(1)  Y(NODET) >= 1;
! If arc (i,j) is on the cut (deleted),
then node i must be on the S side of cut,
and j is not.
If node i is on the S side of the cut,
then so is node j, except if arc (i,j)
has been deleted;
@FOR( ARC(i,j):
[FLO] Z(i,j)  Y(i) + Y(j) >= 0;
);
ENDSUBMODEL
CALC:
@SOLVE( MINCUT);
@WRITE( 'The Minimum Cost Set of Arcs to Delete to',
@NEWLINE(1),' Split a Network.',@NEWLINE(1));
@WRITE(' Arc deleted Cost',@NEWLINE(1));
SUMDEL = 0;
@FOR( ARC(i,j)  Z(i,j) #GT# 0.5:
@WRITE( ' (', NODE(i),', ',NODE(j),') ', C(i,j),@NEWLINE(1));
SUMDEL = SUMDEL + C(i,j);
);
@WRITE(' Total removal cost= ',SUMDEL,@NEWLINE(1));
ENDCALC
