ptas knapsack

29
Полностью полиномиальная приближенная схема для «Рюкзака» Н.Н. Кузюрин С.А. Фомин 10 октября 2008 г. 1 / 29

Upload: stas-fomin

Post on 27-Jun-2015

285 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Ptas Knapsack

Полностью полиномиальная приближенная схема для«Рюкзака»

Н.Н. Кузюрин С.А. Фомин

10 октября 2008 г.

1 / 29

Page 2: Ptas Knapsack

Задача о рюкзакеЗадача

«0–1 Рюкзак (Knapsack)»Даны:c1, . . . , cn, cj ∈ N — «стоимости» предметов;a1, . . . , an, aj ∈ N — «размеры» или «веса»;

B ∈ N — «размер рюкзака».Найти максимальное значение f ∗ целевой функции

f ≡n∑

i=1

cixi → max

с ограничением на размер «рюкзака»:

n∑i=1

aixi ≤ B, xi ∈ {0, 1}.

2 / 29

Page 3: Ptas Knapsack

ОпределениеАлгоритм с мультипликативной ошибкой не более (1 + ε), где ε > 0,называется ε-оптимальным.

Определение

Полностью полиномиальной аппроксимационной схемой(FPTAS) называется приближенный алгоритм, в котором уровеньточности ε выступает в качестве нового параметра, и алгоритмнаходит ε-оптимальное решение за время, ограниченное полиномом отдлины входа и величины ε−1.

3 / 29

Page 4: Ptas Knapsack

ОпределениеАлгоритм с мультипликативной ошибкой не более (1 + ε), где ε > 0,называется ε-оптимальным.

Определение

Полностью полиномиальной аппроксимационной схемой(FPTAS) называется приближенный алгоритм, в котором уровеньточности ε выступает в качестве нового параметра, и алгоритмнаходит ε-оптимальное решение за время, ограниченное полиномом отдлины входа и величины ε−1.

4 / 29

Page 5: Ptas Knapsack

«Рюкзак»: отбор легких решений

def KnapsackDynpLightest (Items, B) :

Sols← {0: Solution ()} # Хеш: цена -> самый легкий набор

for item ∈ Items : # Цикл по всем предметам — O(n)

newSols← [ ]

for sol ∈ Sols.values () : # по всем частичным — O(f ∗)Try← sol + item # формируем новый набор

if Try.weight ≤ B : # лезет в рюкзак?

if Try.cost 6∈ Sols ∨ Try.weight < Sols[Try.cost].weight :

newSols.append (Try) # подходит!

for sol ∈ newSols : # регистрируем новые решения

Sols[sol.cost]← sol

return Sols[max (Sols.keys ())] # возвращаем самое дорогое

5 / 29

Page 6: Ptas Knapsack

«Рюкзак»: отбор легких решений

Предметы (стоимостьвес ): [6

3, 3

4, 2

5, 5

6, 5

7, 1

8], B = 9

Sols item newSols

0: 00

63

[63]

0: 00, 6: 6

334

[34, 9

7]

0: 00, 9: 9

7, 3: 3

4, 6: 6

325

[25, 5

9, 8

8]

0: 00, 2: 2

5, 3: 3

4, 5: 5

9, 6: 6

3, 8: 8

8, 9: 9

756

[56, 11

9]

0: 00, 2: 2

5, 3: 3

4, 5: 5

6, 6: 6

3, 8: 8

8, 9: 9

7, 11: 11

957

[]

0: 00, 2: 2

5, 3: 3

4, 5: 5

6, 6: 6

3, 8: 8

8, 9: 9

7, 11: 11

918

[18]

Оптимальное решение: 119

6 / 29

Page 7: Ptas Knapsack

ЛеммаСложность алгоритма с отбором «легких» решений — O(nf ∗).

Округлим ci ← bci/scalec · scale, т.е. выполнено ci ≡ 0 (mod scale):ci можно поделить на scale ⇒ это не изменит оптимальногонабора.Время работы ⇒ O( nf ∗

scale ).Веса ai не меняли ⇒ любое допустимое решение «округленной»допустимо для исходной.Потери «округления» ⇒ оптимум получившейся задачи будетменьше исходной.

Стоит ли игра свеч?

7 / 29

Page 8: Ptas Knapsack

ЛеммаСложность алгоритма с отбором «легких» решений — O(nf ∗).

Округлим ci ← bci/scalec · scale, т.е. выполнено ci ≡ 0 (mod scale):ci можно поделить на scale ⇒ это не изменит оптимальногонабора.Время работы ⇒ O( nf ∗

scale ).Веса ai не меняли ⇒ любое допустимое решение «округленной»допустимо для исходной.Потери «округления» ⇒ оптимум получившейся задачи будетменьше исходной.

