发一个解决2048游戏的程序

zoologist 2014-04-14 10:00:37
利用算法解决2048游戏

在 http://stackoverflow.com/questions/22342854/what-is-the-optimal-algorithm-for-the-game-2048/22389702#22389702 上有很多大牛提出了自己的解决方法。

ovolve 使用了 a-b剪枝,这是典型的用在博弈上的算法,比如:之前的中国象棋就是用了这个方法。

Nicola Pezzotti 的特点在于贡献了一个很简易的计算局面整洁度的算法.....

问题是上面的都是 js 语言编写的,对于我来说很难理解,并且很难进行评估。

个人感觉算法本身不难,困难的是如何理解他们使用的数据结构,更具体来说困难度在于如何进行局面评估的算法(这个问题中,需要对盘面顺序程度和整体分数进行评估)。

最终,目光落在 nneonneo 的算法上。他使用了 bit-map 的技术,能够充分利用空间:每一个格子从 0-15 ,对应着 2^0 - 2^15 ,整个局面用64位即可表示。这样做大大

降低了传递参数之类的耗时,客观上节省了时间。此外,还使用数组直接存放了行列的分数,评估行列分数直接让数组值相加即可,这是非常经典的空间换时间的做法。

他的程序可以在他的 git上下载到 https://github.com/nneonneo/2048-ai ,我这里也存了一份可以在 vs2008下编译通过的

nneonneo

我的程序完全仿照了他的程序,只是没有实现他用来剪枝的泛型 typedef std::map trans_table_t; 因为我使用的 Delphi 2010 没有对应的功能,

在我的 I5 2450 上,一步大约需要2s左右。

呃,csdn有字数限制......

程序可以在 http://www.lab-z.com/2048ai/ 看到

后面会进行的改进:

1.使用整数代替程序中的single进行局面分数的评估。

2.实现nneonneo的剪枝算法,计划使用HouSisong大牛的DGL泛型库 http://blog.csdn.net/housisong/article/category/152693
...全文
1488 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyhoo163 2014-12-28
  • 打赏
  • 举报
回复
2048益智游戏,赞 。
baidu_24880435 2014-12-27
  • 打赏
  • 举报
回复
为什么看不到你写的?
dyonggan 2014-09-25
  • 打赏
  • 举报
回复
好的算法能提高不少性能呢。 开发2048是有挑战性,我只会玩,嘿嘿
  • 打赏
  • 举报
回复
不知何为2048游戏。
lonelyrains 2014-09-24
  • 打赏
  • 举报
回复
在我的i3上,用nneonneo的代码,windows+cygwin,步骤消耗时间从0.07~4.65s之间不等。 我已经算到了这里: 1320 1232 cb54 ed86
jenhon 2014-04-15
  • 打赏
  • 举报
回复
接分,不用谢。

16,743

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