Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

У n-вимірному узагальненні задачі обмеження (16.5) замінюється на систему обмежень




Отже отримуємо математичну модель у вигляді

F = сі xi ® max, (16.4)

аі xi £ а, (16.5)

xi ³ 0, - ціла, і = 1, n. (16.6)

 
 


аіj xi £ аj, j = 1, m,

коли врахувуються обмеження не тільки на сумарну вагу, а наприклад, ще на сумарний об’єм та деякі інші параметри.

Задачу (16.4) - (16.6) можна розв’язати методом цілочисельного програмування, але більш ефективним виявляється застосування методу динамічного програмування.

Як і у випадку застосування методу гілок та меж не існує універсального засобу переходу від практичної задачі до моделі динамічного програмування. Ефективність застосування залежить від того, наскільки вдало визначені стани системи та організований перехід від значень цільової функції на простих траекторіях до значень на більш складних.

Уведемо функцію Yk(m), що дорівнює значенню цільової функції для оптимального завантаження рюкзака при використанні перших k типів предметів і при умові, що сумарна вага предметів у рюкзаку не перебільшує m. Якщо m = 0, то Yk(m) = 0, k = 0, n, оскільки нульове обмеження на сумарну вагу предметів не дозволяє покласти у рюкзак жодний предмет. Аналогічно, при k = 0 Yk(m) = 0, m = 0, а. Отже Yk(0) = 0, " k і Y0(m) = 0, " m, що відповідає відомим значенням F(i) у (16.3).

Рівняння динамічного програмування для поданої задачі можна записати у вигляді

Yk(m) = max {Yk-1(m), ck + Yk(m - ak)}, якщо m ³ ak, (16.7)

Yk(m) = Yk-1(m), якщо m < ak. (16.8)

Дійсно, при оптимальному завантаженні рюкзаку предметами перших k типів при обмеженні сумарної ваги величиною m може бути два випадки: 1) предмет k-го типу не вибирався жодного разу; 2) предмет k-го типу вибирався хоча б один раз. У першому випадку, очевидно, Yk(m) = Yk-1(m). У другому випадку, коли вилучити з рюкзаку один предмет k-го типу, якому відповідає цінність ck, то сумарна вага залишених у рюкзаку предметів обмежується величиною y - ak. Очевидно, що залишені у рюкзаку предмети повинні утворювати оптимальне завантаження при вказанному обмеженні на сумарну вагу. Тому Yk(m) = ck + Yk(m - ak). Вибір кращого з перелічених двох варіантів і відображає формула (16.7). Формула (16.8) відповідає першому випадку.

Отримані рівняння (16.7), (16.8) показують, що починаючи із значень Yk(0) та Y0(m) і поступово збільшуючи значення k та m, можна отримати значення Yn(a) = Fmax. При обчисленні значень Yk(m) будемо заповнювати таблицю A n x a, кожний рядок якої відповідає певному значенню k, а стовпчик – m. На перетинанні k–го рядка та m–го стовпчика будемо записувати обчислене значення Yk(m) (A(k, m) = Yk(m)). Шукане значення Yn(a) визначимо за порядком Y1(1), Y1(2), …, Y1(a), Y2(1), Y2(2), …, Y2(a), …, Y n (1), Y n(2), …, Y n(a).

Після того, як величина Y n(a) обчислена, необхідно знайти значення xi, які визначають цю величину. Для того, щоб забезпечити можливість визначення xi, одночасно з заповненням таблиці A будемо заповнювати ще одну таблицю B n x a. Елементам цієї таблиці будемо присвоювати значення максимального типу предметів, що використані для отримання Yk(m): B(k, m) = max{i | xi > 0 }.

В результаті B(n, a) дорівнює типу предмету, що присутній у рюкзаку при оптимальному завантаженні. Якщо вилучити з рюкзаку предмет цього типу, сумарна вага залишених предметів не буде перебільшувати a – aB(n, a) , і тому максимальний тип предмету, що залишився у рюкзаку дорівнює B(n, a – aB(n, a)). Продовжуючи аналогічно доки не буде визначено, що максимальний тип залишених предметів дорівнює нулю або сумарна вага залишених предметів дорівнює нулю, можна визначити типи усіх предметів, покладених у рюкзак при оптимальному завантаженні. Кількість предметів кожного типу і визначає розв’язок задачі.

Значення B(k, m) обчислюються за правилом

B(k-1, m), якщо Yk-1(m) > ck + Yk(m - ak);

B(k, m) =

k, якщо Yk-1(m) £ ck + Yk(m - ak).

