Алгоритм визначення триангуляції A * (TA *)


11

Мені потрібна допомога в розумінні алгоритму трикутника A * (TA *), який описаний Дем’єном у своїй роботі « Ефективна орієнтація на триангуляцію» на сторінках 76-81.

Він описує, як адаптувати звичайний алгоритм A * для триангуляції, шукати інші, можливо, більш оптимальні шляхи, навіть після досягнення / розширення кінцевого вузла. Регулярний A * зупиняється, коли кінцевий вузол розгортається, але це не завжди найкращий шлях при використанні у трикутному графіку. Це якраз та проблема.

Проблема проілюстрована на сторінці 78, малюнок 5.4: введіть тут опис зображення

Я розумію, як обчислити значення g і h, представлені в роботі (стор. 80).

І я думаю, що умова зупинки пошуку:

if (currentNode.fCost > shortestDistanceFound)
{
    // stop
    break;
}

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

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

Відповіді:


3

Я цього не реалізував, але, читаючи це, я думаю, ви зробите щось подібне:

shortestDistance = infinity
do A* with modified g cost
    if node.fCost > shortestDistance (section 5.5)
        don't open node
    if node.isGoal()
        run funnel algorithm (string pulling)
        update shortestDistance

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

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


Хм, я можу помилитися, але я інтерпретую це як умова зупинки, а не умова для додавання до відкритого списку. Такі умови звучать як умова додавання до відкритого списку: "Як бічна примітка, дитина пошукового стану не буде генерований для певного сусіднього трикутника, якщо стан, відповідний цьому трикутнику, вже є родоначальником цього стану. Це виключення може бути зроблено, оскільки воно ніколи не усуне оптимального шляху, лише той, який міг би скоротитися, видаливши його частину, як зазначено в теоремі 4.3.4. "
Безморочний
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.