权值法实现五子棋AI
权值法实现五子棋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相关推荐
- 五子棋java程序=权值法_五子棋(人机对弈)——Java权值法五子棋博弈
五子棋人机博弈 五子棋,人与人之间博弈,我们不用考虑太多,都是玩家自动思考. 但是如果我们要玩一个单机的五子棋,实现人机的对战,那么我就得"帮"电脑考虑下走哪步了. 实现的方法大概 ...
- JAVA权值法实现五子棋_java游戏之 五子棋实现人人对战!
五子棋,是我们大家都喜爱玩的智力棋类游戏,在学完了界面以及绘图之后便一直想做一个,如今终于如愿以偿,虽然还没有更好的美化该游戏,但是大局已定.高兴! 五子棋我们需要很多常量,比如说棋子的大小,棋盘格子 ...
- 简易五子棋AI权值法(2)
简易五子棋&AI权值法(2) 权值法 权值法实现AI,就是给每个无子的地方给一个权值,然后选出权值最大的让电脑落子. 具体到每个位置,权值根据周围一定范围的落子情况给出. 就我的想法来说,我觉 ...
- 五子棋(人机对弈)——Java权值法五子棋博弈
五子棋人机博弈 五子棋,人与人之间博弈,我们不用考虑太多,都是玩家自动思考. 但是如果我们要玩一个单机的五子棋,实现人机的对战,那么我就得"帮"电脑考虑下走哪步了. 实现的方法大概 ...
- 课程设计书五子棋AI算法及其实现
五子棋AI,能根据棋盘局势判断棋子应落在何处获胜,主要算法有权值法和博弈树法两种实现方案. 权值法 在数理统计中,有一种名为蒙特卡洛法的方法常被使用,其主要内容为:根据事件出现的概率估计某些特征,并将 ...
- Java五子棋Ai-权值法
Java五子棋Ai-权值法 一. 什么是权值法? 二.实现权值法Ai会面临的问题 1.如何表达棋盘上未下处的横竖斜的棋子情况?(类似01120) 2.如何将未下处的横竖斜情况和权值联系起来?(Hash ...
- java五子棋ai_Java五子棋Ai-权值法
一. 什么是权值法? 权值法顾名思义,即是权衡不同的情况并赋予不同的数值,这个数值即代表着这个情况的重要性. 例如,当我们进行五子棋对战的时候,我们每下一个棋子就要判断这个点横竖斜的情况,对于不同的情 ...
- 斗地主AI算法——第四章の权值定义
第一章业务逻辑结尾部分我提到了权值的计算方法: ①每个单牌都有一个基础价值②组合牌型的整体价值与这个基础价值有关,但显然计算规则不完全一样.③整手牌可以分成若干个组合牌,但分法不唯一. 当时,我说了① ...
- 五子棋_AI权值算法(2)
小编已经隔了好久没有更新了,原因我就不多说啦,接下来我要立个每周更新的flag啦. 上一篇我们的成果是这样的 然后如果我们要实现人机的话就需要算法啦,这里就使用比较简单的算法,其他的还有博弈树等比较高 ...
最新文章
- 慕课堂签到迟到怎么办_线上教学第一周:长安大学精品课程助力“云端课堂”...
- 撒花!PyTorch 官方教程中文版正式上线,激动人心的大好事!
- linux centos7 安装最新版git 教程
- linux上卸载kafka,kafka安装在linux上的安装
- gulp,grunt,bower,feoman,fis 简单说明
- Bitcoin-NG 可扩展的区块链协议
- 【Linux开发】Ubuntu下几个软件的配置记录backup
- 人工智能还能怎么玩?谷歌反手就是一个红狮子雕塑
- informix数据库 java 增删改查
- [No00002E]关于大数据,你不知道的6个迷思
- MVC---张国亮总结心得第一季
- 使用Camera的几个步骤
- 【Android -- 数据存储】LitePal 的基本使用
- CSS常见面试题(持续更新)
- linux opendir路径_Linux目录操作函数:opendir/readdir/closedir
- cmf php,php cmf
- librosa实现音频格式转换(单曲批量) | MP3转wav
- cf----2019-10-12(Bus Video System,Bus Video System,Petya's Exams)
- 开发中的各种时间格式转换(二)
- 李敖之子李戡:《严正声明─我对韩…
热门文章
- CATIA 数控加工仿真
- FindWindowEx死循环的问题
- 用poi在excel里画日历
- FluBot 移动恶意软件席卷欧洲,安卓苹果都不放过
- mysql删除表中所有数据的语句_sql删除数据库中所有表与数据语句
- 谷歌封禁鸿蒙,就在刚刚!谷歌再下狠手彻底封禁华为,禁止用户自主安装谷歌服务...
- 基于 Hutool 的抽奖实现与原理
- Intergraph CADWorx (Plant, PID, Equipment, IP, SpecEditor) 2014 build 23.07.2013
- 微信支付宝个人免签约收款系统的实现
- 真正的赚钱机会来了,你还不懂区块链?