關於2048局面的價值判斷及ai思路?
01-22
標準2048(0.1概率4,0.9概率2),編寫一個ai的時候如何判斷不同局面的價值,編寫ai除了簡單的評估進行一步的價值評估還有什麼更好的實現方法?
作為曾經的2048愛好者和現役OIer,來回答一下這個問題...
目前我找到的表現最好的AI,10%出4,90%出2的無撤銷標準版本玩到32768的概率能夠達到30%多,比人玩的穩定性要強不少。
github地址:nneonneo/2048-ai最高分達到過83W多,接近65536。這裡放一張32768的截圖:三個權值矩陣如下:
16,15,14,139 ,10,11,128 ,7 ,6 ,5 1 ,2 ,3 ,416,15,12,4
14,13,11,3
10,9 ,8 ,2 7 ,6 ,5 ,116,15,14,4
13,12,11,3
10,9 ,8 ,27 ,6 ,5 ,1第一個能明顯看出來,就是爛大街的蛇形陣,屬於層疊陣型的一種。對於人來說,這是最好掌握的陣型。
第二個陣型名字叫SPD,以一個角落為中心,其他數字環繞著排列。之前談到的nneonneo寫的AI,大部分時間都使用的是這種陣型(那個AI並未有意設定陣型,只是愛好者們根據現象總結出來的)AI使用這種陣型時比蛇形陣穩定得多,也不容易出失誤,而對於人來說則很難掌握,容易失誤,不過也能玩到16384。第三個陣型名字叫ZSL,在3*3的區域使用層疊陣型,最外圈使用和SPD類似的方法玩。該陣依然總結自nneonneo寫的AI,對於AI來講使用這種陣型也比較穩定。在三種陣型加權作用下,AI就會表現出"選擇最適合當前局面的陣型進行遊戲"的行為。但有個大缺點,由於陣型比較相似,AI也容易陷入一種"中間陣型",而大大降低陣型的優勢,也更容易死。綜上,對於演算法,目前看來MAX-AVG搜索效果最好。對於估價函數,如果只是想讓AI玩到2048就結束,估價函數大可簡單粗暴地加權,成功率很高的。但如果想讓AI得到高分,可以參考參考nneonneo。感覺2048狀態這麼少,直接暴力搜索應該也不會太慢。。。有隨機的地方,就多隨機幾次。。不複雜
推薦閱讀:
※為什麼5%的CPU佔用會造成這麼大的性能損失?
※為什麼工控還在用c?
※C++中左值、右值與寄存器的關係是怎樣的?
※LOL盒子這類的輔助工具一般都是用什麼開發的?
※一個典型的遊戲循環是怎樣的流程?