lemon-project-template-glpk
diff deps/glpk/examples/assign.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/assign.mod Sun Nov 06 20:59:10 2011 +0100 1.3 @@ -0,0 +1,77 @@ 1.4 +/* ASSIGN, Assignment Problem */ 1.5 + 1.6 +/* Written in GNU MathProg by Andrew Makhorin <mao@gnu.org> */ 1.7 + 1.8 +/* The assignment problem is one of the fundamental combinatorial 1.9 + optimization problems. 1.10 + 1.11 + In its most general form, the problem is as follows: 1.12 + 1.13 + There are a number of agents and a number of tasks. Any agent can be 1.14 + assigned to perform any task, incurring some cost that may vary 1.15 + depending on the agent-task assignment. It is required to perform all 1.16 + tasks by assigning exactly one agent to each task in such a way that 1.17 + the total cost of the assignment is minimized. 1.18 + 1.19 + (From Wikipedia, the free encyclopedia.) */ 1.20 + 1.21 +param m, integer, > 0; 1.22 +/* number of agents */ 1.23 + 1.24 +param n, integer, > 0; 1.25 +/* number of tasks */ 1.26 + 1.27 +set I := 1..m; 1.28 +/* set of agents */ 1.29 + 1.30 +set J := 1..n; 1.31 +/* set of tasks */ 1.32 + 1.33 +param c{i in I, j in J}, >= 0; 1.34 +/* cost of allocating task j to agent i */ 1.35 + 1.36 +var x{i in I, j in J}, >= 0; 1.37 +/* x[i,j] = 1 means task j is assigned to agent i 1.38 + note that variables x[i,j] are binary, however, there is no need to 1.39 + declare them so due to the totally unimodular constraint matrix */ 1.40 + 1.41 +s.t. phi{i in I}: sum{j in J} x[i,j] <= 1; 1.42 +/* each agent can perform at most one task */ 1.43 + 1.44 +s.t. psi{j in J}: sum{i in I} x[i,j] = 1; 1.45 +/* each task must be assigned exactly to one agent */ 1.46 + 1.47 +minimize obj: sum{i in I, j in J} c[i,j] * x[i,j]; 1.48 +/* the objective is to find a cheapest assignment */ 1.49 + 1.50 +solve; 1.51 + 1.52 +printf "\n"; 1.53 +printf "Agent Task Cost\n"; 1.54 +printf{i in I} "%5d %5d %10g\n", i, sum{j in J} j * x[i,j], 1.55 + sum{j in J} c[i,j] * x[i,j]; 1.56 +printf "----------------------\n"; 1.57 +printf " Total: %10g\n", sum{i in I, j in J} c[i,j] * x[i,j]; 1.58 +printf "\n"; 1.59 + 1.60 +data; 1.61 + 1.62 +/* These data correspond to an example from [Christofides]. */ 1.63 + 1.64 +/* Optimal solution is 76 */ 1.65 + 1.66 +param m := 8; 1.67 + 1.68 +param n := 8; 1.69 + 1.70 +param c : 1 2 3 4 5 6 7 8 := 1.71 + 1 13 21 20 12 8 26 22 11 1.72 + 2 12 36 25 41 40 11 4 8 1.73 + 3 35 32 13 36 26 21 13 37 1.74 + 4 34 54 7 8 12 22 11 40 1.75 + 5 21 6 45 18 24 34 12 48 1.76 + 6 42 19 39 15 14 16 28 46 1.77 + 7 16 34 38 3 34 40 22 24 1.78 + 8 26 20 5 17 45 31 37 43 ; 1.79 + 1.80 +end;