Список задач о рюкзаке

Эта статья находится на начальном уровне проработки, в одной из её версий выборочно используется текст из источника, распространяемого под свободной лицензией
Материал из энциклопедии Руниверсалис

Задача о рюкзаке (или ранце) — это одна из задач комбинаторной оптимизации. Название это получила от максимизационной задачи укладки как можно большего числа нужных вещей в рюкзак при условии, что общий объём (или вес) всех предметов, способных поместиться в рюкзак, ограничен. Поэтому у задачи существует несколько разновидностей.

Общим для всех видов является наличие набора из [math]\displaystyle{ n }[/math] предметов, с двумя параметрами — вес [math]\displaystyle{ p_i\gt 0 }[/math] и ценность [math]\displaystyle{ c_i\gt 0 }[/math][math]\displaystyle{ , i= 1,2,...,n }[/math].Есть рюкзак, определенной вместимости [math]\displaystyle{ P }[/math]. Задача — собрать рюкзак с максимальной ценностью предметов внутри, соблюдая при этом весовое ограничение рюкзака. Обычно все параметры — целые, не отрицательные числа.

Рюкзак 0-1 (англ. 0-1 Knapsack Problem)

Это самая распространенная разновидность рюкзака. Пусть [math]\displaystyle{ x_i }[/math] принимает два значения: [math]\displaystyle{ x_i= 1 }[/math], если груз упакован, и [math]\displaystyle{ x_i= 0 }[/math] в противном случае, где [math]\displaystyle{ i= 1,2,...,n }[/math]. Задача:

максимизировать [math]\displaystyle{ \sum_{i=1}^n c_ix_i }[/math]

при наличии ограничения [math]\displaystyle{ \sum_{i=1}^n p_ix_i \le P }[/math] на вместимость рюкзака[1][2].

Ограниченный рюкзак (англ. Bounded Knapsack Problem)

Каждый предмет [math]\displaystyle{ x_i }[/math] может быть выбран ограниченное число раз. Задача:

максимизировать [math]\displaystyle{ \sum_{i=1}^n c_ix_i }[/math]

так, чтобы [math]\displaystyle{ \sum_{i=1}^n p_ix_i \le P }[/math] выполнялось условие на вместимость

и [math]\displaystyle{ x_i \in (0,1,...,m_i) }[/math] для всех [math]\displaystyle{ i= 1,2,...,n }[/math][3].

Число [math]\displaystyle{ m_i }[/math] называют границей[3].

Неограниченный рюкзак (целочисленный рюкзак) (англ. Unbounded Knapsack Problem (integer knapsack))

Каждый предмет [math]\displaystyle{ x_i }[/math] может быть выбран неограниченное число раз. Задача:

максимизировать [math]\displaystyle{ \sum_{i=1}^n c_ix_i }[/math]

так, чтобы [math]\displaystyle{ \sum_{i=1}^n p_ix_i \le P }[/math] выполнялось условие на вместимость

и целое [math]\displaystyle{ x_i \ge 0 }[/math] для всех [math]\displaystyle{ i= 1,2,...,n }[/math][4].

Рюкзак с мультивыбором (англ. Multiple-choice Knapsack Problem)

Все предметы [math]\displaystyle{ x_i }[/math] разделяют на [math]\displaystyle{ s }[/math] классов [math]\displaystyle{ S_i }[/math]. Обязательным является условие выбора только одного предмета из каждого класса. [math]\displaystyle{ x_{i} }[/math] принимает значение только 0 и 1. Задача:

максимизировать [math]\displaystyle{ \sum_{i=1}^n \sum_{j\in S_i} c_{ij}x_{ij} }[/math]

так, чтобы [math]\displaystyle{ \sum_{i=1}^n \sum_{j\in S_i} p_{ij}x_{ij} \le P }[/math] выполнялось условие на вместимость,

[math]\displaystyle{ \sum_{j\in S_i}x_{ij}=1 }[/math] для всех [math]\displaystyle{ i= 1,2,...,n }[/math]

Мультипликативный рюкзак (англ. Multiple Knapsack Problem)

