examples/todd.mod
changeset 1 c445c931472f
equal deleted inserted replaced
-1:000000000000 0:9f9faddd7926
       
     1 /* TODD, a class of hard instances of zero-one knapsack problems */
       
     2 
       
     3 /* Written in GNU MathProg by Andrew Makhorin <mao@gnu.org> */
       
     4 
       
     5 /* Chvatal describes a class of instances of zero-one knapsack problems
       
     6    due to Todd. He shows that a wide class of algorithms - including all
       
     7    based on branch and bound or dynamic programming - find it difficult
       
     8    to solve problems in the Todd class. More exactly, the time required
       
     9    by these algorithms to solve instances of problems that belong to the
       
    10    Todd class grows as an exponential function of the problem size.
       
    11 
       
    12    Reference:
       
    13    Chvatal V. (1980), Hard knapsack problems, Op. Res. 28, 1402-1411. */
       
    14 
       
    15 param n > 0 integer;
       
    16 
       
    17 param log2_n := log(n) / log(2);
       
    18 
       
    19 param k := floor(log2_n);
       
    20 
       
    21 param a{j in 1..n} := 2 ** (k + n + 1) + 2 ** (k + n + 1 - j) + 1;
       
    22 
       
    23 param b := 0.5 * floor(sum{j in 1..n} a[j]);
       
    24 
       
    25 var x{1..n} binary;
       
    26 
       
    27 maximize obj: sum{j in 1..n} a[j] * x[j];
       
    28 
       
    29 s.t. cap: sum{j in 1..n} a[j] * x[j] <= b;
       
    30 
       
    31 data;
       
    32 
       
    33 param n := 15;
       
    34 /* change this parameter to choose a particular instance */
       
    35 
       
    36 end;