King of the Hill botları için ipuçları


12

King of the Hill yarışmasına katılacak bir bot oluşturmak için hangi genel ipuçlarınız var? Botunuzu yaratma konusundaki zorlukları dikkate almak için hangi stratejileri kullanıyorsunuz? Hangi veri yapılarını en yararlı buluyorsunuz?

Lütfen cevap başına bir ipucu gönderin.


16
Bunun özel probleme çok fazla bağlı olduğunu hissediyorum.
Monica'nın Davası

@ QPaysTaxes Bunu diğer ipuçları sorularının çoğundan hemen sonra modelledim. Bu soruyu daha iyi hale getirmenin bir yolu var mı? Ayrıca, bu eski ipuçları sorularının da düzeltilmesi gerekiyor mu?
mbomb007

Daha eski ipuçları soruları anlayabildiğim kadarıyla dillere dayanmaktadır, bu da ipuçlarının evrensel olduğu anlamına gelmez, ancak bunları kullanamayabilirsiniz. Bu soru, tamamen meydan okumaya bağlı olduğu "Code Golf zorlukları için ipuçları" konusuna daha çok benzemektedir. Bununla birlikte, aşağıdaki cevapların kanıtladığı gibi, birkaç evrensel şey vardır. Çatıştım.
Monica'nın Davası

2
Zaten bu farklı sorulara "golf için ipuçları (lang)" kadar bağlı olduğunu düşünüyorum, çünkü yine de farklı zorluklarda birçok farklı dil özelliği kullanıyorsunuz
Yıkılabilir Limon

Yanıtlar:


4

Nash Equilibria'yı Bulmak

KOTH nispeten basit bir karar kümesi içerdiğinde, sadece birkaç oyuncuyu (tipik olarak 2) içerdiğinde ve belirleyici olduğunda bu çok önemli bir kavramdır. Bir Nash dengesi bir "gridlock" pozisyonunu tanımlar: eğer iki oyuncu iki stratejisine karar verdiyse, iki oyuncu bu pozisyonlarda etkin bir şekilde kilitlenir: her iki stratejisini değiştiren oyuncu sadece ek güvenlik açıkları yaratır.

Nash dengesinin önemli olduğu oyunlara örnekler:

  • "Rakipsiz" bir stratejinin rastgele oynadığı Rock-Paper-Scissors (-Lizard-Spock)
  • Bir denge "spektrumu" olan Morra . Peter Taylor onun cevabını iyi bir örnek yazdı buraya .
  • Mahkum İkilemi, "herkes kaybeder" gridlock sahip olduğu için önemli bir oyun

Bir denge nasıl bulunur

Bir denge bulmak aslında çoğu basit oyun için oldukça basittir ve genellikle oldukça sezgiseldir. İnternette çeşitli yöntemlerle ilgili bir ton detay bulunabilir. Normalde uygulanabilir olan temel kavram, iki oyuncunun kullanabileceği olası stratejilerin bir listesini oluşturmaktır (oyun tarafından sağlanan seçenekler). Bir stratejinin diğeri tarafından "baskın" olması durumunda, bu strateji listeden çıkarılabilir ve işlem tekrarlanır. "Hakimiyet" ile ifade etmek gerekirse, eğer A stratejisi, kalan tüm rakip stratejilere karşı her zaman B stratejisinden eşit veya daha iyi bir sonuç verirse, B stratejisi listeden çıkarılabilir.

Örnek: Taş-Kağıt-Makas

RPS'de "karışık" denge denilen bir şey vardır, yani bir dağılım söz konusudur. Aynı hareketi tekrar tekrar oynamaktan ziyade (hızlı yenilgiye yol açacak), denge rastgele bir dağılımda 1/3 taş, 1/3 kağıt ve 1/3 makas oynamaktır. Rastgele oynarsam, rakibimin benden bir avantaj elde etmek için yapabileceği hiçbir şey yoktur. Rakibim rastgele oynamamayı seçerse, bu sadece onun için bir güvenlik açığı yaratır.

