关于棋盘棋子的实现逻辑我就不多说了,大家可以看源码,并不复杂,说说AI部分的实现吧:

我的实现思路是:

当玩家走下一步棋的时候,AI要考虑两个因素:

1.走对自己获得胜利最有利的点(说白了就是最接近5子连线的点)

2.堵对对方获得胜利最有利的点(说白了就是堵对方的棋子)

做到这两步就能实现一个初级阶段的人工智能了。

那么接下来就讲讲关于计算获得胜利最有利的点是如何计算出来的:

其实原理也比较简单:

在棋盘上计算每个空白位置的点的4个方向(横向,纵向,左上角到右下角方向,右上角到左下角方向)每个有可能获胜的方向所连成的以当前棋子为出发点的长度为获胜棋子数量的(五子棋为5)中途没有被敌方棋子阻挡的所覆盖的己方棋子数。(是不是很绕,反正如果是我看到会被绕晕,没看懂不要紧,下面有栗子,对是栗子)得出每个方向上最大棋子数之后,然后取出每个棋子四个值里最大的值作为获胜权重(win_weight)。

以下图为例:

这是一个6x6的棋盘,现在我们来计算一下白子获胜的权重:

那么权重是如何计算的呢?举个栗子来说明吧:

首先定义这个棋盘坐标系x方向是向右的,y方向是向下的,左上角的位置是(0,0),(x,y)可以定义一个棋子的坐标。定义xy方向为左上角到右下角方向,yx方向为右上角到左下角方向。

(0,0)点的权重计算:首先判断这一点没有连成5子的可能性,权重为0。

(0,2)点的权重计算:首先判断这一点没有连成5子的可能性,权重为0。

(0,3)点的权重计算:首先判断这一点有连成5子的可能性,接下来x轴方向上经过当前位置可连成五子的棋子有0个,y轴方向上经过当前位置可连成五子的棋子有1个,xy方向不存在连成5子的可能性,yx方向上不存在连成5子的可能性,四个方向中,取最大值,结果为1,那么当前点的获胜权重为1。

以此类推,可以得出所有空白点的白字获胜权重。

那么我们下一步让AI直接走获胜权重最大的点是不是就可以了呢?

非也非也。我们不能只考虑自己获胜,也要考虑防止对手获胜。那么如何防止对手获胜呢?我的方式就是走对手获胜权重最高的位置就可以了,就素堵住对方的棋子(传说中的走别人的路,让别人无路可走)。

同样的方式,我们可以求得黑子的获胜权重(win_weight)分布:

可以看出在(0,0),(0,2),(0,4),(0,5)这几个点是黑子获胜概率最大的点。白子走在这些点就可以堵住黑棋。

好的我们得到了白子赢得胜利最有利的点,以及白子阻止黑子获得胜利最有利的点,那么问题来了:我们到底该如何选择具体走哪个点呢?

有个比较粗劣的实现方式,就是将这两个权重相加,相当于将这两个条件同等来对待,认为对白子获得胜利的影响重要性是相同的,然后取加起来权重最高的点。

但实际情况是这两个条件对获得胜利的影响是不等价的,我们要想办法来得到描述这两者之间关系的公式。这里的实现方式有:

1.通过试探法(就是瞎猜)

尝试去将这两个参数相乘,取得的结果作为最终权重,来进行取值。

或者 白子的获胜权重 + R * 黑子的获胜权重, R是一个系数,我们需要通过不断的调整来接近最好的结果。

通过不断的尝试,来将最接近答案的公式猜出来。

2.通过条件分情况来判断

比如下过五子棋的人都知道一个常识:当对手有三子相连,是一个很危险的情况,如果自己目前没有三子相连,那么你应该去堵住对方的连在一起的三子。那么就可以判断,当对手的win_weight >= 3 的时候,加入对手权重的判断,其余情况不考虑对手获胜权重。

3.通过机器学习来让机器理解人类走棋的逻辑

构建机器学习算法,通过大量的训练数据来训练机器,从而让机器通过历史数据来算出下一步该怎么走

我认为第三种方式是最理想的实现,因为前面两种无法覆盖到所有的情况。不过目前我只是做了第一种的简单的实现,接下来会考虑逐渐完善机器学习算法。

好了,这就是我实现五子棋AI的一个大致思路,有很多人问我什么是机器学习,我觉得在这里可以用一个简单的比喻告诉大家:

人生会经历很多事情,当你年幼无知的时候,可能会由于涉世未深而犯很多次错误,当你渐渐长大了,成熟了,经历的事情多了起来,尤其是当你犯错的时候,有人对你指出这样做是错的,你犯错误的次数就会慢慢减少,这个过程就像是一个机器学习的过程。

机器积累训练数据之前,很容易出错,经过大量的训练数据训练之后,就会做的越来越好,这就是机器学习。

