浅析基本AI五子棋算法
五子棋是所有棋类博弈中比较简单的了,这里介绍的也只是一种非常基本的AI策略。其实,包括之前的AI贪吃蛇,感觉这两个AI其实体现的都是一种建模思想,把一个现实中的问题模型化,抽象化,得到其一般特征,再设计数据结构及算法。
首先,要意识到一件事情,我们可以用一个三维数组记录所有的获胜局势,比如
  
再如:
  
这种获胜局势是有限可数的,所以,AI的关键一步就是得到这个三维数组:
//统计所有可能的赢法,需要好好理解
for (var i = 0; i < 15; i++){
for (var j = 0; j < 11; j++){
for (var k = 0; k < 5; k++){
wins[i][j+k][count] = true;
}
count++;
}
}
for (var i = 0; i < 11; i++){
for (var j = 0; j < 15; j++){
for (var k = 0; k < 5; k++){
wins[i+k][j][count] = true;
}
count++;
}
}
for (var i = 0; i < 11; i++){
for (var j = 0; j < 11; j++){
for (var k = 0; k < 5; k++){
wins[i+k][j+k][count] = true;
}
count++;
}
}
for (var i = 0; i < 11; i++){
for (var j = 14; j > 3; j--){
for (var k = 0; k < 5; k++){
wins[i+k][j-k][count] = true;
}
count++;
}
}
//共 572 赢法
现在,关键是如何利用这个三维数组,其实很多机器博弈其实就是在打分,再把棋子下到分高(或分低)的地方,比如以下红色位置,如果没有棋子,应该 给一个较高分,因为在下一个白棋子就赢了,但是如果下了一个黑棋子,那么,上面的第一种赢法无论如何也不可能了,所以直接设置为零分。所以在设置两个一位数组,记录每种赢法的得分,再查找棋盘上哪些位置可以实现这种赢法,给这些位置加分,最后从所有位置中,找出分最高的落子即可。而且,一种赢法上的落子越多,就越接近获胜,所以分数应该越高。
     for (var i = 0; i < 15; i++){
         for (var j = 0; j < 15; j++){
             if (0 == chessBoard[i][j]){//no chessman
                 for (var k = 0; k <count; k++){
                     if (wins[i][j][k]){
                         if (1 == myWin[k]){
                             myScore[i][j] += 200;
                         } else if (2 == myWin[k]){
                             myScore[i][j] += 400;
                         } else if (3 == myWin[k]){
                             myScore[i][j] += 2000;
                         } else if (4 == myWin[k]){
                             myScore[i][j] += 10000;
                         }
                         if (1 == computerWin[k]){
                             computerScore[i][j] += 320;
                         } else if (2 == computerWin[k]){
                             computerScore[i][j] += 420;
                         } else if (3 == computerWin[k]){
                             computerScore[i][j] += 4200;
                         } else if (4 == computerWin[k]){
                             computerScore[i][j] += 20000;
                         }
                     }
                 }
                 if (myScore[i][j] > max){
                     max = myScore[i][j];
                     u = i;
                     v = j;
                 } else if (myScore[i][j] == max){
                     if (computerScore[i][j] > computerScore[u][v]){
                         u = i;
                         v = j;
                     }
                 }
                 if (computerScore [i][j] > max){
                     max = computerScore[i][j];
                     u = i;
                     v = j;
                 } else if (computerScore[i][j] == max){
                     if (myScore[i][j] > myScore[u][v]){
                         u = i;
                         v = j;
                     }
                 }
             }
         }
最后,只需要统计每落子一次是否有一方赢了即可,这里谈及了AI核心思想,其他部分比如判断胜负,交替落子等逻辑可以找到很多学习资料。
总结,AI看似高大上,但是其实际是对实际问题的高度抽象、模型化以及大量计算(正是计算机的优势)。如果能缜密地设计好编码思路,那么效率就会很高,比如昨天写的贪吃蛇,很多情况没想到,所以总是陷入困境,当代码量增加,逻辑结构变的复杂时,一定要事先规划,或者说,设计模式。自己要突破目前的瓶颈期可能要学习一下这方面的东西了!!!
此外,还利用Hbuilder生成了APP,首先是自己这么想了,然后还真找到办法实现了,所以创意,眼界,技术,同样重要。
  
小记。
浅析基本AI五子棋算法的更多相关文章
- 人机ai五子棋 ——五子棋AI算法之Java实现
		
人机ai五子棋 下载:chess.jar (可直接运行) 源码:https://github.com/xcr1234/chess 其实机器博弈最重要的就是打分,分数也就是权重,把棋子下到分数大的地方, ...
 - AI五子棋需求规格说明书
		
AI-Gobang AI五子棋小程序 github地址:https://github.com/holidaysss/AI-Gobang 程序简介 AlphaGo Zero在世界舞台上取得的巨大成功体现 ...
 - 贝叶斯公式由浅入深大讲解—AI基础算法入门
		
1 贝叶斯方法 长久以来,人们对一件事情发生或不发生的概率,只有固定的0和1,即要么发生,要么不发生,从来不会去考虑某件事情发生的概率有多大,不发生的概率又是多大.而且概率虽然未知,但最起码是一个确定 ...
 - 贝叶斯公式由浅入深大讲解—AI基础算法入门【转】
		
本文转载自:https://www.cnblogs.com/zhoulujun/p/8893393.html 1 贝叶斯方法 长久以来,人们对一件事情发生或不发生的概率,只有固定的0和1,即要么发生, ...
 - 2018科大讯飞AI营销算法大赛全面来袭,等你来战!
		
AI技术已成为推动营销迭代的重要驱动力.AI营销高速发展的同时,积累了海量的广告数据和用户数据.如何有效应用这些数据,是大数据技术落地营销领域的关键,也是检测智能营销平台竞争力的标准. 讯飞AI营销云 ...
 - 实践案例丨基于ModelArts AI市场算法MobileNet_v2实现花卉分类
		
概述 MobileNetsV2是基于一个流线型的架构,它使用深度可分离的卷积来构建轻量级的深层神经网,此模型基于 MobileNetV2: Inverted Residuals and Linear ...
 - 五子棋 AI(AIpha-beta算法)
		
博弈树 下过五子棋的人都应该知道,越厉害的人,对棋面的预测程度越深.换句话讲,就是当你下完一步棋,我就能在我的脑海里假设把我所有可能下的地方都下一遍,然后考虑我下完之后你又会下在哪里,最后我根据每次预 ...
 - AI大厂算法测试心得:人脸识别关键指标有哪些?
		
仅仅在几年前,程序员要开发一款人脸识别应用,就必须精通算法的编写.但现在,随着成熟算法的对外开放,越来越多开发者只需专注于开发垂直行业的产品即可. 由调查机构发布的<中国AI产业地图研究> ...
 - AI xavier算法
		
xavier算法 参考链接: http://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf
 
随机推荐
- TinyFrame升级之五:全局缓存的设计及实现
			
在任何框架中,缓存都是不可或缺的一部分,本框架亦然.在这个框架中,我们的缓存分为两部分:内存缓存和单次请求缓存.简单说来,就是一个使用微软提供的MemoryCache做扩展,并提供全局唯一实例:另一个 ...
 - lecture4-神经网络在语言上的应用
			
Hinton第四课 这一课主要介绍神经网络在语言处理上应用,而主要是在文本上,并附上了2003年Bengio 等人的19页的论文<A Neural Probabilistic Language ...
 - HoloLens开发手记 - 测试 Testing
			
测试HoloLens应用的做法和测试Windows应用很类似.所有常规的内容都应该被考虑在内(功能.互操作性.性能.安全性.可靠性等等),然而有些特性是HoloLens特有的,在PC或者手机上无法测试 ...
 - 项目分享五:H5图片压缩与上传
			
一.简介 图片的压缩与上传,是APP里一个很常用的功能.我们来年看 ChiTuStore 是怎样做的.相关文件 App/Module/User/UserInfo.html,App/Module/Use ...
 - 226 Invert Binary Tree
			
/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = ...
 - Tensorflow学习笔记3:TensorBoard可视化学习
			
TensorBoard简介 Tensorflow发布包中提供了TensorBoard,用于展示Tensorflow任务在计算过程中的Graph.定量指标图以及附加数据.大致的效果如下所示, Tenso ...
 - ServiceStack 概念参考文摘
			
摘自:http://www.cnblogs.com/woxpp/p/5010881.html ServiceStack 用于服务开发,可以为各种形式的网站.软件.APP等提供数据服务,可以提供REST ...
 - poj 1324 Holedox Moving
			
poj 1324 Holedox Moving 题目地址: http://poj.org/problem?id=1324 题意: 给出一个矩阵中,一条贪吃蛇,占据L长度的格子, 另外有些格子是石头, ...
 - 70 sudo-用来以其他身份来执行命令
			
sudo命令用来以其他身份来执行命令,预设的身份为root.在/etc/sudoers中设置了可执行sudo指令的用户.若其未经授权的用户企图使用sudo,则会发出警告的邮件给管理员.用户使用sudo ...
 - 用自己的话描述wcf中的传输安全与消息安全的区别(三)
			
消息交换安全模式 PS:很多书上把transfer security和transport security都翻译成“传输安全”,这样易混淆.我这里把transfer说成消息交换安全. 安全的含义分为验 ...