权值法实现五子棋AI

前言

五子棋AI,能根据棋盘局势判断棋子应落在何处获胜,主要有权值法和博弈树法两种实现方案。本篇博客将就权值法展开介绍,笔者水平有限,望各路大神有所建议评论提出,谢谢。

权值法

在数理统计中,有一种名为蒙特卡洛法的方法常被使用,其主要内容为:根据事件出现的概率估计某些特征,并将其作为问题的解。 权值法实现五子棋AI利用的就是这个原理。

在五子棋中,当棋局逐渐形成时,再接着向某个方向进行落子便容易获胜。比如黑子横向三连时,如果接着向左或者向右落子,白方不加堵截的话,那么黑方必胜。我们称此时棋盘上在黑子三连左右两侧的点的获胜概率高,即权值大

对于黑方来说,在权值大的点上落子容易获胜,对于白方来说,在权值大的点上落子容易避免对方获胜。因而,无论对于哪方,在权值大的点上落子都是应该被优先选择的。

那么问题就变简单了,我们只需要对棋盘进行遍历,找出棋盘上权值大的点落子即可,利用这个方案,不仅可以实现人机对战,还可以实现机器与机器之间的博弈。

实现方案

对棋盘进行遍历,计算棋盘上的每一个未放棋子的点的权值,笔者利用二维数组存储棋盘数据,因而会有如下代码:

for(int row = 0;row < Pan.length;row++){    for(int cal = 0;cal < Pan[row].length;cal++){ //如果该点为空,计算权值}}
//Pan[][]类型数组用来存储棋盘信息

在计算权值时,我们只需对该点东南西北,东北,西南,西北,东南八个方向的点做遍历,如果有棋子那么方向权值上升,如果没有棋子那么遍历结束,最终将八个方向权值和作为该点的权值注意,在遍历时千万不要把一条直线上的方向作为一个方向进行遍历

例如,需要遍历该点西面的权值

//遍历棋盘左上的棋盘点for(int i = 1;row - i >= 0&&cal - i >= 0;i++){//如果西面相邻为空的话直接返回现有的总和值if(//西面没有棋子){return sum;}//否则统计与左侧相邻棋子相同颜色的总和else if(//颜色相同){sum++;}//否则碰到了不同颜色的棋子直接跳出循环else{break;}}

其余方向类似,用以上方法就可以实现简单的权值法AI了。

当然也有很多优化方案,比如说当连续的棋子超过三个时,权值翻倍增长,或者不用权值和,用方向权值最大值作为该点的权值,权值法的构建不受约束,只要能计算出获胜概率最大的点即可。

权值法实现五子棋AI相关推荐

  1. 五子棋java程序=权值法_五子棋(人机对弈)——Java权值法五子棋博弈

    五子棋人机博弈 五子棋,人与人之间博弈,我们不用考虑太多,都是玩家自动思考. 但是如果我们要玩一个单机的五子棋,实现人机的对战,那么我就得"帮"电脑考虑下走哪步了. 实现的方法大概 ...

  2. JAVA权值法实现五子棋_java游戏之 五子棋实现人人对战!

    五子棋,是我们大家都喜爱玩的智力棋类游戏,在学完了界面以及绘图之后便一直想做一个,如今终于如愿以偿,虽然还没有更好的美化该游戏,但是大局已定.高兴! 五子棋我们需要很多常量,比如说棋子的大小,棋盘格子 ...

  3. 简易五子棋AI权值法(2)

    简易五子棋&AI权值法(2) 权值法 权值法实现AI,就是给每个无子的地方给一个权值,然后选出权值最大的让电脑落子. 具体到每个位置,权值根据周围一定范围的落子情况给出. 就我的想法来说,我觉 ...

  4. 五子棋(人机对弈)——Java权值法五子棋博弈

    五子棋人机博弈 五子棋,人与人之间博弈,我们不用考虑太多,都是玩家自动思考. 但是如果我们要玩一个单机的五子棋,实现人机的对战,那么我就得"帮"电脑考虑下走哪步了. 实现的方法大概 ...

  5. 课程设计书五子棋AI算法及其实现

    五子棋AI,能根据棋盘局势判断棋子应落在何处获胜,主要算法有权值法和博弈树法两种实现方案. 权值法 在数理统计中,有一种名为蒙特卡洛法的方法常被使用,其主要内容为:根据事件出现的概率估计某些特征,并将 ...

  6. Java五子棋Ai-权值法

    Java五子棋Ai-权值法 一. 什么是权值法? 二.实现权值法Ai会面临的问题 1.如何表达棋盘上未下处的横竖斜的棋子情况?(类似01120) 2.如何将未下处的横竖斜情况和权值联系起来?(Hash ...

  7. java五子棋ai_Java五子棋Ai-权值法

    一. 什么是权值法? 权值法顾名思义,即是权衡不同的情况并赋予不同的数值,这个数值即代表着这个情况的重要性. 例如,当我们进行五子棋对战的时候,我们每下一个棋子就要判断这个点横竖斜的情况,对于不同的情 ...

  8. 斗地主AI算法——第四章の权值定义

    第一章业务逻辑结尾部分我提到了权值的计算方法: ①每个单牌都有一个基础价值②组合牌型的整体价值与这个基础价值有关,但显然计算规则不完全一样.③整手牌可以分成若干个组合牌,但分法不唯一. 当时,我说了① ...

  9. 五子棋_AI权值算法(2)

    小编已经隔了好久没有更新了,原因我就不多说啦,接下来我要立个每周更新的flag啦. 上一篇我们的成果是这样的 然后如果我们要实现人机的话就需要算法啦,这里就使用比较简单的算法,其他的还有博弈树等比较高 ...

最新文章

  1. 各大厂这个档次分配,大佬们有什么看法?
  2. mysql5.7 生成列 generated column
  3. CSS Sprites (CSS精灵)
  4. BootStrap学习笔记,优缺点总结
  5. 人脸识别有什么漏洞,活体检测又是怎么防伪?
  6. lr监控mysql_LR通过SiteScope监控mysql
  7. 移动OA平台现状(移动运营商)
  8. [转载]安全设置 IIS 中的权限
  9. swoft使用phpunit之CodeCoverage
  10. 机器学习cnn如何改变权值_五个机器学习悖论将改变您对数据的思考方式
  11. qPCR引物设计经验教程
  12. android 播放器 samba,(发烧屋)教你如何解决蓝光机 KODI无法打开局域网SMB共享的问题/安卓播放器/硬盘播放器...
  13. FormulaR1C1是EXCEL中单元格公式输入方法(补充解说)
  14. 量子计算(十五):半导体量子芯片
  15. 网络安全管理与运维服务
  16. Postman的下载及安装
  17. python内存泄漏_诊断和修复Python中的内存泄漏
  18. 游戏领域的“抄袭”与“借鉴”之分,无耻与致敬仅有一步之遥
  19. Python基础(十二)——循环语句
  20. 【无标题】研究过程中的一些经验感悟

热门文章

  1. 根据昵称首字母生成头像
  2. 速卖通公布商品发布数量的实施细则
  3. 项目实施:如何有效的进行ERP培训
  4. 机器人模拟器webots初学者入门教程
  5. Linux操作系统上的文件共享
  6. SaaSBase:什么是外勤365AirPalm?
  7. SQL中drop table语句删除数据表
  8. 大佬起床哪家早?库克每天4点半起床发邮件
  9. 如何实现微信自动回复
  10. pdf怎么转换成word免费?就有这几个方法!