※ [本文转录自 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 ,此方法上下左右仅各走一次,
无法表现出我方最不利的状况。
2.计算分数如何最佳化?
总分考虑的点有:
左上角是否是最大的数字,a 分
●○ 黑圈●=?白圈○ 或 黑圈 =? 白圈*2,b 分
○
盘面为空格的数目,c 分
a、b、c之间的比例应该为?
总分 = a+b+c ,或总分 = (a+b)*(c^2)?
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 所对应的区间范围?
问题大概就是以上三点吧!
另外,
能不能只靠目前的盘面(不要偷尝试走下一步)就可以推论出最佳方向?