Оскільки визначення відповідної цільової позиції може бути складним у багатьох ситуаціях, наступний підхід, заснований на двовимірних картах заповнення сітки, може бути вартим розгляду. Його зазвичай називають "ітерацією величини", а в поєднанні з градієнтним спуском / підйомом дає простий і досить ефективний (залежно від реалізації) алгоритм планування шляху. Завдяки своїй простоті він добре відомий в мобільній робототехніці, зокрема для «простих роботів», що пересуваються в приміщенні. Як випливало з цього вище, цей підхід забезпечує засіб знаходження шляху від вихідної позиції без чіткого конкретизації цільової позиції наступним чином. Зауважте, що цільове положення може бути необов’язково вказано, якщо воно є. Крім того, підхід / алгоритм являє собою пошук в першу чергу,
У двійковому випадку 2D-карта заповнення сітки - це одна для зайнятих комірок сітки та нуль в інших місцях. Зауважте, що ця величина зайнятості також може бути безперервною у діапазоні [0,1], я повернусь до цього нижче. Значення заданої комірки сітки g i - V (g i ) .
Основна версія
- Якщо припустити, що комірка сітки g 0 містить початкове положення. Встановіть V (g 0 ) = 0 і поставте g 0 у чергу FIFO.
- З черги візьміть наступну клітинку сітки g i .
- Для всіх сусідів g j of g i :
- Якщо g j не зайнятий і раніше його не відвідували:
- V (g j ) = V (g i ) +1
- Позначити g j як відвідане.
- Додайте g j у чергу FIFO.
- Якщо заданий поріг відстані ще не досягнуто, продовжте з (2.), інакше продовжте з (5.).
- Шлях отримують, слідуючи найкрутішому градієнтному підйому, починаючи з g 0 .
Примітки до кроку 4.
- Як зазначено вище, крок (4.) вимагає відстежувати максимальну пройдену відстань, яка була опущена у вищеописаному описі з міркувань чіткості / стислості.
- Якщо вказана цільова позиція, ітерація припиняється, як тільки цільова позиція досягається, тобто обробляється / відвідується як частина кроку (3.).
- Звичайно, можна також просто обробити всю сітку-карту, тобто продовжити, поки всі (вільні) сітки-комірки не будуть оброблені / відвідані. Обмежуючим фактором, очевидно, є розмір карти сітки в поєднанні з її роздільною здатністю.
Розширення та подальші коментарі
Рівняння оновлення V (g j ) = V (g i ) +1 залишає достатньо місця для застосування всіх видів додаткової евристики шляхом зменшення масштабу V (g j )або компонент добавки, щоб зменшити значення для певних варіантів шляху. Більшість, якщо не всі, такі модифікації можна красиво та загально включити, використовуючи сітку-карту з постійними значеннями [0,1], що фактично є етапом попередньої обробки початкової, двійкової сітки-карти. Наприклад, додавання переходу від 1 до 0 уздовж меж перешкод змушує "актора" бажано залишатися чистою від перешкод. Така сітка-карта може, наприклад, формуватися з двійкової версії шляхом розмивання, зваженого розширення тощо. Додаючи загрози та ворогів як перешкоди з великим розмитим радіусом, карає шляхи, що наближаються до цих. Можна також використовувати дифузійний процес на загальній карті сітки таким чином:
V (g j ) = (1 / (N + 1)) × [V (g j ) + сума (V (g i ))]
де " сума " позначає суму по всіх сусідніх осередках сітки. Наприклад, замість створення бінарної карти початкові (цілочисельні) значення можуть бути пропорційними величині загроз, а перешкоди представляють "малі" загрози. Після застосування процесу дифузії значення сітки повинні / повинні бути змінені до [0,1], а осередки, зайняті перешкодами, загрозами та ворогами, повинні бути встановлені / примусові до 1. Інакше масштабування в рівнянні оновлення може не працювати за бажанням.
У цій загальній схемі / підході існує багато варіацій. Перешкоди тощо можуть мати невеликі значення, тоді як вільні комірки сітки мають великі значення, що може потребувати спуску градієнта на останньому кроці залежно від мети. У будь-якому випадку, підхід IMHO є напрочуд універсальним, досить простим у здійсненні та, можливо, досить швидким (залежно від розміру / роздільної здатності сітки-карти). Нарешті, як і у багатьох алгоритмах планування шляху, які не передбачають конкретної цільової позиції, існує очевидний ризик застрягти в тупиках. Певною мірою можливо зменшити цей ризик, можливо, застосувати спеціальні кроки після обробки до останнього кроку.
Ось ще один короткий опис із ілюстрацією в Java-Script (?), Хоча ілюстрація не працювала з моїм браузером :(
http://www.cs.ubc.ca/~poole/demos/mdp/vi.html
Детальніше про планування можна знайти в наступній книзі. Ітерація значення конкретно обговорюється в розділі 2.3.1. Оптимальні плани з фіксованою довжиною.
http://planning.cs.uiuc.edu/
Сподіваюся, що допомагає, з повагою, Деріку.