吴昊品游戏核心算法(第二季首映式)Round 11 —— 吴昊教你玩Tic-Tac-Toe

作为首映式,首先,纠正一下以前的错误吧,在吴昊系列的 “称硬币游戏AI”中,我说的时间复杂度是O(n),实际上有问题,首先,确实将所有的硬币都遍历了一遍,但是,每遍历一个硬币的时候,strchr函数 将遍历一个天平上的所有硬币,这样是O(n/2),还没有完,因为称的次数与硬币的数目是正相关的,那么,至少是O(n^2)以上,一篇论文中用信息熵来 解决这个问题!,得到如果N个硬币有一个(可能没有)为假币,至少要称量K=log(2N+1)/log3次,那么,可以得到时间复杂度的上限为 O(n^2log3n)

 

 以上的图为比尔盖茨八年级的时候,他在向他的同班同学SHOW自己开发的AI作品,没有错,就是Tic-Tac-Toe,中文为井字游戏,是由三行三列组 成的OOXX的游戏(我想起教我随机过程的那个老师了,我两次没来,他画了两个X,然后对着全班同学说我就是个XX),如下图所示:

 

 这是一款基于android的Tic-Tac-Toe的游戏界面,先走后走的人通过O,X分别在屏幕上标记(可以通过触摸onTouch实现),哪一个人 首先形成在一行,一列或者一个对角线上形成三连续,那么,他就获胜了。规则很简单,就是这个游戏的玩法。在介绍AI之前,我想先谈谈过年的一些体会。我有 一个妹妹,她在美国出生的,所以是美国的国籍,我和她一起在过年的时候玩过Tic-Tac-Toe,她大约小学二年级,当然也木有接触什么与博弈,AI等 有关的东西。我和她下Tic-Tac-Toe的时候,发现有两点是目前的AI系统所缺乏的(1)一个人在玩了多次都是失败的时候,会尝试考虑作弊,当然, 这是一种心理作用,而在计算机的AI中尚且没有体现(2)目前的机器学习暂时处在很肤浅的阶段,也就是通过一些诸如遗传算法之类的东西进行不断学习,但 是,真正的人在玩了多次Tic-Tac-Toe之后是否也如计算机一样呢?她在玩到第10盘左右的时候开始觉得先走的优势很大,开始尽量要求她先走(实际 上,如果一个人先走的话,根据概率,这个人50%是必胜的,这一点之后再分析吧),而这一点,目前的计算机能不能自主学习到呢?

 关于本软件的AI,方法很多,如果直接告诉计算机对于对方每走一个位置,自己的手筋在哪里(这里挪用了一个围棋术语,表示最大利用率的子),这当然是时间 效率最高的方法,但是,如果规则改一改,或者,将规模由3*3扩大,这样就难办了。所以说,比较客观的还是极大极小博弈啊,搜索(BFS或DFS)之类 的,我之后会有介绍(都属于Round 11的内容吧!)作为首映式,到此为止了……

 玩过几盘之后可以发现,如果先走的话,尽量占据中心地位(也就是最中央的部分,这样可以更方便地掌控全局),然后,如果对方走边而不走角的话(角的利用率应该更高),你就可以赢了!

 

posted on 2013-02-28 14:57  吴昊系列  阅读(206)  评论(0编辑  收藏  举报

导航