Karışık dengeye sahip oyunlar muhtemelen PPCG'de en yaygın olanıdır, çünkü birçok form alabilirler ( saf bir denge ile düşünebileceğim tek ilginç oyun mahkumun ikilemidir ). Karışık dengenin düzgün bir şekilde rastgele olması gerekmediğini, her seferinde aynı hareketi oynamaktan başka bir şey olmadığını belirtmeliyim .

Bu bilgileri kullanma

Bir oyunun Nash dengesi, genellikle çalıştırmayı denemeniz gereken "temel çizgiyi" temsil eder. RPS'de, rastgele oynamak paketin ortasında bir bitiş noktasını garanti eder. Zirveye çıkmak için diğer oyuncunun zayıflıklarını belirlemeye başlamalısınız.

Bunu yapmak için, rakibin zayıflıklarından emin olmadığınızda dengeye bağlı kalmalısınız. Bu zayıflıklar belirlendikten sonra (rakibinizin dengede olmadığını tespit ettiniz), rakibinizden yararlanmak için hafifçe dengeden çıkmanız gerekir. Bu eylem, sırayla, kendi başınıza zayıflıklar yaratır. Daha sonra rakibinizin stratejisini ne zaman değiştirdiğini tespit etmelisiniz, böylece saldırıyı durdurabilir ve rastgele oyuna devam edebilirsiniz.

Dengeden varyasyonu saptama

Bu oldukça zor ve ben uzman değilim. Varyasyonlar birçok şekilde olabilir:

  • Herhangi bir sebep olmadan başkalarının üstünde / altında bazı seçenekleri tercih etmek, örneğin makastan iki kat daha fazla kaya oynayan bir RPS oynatıcı veya kağıt oynamaktan kaçınmak gibi. Bazı nispeten basit istatistikler bunu tespit edebilir.
  • Mevcut bir hareketi geçmiş hareketlerden, bazı öngörülebilir modellere dayandırmak. Bu, kopya kedileri, "son hamleni yenenleri yener" botlarını veya "bisiklet" botlarını içerir. Bu hareketlerin tespiti için ek bir mantık gerekir, çünkü hamleler rastgele olmasa da toplam hareket dağılımı eşit olarak dağıtılabilir. Hareketlerin kaydını tutmaya ve "2 tur önce yaptığım hamle ve rakibimin şimdi yaptığı hamle" ve "1 tur önce yaptığı hamle ve şimdi yaptığı hamle" gibi korelasyonları bulmaya çalışmalısınız .
  • Hareket dağılımı sizinkine dayanan botlar. Kadar bu botlara içinde güvenlik açığı genellikle (ölçülebilir bir miktarda) oluşturulmaz sonra sahip kendinizi rastgele dağılımından değişiyordu. Genellikle kendi botunuz bu kategoriye girer.

3

Botunuzu çalıştırma gereksinimleri hakkında spesifik olun

Botlar çeşitli dillerde (ve bu dillerin sürümleri) yazılabilir, bu nedenle aşağıdaki durumlarda herkese yardımcı olur:

  1. OP'nin belirttiği ortamda (veya olabildiğince yakınına) test edin.
  2. Mümkünse çeşitli ortamlarda test edin (çalıştırmak isteyen diğerlerine yardımcı olmak için).
  3. Kullandığınız dil ve sürüm hakkında net olun ve botunuzu nasıl çalıştıracağınızı açıklayın.

Bonus olarak: daha az bilinen bir dil kullanıyorsanız, insanların çalıştırmak için ikili dosyayı / kaynağı indirebilecekleri yere bir bağlantı yapın.


2

Ekip tabanlıysa, ekibinizle birlikte çalışın

Genellikle ekibinize yardımcı olacak görevleri tamamlamak için tek başına çalışan bir bot yazabilirsiniz, ancak oyuna girip çıkarken koordine etmeniz çok daha büyük bir avantajdır. Bunun en iyi örneği Red vs. Blue - Pixel Team Battlebots'da görülebilir .

