C语言实现各种人工智能算法,象棋人工智能算法的C++实现(一)

本文介绍了作者对棋类人工智能的兴趣起源,特别是受AlphaGo启发后,决定实现象棋人工智能。强调算法基于穷举而非深度学习,适合象棋局势判断。文章以Qt5.5.1为工具,探讨如何抽象棋盘和棋子,并提供部分关键函数的框架,如检查棋盘上是否存在棋子、计算棋子间棋子数量,为后续的走法算法打下基础。
摘要由CSDN通过智能技术生成

点击上方“程序人生”,选择“置顶公众号”

第一时间关注程序猿(媛)身边的故事

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

推荐下小编的C++学习群;513801371,不管你是小白还是大牛,小编我都欢迎,不定期分享干货,包括小编自己整理的一份2019最新的C++和0基础入门教程,欢迎初学和进阶中的小伙伴。

每天晚上20:00都会开直播给大家分享C++知识和路线方法,群里会不定期更新最新的教程和学习方法(进群送2019C++学习教程),大家都是学习C++的,或是转行,或是大学生,还有工作中想提升自己能力的C++党,如果你是正在学习C++的小伙伴可以加入学习。最后祝所有程序员都能够走上人生巅峰,让代码将梦想照进现实,非常适合新手学习,有不懂的问题可以随时问我,工作不忙的时候希望可以给大家解惑

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

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

既然实现象棋人工智能的算法的本质是穷举,那么就要找到所有的通路,所谓的通路就是能够走棋的那些“路”们,走不通的那些“路”就要直接被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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值