IT Talks The approach for solving impossible tasks (dynamic programming)

Preview:

Citation preview

Динамічне програмування

Динамічне програмування – це коли у є задача яку не зрозуміло як вирішувати і вона розбивається на багато менших задач, які теж

незрозуміло як вирішувати (А. Кумок)

Переваги динамічного програмування:▪ Пошук гарантовано оптимальних рішень.▪ Пошук оптимальних рішень для всієї задачі та повного набору

проміжних підзадач.▪ Оптимізація процесу обчислень (зменшення складності

знаходження розв`язку до поліноміальної/логарифмічної).▪ Можливість вирішення широкого класу задач економіко-

математичного моделювання.▪ Відсутність альтернативних високоефективних методів

вирішення задач.

Типовий приклад задачі МДП

Скільки стрибків потрібно зробити кролику?

Скільки стрибків потрібно зробити кролику?

Схема вирішення задач динамічного програмування

1. Визначити процес побудови оптимального рішення.

2. Знайти елементарну підзадачу, яка вирішується тривіальним способом.

3. Побудувати рекурентне співвідношення, що зв`язує оптимальне значення рішення для підзадач.

4. Рухаючись знизу вверх, визначити оптимальне рішення для кожної з підзадач.

5. Користуючись отриманою інформацією визначити оптимальне рішення основної задачі.

Основна

задачаЗадача 1

Задача 2

Задача 3

Задача 4

Задача 5

Типи задач, що вирішуються МДП:▪ Задачі пошуку оптимального (найкоротшого, найдешевшого,

повного) шляху.▪ Задачі економічної оптимізації.▪ Задачі пошуку (найменшої, найбільшої) кількості можливих

комбінацій.▪ Задачі аналізу текстових та числових даних (порівняння рядків,

перетворення послідовностей до єдиного вигляду, пошук поліндромів та підполіндромів).

▪ Задачі планування та прогнозування майбутнього.▪ Задачі розробки систем масового обслуговування та

багатопоточної обробки даних.

Задачі пошуку оптимального шляху

«Задача пошуку виходу з лабіринту», «Задача пошуку оптимального шляху», «Задача комівояжера», «Задача двох комівояжерів»

Задача пошуку виходу з лабіринту

Задача пошуку виходу з лабіринту

Задача пошуку оптимального шляху

Класична задача комівояжера

Пошук оптимального Гамільтонового контуру на графі.

▪ Повний перебір (для 15 точок – 43 589 145 600, 18 міст – > 177 трильйонів)

▪ Випадковий перебір▪ Жадні алгоритми▪ Метод віток та границь ▪ Метод еластичної мережі (МДП) (для 30 точок – 1000 ітерацій)

Алгоритми рішення задачі

Можливі підмаршрути 1 порядку

1) (2,3) 3+1=4; 3) (3,2) 4+2=6; 5) (4,2) 2+5=5;

2) (2,4) 5+3=8; 4) (3,4) 2+3=5; 6) (4,3) 4+1=5.

Підмаршрути 2 порядку

1) (2, (3,4)) = min(3+5, 5+5) = 8;2) (3, (4,2)) = min(4+8, 2+7) = 9;3) (4, (2,3)) = min(5+4, 4+6) = 9;

1) (2,3) 3+1=4; 3) (3,2) 4+2=6; 5) (4,2) 2+5=5;

2) (2,4) 5+3=8; 4) (3,4) 2+3=5; 6) (4,3) 4+1=5.

(1, (3, (4,2)) = min(5+8, 1+9, 4+9) = 10.

Алгоритм вирішення задачі

комівояжера методом

динамічного програмування:

Задачі економічної оптимізації

«Задача про гроші», «Задача про ранець», «Задача про розподіл капіталу», «Задача інкасації», «Задача пошуку максимального

добутку»

Формулювання задачі про грошіБанкомат має набір купюр різних номіналів (2, 5, 10, 20, 50, 100) кількість банкнот обмежена. В залежності від наявності купюр кожного типу визначити мінімальну їх кількість необхідну для формування запитуваної суми або те, що суму сформувати не можна.

Розв`язок задачі

Маючи набір: 2 (10), 5 (0), 10 (3), 15(1), 20 (10), 50 (1), 100(1) визначити мінімальну кількість купюр для формування суми в 175 од або вказати, що таку суму зібрати неможливо.

Нехай S[i] – чергова підсума, яку потрібно зібрати, де i – сума, а S[i] – кількість одиниць. Тоді S[1], S[0], S[-1], S[-2]… = Ø; S[175] = stop. Рішення:S[2] => 2 = 1;S[3] => S[1] + S[2] = Ø; S[4] => (S[3] + S[1]), (S[2]+S[2]) = 2;S[5] => (S[2] + S[2] + S[1]), (S[3]+S[2]), (5) = 1;S[6] => (S[3] + S[3]), (S[2]+S[2]+S[2]), (S[5], S[1]) = 3;…..S[175] => (S[10] + S[15] + S[50] + S[100]) = 4;

Схема вирішення задач динамічного програмування

1. Знайти елементарну підзадачу, яка вирішується тривіальним способом.

2. Побудувати рекурентне співвідношення, що зв`язує оптимальне значення розв`язку для підзадач.

3. Користуючись отриманою інформацією визначити оптимальне рішення основної задачі.

Основна

задачаЗадача 1

Задача 2

Задача 3

Задача 4

Задача 5

Рівняння Беллмана

Принцип оптимальності Беллмана▪ Bellman's optimality principle - оптимальна

поведінка має ту властивість, що, які б не були початковий стан і рішення (тобто «управління»), наступні рішення повинні складати оптимальну поведінку відносно стану, що виходить в результаті першого рішення.

▪ Цей принцип можна виразити і розмірковуючи від протилежного: якщо не використовувати найкращим чином те, що ми маємо зараз, то і надалі не вдасться найкращим чином розпорядитися тим, що ми могли б мати.

Дякую за увагу!