Geliştirme sırasında ekipler sohbet edebilir ve botlarının tek başına daha iyi çalışması için nasıl koordine edileceğini tartışabilirler. Teknik olarak aynı bot olmasına rağmen, SphiNotPi3000 kendisiyle başka biriyle birlikte çalışmak için yazılmıştır ve kendi başına olsaydı karşılaşacağı zayıflıkları açıklayan yollarda hareket edebilmiştir. Sonuçta, diğer tüm takıma karşı sadece ikisi olsa bile , savaş alanına neredeyse tamamen hakim olabildiler .

Yani oyunun dışında, hangi stratejileri kapsayacaklarını takım arkadaşlarınızla planlayın ve koordine edin. Belki birisinin haritayı çapraz olarak tarayan bir botu vardır? Sizinkinin yatay olarak taranmasını sağlayın (sadece bir örnek). Oyunun içinde, meydan okuma ekip iletişimine izin veriyorsa, bundan yararlanın. Örneğin savaş botları oyununda, takım arkadaşlarınıza görüş alanlarının dışındaki botların pozisyonu hakkında bir mesaj gönderebilir ve daha sonra bu sinyalleri kullanmak için botlarını uyumlu bir şekilde yazmaya teşvik edebilirsiniz.


2

Bir meta strateji kullanın

Hemen hemen her akıllı strateji için, onu yenen başka bir strateji daha vardır: Örneğin, rakibiniz bir sonraki hamlenizi tahmin etmek ve sonra buna karşı koymak için tam olarak aynı mantığı kullanabilir. Artık rakibinizi tekrar tahmin etmeye çalışabilirsiniz, ancak ne zaman duracağınızı bilmek zor .

Bir başka sorun, akıllı bir rakibi ikinci olarak tahmin etmede iyi bir stratejinin, daha basit rakiplere karşı optimal olmaktan uzak olabileceğidir.

Bunu nasıl çözebilirsin? Botunuzun hangi stratejiyi kullanacağına karar vermesine izin verin!

Bunun için, botunuza farklı stratejilerin bir repertuarını vermeye başlarsınız. Daha sonra, her hareketten önce, botunuz şu ana kadar oyunun kayıtlı geçmişine bakar ve bu farklı stratejilerin nasıl ilerlediğini değerlendirir. Daha sonra en başarılı olanı resmeder.

İlk etapta güçlü stratejiler dahil etmek, botunuza seçim yapabileceğiniz iyi seçenekler sunmanıza yardımcı olacaktır. Ama aynı zamanda gerçekten basit olanları da eklemelisiniz, çünkü aptal rakiplere karşı genellikle daha iyi çalışırlar.

Aşırı takılmayı önlemek için (örneğin, rakibin rastgele hareket ettiği bir deseni yenmeye çalışmak) veya başlangıçta henüz çok fazla bilgi bulunmadığında belirli stratejileri tercih etmek için bazı stratejilere önyargı vermeyi düşünebilirsiniz.

Tabii ki, bu yaklaşım yalnızca belirli türdeki tepelerin kralı mücadelelerinde işe yarayacaktır. Taş-Kağıt-Makas-Kertenkele-Spock maçında benim için gerçekten iyi oldu . Diğer oyunlarda, belli bir stratejinin gerçekten oynanmamış olsaydı nasıl sonuçlanacağını değerlendirmek neredeyse imkansız olabilir.

Bu meta yaklaşımın aşırı bir biçimi (hile ile ilgili sınırlar), diğer tüm botların bilinen davranışlarını kendi botunuza dahil etmek olacaktır, böylece hareketlerini mükemmel bir şekilde tahmin edebilir.


diğer botların bilinen davranışlarını kendi botunuza dahil etmek, sadece hile sınırını değil , hile yapmaktır. İzin verilmeyen bir boşluk olduğuna oldukça eminim.
mbomb007
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.