alpar@1: /* MVCP, Minimum Vertex Cover Problem */ alpar@1: alpar@1: /* Written in GNU MathProg by Andrew Makhorin */ alpar@1: alpar@1: /* The Minimum Vertex Cover Problem in a network G = (V, E), where V alpar@1: is a set of nodes, E is a set of arcs, is to find a subset V' within alpar@1: V such that each edge (i,j) in E has at least one its endpoint in V' alpar@1: and which minimizes the sum of node weights w(i) over V'. alpar@1: alpar@1: Reference: alpar@1: Garey, M.R., and Johnson, D.S. (1979), Computers and Intractability: alpar@1: A guide to the theory of NP-completeness [Graph Theory, Covering and alpar@1: Partitioning, Minimum Vertex Cover, GT1]. */ alpar@1: alpar@1: set E, dimen 2; alpar@1: /* set of edges */ alpar@1: alpar@1: set V := (setof{(i,j) in E} i) union (setof{(i,j) in E} j); alpar@1: /* set of nodes */ alpar@1: alpar@1: param w{i in V}, >= 0, default 1; alpar@1: /* w[i] is weight of vertex i */ alpar@1: alpar@1: var x{i in V}, binary; alpar@1: /* x[i] = 1 means that node i is included into V' */ alpar@1: alpar@1: s.t. cov{(i,j) in E}: x[i] + x[j] >= 1; alpar@1: /* each edge (i,j) must have node i or j (or both) in V' */ alpar@1: alpar@1: minimize z: sum{i in V} w[i] * x[i]; alpar@1: /* we need to minimize the sum of node weights over V' */ alpar@1: alpar@1: data; alpar@1: alpar@1: /* These data correspond to an example from [Papadimitriou]. */ alpar@1: alpar@1: /* Optimal solution is 6 (greedy heuristic gives 13) */ alpar@1: alpar@1: set E := a1 b1, b1 c1, a1 b2, b2 c2, a2 b3, b3 c3, a2 b4, b4 c4, a3 b5, alpar@1: b5 c5, a3 b6, b6 c6, a4 b1, a4 b2, a4 b3, a5 b4, a5 b5, a5 b6, alpar@1: a6 b1, a6 b2, a6 b3, a6 b4, a7 b2, a7 b3, a7 b4, a7 b5, a7 b6; alpar@1: alpar@1: end;