Yapay zeka'nın birbirinden farklı yollar izlemesi


16

AI'nın haritanın kenarlarında ortaya çıktığı ve merkeze doğru koştuğu bir yukarıdan aşağıya 2d oyunum var.

Pathfinding yapmak için A * ve bir düğüm kafes kullanıyorum.

Şu anda AI, haritanın kenarında bir noktada ortaya çıkıyor ve hepsi merkeze giden en kısa yol olan aynı yolu kullanıyor.

Şimdi onların daha şaşırtıcı ve ilginç olmalarını ve birbirlerine farklı yollardan gitmelerini istiyorum.

Bunu yapmak için hemen iki fikir düşünebilirim, ancak insanların sıklıkla kullandığı başka yollar veya daha iyi yollar olup olmadığını bilmek istedim?

  1. Bir düşman ortaya çıktığında ve merkeze bir yol oluşturduğunda, bu yoldaki tüm düğümlerin maliyetini geçici olarak artırın, sonra zaman içinde yavaşça geri indirin. Daha sonra ortaya çıkan düşman AI, daha geniş bir yol izlemeye zorlanacak.

  2. Yukarıdaki yaklaşım yapay zekâya daha geniş ve daha geniş bir yol izlemesine yol açacak ve yine de çok öngörülebilir olacaktır. Bu yüzden haritanın etrafına bir dizi ara hedef düğümü de ekleyeceğimi düşündüm. YZ ortaya çıktığında, ara hedeflerden birini rastgele seçerler ve haritanın merkezine gitmeden önce oraya giderler. Bunu, maliyetleri arttırmak için yukarıdaki yaklaşımla birleştirmek oldukça iyi görünebilir mi?

İnsanlar yapay zekanın izledikleri yolları değiştirmesi, ikna edici ve şaşırtıcı görünmesi için en iyi sonucu hangi yaklaşımlar buldu?

Yanıtlar:


7

İkinci seçeneğiniz daha temel bir yaklaşıma işaret ediyor: düşmanlarınızın oyuncunuza farklı yönlerden yaklaşmasını sağlamak. Soru şu ki, oyuncunuzu '' dolaşmak '' için ne kadar seyahat etmeleri gerekiyor? Bunun için ideal,

  • oyuncunun pozisyonunu yakından çevreleyen (yani onu takip eden) dinamik olarak puan oluşturma;
  • Nevermind'in bu çevredeki noktalara daha büyük ya da daha az derecede randomize yolları açısından önerdiği şey.

Bu şekilde, AI'ların oynatıcıda yakınsama yaparken gerçekçi yol varyasyonu elde etmek için gereksiz yere uzun süreler almamasını sağlayabilirsiniz.

İşbirlikçi difüzyon , algoritmanın bir parçası olarak dolaylı olarak istediğinizi yapar. Ancak uygulanması önemsiz değildir.


İşbirlikçi difüzyon, sadece ağırlıklandırmalı bir sel dolgusu. Uygulanması önemsizdir, belki A * 'dan daha kolaydır. Sadece dünyanıza farklı bir bakış açısı gerektirir - önemsiz olmayan bir kavramsal değişim, belki, ama uygulama problemi yok.

AI varlıklarını yönetme açısından standart olmayan bir bakış açısı olması nedeniyle uygulanması hala önemsiz değildir :)
Mühendis

Teşekkürler Nick. Sanırım haritanın ortasındaki oyuncuyu çevreleyen bazı geçiş noktaları kurmak ana yol olacak. Bu aşamada, benim özel durumum için her seviye için dinamik olarak üretilip üretilmeyeceklerinden veya bazı el işçiliğinden emin olup olmadığından emin değilim. Tekrar teşekkürler!
TerryB

12

İlk fikir olarak, yol bulma sırasında her düğümün ağırlığına küçük rastgele bir değer eklemeyi deneyin . Bu şekilde, her ajan biraz farklı bir ortamda bir yol arayacaktır. Bunun sizin durumunuzda işe yarayıp yaramayacağından emin değilim, ama denemesi gerçekten kolay olmalı.


Düşmanlar tavuk gibi koşacak ve ince taneli bir ortamda yollar zaten farklı olmayacak. Diğer çözümlere iyi bir ektir, ancak kendi başına bir çözüm değildir
Coyote

@Coyote Bu, nav-mesh yapısına ve düğüm ağırlıkları, hızlar ve rastgele bileşen arasındaki ilişkilere bağlıdır. Bu yüzden cevabı kesin bir cevap olarak değil, denemek için bir öneri olarak çerçeveledim.
Nevermind

Gerçekten :) Ben genellikle entropi hayranıyım. Ancak nihai sonuç nadiren harika.
Coyote

Aslında Nick Wiggill'in cevabının benimkinden çok daha iyi olduğuna inanıyorum. Ama bir şekilde hak ettiği oyları almıyor.
Nevermind

Bu ... Ama seninki ilk ve daha basit ... oylamayı indirebiliriz: P
Coyote

3

Nevermind'in cevabını seviyorum , ancak yorumlarda açıklanan sınırlama göz önüne alındığında, bunu deneyeceğim:

  1. Merkeze tek bir ünite için algoritma, kat edilen toplam mesafeyi kaydeder.
  2. Sonraki her ünite için, bu mesafeden rastgele ve az miktarda olan bir mesafe tahsis edin.
  3. Her ünite için A * yaparken, ne kadar yakın olduğunuza ve ne kadar yol almak istediğinize bağlı olarak ekstra ağırlık ekleyin. Muhtemelen böyle bir şey olurdu (distanceToGoal) + Max(0, desiredDistance - distanceTravelled)).