Важливою особливостю застосування методу динамічного програмування для розв’язування задачі про рюкзак є той факт, що для обчислення Yk(m) (1£ m £ a) серед Yl(m) (l < k) використовується тільки Yk-1(m) (1£ m £ a), і це значення не використовується при обчисленні Yp(m) (p > k). Отже, як тільки значення Yk(m) обчислене, величина Yk-1(m) для подальших обчислень не потрібна. Аналогічна ситуація має місце і при обчисленні елементів B(k, m). Після обчислення B(k, m) величина B(k-1, m) для подальших обчислень не потрібна. Вказана особливість при програмуванні методу дозволяє не зберігати одночасно у оперативній пам’яті усі елементи таблиць A та B.

Розглянемо приклад розв’язування задачі про рюкзак методом динамічного програмування. Нехай у рюкзак відбираються предмети чотирьох типів, і сумарна вага предметів у рюкзаку не повинна перебільшувати 10. Значення ваги предмету кожного типу і цінності показані у табл.16.1.

Таблиця 16.1
Тип предмету Вага Цінність
     
     
     
     

Математична модель для поданого прикладу має вигляд

F = 1x1 + 3x2 + 5x3 + 9x4 max,

2x1 + 3x2 + 4x3 + 7x4 £ 10.

Послідовність обчислень елементів таблиць А та В має такий вигляд.

А(1, 1) = Y1 (1) = 0; В(1, 1) = 0;

А(1, 2) = Y1 (2) = max{Y0(2), с1 + Y1 (2-2)} = max{0, 1 + 0} = 1; В(1, 2) = 1;

А(1, 3) = Y1 (3) = max{Y0(3), с1 + Y1 (1)} = max{0, 1 + 0} = 1; В(1, 3) = 1;

А(1, 4) = Y1 (4) = max{Y0(4), с1 + Y1 (2)} = max{0, 1 + 1} = 2; В(1, 4) = 1;

А(1, 5) = Y1 (4) = max{Y0(5), с1 + Y1 (3)} = max{0, 1 + 1} = 2; В(1, 5) = 1;

А(1, 6) = Y1 (4) = max{Y0(6), с1 + Y1 (4)} = max{0, 1 + 2} = 3; В(1, 6) = 1;

А(1, 7) = Y1 (4) = max{Y0(7), с1 + Y1 (5)} = max{0, 1 + 2} = 3; В(1, 7) = 1;

А(1, 8) = Y1 (4) = max{Y0(8), с1 + Y1 (6)} = max{0, 1 + 3} = 4; В(1, 8) = 1;

А(1, 9) = Y1 (4) = max{Y0(9), с1 + Y1 (7)} = max{0, 1 + 3} = 4; В(1, 9) = 1;

А(1, 10) = Y1 (4) = max{Y0(10), с1 + Y1 (8)} = max{0, 1 + 1} = 5; В(1, 10) = 1;

А(2, 1) = Y2 (1) = 0; В(2, 1) = 0;

А(2, 2) = Y2 (2) = Y1 (2) = 1; В(2, 2) = В(1, 2) = 1;

А(2, 3) = Y2 (3) = max{Y1(3), с2 + Y2(0)} = max{1, 3 + 0} = 3; В(2, 3) = 2;

А(2, 4) = Y2 (4) = max{Y1(4), с2 + Y2(1)} = max{2, 3 + 0} = 3; В(2, 4) = 2;

А(2, 5) = Y2 (5) = max{Y1(5), с2 + Y2(2)} = max{2, 3 + 1} = 4; В(2, 5) = 2;

А(2, 6) = Y2 (6) = max{Y1(6), с2 + Y2(3)} = max{3, 3 + 3} = 6; В(2, 6) = 2

А(2, 7) = Y2 (7) = max{Y1(7), с2 + Y2(4)} = max{3, 3 + 3} = 6; В(2, 7) = 2;

А(2, 8) = Y2 (8) = max{Y1(8), с2 + Y2(5)} = max{4, 3 + 4} = 7; В(2, 8) = 2;

А(2, 9) = Y2 (9) = max{Y1(9), с2 + Y2(6)} = max{4, 3 + 6} = 9; В(2, 9) = 2;

А(2, 10) = Y2 (10) = max{Y1(10), с1 + Y2(7)} = max{5, 3 + 6} = 9; В(2, 10) = 2;

А(3, 1) = Y3 (1) = 0; В(3, 1) = 0;

А(3, 2) = Y3(2) = Y2(2) = 1; В(3, 2) = 1;