Пусть у нас есть [math]\displaystyle{ n }[/math] предметов и [math]\displaystyle{ m }[/math] рюкзаков ([math]\displaystyle{ m\le n }[/math]). У каждого предмета, как и раньше, есть вес [math]\displaystyle{ p_j\gt 0 }[/math] и ценность [math]\displaystyle{ c_j\gt 0 }[/math][math]\displaystyle{ j= 1,2,...,n }[/math], у каждого рюкзака соответственно своя вместимость [math]\displaystyle{ P_i }[/math] при [math]\displaystyle{ i= 1,2,...,m }[/math]. [math]\displaystyle{ x_i \in {0,1} }[/math]. Задача:

максимизировать [math]\displaystyle{ \sum_{i=1}^m \sum_{j=1}^{n} c_{j}x_{ij} }[/math]

так, чтобы [math]\displaystyle{ \sum_{i=1}^n p_{j}x_{ij} \le P_i }[/math] выполнялось условие для всех [math]\displaystyle{ i= 1,2,...,m }[/math],

[math]\displaystyle{ \sum_{j=1}^{m}x_{ij} \le 1 }[/math] для всех [math]\displaystyle{ i= 1,2,...,n }[/math][5].

Многомерный рюкзак (англ. Multy-dimensional knapsack problem)

Если есть более одного ограничения на рюкзак, например объем и вес, задачу называют m-мерной задачей о ранце. Например, для не ограниченного варианта:

максимизировать [math]\displaystyle{ \sum_{i=1}^n c_ix_i }[/math]

так, чтобы [math]\displaystyle{ \sum_{i=1}^n p_{ij}x_i \le P_j }[/math], [math]\displaystyle{ j= 1,2,...,m }[/math]

и [math]\displaystyle{ x_i \ge 0 }[/math] для всех [math]\displaystyle{ i= 1,2,...,n }[/math][4].

Квадратичная задача о рюкзаке (англ. Quadratic knapsack problem)

Квадратичная задача о ранце представляет собой модификацию классических задач о ранце с ценностью, являющейся квадратичной формой. Пусть [math]\displaystyle{ x = (x_1, .. ,x_n) }[/math] - вектор, задающий, сколько экземпляров каждого предмета окажется в рюкзаке. Задача:

максимизировать [math]\displaystyle{ x^TQx }[/math]

при условиях [math]\displaystyle{ \sum_{i=1}^n p_ix_i \le P }[/math], [math]\displaystyle{ x \in B^n }[/math], или

минимизировать [math]\displaystyle{ x^TQx }[/math]

при условиях [math]\displaystyle{ \sum_{i=1}^n p_ix_i \geq P }[/math], [math]\displaystyle{ x \in B^n }[/math].

При этом [math]\displaystyle{ Q }[/math] — неотрицательно определенная матрица размера [math]\displaystyle{ n \times n }[/math], [math]\displaystyle{ B^n }[/math] задаёт ограничения на количество предметов[6].

Примечания

  1. Бурков, 1974, p. 217.
  2. Silvano, 1990, p. 2.
  3. 3,0 3,1 Pisinger, 1995, p. 127.
  4. 4,0 4,1 Pisinger, 1995, p. 147.
  5. Silvano, 1990, p. 157.
  6. G. Gallo, P. L. Hammer, B. Simeone. Quadratic knapsack problems (англ.) // Mathematical Programming Studies. — 2009. — 24 февраль (vol. 12). — P. 132-149. — ISSN 0303-3929. Архивировано 24 октября 2016 года.

Литература

на русском языке
  1. В. Н. Бурков, И. А. Горгидзе, С. Е. Ловецкий. Прикладные задачи теории графов. — М., 1974. — 232 с.
на английском языке
  1. Silvano Martelo, Paolo Toth. Knapsack problems. — Wiley, 1990. — 306 с.
  2. David Pisinger. Knapsack problems. — 1995. Архивная копия от 22 декабря 2012 на Wayback Machine

Ссылки

  1. Алгоритм рюкзака