权值法实现五子棋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. 撒花!PyTorch 官方教程中文版正式上线,激动人心的大好事!
  3. linux centos7 安装最新版git 教程
  4. linux上卸载kafka,kafka安装在linux上的安装
  5. gulp,grunt,bower,feoman,fis 简单说明
  6. Bitcoin-NG 可扩展的区块链协议
  7. 【Linux开发】Ubuntu下几个软件的配置记录backup
  8. 人工智能还能怎么玩?谷歌反手就是一个红狮子雕塑
  9. informix数据库 java 增删改查
  10. [No00002E]关于大数据,你不知道的6个迷思
  11. MVC---张国亮总结心得第一季
  12. 使用Camera的几个步骤
  13. 【Android -- 数据存储】LitePal 的基本使用
  14. CSS常见面试题(持续更新)
  15. linux opendir路径_Linux目录操作函数:opendir/readdir/closedir
  16. cmf php,php cmf
  17. librosa实现音频格式转换(单曲批量) | MP3转wav
  18. cf----2019-10-12(Bus Video System,Bus Video System,Petya's Exams)
  19. 开发中的各种时间格式转换(二)
  20. 李敖之子李戡:《严正声明─我对韩…

热门文章

  1. CATIA 数控加工仿真
  2. FindWindowEx死循环的问题
  3. 用poi在excel里画日历
  4. FluBot 移动恶意软件席卷欧洲,安卓苹果都不放过
  5. mysql删除表中所有数据的语句_sql删除数据库中所有表与数据语句
  6. 谷歌封禁鸿蒙,就在刚刚!谷歌再下狠手彻底封禁华为,禁止用户自主安装谷歌服务...
  7. 基于 Hutool 的抽奖实现与原理
  8. Intergraph CADWorx (Plant, PID, Equipment, IP, SpecEditor) 2014 build 23.07.2013
  9. 微信支付宝个人免签约收款系统的实现
  10. 真正的赚钱机会来了,你还不懂区块链?