Стоит ли игра свеч?

8 / 29

Page 9: Ptas Knapsack

ЛеммаСложность алгоритма с отбором «легких» решений — O(nf ∗).

Округлим ci ← bci/scalec · scale, т.е. выполнено ci ≡ 0 (mod scale):ci можно поделить на scale ⇒ это не изменит оптимальногонабора.Время работы ⇒ O( nf ∗

scale ).Веса ai не меняли ⇒ любое допустимое решение «округленной»допустимо для исходной.Потери «округления» ⇒ оптимум получившейся задачи будетменьше исходной.

Стоит ли игра свеч?

9 / 29

Page 10: Ptas Knapsack

ЛеммаСложность алгоритма с отбором «легких» решений — O(nf ∗).

Округлим ci ← bci/scalec · scale, т.е. выполнено ci ≡ 0 (mod scale):ci можно поделить на scale ⇒ это не изменит оптимальногонабора.Время работы ⇒ O( nf ∗

scale ).Веса ai не меняли ⇒ любое допустимое решение «округленной»допустимо для исходной.Потери «округления» ⇒ оптимум получившейся задачи будетменьше исходной.

Стоит ли игра свеч?

10 / 29

Page 11: Ptas Knapsack

ЛеммаСложность алгоритма с отбором «легких» решений — O(nf ∗).

Округлим ci ← bci/scalec · scale, т.е. выполнено ci ≡ 0 (mod scale):ci можно поделить на scale ⇒ это не изменит оптимальногонабора.Время работы ⇒ O( nf ∗

scale ).Веса ai не меняли ⇒ любое допустимое решение «округленной»допустимо для исходной.Потери «округления» ⇒ оптимум получившейся задачи будетменьше исходной.

Стоит ли игра свеч?

11 / 29

Page 12: Ptas Knapsack

ЛеммаСложность алгоритма с отбором «легких» решений — O(nf ∗).

Округлим ci ← bci/scalec · scale, т.е. выполнено ci ≡ 0 (mod scale):ci можно поделить на scale ⇒ это не изменит оптимальногонабора.Время работы ⇒ O( nf ∗

scale ).Веса ai не меняли ⇒ любое допустимое решение «округленной»допустимо для исходной.Потери «округления» ⇒ оптимум получившейся задачи будетменьше исходной.

Стоит ли игра свеч?

12 / 29

Page 13: Ptas Knapsack

ЛеммаСложность алгоритма с отбором «легких» решений — O(nf ∗).

Округлим ci ← bci/scalec · scale, т.е. выполнено ci ≡ 0 (mod scale):ci можно поделить на scale ⇒ это не изменит оптимальногонабора.Время работы ⇒ O( nf ∗

scale ).Веса ai не меняли ⇒ любое допустимое решение «округленной»допустимо для исходной.Потери «округления» ⇒ оптимум получившейся задачи будетменьше исходной.

Стоит ли игра свеч?

13 / 29

Page 14: Ptas Knapsack

«округленная» задача

c̃i — Стоимости, c̃i = bci/scalec · scale;x̃i — Включение предмета в оптимальный набор, x̃i ∈ {0, 1};f̃ — Оптимум «округленной» задачи, f̃ =

∑ni=1 c̃i x̃i .

«Округление» только одного j-го предмета.x̃j = 1 — f ∗ − f̃ = cj − c̃j ≤ scale.x̃j = 0 — f ∗ − f̃ ≤ cj − c̃j ≤ scale.

«округлять» все предметы ⇒ f ∗ − f̃ ≤ n · scale.

14 / 29

Page 15: Ptas Knapsack

«округленная» задача

c̃i — Стоимости, c̃i = bci/scalec · scale;x̃i — Включение предмета в оптимальный набор, x̃i ∈ {0, 1};f̃ — Оптимум «округленной» задачи, f̃ =

∑ni=1 c̃i x̃i .

«Округление» только одного j-го предмета.x̃j = 1 — f ∗ − f̃ = cj − c̃j ≤ scale.x̃j = 0 — f ∗ − f̃ ≤ cj − c̃j ≤ scale.

«округлять» все предметы ⇒ f ∗ − f̃ ≤ n · scale.

15 / 29

Page 16: Ptas Knapsack

«округленная» задача

c̃i — Стоимости, c̃i = bci/scalec · scale;x̃i — Включение предмета в оптимальный набор, x̃i ∈ {0, 1};f̃ — Оптимум «округленной» задачи, f̃ =