Bu, birimlerin daha ileri gitmeye çalışmasını sağlayacaktır, bu muhtemelen farklı bir yoldur, bu da muhtemelen farklı yollar almalarına neden olacaktır.

Ayrıca, her birim için başlangıç ​​huerestic'inize ekleyebilirsiniz, ancak rastgele aralığın muhtemelen biraz daha büyük olması gerekir.


2

Nick Wiggill'in işaret ettiği gibi, en basit yaklaşım hedefi çevreleyen bir daire elde etmek olacaktır.

  • bu daireye yakın bir noktayı rastgele bir yol noktası olarak atayın.
  • daire içindeki tüm yolları ilk yoldan kaldırın (veya bu noktaların değerini önemli ölçüde artırın)
  • o zaman bu ara noktadan hedefe giden yolu alın.

Önemli olan, orijinal yol noktası için daire içindeki tüm yolları ortadan kaldırmaktır, çünkü muhtemelen başlangıç ​​yol noktasına ulaşmak için daireyi geçen düşmanlarla sonuçlanacaktır.

Bundan, daireye ilk değere yakın ikincil yol noktaları ekleyerek birden fazla değerle oynayarak herhangi bir varyant elde edebilirsiniz.


haritanız bunu destekliyorsa, bu çemberin etrafındaki 'ilginç' yerleri bulun (kapılar, kapak, ağaçlar, kayalar, binalar; taktiksel avantajı olan herhangi bir düğüm) ve eğer mevcutsa ve sadece dışarı çıkarsa düşmanlarınızın önce bu konumlara yönelmesini sağlayın eğer gerekiyorsa açık. Bu, dairenin kenarında rastgele bir noktaya vurmaktan çok daha akıllı görünecek.
DampeS8N

Teşekkürler Coyote, evet Muhtemelen Nicks çözümü ile gideceğim ve DampeS8N tarafından öneri olarak bazı önemli ilgi çekici yerlerin önerdiği gibi. AI'nın "daireyi geçmesi" sorununu önlemek için, daire içindeki düğümlerin maliyetini büyük ölçüde artıracağım, böylece A * umarım etrafta
dolaşmalıdır

2

Buradaki probleminiz aslında A * 'nın bir hedefe giden en hızlı rotayı bulmak için bir algoritma olmasıdır. 'İyi' bir yol için birincil kriterleriniz buysa, tüm aktörlerinizin aynı kararları alması şaşırtıcı değildir.

Yapmanız gereken yol için kalite kriterlerinizi değiştirmek, böylece 'en kısa olanı en iyisi' tek faktör değildir. Rasgelelik unsuru bu konuda anahtardır, ancak yol bulma zekâsından uzaklaşacak kadar fazla değildir (yani aktörler hedefe aptalca dolambaçlı yollar alır).

Bir * yol bulma, genellikle aktörün başlamadan önce tüm rota hakkında mükemmel bilgiye sahip olduğunu varsayar. Bu her zaman gerçekçi görünmeyecek. Çözüm, ara hedeflerin bundan bir adım ötede olduğunu ileri sürdü - AI hedefe yaklaşmaya çalışıyor, ancak aynı anda sadece küçük bölümlerde gezinmeye çalışıyor (bu, yalnızca uzaktaki navigasyon yapabileceğiniz gerçek hayata benzer. Gördüğünüz gibi ve daha fazla yol izledikçe ileride de görebilirsiniz).

Belki de ona bakmanın daha basit bir yolunu öneririm. Pathfind yaparken, şimdiye kadar bulduğum tek bir en iyi yolu korumayın. Bunun yerine, en iyi 5 veya 10 yoldan oluşan bir küme toplayın. Belirgin aykırı değerleri atmak için bir eşik kullanın. Örneğin, en iyi yol hedefe ulaşmak için 20u'dan geçerse, bir sonraki en iyi yol 21u'dan geçer ve bundan sonraki yol 50u'dan geçer. En iyi yoldan% 20 daha büyük bir eşik ayarlayın ve bu yüzden aptalca daha uzun olduğu için 50u yolunu atın. Artık seçim yapabileceğiniz birkaç yol var ve bu yol grubundan rastgele seçerek aktörleriniz farklı kararlar alacak.

Ancak bu tür bilgileri standart A * arama ile elde edemezsiniz, bu yüzden algoritma üzerinde değişiklik yapmanız veya olası yollar kümesini toplamak için başka bir şey kullanmanız gerektiğini düşünüyorum.


1

Yinelenen az sayıda düşmanınız (veya düşman türünüz) varsa, onlara hareketlerini etkileyen kişilikler vermeyi deneyebilirsiniz. Büyük şeyler olmak zorunda değiller, sadece arada sırada ortaya çıkan şeyler. Buna iyi bir örnek Pac-Man hayaletleridir. A * 'nızı birkaç aracı hedefe ayırın. Belki bir düşman gerçekten aptal ve kolayca kaybolur, her üçüncü düğümde (doğrudan geriye doğru olmak üzere) rastgele bir yönde ilerler. Yaratıcı ol.

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.