it talks the approach for solving impossible tasks (dynamic programming)

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

Upload: vadym-muliavka

Post on 15-Apr-2017

91 views

Category:

Technology


1 download

TRANSCRIPT

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Page 6: IT Talks The approach for solving impossible tasks (dynamic programming)
Page 7: IT Talks The approach for solving impossible tasks (dynamic programming)

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

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

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

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

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

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

Основна

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

Задача 2

Задача 3

Задача 4

Задача 5

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Page 12: IT Talks The approach for solving impossible tasks (dynamic programming)
Page 13: IT Talks The approach for solving impossible tasks (dynamic programming)
Page 14: IT Talks The approach for solving impossible tasks (dynamic programming)
Page 15: IT Talks The approach for solving impossible tasks (dynamic programming)
Page 16: IT Talks The approach for solving impossible tasks (dynamic programming)
Page 17: IT Talks The approach for solving impossible tasks (dynamic programming)

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

Page 18: IT Talks The approach for solving impossible tasks (dynamic programming)
Page 19: IT Talks The approach for solving impossible tasks (dynamic programming)
Page 20: IT Talks The approach for solving impossible tasks (dynamic programming)
Page 21: IT Talks The approach for solving impossible tasks (dynamic programming)

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

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

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

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

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

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

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

Можливі підмаршрути 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.

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

Підмаршрути 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.

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

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

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

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

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

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

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

добутку»

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

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

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

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

Маючи набір: 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;

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

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

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

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

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

Основна

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

Задача 2

Задача 3

Задача 4

Задача 5

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

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

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

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

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

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

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

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