lemon-project-template-glpk
diff deps/glpk/examples/spp.mod @ 9:33de93886c88
Import GLPK 4.47
author | Alpar Juttner <alpar@cs.elte.hu> |
---|---|
date | Sun, 06 Nov 2011 20:59:10 +0100 |
parents | |
children |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/deps/glpk/examples/spp.mod Sun Nov 06 20:59:10 2011 +0100 1.3 @@ -0,0 +1,67 @@ 1.4 +/* SPP, Shortest Path Problem */ 1.5 + 1.6 +/* Written in GNU MathProg by Andrew Makhorin <mao@gnu.org> */ 1.7 + 1.8 +/* Given a directed graph G = (V,E), its edge lengths c(i,j) for all 1.9 + (i,j) in E, and two nodes s, t in V, the Shortest Path Problem (SPP) 1.10 + is to find a directed path from s to t whose length is minimal. */ 1.11 + 1.12 +param n, integer, > 0; 1.13 +/* number of nodes */ 1.14 + 1.15 +set E, within {i in 1..n, j in 1..n}; 1.16 +/* set of edges */ 1.17 + 1.18 +param c{(i,j) in E}; 1.19 +/* c[i,j] is length of edge (i,j); note that edge lengths are allowed 1.20 + to be of any sign (positive, negative, or zero) */ 1.21 + 1.22 +param s, in {1..n}; 1.23 +/* source node */ 1.24 + 1.25 +param t, in {1..n}; 1.26 +/* target node */ 1.27 + 1.28 +var x{(i,j) in E}, >= 0; 1.29 +/* x[i,j] = 1 means that edge (i,j) belong to shortest path; 1.30 + x[i,j] = 0 means that edge (i,j) does not belong to shortest path; 1.31 + note that variables x[i,j] are binary, however, there is no need to 1.32 + declare them so due to the totally unimodular constraint matrix */ 1.33 + 1.34 +s.t. r{i in 1..n}: sum{(j,i) in E} x[j,i] + (if i = s then 1) = 1.35 + sum{(i,j) in E} x[i,j] + (if i = t then 1); 1.36 +/* conservation conditions for unity flow from s to t; every feasible 1.37 + solution is a path from s to t */ 1.38 + 1.39 +minimize Z: sum{(i,j) in E} c[i,j] * x[i,j]; 1.40 +/* objective function is the path length to be minimized */ 1.41 + 1.42 +data; 1.43 + 1.44 +/* Optimal solution is 20 that corresponds to the following shortest 1.45 + path: s = 1 -> 2 -> 4 -> 8 -> 6 = t */ 1.46 + 1.47 +param n := 8; 1.48 + 1.49 +param s := 1; 1.50 + 1.51 +param t := 6; 1.52 + 1.53 +param : E : c := 1.54 + 1 2 1 1.55 + 1 4 8 1.56 + 1 7 6 1.57 + 2 4 2 1.58 + 3 2 14 1.59 + 3 4 10 1.60 + 3 5 6 1.61 + 3 6 19 1.62 + 4 5 8 1.63 + 4 8 13 1.64 + 5 8 12 1.65 + 6 5 7 1.66 + 7 4 5 1.67 + 8 6 4 1.68 + 8 7 10; 1.69 + 1.70 +end;