Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Задача о загрузке рюкзака (задача о ранце)

 

Пусть имеются N видов грузов с номерами .

Единица груза j -го вида имеет все aj. Если груз j-го вида берется в количестве xj, то его ценность в общем случае составляет F (xj). Имеется «рюкзак», грузоподъемность которого равна B. Требуется загрузить рюкзак имеющимися грузами таким образом, чтобы вес его был не больше заданного B, а ценность «рюкзака» была максимальной.

Составим математическую модель задачи. Пусть xj – количество груза j -го вида, помещаемого в рюкзак. Тогда можно записать:

                     (3.15)

                                       (3.16)

                          (3.17)

Здесь х j могут быть и целыми числами. В общем случае это задача нелинейного программирования с сепарабельной целевой функцией, следовательно, она может быть решена методом динамического программирования.

Для этого погрузку «рюкзака» можно интерпретировать как N -этапный процесс принятия решений: на 1-м этапе принимается решение о том, сколько нужно взять груза 1-го вида, на 2-ом этапе – сколько груза 2-го вида и т.д. Такая интерпретация наталкивает на возможность применения для решения задачи (3.15) – (3.17) метода динамического программирования. Для этого приведем задачу (3.15) – (3.17) к виду (3.4) – (3.7).

Для этого введем обозначения:  – вес рюкзака перед погрузкой груза j -го вида груза или вес рюкзака после погрузки грузов видов 1, 2, …, j – 1.Очевидно, что

y 1 = 0.                                                  (3.18)

Текущий вес рюкзака определяется выражением

                       (3.19)

Текущий вес рюкзака  в силу (3.16) удовлетворяет неравенству

£ B.                                            (3.20)

Очевидно ограничения (3.18) – (3.20) эквивалентны ограничению (3.16), поэтому вместо модели (3.15) – (3.17) можно рассматривать модель (3.15), (3.17) – (3.20). Здесь ограничение (3.20) выводит эту модель за рамки модели (3.4) – (3.7). Для сведения задачи к общему виду задач динамического программирования, запишем (3.20) с учетом (3.19):

.

Отсюда следует:                   ,

или окончательно с учетом (3.17):

                        (3.21)

В результате исходная модель (3.15) – (3.17) свелась к эквивалентной модели вида

                                        (3.22)

                                 (3.23)

                                  (3.24)

                                                          (3.25)

Задача (3.22)-(3.25) является частным случаем общей задачи динамического программирования, в которой . Здесь ограничение (3.23) является рекуррентным и отражает процесс загрузки рюкзака, а неравенство (3.24) задает область возможных значений .

Рассмотрим решение задачи (3.22)-(3.25) методом динамического программирования:

1 шаг. Вычисляется величина

                      (3.26)

В результате решения серии задач максимизации получаем точки максимума  и значения .

S -тый шаг (). Вычисляются величины

            (3.27)

В результате решения серии задач максимизации, получаем  и . При s =1 решается только одна задача на максимум, т.к. значение - задано.

Для определения безусловных точек максимума, т.е. решения исходной задачи, проводим обратное движение алгоритма:

.

Отсюда:

.

Далее: . И так далее . Причем  есть максимальное значение целевой функции.

Наличие условия целочисленности переменных xj и  упрощает решение задачи. В этом случае . Здесь [ В ] указывает на то, что берется целая часть числа. Если  не целые, то .

Пример:

Имеется свободный капитал в размере 4 млн. у.е. Этот капитал может быть распределен между 4-мя предприятиями, причем распределение осуществляется только целыми частями (0, 1, 2, 3 или 4 млн. у.е.). Прибыль, получаемая каждым предприятием при инвестировании в него определенной суммы, указана в таблице.

Предпр. Капитал 0 млн. у.е. 1 млн. у.е. 2 млн. у.е. 3 млн. у.е. 4 млн. у.е.
1-е предпр. 0 10 17 25 36
2-е предпр. 0 11 16 25 35
3-е предпр. 0 10 18 24 34
4-е предпр. 0 9 19 26 35

 

