象棋人工智能算法的C++实现(一)

本文作者受AlphaGo启发,决定实现一个基于穷举的象棋人工智能算法。文章介绍了算法不依赖于深度学习,而是寻找最优走法。采用Qt5.5.1作为编程工具,首先对棋盘和棋子进行抽象,接着讨论如何根据象棋规则实现棋子走法的前期函数。
摘要由CSDN通过智能技术生成

 

前言:自AlphaGo战胜世界著名九段围棋手李世石之后,我就对棋类人工智能产生了极大的兴趣,并想要自己实现象棋的人工智能。然而那个时候我还在读高二,没有这么深厚的代码基础,所以那个时候也就只能想想了。但是现在不一样了,通过学习编程,已经可以让我在棋类人工智能这个领域向前探索了。

小编推荐一个学C语言/C++的学习群:948954484,入群即送C/C++全套学习资料,满满的干货!

首先说明一下本系列博客描述的人工智能算法不是基于机器学习、深度学习这么高深的知识,而是一种穷举找最优走法的算法。之所以AlphaGo不能使用这种算法战胜李世石,是因为围棋棋局局势的判断是极为复杂的,想要穷举所有的情况,全世界所有的计算机一起运行一百万年也无法找到最优走法。所以DeepMind团队的大佬就想出了另一种解决方案就是让AlphaGo自己学习高水平棋手间的对局,从而提升AlphaGo的棋力。然而象棋的棋局判断还是比较容易的,杀掉对面的老将就可以获胜,杀掉对面的车马炮等棋子就可以提高自己的胜率/降低对方的胜率。具体的算法在之后的篇章详细讲解。

 

实现本系列博客中算法的编程工具是Qt5.5.1。

小编推荐一个学C语言/C++的学习群:948954484,入群即送C/C++全套学习资料,满满的干货!

既然实现象棋人工智能的算法的本质是穷举,那么就要找到所有的通路,所谓的通路就是能够走棋的那些“路”们,走不通的那些“路”就要直接被pass掉。

 

1.先把棋盘抽象出来,象棋棋盘有10行9列,行标设为0~9,列标设为0~8。以左上角的坐标为(0,0),假设初始时上方为红棋,下方为黑棋。则初始时所有棋子的坐标为:

 

车1(红方):(0,0);车2(红方):(0,8);

 

马1(红方):(0,1);马2(红方):(0,7);

 

相1(红方):(0,2);相2(红方):(0,6);

 

士1(红方):(0,3);士2(红方):(0,5);

 

将(红方):(0,4);

 

炮1(红方):(2,1);炮2(红方):(2,7);

 

兵1(红方):(3,0);兵2(红方):(3,2);兵3&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值