Ulaşılamayan hedefe en yakın konumu bulmak için AStar ayarlaması


12

AStar'ı Java'da uyguladım ve seçilen hedefe ulaşılabilir engellerin bulunduğu bir alanda ok çalışıyor.

Ancak, hedefe ulaşılamaz olduğunda, hesaplanan "yol" hiçbir şekilde en yakın konuma (ulaşılamaz konuma) değil, bunun yerine rastgele bir yoldur.

AStar'a erişilemeyen bir varış noktasına en yakın yerin yolunu bulmak için ince bir yol var mı?

Yanıtlar:


21

En düşük EstimatedDistanceToEnd(yani en düşük h(x)) düğümü takip edin ve geri dönüş için hiçbir uç düğüme ulaşılamıyorsa, bunun yerine bu düğümden geri dönün.


Basit. Onu seviyorum!
John McDonald

Sadece başımı tokatladım ve cevabını okuduğumda "doh" a gittim. Teşekkürler!
Shivan Dragon

1

Bu gerçekten bir A * sorusu değil. A * tamamen A noktasından B noktasına bir yol bulmakla ilgilidir. Uzatılabilir olsa da, sonuçlar kolayca dağınık ve tahmin edilemez olabilir. Bunun yerine ihtiyacınız olan en yakın hedefe ulaşan bir algoritmadır.

Bunu yapmanın bir yolu şudur: A * geçerli bir yol döndürürse (yol eşleşmesi giriş düğümlerindeki başlangıç ​​/ bitiş düğümleri), yolu döndürün. Aksi takdirde...

  • İlk düğümden aramaya başlayın
  • Bağlı tüm düğümleri çaprazlayın (sonsuz yinelemeyi önlemek için ziyaret edilenleri işaretlemeyi unutmayın)
  • En yakın düğümü bulmak için mesafeleri hedefle karşılaştırın

Flood Fill gibi bir şey uygun görünüyor en.wikipedia.org/wiki/Flood_fill , başlangıç ​​düğümünden en düşük mesafeye sahip düğüme kadar A * 'ya ihtiyacınız olduğunu unutmayın. Ayrıca, bunun her zaman bağlı tüm düğümleri incelemeyi içerdiğini ve bu nedenle aşırı yavaş olabileceğini unutmayın.
Roy T.

Evet, yavaş olabilir. Ancak yavaşlık büyük olasılıkla düğümlerin bellek boyunca dağılmasından kaynaklanacaktır; kolayca sabitlenebilir. Ayrıca, bazı doğruluklardan ödün vererek hızlandırmak mümkündür - çok uzak olan veya yanlış yönü gösteren bağlantıları atlayın.
snake5

1
@Roy: hepsi gerek olmadığından emin olmak için her Bağlı düğümü incelemek için çünkü A *, BFS ve benzeri tüm pathfinding algoritmaları, sel-dolgu olarak aynen yavaş olacaktır olup sonuna kadar hiçbir yolu. Ancak bu sorunu hafifletmenin yolları vardır; buraya bakın .
BlueRaja - Danny Pflughoeft
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.