А(3, 3) = Y3(3) = Y2(3) = 3; В(3, 3) = 2;

А(3, 4) = Y3(4) = max{Y2(4), с3 + Y3(0)} = max{3, 5 + 0} = 5; В(3, 4) = 3;

А(3, 5) = Y3(5) = max{Y2(5), с3 + Y3(1)} = max{4, 5 + 0} = 5; В(3, 5) = 3;

А(3, 6) = Y3(6) = max{Y2(6), с3 + Y3(2)} = max{6, 5 + 1} = 6; В(3, 6) = 3;

А(3, 7) = Y3(7) = max{Y2(7), с3 + Y3(3)} = max{6, 5 + 3} = 8; В(3, 7) = 3;

А(3, 8) = Y3(8) = max{Y2(8), с3 + Y3(4)} = max{7, 5 + 5} = 10; В(3, 8) = 3;

А(3, 9) = Y3(9) = max{Y2(9), с3 + Y3(5)} = max{9, 5 + 5} = 10; В(3, 9) = 3;

А(3, 10) = Y3(10) = max{Y2(10), с3 + Y3(6)} = max{9, 5 + 6} = 11; В(3, 10) = 3;

А(4, 1) = Y4(1) = 0; В(4, 1) = 0;

А(4, 2) = Y4(2) = Y1 (2) = 1; В(4, 2) = В(3, 2) = 1;

А(4, 3) = Y4(3) = Y3(3) = 3; В(4, 3) = 2;

А(4, 4) = Y4(4) = Y3(4) = 5; В(4, 4) = 3;

А(4, 5) = Y4(5) = Y3(5) = 5; В(4, 5) = 3;

А(4, 6) = Y4(6) = Y3(6) = 6; В(4, 6) = 3

А(4, 7) = Y4(7) = max{Y3(7), с4 + Y4(0)} = max{8, 9 + 0} = 9; В(4, 7) = 4;

А(4, 8) = Y4(8) = max{Y3(8), с4 + Y4(1)} = max{10, 9 + 0} = 10; В(4, 8) = 3;

А(4, 9) = Y4(9) = max{Y3(9), с4 + Y4(2)} = max{10, 9 + 1} = 10; В(4, 9) = 4;

А(4, 10) = Y4(10) = max{Y3(10), с4 + Y4(3)} = max{11, 9 + 3} = 12; В(4, 10) = 4;

В результаті отримуємо таблиці у вигляді

Таблиця А
k m                    
                     
                     
                     
                     

Таблиця B

k m                    
                     
                     
                     
                     

 

Оскільки В(4, 10) = 4, у оптимальному завантаженні рюкзака є предмет типу 4. Вилучивши цей предмет, отримуєму обмеження на сумарну вагу залишених предметів 10 – 7 = 3. Тому переходимо до елементу В(4, 3), який дорівнює 2. Це означає, що у рюкзаку є предмет типу 2. Після вилучення цього предмету отримуємо, що сумарна вага залишених предметів не перебільшує 3 – 3 = 0, і процес визначення розв’язку припиняється. Таким чином, отримуємо розв’язок x1 = 0, x2 = 1, x3 = 0, x4 = 1, і максимальне значення цільової функції Fmax = 0 + 3 x 1 + 5 x 0 + 9 x 1 = 12.

У розглянутому прикладі при побудові таблиць А та В розглядалися усі цілі значення від 1 до 10. У тому разі, коли значення ваги типів предметів мають найбільший спільний дільник d > 1, достатньо обчислювати Yk(m) лише для m кратних d. Наприклад, якщо кожне значення ваги – парне число, таблиці А та В повинні містити лише стовпці, що відповідають парним числам.

Метод динамічного програмування, як і метод гілок та меж, належить до групи методів послідовного аналізу варіантів. Можна вважати, що ці методи реалізують дві протилежні стратегії пошуку розв’язку. У методі гілок та меж від вихідної задачі шляхом розбиття допустимої області відбувається перехід до більш простих підзадач, доки не буде отримано підзадачу з тривіальним розв’язком. Таку стратегію можна віднести до групи стратегій “зверху униз”.

У методі динамічного програмування, навпаки, процес пошуку розв’язку починається з розглядання підзадач з тривіальним розв’язком. Підзадачі з відомим розв’язком поступово ускладнюються, доки не буде отримано розв’язок вихідної задачі. Такий підхід можна розглядати як стратегію “знизу угору”.

 

 




Поделиться с друзьями:


Дата добавления: 2014-01-13; Просмотров: 263; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.024 сек.