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