examples/todd.mod
changeset 1 c445c931472f
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/examples/todd.mod	Mon Dec 06 13:09:21 2010 +0100
     1.3 @@ -0,0 +1,36 @@
     1.4 +/* TODD, a class of hard instances of zero-one knapsack problems */
     1.5 +
     1.6 +/* Written in GNU MathProg by Andrew Makhorin <mao@gnu.org> */
     1.7 +
     1.8 +/* Chvatal describes a class of instances of zero-one knapsack problems
     1.9 +   due to Todd. He shows that a wide class of algorithms - including all
    1.10 +   based on branch and bound or dynamic programming - find it difficult
    1.11 +   to solve problems in the Todd class. More exactly, the time required
    1.12 +   by these algorithms to solve instances of problems that belong to the
    1.13 +   Todd class grows as an exponential function of the problem size.
    1.14 +
    1.15 +   Reference:
    1.16 +   Chvatal V. (1980), Hard knapsack problems, Op. Res. 28, 1402-1411. */
    1.17 +
    1.18 +param n > 0 integer;
    1.19 +
    1.20 +param log2_n := log(n) / log(2);
    1.21 +
    1.22 +param k := floor(log2_n);
    1.23 +
    1.24 +param a{j in 1..n} := 2 ** (k + n + 1) + 2 ** (k + n + 1 - j) + 1;
    1.25 +
    1.26 +param b := 0.5 * floor(sum{j in 1..n} a[j]);
    1.27 +
    1.28 +var x{1..n} binary;
    1.29 +
    1.30 +maximize obj: sum{j in 1..n} a[j] * x[j];
    1.31 +
    1.32 +s.t. cap: sum{j in 1..n} a[j] * x[j] <= b;
    1.33 +
    1.34 +data;
    1.35 +
    1.36 +param n := 15;
    1.37 +/* change this parameter to choose a particular instance */
    1.38 +
    1.39 +end;