python小练习(076):带AI的2048小游戏
本帖最后由 jerryxjr1220 于 2017-3-7 08:43 编辑之前的小练习编写过一个2048小游戏,今天在原来游戏的基础上添加AI(人工智能),让计算机自己可以判断怎么移动。
思路:
2048小游戏每一步其实都有最优策略,即“使每一步的空白格尽可能多,而格子中的数字尽可能大”,在最优决策的前提下,可以让计算机模拟走2~3步,(2步是4*4的16种情况,3步是4*4*4的64种情况,模拟再多没有意义,因为每一步产生的随机数会不同),然后根据所有的结果,判断哪一步是最优策略,然后就走这一步。每一步都依次循环。
******************** 2 0 4 8 ********************
Total Step: 322
Last step: d
---------------------------------------------
| | | | |
| 4 | 64 | 2 | 8 |
| | | | |
---------- + -------- + -------- + ----------
| | | | |
| 2 | 16 | 512 | 16 |
| | | | |
---------- + -------- + -------- + ----------
| | | | |
| 2 | 64 | 32 | 4 |
| | | | |
---------- + -------- + -------- + ----------
| | | | |
| 2 | 256 | 2 | 4 |
| | | | |
---------------------------------------------
电脑自己玩的结果(我目前是模拟了2步,16种情况,取最优解),基本上每局至少可以取到512,还有不少看运气成分。
用pyinstaller打包了exe文件,可以直接运行。
全自动化版本源代码:
**** Hidden Message *****
手动控制AI版本:按“I”由计算机自动走一步。
**** Hidden Message ***** 程序还有优化的空间,目前我使用的策略是:
剩余空格>最大值>最大值的数量。
当最大值比较小的时候完全是没问题的(比如小于512),但是当大于512以后,每一步就必须要非常小心,不然就可能前功尽弃。
还有就是当2个1024相遇,下一步就绝对是组合,不用再考虑剩余空格了,这一点也必须要优化。
{:10_254:} 来看看
{:5_91:}大神就喜欢AI 谢谢 你真是 非人哉
太厉害了 厉害了~()~ ...公子 发表于 2017-3-6 19:11
大神就喜欢AI
单做游戏的话,没啥意思,要玩就要玩点有技术含量的啊{:10_279:}
其实象棋或者围棋(AlphaGo)的AI设计思路都是一样的,整体的AI系统就是由"遍历系统"(搜索所有可行解),"模拟系统"(模拟所有可行解取得所有局面),"局面评估系统"(评估所有局面找到最优解,现在谷歌用的是深度神经网络系统)构成的。
如果我们也有一套可靠的系统,加上牛逼的硬件系统(普通电脑的运算能力不足以支持这么复杂的系统),那么开发我们自己的AlphaGo也是可行的。 好厉害,学习学习 {:5_91:}了解,复杂AI和简单AI原理上都差不多,但是复杂AI的实现还是很麻烦的,不但是硬件的性能,软件的算法、优化等等都很麻烦。菜鸡表示还在膜拜中! 默默献上膝盖{:10_336:} {:5_106:} 学习一下 1111111111 急切需要学习 哈哈
回复 厉害了 {:5_91:}