Требуется распределить инвестиции между предприятиями из условия максимальной общей прибыли.

 

Обозначим: х j - количество капиталовложений, выделенных j -тому предприятию (). Тогда прибыль, записанная в таблице, можно обозначить как Fj (xj) (). Например, F1(0)=0; F1(1)=10; F1(2)=17 и т.д..... F2(0)=0; F2(1)=11; F4(4)=35.

Тогда математическая модель примет вид:

х j 0 – целые, ()

Данная модель является частным случаем задачи о загрузке рюкзака, где N =4, В=4, а j =1 (). Введя новую переменную yj - израсходованные средства до выделения капиталовложений j -тому предприятию, приведем исходную модель к виду задачи динамического программирования:

; ()

y 1 = 0;

; ()

Решение задачи проведем в соответствии с алгоритмом динамического программирования:

Шаг.

1) Зафиксируем y 4 =0. Тогда допустимые значения x 4 Î [0, 4-0] =[0,1,2,3,4].

1.1) x 4 =0. Тогда F 4 (0)=0.

1.2) x 4 =1. F 4 (1)=9.

1.3) x 4 =2. F 4 (2)=19.

1.4) x 4 =3. F 4 (3)=26

1.5) x 4 =4. F 4 (4)=35.

Максимальное значение , и достигается оно при x 4 =4. Таким образом, заполняется первая строчка таблицы.

2) Зафиксируем y4=1. Тогда допустимые значения x 4 Î [0, 4-1]= [0,1,2,3].

2.1) x 4 =0. Тогда F 4 (0)=0.

2.2) x 4 =1. F 4 (1)=9.

2.3) x 4 =2. F 4 (2)=19.

2.4) x 4 =3. F 4 (3)=26.

Максимальное значение , и достигается оно при x 4 =3. Таким образом, заполняется вторая строка таблицы.

Далее аналогично фиксируем y 4 =2, y 4 =3, y 4 =4. Заполняем оставшиеся строки таблицы.

Таблица шага №1.

y4        x4 0 1 2 3 4
0 0 9 19 26 35 35 4
1 0 9 19 26 - 26 3
2 0 9 19 - - 19 2
3 0 9 - - - 9 1
4 0 - - - - 0 0

Шаг.

1) Зафиксируем y 3 =0. Тогда допустимые значения x 3 Î [0, 4-0] =[0,1,2,3,4].

1.1) x 3 =0. Тогда F 3 (0)=0. Определим значение второго слагаемого:  при y 3 =0 и x 3 =0. Найдем y 4 =0+0=0. Тогда, обратившись к таблице шага 1, увидим, что . Следовательно, F 3 (0)+ =0+35=35. Этот результат заносим в таблицу шага 2 в ячейку, соответствующую y 3 =0 и x 3 =0.

1.2) x 3 =1. Аналогично: F 3 (1)=10. Найдем y 4 = y 3 + x 3 =0+1=1. Из таблицы шага 1 определим: = . Сумма F 3 (1)+ =10+26=36.

1.3) x 3 =2. F 3 (2)=18. y 4 =0+2=2. Þ = = 19. Тогда F 3 (2)+ =18+19=37.

1.4) x 3 =3. F 3 (3)=24,   y 4 =0+3=3. Þ = = 9. Тогда F 3 (3)+ =24+9=33.

1.5) x 3 =4. F 3 (4)=34. y 4 =0+4=4. Þ = =0. Тогда     F 3 (4)+  =34+0=34.

Максимальное значение =37, и достигается оно при x 3 =2. Первая строчка таблицы заполнена.

2) Зафиксируем y 3 =1. Тогда допустимые значения x 3 Î [0, 4-1]= [0,1,2,3].

2.1) x 3 =0. F 3 (0)=0. y 4 =1+0=1. Þ = =26. Тогда F 3 (0)+  =0+26=26.

2.2) x 3 =1. F 3 (1)=10. y 4 =1+1=2. Þ = = =19. Тогда F 3 (1)+  =10+19=29.