∑ni=1 c̃i x̃i .

«Округление» только одного j-го предмета.x̃j = 1 — f ∗ − f̃ = cj − c̃j ≤ scale.x̃j = 0 — f ∗ − f̃ ≤ cj − c̃j ≤ scale.

«округлять» все предметы ⇒ f ∗ − f̃ ≤ n · scale.

16 / 29

Page 17: Ptas Knapsack

Решение «округленной» — аппроксимация исходной

f ∗: оптимум исходной задачи;f ′: стоимость аппроксимации,f ′ =

∑ni=1 ci x̃i ≥

∑ni=1 c̃i x̃i = f̃ .

Абсолютная погрешность f ∗ − f ′ ≤ f ∗ − f̃ ≤ n · scale.Погрешность ≤ ε

1+ε f∗ ⇒ решение — ε-приближенное:

f ′ ≥ f ∗ − ε

1 + εf ∗ =

f ∗

(1 + ε).

scale → max

scale ≤ εf ∗

n(1 + ε)

Нижняя оценка оптимума flb ≤ f ∗ ⇒ scale = max{

1, εflbn(1+ε)

}.

17 / 29

Page 18: Ptas Knapsack

Решение «округленной» — аппроксимация исходной

f ∗: оптимум исходной задачи;f ′: стоимость аппроксимации,f ′ =

∑ni=1 ci x̃i ≥

∑ni=1 c̃i x̃i = f̃ .

Абсолютная погрешность f ∗ − f ′ ≤ f ∗ − f̃ ≤ n · scale.Погрешность ≤ ε

1+ε f∗ ⇒ решение — ε-приближенное:

f ′ ≥ f ∗ − ε

1 + εf ∗ =

f ∗

(1 + ε).

scale → max

scale ≤ εf ∗

n(1 + ε)

Нижняя оценка оптимума flb ≤ f ∗ ⇒ scale = max{

1, εflbn(1+ε)

}.

18 / 29

Page 19: Ptas Knapsack

Решение «округленной» — аппроксимация исходной

f ∗: оптимум исходной задачи;f ′: стоимость аппроксимации,f ′ =

∑ni=1 ci x̃i ≥

∑ni=1 c̃i x̃i = f̃ .

Абсолютная погрешность f ∗ − f ′ ≤ f ∗ − f̃ ≤ n · scale.Погрешность ≤ ε

1+ε f∗ ⇒ решение — ε-приближенное:

f ′ ≥ f ∗ − ε

1 + εf ∗ =

f ∗

(1 + ε).

scale → max

scale ≤ εf ∗

n(1 + ε)

Нижняя оценка оптимума flb ≤ f ∗ ⇒ scale = max{

1, εflbn(1+ε)

}.

19 / 29

Page 20: Ptas Knapsack

Решение «округленной» — аппроксимация исходной

f ∗: оптимум исходной задачи;f ′: стоимость аппроксимации,f ′ =

∑ni=1 ci x̃i ≥

∑ni=1 c̃i x̃i = f̃ .

Абсолютная погрешность f ∗ − f ′ ≤ f ∗ − f̃ ≤ n · scale.Погрешность ≤ ε

1+ε f∗ ⇒ решение — ε-приближенное:

f ′ ≥ f ∗ − ε

1 + εf ∗ =

f ∗

(1 + ε).

scale → max

scale ≤ εf ∗

n(1 + ε)

Нижняя оценка оптимума flb ≤ f ∗ ⇒ scale = max{

1, εflbn(1+ε)

}.

20 / 29

Page 21: Ptas Knapsack

PTAS для рюкзака

def KnapsackFPTAS (D, B , epsilon, LowerBound) :

Вычисляем нижнюю оценку стоимостиF_lb← LowerBound (copy (D), B)

параметр округления scale

scale← epsilon ∗ F_lb/len (D)/(1 + epsilon)

Набор c округленными стоимостямиDs← [(int (floor (c/scale)), a) for c , a ∈ D]

knapset← KnapsackDynpLightest (Ds, B)

ApproxCost← 0

for i ∈ knapset :ApproxCost← ApproxCost + D[i ][0]

21 / 29

Page 22: Ptas Knapsack

Выбор flb:«MaxItemCost»

Тривиальная нижняя оценка — стоимость самого дорогого предмета:

flb ≡ cmax = maxi

ci .

Сложность «KnapsackFPTASMaxItemCost»:

O

(nf ′

scale

)≤ O

(n · ncmax

scale

)=

= O

