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