SORU
12 Mart 2014, ÇARŞAMBA


Oyun 2048 için en uygun algoritma nedir?

Son zamanlarda oyun 2048 sendeledi. Dört yönden herhangi bunları yapmak için "daha büyük" fayans. taşıyarak benzer fayans birleştirme Her hamleden sonra yeni bir fayans ya da 2 4 değeri ile rasgele boş konumuna görüntülenir. Oyun tüm kutuları dolu ve Fayans birleştirebilirsiniz hamle vardır hiç bir zaman sona erer, ya da 2048 değerine sahip bir kiremit oluşturun.

Bir hedefe ulaşmak için iyi tanımlanmış bir strateji takip etmek gerekir. Yani, bunun için bir program yazmayı düşündüm.

Benim şimdiki algoritması:

while (!game_over) {
    for each possible move:
        count_no_of_merges_for_2-tiles and 4-tiles
    choose the move with large number of merges
}

Ne yapıyorum. herhangi bir noktada, ben denemek için birleştirme taşlarla değerleri 2 4, yani, ben denemek zorunda 2 4 fayans, asgari olarak mümkün. Eğer bu şekilde çalışırsanız, tüm diğer taşlar otomatik olarak birleştirilmiş elde edildi ve bu strateji iyi görünüyor.

Ama, ben aslında bu algoritma kullandığımda oyun sona erer önce sadece yaklaşık 4000 puan almak. Maksimum puan AFAIK benim şimdiki puan daha büyük olan 20.000 ' den biraz daha fazla puan. Yukarıda daha iyi bir algoritma var mı?

CEVAP
13 Mart 2014, PERŞEMBE


Diğerleri bu konuyu bahsetmiş bu programı AI, ben yazar değilim. action AI veya source okuma görüntüleyebilirsiniz.

Şu anda, bu program çok mükemmel olmasa hamle başına zaman düşünme, yaklaşık 100 milisaniye (henüz!) verilen bilgisayarımda tarayıcı ile win javascript çalışan oranı hakkında elde oldukça iyi bir performans sergiliyor.

Çünkü oyunu bir ayrık durum uzayı, mükemmel bilgi, turn-tabanlı oyun gibi satranç ve Dama, aynı benim yöntem bu olmuştur kanıtlanmış iş bu oyunlar, yani minimax search alpha-beta pruning. Beri orada zaten bir sürü bilgi bu algoritma orada, ben sadece şey için iki ana sezgisel bunu kullanmak içinde static evaluation function ve resmileştirmek birçok kurum ve diğer insanların dile getirdi buraya.

Monotonicity

Bu sezgisel fayans değerleri ya da birlikte Sol/Sağ artan azalan ve yukarı aşağı yön/alınmasını sağlamaya çalışır. Bu sezgisel yüksek değerli çini bir köşede kümelenmiş olması gerektiğini yalnız Diğerleri bahsetmiş bu sezgi yakalar. Genellikle küçük yetim alıyorum fayans değerli engeller ve Yönetim Kurulu çok düzenli, basamaklı küçük kiremit ve büyük kiremit içine dolmaya devam edecektir.

Burada çok monoton bir kılavuz bir görüntü var. Eval fonksiyonu diğer sezgisel göz ardı ve sadece monotonicity göz önüne set ile algoritmasını çalıştırarak elde ettim.

A perfectly monotonic 2048 board

Düzgünlüğü

Yukarıdaki sezgisel yalnız hangi komşu fayans değeri azalıyor yapıları oluşturmak eğilimindedir, ancak birleştirme için tabii ki, komşu fayans aynı değeri olması gerekir. Bu nedenle, düzgünlük sezgisel sadece değeri komşu fayans arasındaki fark, bu hesapla ve en aza indirmek için önlemler.

Hacker Haberlerde bir yorumcu grafik teorisi açısından bu fikrin an interesting formalization verdi.

İşte this excellent parody fork Tamamen pürüzsüz ızgara, bir nezaket bir görüntü var.

A perfectly smooth 2048 board

Ücretsiz Fayans

Ve son olarak, seçenekler oyun tahtası çok sıkışık olduğunda çabuk bitse bu yana çok az serbest taş için bir ceza vardır.

Ve işte bu! Bu kriterlerin optimize ederken oyun alanı arama iyi performans verir dikkat çekici. Bunun yerine açıkça hareket kodlu bir strateji gibi genel bir yaklaşım kullanarak bir yararı algoritma genellikle ilginç ve beklenmedik çözümler bulabilir. Eğer sen dikkat et çalıştırmak, genellikle şaşırtıcı ama etkili hamle, birden karşı binada kalmış olan geçiş gibi olacak.

Düzenleme:

İşte bu yaklaşımın gücünün bir göstergesi. Çini değerleri olacak 2048 ulaştıktan sonra tuttu) ben kapakları açılmış ve burada sekiz denemeden sonra en iyi sonuç.

4096

Evet, bu bir 2048 yanında 4096. =) Aynı gemide zor 2048 kiremit üç kez elde ettiği anlamına gelir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • David Wills

    David Wills

    31 Aralık 2007
  • infiniTuts

    infiniTuts

    18 Ocak 2012
  • Kiddyzuzaa

    Kiddyzuzaa

    25 ŞUBAT 2014