(n · ncmax

cmaxεn(1+ε)

)= O

(n3(1 + ε)

ε

)= O

(n3

ε

).

22 / 29

Page 23: Ptas Knapsack

Выбор flb:«MaxItemCost»

Тривиальная нижняя оценка — стоимость самого дорогого предмета:

flb ≡ cmax = maxi

ci .

Сложность «KnapsackFPTASMaxItemCost»:

O

(nf ′

scale

)≤ O

(n · ncmax

scale

)=

= O

(n · ncmax

cmaxεn(1+ε)

)= O

(n3(1 + ε)

ε

)= O

(n3

ε

).

23 / 29

Page 24: Ptas Knapsack

«Жадный-2» для «Рюкзака»

def KnapsackGreedy (T , B) :

T .sort (SortByConsumerAppeal)

Cmax← Cg← Ag← 0

for (c, a) ∈ T :

Cmax← max (c, Cmax)

if Ag + a ≤ B : # если лезет в рюкзак

Ag← Ag + a # Берем предмет (c, a)

Cg← Cg + c

return max (Cg, Cmax) # выбираем что больше

Вес рюкзака B= 10 кг

Входной массив T <= [(3, 6), (4, 3), (5, 2), (6, 5), (7, 5), (8, 1)]

Отсортированный T => [(8, 1), (5, 2), (7, 5), (4, 3), (6, 5), (3, 6)]

Берем предмет: <= ($8 , 1 кг)

Берем предмет: <= ($5 , 2 кг)

Берем предмет: <= ($7 , 5 кг)

Cg=$20 или Cmax=$8 ?

Набран рюкзак стоимостью $20

Вес рюкзака B= 100 кг

Входной массив T <= [(10, 1), (150, 100), (50, 40), (40, 20)]

Отсортированный T => [(10, 1), (40, 20), (150, 100), (50, 40)]

Берем предмет: <= ($10 , 1 кг)

Берем предмет: <= ($40 , 20 кг)

Берем предмет: <= ($50 , 40 кг)

Cg=$100 или Cmax=$150 ?

Набран рюкзак стоимостью $150

24 / 29

Page 25: Ptas Knapsack

Выбор flb:«KnapsackGreedy»

Теорема

Алгоритм «KnapsackFPTASKnapsackGreedy» имеет сложность O(

n2

ε

).

Доказательство.Используя f ′ ≤ f ∗ ≤ 2fG :

O

(nf ′

scale

)= O

(n · f ′ε·fG

n(1+ε)

)≤ O

(2n2(1 + ε)

ε

)= O

(n2

ε

).

25 / 29

Page 26: Ptas Knapsack

Выбор flb:«KnapsackGreedy»

Теорема

Алгоритм «KnapsackFPTASKnapsackGreedy» имеет сложность O(

n2

ε

).

Доказательство.Используя f ′ ≤ f ∗ ≤ 2fG :

O

(nf ′

scale

)= O

(n · f ′ε·fG

n(1+ε)

)≤ O

(2n2(1 + ε)

ε

)= O

(n2

ε

).

26 / 29

Page 27: Ptas Knapsack

Трассировка алгоритма «KnapsackFPTAS»Используются нижние оценки «MaxItemCost» и «KnapsackGreedy».D = [(134, 16), (789, 250), (56, 43), (345, 333), (4567, 857), (555, 47)]B = 1000Optimal Knapsack: [0, 2, 4, 5] costs 5312

LowerBound= <function MaxItemCost at 0x00C55DB0> => F_lb= 4567eps = 0.1 => scale = 69.196969697Ds = [(1, 16), (11, 250), (0, 43), (4, 333), (66, 857), (8, 47)]Approx. knapsack: [0, 4, 5] costs 5256

LowerBound= <function KnapsackGreedy at 0x00C55D30> => F_lb= 5312eps = 0.1 => scale = 80.4848484848Ds = [(1, 16), (9, 250), (0, 43), (4, 333), (56, 857), (6, 47)]Approx. knapsack: [0, 4, 5] costs 5256

LowerBound= <function KnapsackGreedy at 0x00C55D30> => F_lb= 5312eps = 0.06 => scale = 50.1132075472Ds = [(2, 16), (15, 250), (1, 43), (6, 333), (91, 857), (11, 47)]Approx. knapsack: [0, 2, 4, 5] costs 5312

27 / 29

Page 28: Ptas Knapsack

�Карта памяти� лекции

28 / 29

Page 29: Ptas Knapsack

Интернет поддержка курса

http://discopal.ispras.ru/

Вопросы?

29 / 29