java编五子棋人工智能原理_人工智能五子棋实现原理相关推荐

  1. 视频库:人工智能开发_人工智能工程师_AI人工智能

    人工智能Python语言入手→→机器学习核心技术→→深度学习核心技术→→NLP自然语言处理技术→→CV计算机视觉技术 视频库:人工智能开发_人工智能工程师_AI人工智能 01-人工智能开发入门 掌握P ...

  2. 工厂制造业ai人工智能应用_人工智能与金融服务业转型的未来

    工厂制造业ai人工智能应用 As artificial intelligence is becoming core to traditional financial services organiza ...

  3. 11旋转编码器原理_旋转编码器的原理是什么?增量式编码器和绝对式编码器有什么区别?...

    先给出结论,最重要的区别在于:增量式编码器没有记忆,断电重启必须回到参考零位,才能找到需要的位置,而绝对式编码器,有记忆,断电重启不用回到零位,即可知道目标所在的位置. 接下来细说一下,主要包含如下的 ...

  4. 分类计数原理与分步计数原理_分类加法计数原理与分步乘法计数原理的解题策略之一...

    分类加法计数原理与分步乘法计数原理 [最新考纲] 1.理解分类加法计数原理和分步乘法计数原理. 2.会用分类加法计数原理或分步乘法计数原理分析和解决一些简单的实际问题. 知 识 梳 理 1.分类加法计 ...

  5. 人工智能 java 坦克机器人系列: 强化学习_人工智能 Java 坦克机器人系列: 强化学习 | 学步园...

    本文中,我们将使用强化学习来实现一个机器人.使用强化学习能创建一个自适应的战斗机器人.这个机器人能在战斗中根据环境取得最好的策略,并尽力使战斗行为最佳.并在此过程中不断学习以完善自身不足. Roboc ...

  6. 人工智能 java 坦克机器人系列: 强化学习_人工智能 Java 坦克机器人系列: 强化学习...

    人工智能 Java 坦克机器人系列: 强化学习 发表于:2007-05-24来源:作者:点击数: 本文中,我们将使用强化学习来实现一个机器人.使用强化学习能创建一个自适应的战斗机器人.这个机器人能在战 ...

  7. 人工智能 java 坦克机器人系列: 强化学习_人工智能 Java 坦克機器人系列: 強化學習...

    級別:中級 2006 年 7 月13日 本文中,我們將使用強化學習來實現一個機器人.使用強化學習能創建一個自適應的戰斗機器人.這個機器人能在戰斗中根據環境取得最好的策略,並盡力使戰斗行為最佳.並在此過 ...

  8. python智能机器人原理_人工智能和Python是什么关系?详细分析!

    提及到人工智能很多人都会想到Python语言,对于很多人来说Python和人工智能几乎为等号模式,那么Python和人工智能属于什么关系呢?为大家简单的介绍一下. Python是一种计算机程序设计语言 ...

  9. ai人工智能收入_人工智能促进收入增长:使用ML推动更有价值的定价

    ai人工智能收入 介绍 (Introduction) Pricing optimization is a powerful lever for revenue growth, yet it's too ...

最新文章

  1. 植物根际微生物组也有昼夜节律
  2. 模型加速--CLIP-Q: Deep Network Compression Learning by In-Parallel Pruning-Quantization
  3. linux c++ 函数 查看,在C++ man pages中查询C++的函数
  4. iOS-UIImageView的总结
  5. Android中的消息机制
  6. java 读取 image_如何在java读取sql里头读取image格式的数据转换成图片格式
  7. 一分钟解决“仅限中国大陆地区播放”
  8. Python编写的桌面图形界面程序实现更新检测和下载安装
  9. 自动驾驶车辆转向控制(通过支持转角控制的EPS实现角速度控制)
  10. JavaWeb——Get、Post请求中文乱码问题
  11. java生产消费线程小例子
  12. mysql 联合索引匹配原则
  13. 七天学完Vue之第二天学习笔记(自定指令,过滤器,生命周期函数,动画效果)
  14. centos7查看进程ps_查看进程之ps命令
  15. postgresql12-timescaleDB多节点部署安装
  16. 90后程序英雄季逸超
  17. OpenGL 渲染直线
  18. 内部存储空间不足_手机存储空间不足教你快速解决
  19. 4.9 GHz异帧干扰问题研究
  20. 看过来!看过来!网络安全类的认证课程都在这里

热门文章

  1. 大话设计模式-代理模式(大鸟和小菜Java版)
  2. foxmail无法连接zimbra中的POP3端口110来收取邮件
  3. l7809cv是什么管子_【L7809CV PDF数据手册】_中文资料_引脚图及功能_(意法半导体 ST Microelectronics)-采芯网...
  4. 金融业务数据合规风险识别与防护解决方案
  5. 记录学习华为WeLink小程序的开发过程
  6. 使用Jtest 2022.2简化严格的Java测试
  7. H265(HEVC)笔记
  8. 实际案例:在现有代码中通过async/await实现并行
  9. Problem A: 小型飞机大战
  10. 读“金融危机十项注意”