A * 'yı nasıl yeniden planlamalıyım?


10

A * algoritmasını kullanarak oyuncuyu arayan bir yol bulma patron düşmanı var. Oldukça karmaşık bir ortam ve Flash'ta yapıyorum, bu yüzden uzun mesafelerde arama yaparken arama biraz yavaşlayabilir. Oyuncu sabit olsaydı, sadece bir kez arama yapabilirdim, ama şu anda her kareyi araştırıyorum. Bu benim kare hızımın acı çekmesi için yeterince uzun sürer.

Bunun olağan çözümü nedir? Tüm aramayı yeniden yapmadan A * 'yı yeniden planlamanın' bir yolu var mı? Biraz daha az sıklıkta mı aramalıyım (her yarım saniyede bir veya saniyede bir) ve yolda biraz yanlışlık olacağını kabul etmeli miyim?

Yanıtlar:


13

Tüm yolu tek bir çerçevede aramak zorunda değilsiniz, bunu arama döngüsünde bir sınır vererek yaptım, AI daha sonra sahip olduğu küçük bilgileri takip etmeye başlayacak ve bir sonraki çerçeve biraz daha arayacağım , yol bulunana kadar 3 kare sürebilir. AI gerçekten araştırıyor gibi göründüğü için oldukça ikna edici görünebilir.


+1. Mat Buckland'ın AI kitabında da bunu anlatıyor. Ona "Zaman dilimli yol planlama" diyor ( books.google.ch/… ) . İyi şeyler.
bummzack

8

Mesafe çok büyükse algoritmayı her birkaç karede bir çalıştırmak için yakınlık algılamayı kullanabilirsiniz (çünkü çoğu durumda mesafe büyükse, hedef yol çerçeveden çerçeveye büyük ölçüde değişmez). Örneğin:

      Distance > 100, run A* every 2 seconds
100 > Distance >  50, run A* every 1 second
50  > Distance >  25, run A* every 10 frames
25  > Distance <  25, run A* every frame

Bu, A * çalıştırmanın her karenin hala kabul edilebilir bir performansa sahip olduğu bir mesafe olduğunu varsayar. Kısacası, ikinci seçeneğinizi tercih ederim. Özellikle elinizde olan şey işe yarıyorsa, iyi çalışanı ölçeklendirebilsem başka bir şeyi yeniden uygulamaktan kaçınırım. Sonuçta oyununuz için işe yarayıp yaramadığını görmek zorundasınız.


8

Tam olarak sorunuzu cevaplamıyor, ama ... eğer "hile" yapmaya istekli iseniz, oyuncunun "kırıntıları" terk etmesini ve patronun onları takip etmesini sağlayabilirsiniz. Ekmek kırıntıları yolu kendini geçerse, en son olanı takip edin (bu, patronun oyuncuların tam yolunu takip etmekten bahsetmemek için döngülerden ve çok uzun olabilecek diğer yollardan kaçınmasını sağlar)

Patron iyi bir koku alma duyusuna sahip bir tür hayvan ise bu işe yarar. Bu, oyuncunun kokusunu takip etmek gibi çok işe yarar :)


5

Davanız HPA * ' nın ele almak için icat ettiği şeydir . Eğer aşırıya kaçmış gibi görünüyorsa, her yarım saniyede bir yol bulmanın oldukça iyi çalışması gerektiğini düşünmeye meyilliyim.


4

Statik bir ortamsa, tüm çiftlerin en kısa yolunu önceden hesaplayabilirsiniz.


2
Bir buysa küçük statik ortamı.

Mevcut platforma ve belleğe bağlıdır.
Nate

@Joe, @Nate, doğru.
Peter Taylor

2

A * karakterinin oyuncuyu bir seviyede takip ettiği 48 oyun yarışması için bir oyun oluşturdum. A * uygulamam yavaş olduğu için (her kareyi çalıştıramadı) Aralığı üç saniyelik bir gecikmeye koyuyorum. Bu, oyuncunun AI'yı birkaç dakika "aldatmasına" izin vermenin istenmeyen bir sonucu oldu. Aslında oyunu daha eğlenceli hale getirdi.

Daha sonra A * uygulamasının performansını geliştirdim ve her karede çalıştırmayı denedim. Oyun eğlenceli olmayı bıraktı çünkü düşman her zaman oyuncuyu mükemmel bir şekilde arayacaktı.

Bu beklenmedik ve iyi bir öğrenme deneyimiydi.


1
İyi bir noktaya değindin. Pac-man'da kasıtlı olarak kusurlu bir algoritma kullandıkları ve oyuncunun hayaletleri alt etmesine izin veren yol bulma hakkında okuduğumu hatırlıyorum. Her hayaletin biraz farklı bir kusuru vardı ve onlara daha fazla karakter verdi. Buraya götürmek, oyunlarda, eğlenceli> diğer her şeydir.
Nick Van Brunt

0

A * 'yı kesinlikle kullanmak istemiyorsanız (veya ihtiyacınız yoksa), Direksiyon Davranışlarına da göz atabilirsiniz . İlgili çerçeve başına tam bir yol planlaması olmadığından, işlemede çok daha hafif olmalıdır.


Temsilci ile hedefi arasında hiçbir engel bulunmadığı durumlarda Direksiyon Davranışlarını (özellikle Ara) kullanıyorum. Ne yazık ki, çevrem daha akıllı bir çözümün gerekli olduğu büküm koridorları gibi şeyler içeriyor.
Gregory Avery-Weir
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.