基于“博弈树”的AI五子棋

python讨论qq群:996113038


代码及相关资源获取:

后台回复:五子棋,获取源代码


开发工具:

python3.6.4。

需要安装的库:graphics,time。

可以联系群主安装


效果演示:


基本原理

我们用到了博弈论的算法,下面我简单介绍一下博弈树:

博弈树类似于状态图和问题求解搜索中使用的搜索树。在AI五子棋中,博弈树的节点对应于某一个器具,其分支表示走一步棋。根部对应于开始位置。其叶节点表示对弈到此处结束。竞赛的结果可以是赢,输,平。下面就是一棵典型的博弈树:

如果按照暴力算法,将一局五子棋的所有可能性全部列举出来,理论上讲肯定是可以赢的。但是这样会耗费巨量的计算力。所以枚举法是不可行的。剪枝就是减去一些完全没有意义的走法。大大降低计算量。


部分代码

我们需要设定一个目标函数,计算未来几步怎么走能够使这个目标函数最大化。这样我们就需要对每一种走法的“分”做一个评估,这里的“分”代表的是这个走法产生的棋局优势。

首先我们要写函数评估局势,下面是一个例子:这是判断四个方向里,活四局势的个数。

#该点四个方向里(即v不区分正负),活四局势的个数
def liveFour(x,y):
    key=num[x][y]; s=0
    for u in range(4):
        samekey=1
        samekey,i=numofSamekey(x,y,u,1,key,samekey)
        if(not downOk(x+dx[u]*i,y+dy[u]*i)):
            continue
        samekey,i=numofSamekey(x,y,u,-1,key,samekey)
        if(not downOk(x+dx[u]*i,y+dy[u]*i)):
            continue
        if(samekey==4):
            s=s+1
    return s

我们还要写出:冲四局势个数,四个方向里活三,以及八个方向里断三的个数,该点在四个方向里,是否有六子或以上连线,统计在u方向上,和key值相同的点的个数,即和key同色的连子个数。

估价函数基本规则如下:

我们不断让机器的分数越来越高就行了。


参考资料:

论文:《基于博弈树的五子棋算法研究》---罗景,叶俊民,赵良等

参考来源:https://github.com/hfq0219/wuziqi

扫描下方二维码,关注公众号

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值