Re: [討論] 自動玩2048

作者: bleed1979 (十三)   2014-06-14 13:27:26
※ 引述《bleed1979 (十三)》之銘言:
: ※ [本文轉錄自 C_and_CPP 看板 #1JcnqoJi ]
: 作者: noodleT (麵T) 看板: C_and_CPP
: 標題: [討論] 自動玩2048
: 時間: Fri Jun 13 23:47:59 2014
: 2048 BOT 應該是今天截止交件 ~ (小弟我沒參加)
: 不知道大家是怎樣決定出最好的一步?
: 我的做法是:
: 複製四組盤面 → 上下左右各走一次 → (累加)計算盤面分數 → 回傳方向
: ↑ │
: └──── 深度N層 ───┘
: 問題(先考慮 N=1 就好):
: 1.因為對方會隨機在盤面上放上 2、4 ,此方法上下左右僅各走一次,
: 無法表現出我方最不利的狀況。
http://infotecresearch.blogspot.tw/2014/04/2048_15.html
可能不是最優攻略,但至少是個可以達到2048的方法,相對繁雜計算而言。
如連結所描述,選定四個之中的一個角落,將反方向捨棄。
例如:
選定左上角為最大值,一路排下來形成
15 11 7 3
14 10 6 2
13 9 5 1
12 8 4
其中數字越大代表值越大。
只模擬左上下這三個方向,如果都不是有效方向才選擇往右。
: 2.計算分數如何最佳化?
: 總分考慮的點有:
: 左上角是否是最大的數字,a 分
: ●○ 黑圈●=?白圈○ 或 黑圈 =? 白圈*2,b 分
: ○
: 盤面為空格的數目,c 分
: a、b、c之間的比例應該為?
: 總分 = a+b+c ,或總分 = (a+b)*(c^2)?
我記得我好像只有計算合併的權重,移動卻沒合併不計分。
(另有試過合併 * 7,移動 * 3等等眾多比例)
移動不計分理由在於深度選擇3層的情況下,
第一次只有移動,可以在第2次第3次進行合併。
權重上當然要tune了。
: 3.(計算分數的方法二)枚舉出多組較佳盤面,計算相關性系數:
: 枚舉的盤面:
: 4 4 3 2
: 4 3 2 1
: 3 2 1 1
: 2 1 1 1 ,4代表很大的數字、1代表很小
: 遊戲盤面:
: 128 064 064 002
: 128 064 016 000
: 016 008 004 008
: 002 000 000 002
: ↓將遊戲盤面轉換成 1~4 的盤面。
: 128 轉成 4
: 064 轉成 4
: 032 轉成 3
: 如此等等......
: 這裡我是想用類似於模糊控制(模糊區間)的概念來做,但又牽扯到:
: a.最大數字是 2048 ,次大數字是 64
: b.最大數字是 2048 ,次大數字是 1024
: a、b 這兩個狀況又很不一樣,這裡遇到的問題是:
: 如何切割 1、2、3、4 所對應的區間範圍?
切割不是問題,
問題是怎麼判斷位置4的權重對數值關係一定會比位置3的關係更敏感。
原本我也有採取原po的盤面,但發現效果不彰,
於是我採取此文最上面的盤面15到1的方式。
計算權重數值比的關係也沒很難。
評估函數不外是
If there is a value on poxX bigger than a value on posY,
the total score is the total deep sum of the value of posX multiply weight.
在這樣的策略上,
即使posX和posZ where X > Z 都有三個可能可以有權重,
posX value比較大,一定會優先往這個方向。
我覺得是還好,因為破關和2048達成率這兩項一定要優先達到,
所以策略上擬採數字大者優先。
: 問題大概就是以上三點吧!
: 另外,
: 能不能只靠目前的盤面(不要偷嘗試走下一步)就可以推論出最佳方向?
我不能。所以採深度3。
以6/9之前的官方程式模擬的結果2048達成率為21/100,最高分4096。
普通的水準,但我也不想浪費太多時間在這上面,就上傳了。

Links booklink

Contact Us: admin [ a t ] ucptt.com