2.3) x 3 =2. F 3 (2)=18. y 4 =1+2=3. Þ = =9. Тогда F3(2)+  =18+9=27.

2.4) x 3 =3. F 3 (3)=24 y 4 =1+3=4. Þ = =0. Тогда   F 3 (3)+  =24+0=24.

Максимальное значение , и достигается оно при x 3 =1. Таким образом, заполняется вторая строка таблицы.

3) Зафиксируем y 3 =2. Тогда допустимые значения x 3 Î [0, 4-2]= [0,1,2].

3.1) x 3 =0. F 3 (0)=0. y 4 =2+0=2. Þ f4(2) = 19.  F 3 (0)+ f4(2) =0+ 19 = 19.

3.2) x 3 =1. F 3 (1)=10. y 4 =2+1=3. Þ =9. F 3 (1)+  =10+9= 1 9.

3.3) x 3 =2. F 3 (2)=18. y 4 = 2 +2=3. Þ = 0. F 3 (2)+  =18+ 0 = 18.

Максимальное значение  достигается при двух возможных значениях x 3: x 3 =1 и x 3 =0. В таблицу можно занести любое из них. Таким образом, заполняется третья строка таблицы.

Далее аналогично фиксируем y 3 =3, y 3 =4. Заполняем оставшиеся строки таблицы.

 

Таблица шага №2.

y3        x3 0 1 2 3 4
0 35 36 37 33 34 37 2
1 26 29 27 24 - 29 1
2 19 19 18 - - 19 0 (или 1)
3 9 10 - - - 10 1
4 0 - - - - 0 0

Шаг.

Все вычисления производятся аналогично шагу 2. Не останавливаясь более подробно на этапах решения подзадачи данного шага, приведем получившуюся в результате таблицу.

Таблица шага №3.

y2        x2 0 1 2 3 4
0 37 40 35 35 35 40 1
1 29 30 26 25 - 30 1
2 19 21 16 - - 21 1
3 10 11 - - - 11 1
4 0 - - - - 0 0

Шаг.

Последний шаг интересен тем, что здесь решается единственная задача максимизации при заданном y 1 =0.

y 1 =0. Следовательно x 1 Î [0, 4-0]= [0,1,2,3,4]. Выполняя все действия, аналогично предыдущим шагам, получим таблицу последнего шага, состоящую из единственной строки, соответствующей y 1 =0.

Таблица шага №4.

y1        x1 0 1 2 3 4
0 40 40 38 36 36 40 0 (или 1)

Далее проводим обратное движение алгоритма:

1) y1=0, x1*=0, Þ y2*= y1+ x1*=0+0=0.

2) Определяем значение x2* из таблицы шага № 3 по найденному y 2 *=0. Значению y 2 = y 2 *=0 соответствует значение x 2 (y 2)=1. Следовательно, x 2 *=1. Далее можно определить y 3 *= y 2 *+ x 2 *=0+1=1.

3) Аналогично, обращаясь к таблице шага №2, найдем: x 3 *= x 3 (1)=1, Þ   y 4 *= y 3 *+ x 3 *=1+1=2.

4) Из таблицы шага №1: x 4 *= x 4 (2)=2.

Окончательно имеем: первому предприятию средства не выделяются (x 1 *=0), второму выделяется 1 млн. у.е. (x 2 *=1), третьему предприятию – 1 млн. у.е. (x 3 *=1), и четвертому – 2 млн. у.е. (x 4 *=2). При этом значение целевой функции (общая прибыль по всем 4-м предприятиям) составит:

= =40.

 

     



<== предыдущая лекция | следующая лекция ==>
Примеры задач динамического программирования | Задания для самостоятельной работы
Поделиться с друзьями:


Дата добавления: 2018-10-18; Мы поможем в написании ваших работ!; просмотров: 288 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Начинать всегда стоит с того, что сеет сомнения. © Борис Стругацкий
==> читать все изречения...

2321 - | 2074 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.01 с.