Farklı hareket türlerini işleyecek yol bulma algoritmaları var mı?


12

BattleTech masa oyunu simülatörü için bir bot geliştiriyorum http://en.wikipedia.org/wiki/BattleTech , sıra tabanlı.

Tahta altıgenlere ayrılmıştır, her birinin farklı bir arazi tipi ve yüksekliği vardır. Diğer robotları yok etmek için üzerlerinde hareket eden bir robot kullanıyorsunuz.

Ben sadece Dijkstra ve A * yol bulma algoritmalarını biliyorum, ama sorun şu ki 3 hareket türü vardır: yürümek, koşmak ve birkaç altıgenler atlamak (her birinin kendi kuralları vardır). Yürümek ve koşmak neredeyse aynı.

En iyi yol bir kombinasyon veya her bir hareket türü olabilir. Http://megamek.info/sites/default/files/isometric_view.png haritasına bir örnek:

Bu karmaşık yol bulma için iyi bir algoritma veya her hareket türü için A * sonuçlarını birleştirmenin bir yolunu biliyor musunuz?


Bence bu genellikle A * ile ağırlıklı bir yolun akıllıca manipülasyonu ile işlenir (ağırlık bu yolun / karenin maliyetidir). Örneğin, atlama tercih edilirse, yürümekten (örneğin 10) daha düşük bir ağırlık alır (örneğin 5).
ashes999

Üç tür hareket tam olarak nasıl farklıdır? Birleştirilebilirler (A döşemesine yürüyün, sonra B'ye gidin ve aynı dönüşte C'ye atlayın)? Evet olduğunda, oyuncu döşemesini A döşemesinden B döşemesine kadar her zaman en ucuz yöntemi kullanarak engelleyen kurallar nelerdir?
Philipp

@Philipp Evet, A * kullanırken olabilirler. Her hareket türüyle taşıyabileceğiniz her döşemeyi açık listeye ekleyebilir, ardından her birinin fiyatına + hangisinin daha da ilerleyeceğini belirleyebileceğiniz iyi bir sezgisel olarak ekleyebilirsiniz.
akaltar

@Philipp Hayır, her turda yalnızca bir tür hareket kullanabilirsiniz.
alexvisio

Yürüme: yükseklik farkı az olan altıgenler arasında hareket edin. Koşun: aynı ama uzağa gidebilirsiniz, ancak ısı üretecek ve doğrulukta çekimi kaybedeceksiniz (bu yüzden her zaman en iyisi değildir). Zıpla: Etrafta yürümek yerine engelleri (duvar veya nehir) atlayabilirsiniz.
alexvisio

Yanıtlar:


10

Hem Dijkstra hem de A * kenarlara bir karodan diğerine farklı maliyetler (= bağlantılar) ekleyebilir. Ayrıca, her biri farklı bir maliyetle birden fazla kenara iki düğümün (= fayans) bağlanmasına izin verir.

Alternatif atlama modu, atlama mesafesindeki her bir döşemeden her bir döşemeye alternatif bir doğrudan kenar olduğu anlamına gelir. Ancak bir makine bir sırayla yürüyebileceği veya atlayabileceği için, bu kenarı kullanmanın maliyeti, tüm bir dönüşün hareket noktaları ve bu dönüş zaten bir hareket olduğunda mevcut dönüşün kalan noktaları olacaktır.

Açıklamanıza göre, yürüme ve koşma kararı, yol seçimi konusunda fazla bir fark yaratmıyor, ancak daha ziyade stratejik kararlar vermek gibi görünüyor. Oyuncu, koşuya başvurmadan mevcut dönüşte hedefe ulaşıldığında kesinlikle yürüyebilir. Ancak aksi takdirde, hesaba katılması gereken birçok faktör vardır:

  • mevcut ısı seviyesi ve soğumadan önce savaşa katılma olasılığı
  • bu turda yapılması gereken atışların zorluğu
  • Hedefe hızla ulaşmak ne kadar stratejik bir öneme sahip

Bu kararı vermek için zor bir kural yoktur. Yapabileceğiniz en iyi şey sezgisel bir yaklaşım kullanmaktır. Tüm koşullara pozitif veya negatif puan değerleri atayın, bunları toplayın ve sonucun pozitif mi negatif mi olduğunu görün.

Yol bulmada dikkate almanız gereken başka bir faktör daha vardır: Bazı koşullar altında, bir mekaniğin belirli konumlardaki sırasını sona erdirmekten kaçınması mantıklı olabilir. Tehlikeli bir alandayken, A'dan B'ye gitmek için üç tur kullanmak, ancak kapaktaki her birini bitirmek sadece iki kullanmaktan daha iyi olabilir, ancak her birinin sonunda maruz kalmak. Ya da olmayabilir. Koşullara ve kesin oyun mekaniğine bağlıdır. Bu yine, buluşsal yöntemlere dayanarak vermeniz gereken stratejik bir karardır. AI'yı bu hareketi yapmasını engellemek için tehlikeli bir kiremit dönüşüne son veren kenarlara ek bir maliyet ekleyerek bunu temsil edebilirsiniz.

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.