加载中…
个人资料
david自由之路
david自由之路
  • 博客等级:
  • 博客积分:0
  • 博客访问:2,349,040
  • 关注人气:7,925
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

闲聊AlphaGo的AI算法

(2016-03-11 17:19:56)
标签:

杂谈

我上大学的时候也是AI迷,曾用C语言写过一个五子棋的AI对弈程序,能下赢五子棋新手,做法是搜索树加剪支,虽然五子棋也是19*19的棋盘,但是算法简单很多,因为

   1、不可能乱下,比如和现在的棋间隔三个子以上,就可以认为不合理,不去计算。

   2、乱下很快会输,比如人家冲4你不堵,直接就输,只要遇到输的情况,搜索树就可以剪枝了。

    

   但围棋和五子棋不一样

   1、围棋可以落的子很多,你可以说这么走不合理,但是一定会输吗,也不一定。

   2、围棋很难剪枝,因为双方乱下,也不会很快输棋,你认为差棋,也许是虚竹自填一目的好棋呢?

   3、不能算的太浅,如果和职业选手对弈,不向后计算50步,就说不上算力。

   这就导致搜索树叶子太多了,全遍历估计要几百亿年都算不出来。

    安全剪枝不行,能不能非安全剪枝?也就是放弃最优下法,只要战胜对手就行,毕竟人类在下棋的时候,第一步不会考虑361种落子变化。

    好了,那就模拟人的思维,做一个走棋程序,把意图分几类,比如局部定型,攻杀,抢大场,围空,打入,浅消等,然后针对当前局面,把选择点缩小到几十步,而向下搜索的时候,可以进一步减少选择范围,毕竟人类在下棋的时候,第一步的变化会想的很多,但是十几步以后的选择,估计也就是几种选择。

    这样大大减少了搜索树的叶子节点。

    但这样还是有问题,因为这个走棋程序是人想出来的,很可能不完善,设计者觉得电脑应该在这10步中选择,也许对于高手来说就是愚蠢,为了解决设计者自身水平影响棋力,增加学习程序,如下

    1、同时搞N个走棋程序,模拟各种高手的走法。

    2、每个走棋程序,设置M个参数,模拟某个高手对类似棋的不同应变。

    这样就出来M*N个走棋风格,通过电脑互相下棋,把不合理的M和N淘汰掉

   但我想最后留下的M和N,应该还会有很多个,是不是还有判断程序,在合适的盘面选择合适的M和N,比如盘面领先,就选择保守类的M和N来守卫胜利,而盘面落后,就选择攻击类的M和N来决胜负,似乎Alpha Go有遇强则强的特征。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有