Loading [MathJax]/extensions/TeX/boldsymbol.js
Skip to main content
LibreTexts - Ukrayinska

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

  • Franz S. Hover & Michael S. Triantafyllou
  • Massachusetts Institute of Technology via MIT OpenCourseWare

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

Почнемо з істотного поняття. Припустимо, що ми їдемо з точки А в точку С, і запитуємо, який найкоротший шлях в милі. Якщо A і C представляють Лос-Анджелес і Бостон, наприклад, є багато шляхів на вибір! Припустимо, що так чи інакше ми знайшли найкращий шлях, і що точка Б лежить вздовж цього шляху, скажімо, Лас-Вегас. XДозволяти бути довільною точкою на схід від Лас-Вегаса. Якби ми зараз вирішили нову проблему оптимізації для того, щоб дістатися тільки з Лас-Вегаса до Бостона, ця ж довільна точкаX була б уздовж нового оптимального шляху, а також.

Справа тонка: проблема оптимізації від Лас-Вегаса до Бостона простіше, ніж від Лос-Анджелеса до Бостона, і ідея полягає в тому, щоб використовувати цю властивість назад через час, щоб розвивати оптимальний шлях, починаючи з Бостона.

Візуалізація завдання наведена відразу нижче, показуючи, що в кожному шарі є 2 шари вузлів і по 3 вузли.
Малюнок\PageIndex{1}: візуалізація прикладної задачі безпосередньо нижче. s=2, Тобто є два шари вузлів (Скелясті гори і річка Міссісіпі)n=3, і, тобто є три вузли або локації, де можна перетнути кожну з цих перешкод.

Приклад: Вузлові подорожі. Тепер ми додаємо деяку структуру до вищевказаного експерименту. Розглянемо тепер подорож з точки А (Лос-Анджелес) до точки D (Бостон). Припустимо, є лише три місця, щоб перетнути Скелясті гориB_1, \, B_2, \, B_3, і три місця, щоб перетнути річку Міссісіпі,C_1, \, C_2, \, C_3. За способом позначення ми говоримо, що шлях відA доB_1 єAB_1. Припустимо, що всі шляхи (і відстані) відA доB -вузлів відомі, як і ті, відB -nodes доC -nodes, іC -nodes до кінцевої точкиD. Є дев'ять унікальних шляхів відA доD.

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

Підхід до динамічного програмування має два етапи. Спочатку з кожногоB -вузла виберіть найкращий шлях доD. Існує три можливі шляхи відB_1 доD, наприклад, і дев'ять шляхів загалом відB -рівня доD. Зберігайте найкращі шляхи якB_1 D|_{opt}, \, B_2 D|_{opt}, \, B_3 D|_{opt}. Ця операція передбачає дев'ять складання двох чисел. По-друге, обчислити відстань для кожного з можливих шляхів відA доD, обмежених оптимальними шляхами відB -вузлів далі:A B_1 + B_1 D|_{opt}, \, A B_2 + B_2 D|_{opt}, абоA B_3 + B_3 D|_{opt}. Комбінований шлях з найкоротшою відстанню є загальним рішенням; цей другий крок включає три суми двох чисел, а загальна оптимізація проводиться у дванадцяти складаннях двох чисел.

Зайве говорити, що цей приклад дає лише м'яку перевагу динамічному підходу до програмування над грубою силою. Однак зазор значно розширюється, оскільки збільшується розміри простору розчину. Загалом, якщо єs шари вузлів (наприклад, річки або гірські хребти), і кожен має ширинуn (наприклад, точки перетинуn річок), підхід грубої сили буде прийматиs n^s доповнення, тоді як процедура динамічного програмування включає лишеn^2(s-1)+n) доповнення. У разіn=5, \, s=5, груба сила вимагає15625 доповнень; динамічне програмування потрібно тільки105!