x |
j1 |
j2 |
j3 |
y |
x1(y) |
F1(y) |
x2(y) |
F2(y) |
x3(y) |
F3(y) |
x |
j2(x) |
F3(y-x) |
j2+F3 |
||
£1 |
2 |
3 |
2 |
£1 |
0 |
5 |
0 |
2 |
0 |
3 |
3 |
6 |
||||
2 |
3 |
4 |
2 |
2 |
2 |
6 |
0 |
2 |
1 |
3 |
3 |
6 |
||||
3 |
3 |
4 |
3 |
3 |
0 |
6 |
3 |
3 |
2 |
4 |
2 |
6 |
||||
4 |
4 |
5 |
3 |
4 |
4 |
7 |
3 |
3 |
3 |
4 |
2 |
6 |
||||
5 |
4 |
5 |
3 |
5 |
2 |
7 |
3 |
3 |
4 |
5 |
2 |
7 |
||||
6 |
5 |
5 |
4 |
6 |
4 |
8 |
6 |
4 |
max=7 |
|||||||
7 |
5 |
5 |
4 |
7 |
2 |
8 |
6 |
4 |
xk(y) = min { xk £ y | |
|||||||
8 |
5 |
5 |
4 |
8 |
4 |
11 |
2 |
8 |
6 |
4 |
jk(xk) + Fk+1(y-xk)=Fk(y)} |
Случай идентичных потребителей: ji(x)=j(x). Докажите, что а) если j(x) выпукла по x, то весь ресурс можно отдать одному потребителю, б) если вогнута, то его надо делить поровну между всеми потребителями.
№31. Задача о рюкзаке.
Пусть есть рюкзак объема V ³ 0 и n камней с объемами vi и ценами ci. С каждым камнем свяжем переменную xi, принимающую значение 1 (если камень берется) или 0 (в противном случае). Требуется найти подмножество камней с максимальной суммарной стоимостью Si ci×xi, влезающее в рюкзак (т.е. Si vi×xi, £ V).
ПустьFk(y) - максимальная стоимость камней с номерами от k до n, влезающих в рюкзак объема y. Т.к. любая часть оптимального решения оптимальна, то
Fn(y) = cn (если vn £ y)или 0 (в противном случае) ЕслиV и vi – целые, то метод
Fk(y) = max { Fk+1(y), ck + Fk+1(y-vk) если y³vk} динамического программирования:
xk(y) = min { xk £ y | ck×xk + Fk+1(y-vk×xk) = Fk(y) }. меняя k от n-1 до 1, найдемF1(V), Трудоемкость - O(n×V). x1(y1=V), xk+1(yk+1= yk -vk×xk(yk)).
y |
x1(y) |
F1(y) |
x2(y) |
F2(y) |
x3(y) |
F3(y) |
x4(y) |
F4(y) |
£ 1 |
0 |
0 |
0 |
0 |
0 |
0 |
||
2 |
1 |
6 |
0 |
0 |
0 |
0 |
||
3 |
0 |
8 |
1 |
8 |
0 |
0 |
||
4 |
0 |
10 |
0 |
10 |
1 |
10 |
||
5 |
1 |
15 |
1 |
14 |
0 |
10 |
1 |
10 |
Пример:
5x1+6x2 + 8x3+10x4® max
x1+2x2 + 3x3+ 4x4£ 5
F2(4) =max{ F3(4),6+ F3(4-2=2)}
= max{10,6+0} = 10, x2(4)=0.
F1(5) =max{ F2(5),10+ F2(5-1)}
= max{14,5+10} = 15, x1(5)=1.
x1 =x1(5)=1, x2 =x2(5-v1×x1 =4)=0, x3 =x3(4-v2×x2 =4)=0, x4=x4(4-v3×x3 =4)=1.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.