Мені потрібна допомога в розумінні алгоритму трикутника A * (TA *), який описаний Дем’єном у своїй роботі « Ефективна орієнтація на триангуляцію» на сторінках 76-81.
Він описує, як адаптувати звичайний алгоритм A * для триангуляції, шукати інші, можливо, більш оптимальні шляхи, навіть після досягнення / розширення кінцевого вузла. Регулярний A * зупиняється, коли кінцевий вузол розгортається, але це не завжди найкращий шлях при використанні у трикутному графіку. Це якраз та проблема.
Проблема проілюстрована на сторінці 78, малюнок 5.4:
Я розумію, як обчислити значення g і h, представлені в роботі (стор. 80).
І я думаю, що умова зупинки пошуку:
if (currentNode.fCost > shortestDistanceFound)
{
// stop
break;
}
де currentNode - це вузол пошуку, який вискакує із відкритого списку (черги пріоритету), який має найнижчу f-бал. shorttestDistanceFound - це фактична відстань найкоротшого, знайденого досі.
Але як я можу виключити раніше знайдені шляхи з майбутніх пошуків? Тому що якщо я знову проведу пошук, він, очевидно, знайде той самий шлях. Чи потрібно скинути закритий список? Мені потрібно щось змінити, але я не знаю, що це потрібно змінити. У папері не вистачає псевдокоду, тому це було б корисно.