Re: [討論] 自動玩2048

看板Prob_Solve (計算數學 Problem Solving)作者 (十三)時間10年前 (2014/06/14 13:27), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/3 (看更多)
※ 引述《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。 普通的水準,但我也不想浪費太多時間在這上面,就上傳了。 -- 話說怎麼6/9還改官方程式啊,結果我沒看到公告,沒有及時修改程式,殘念。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.135.203.156 ※ 文章網址: http://www.ptt.cc/bbs/Prob_Solve/M.1402723649.A.76F.html
文章代碼(AID): #1Jczr1Tl (Prob_Solve)
討論串 (同標題文章)
文章代碼(AID): #1Jczr1Tl (Prob_Solve)