Nirengi A * (TA *) yol bulma algoritması


11

Demyen tarafından Verimli Üçgenleme Tabanlı Yol Bulma adlı makalesinde 76-81. Sayfalarda açıklanan Üçgen A * (TA *) algoritmasını anlamak için yardıma ihtiyacım var .

Nihai düğüme ulaşıldıktan / genişletildikten sonra bile normal A * algoritmasının üçgenleme için nasıl ayarlanacağını, diğer olası en uygun yolları nasıl arayacağını açıklar. Son düğüm genişletildiğinde normal A * durur, ancak üçgenleştirilmiş bir grafikte kullanıldığında bu her zaman en iyi yol değildir. Bu tam olarak yaşadığım problem.

Sorun sayfa 78, Şekil 5.4'te gösterilmiştir: resim açıklamasını buraya girin

Makalede sunulan g ve h değerlerinin nasıl hesaplanacağını anlıyorum (sayfa 80).

Bence arama durdurma koşulu:

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

currentNode, en düşük f-puanına sahip olan açık listeden (öncelik sırası) açılan arama düğümüdür. shortestDistanceFound, şu ana kadar bulunan en kısa yolun gerçek mesafesidir.

Ancak önceden bulunan yolları gelecekteki aramalardan nasıl hariç tutabilirim? Çünkü aramayı tekrar yaparsam aynı yolu bulacaktır. Kapalı listeyi sıfırlayabilir miyim? Bir şeyi değiştirmem gerekiyor, ama neyi değiştirmem gerektiğini bilmiyorum. Kağıt sahte koddan yoksundur, bu yüzden bu yardımcı olacaktır.

Yanıtlar:


3

Bunu ben uygulamamıştım, ama okuduğumda böyle bir şey yapacağını düşünüyorum:

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

Aradaki fark, hedefe giden bir yol bulsanız bile , bunun en kısa yol olması gerekmez . Ancak en kısa yoldaki üst sınırları geliştirmeye devam edeceksiniz, yani tüm düğümleri açmanız gerekmeyecek. Sonunda açık kümeniz boş olmalı ve şimdiye kadar bulduğunuz en iyi yol en kısa olmalıdır.

Açıkladığı değiştirilmiş g maliyeti büyük bir küçümseme gibi görünüyor, bu yüzden pratikte ne kadar iyi çalıştığı konusunda şüpheliyim.


Hmm, yanılmış olabilirim, ama bunu açık listeye ekleme koşulu yerine durma koşulu olarak yorumluyorum. Aşağıdaki açık listeye ekleme koşulu gibi geliyor: "Yan not olarak, o üçgene karşılık gelen bir durum zaten bu durumun bir atasıysa, belirli bir bitişik üçgen için bir arama durumunun alt öğesi oluşturulmaz. dışlama yapılabilir çünkü hiçbir zaman en uygun yolu ortadan kaldırmayacaktır, sadece Teorem 4.3.4'te belirtildiği gibi bir kısmını kaldırarak kısaltılabilir. "
Morrowless
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.