五子棋智能算法-博弈树算法思想详解(一)

article/2025/10/8 19:15:49

学习这个算法之前必会链表 关于链表看这两篇博文

https://blog.csdn.net/viafcccy/article/details/84502334

https://blog.csdn.net/viafcccy/article/details/85041942

 

在五子棋下棋中 我们最容易想到的算法就是对于棋局的推演 从而找到一种最佳的情况去使棋局向这个方向发展

为了简单思考我们首先想一个五子棋的开局

 

这种情况下黑棋有两种选择就是下方这两种棋型由于考虑到建模的复杂程度 和 计算机下棋的考虑时间 我们只考虑所有的直线型的棋型 将所有的直线型棋局穷举出来是可能的(我这里相当于将直线作为下棋的单位 所有的推演都是去寻找直线的棋局)

这里我列举出来

/***************一子/二子******************/
x0
0                  
00
0_0 
0_ _0
0_ _ _0
x00
x0_0
x0_ _0    
x0_ _ _0/*****************三子**********************/ 
000 
0_00                            
00_ _0   
0_0_0
x000 
x0_00
x00_0
X0_ _00
X0_0_0
X00_ _0/*****************四子**********************/
0000
0_000
00_00
x0000
x000_0
x0_000
x00_00/*****************五子**********************/
00000

于是 此时 我们需要的是电脑去搜索所有的棋型 并把所有的情况列举出来构成一棵树 去推演最后选择最有利的一种棋型

下面我们需要的是为各个棋型打出分值 显然 例如 连成五子的棋型 对于我方来说是正无穷分 但是如果对方构成就需要打分负无穷分... 但是剩下的棋型打分需要自己去权衡和思考 可以是从你下棋的角度 认为某种棋型有利就是高分(对方就是相反数 会更小)

现在我要记住这棵树是从电脑出发去思考(所有的打分都是根据电脑去打分) 也就是 在电脑下棋的时候选择分数最高的一种局势 在对手下棋的时候肯定是去思考对对手最有利的情况(也就是分数最小的情况) 【这里为啥是最小很好想 对手四个连成一排 势必要去先处理这个位置的四个棋子 事情肯定是最紧急的优先去处理】 于是构成了下面的这棵博弈树

构建好这样一棵博弈树之后  就要去从最底层去逐层选择最小值和最大值去逐层推演 直到选择一种最佳的棋型 其实在编程时 我们要

1.搜索下一步所有的棋型

2.为每一种棋型建立一颗博弈树 最后选出分数最高的下一步

alpha-beta剪枝搜索 

 但是这里存在一个问题随着树的深度、广度的不断扩张 运算的数量是成指数级上涨的 也就是说电脑的运算次数有限 也就是整棵树的深度、广度是有限的 我们想要去在一定的时间里推演出更多的步骤 就需要去剔除一些显然不可能向上传递的分支 这里这个过程就叫做alpha-beta剪枝搜索 

重新回到开始的模型

也就是说不需要遍历完每一个节点 在遍历中遇到不可能的值时就直接剔除(图树的遍历是有深度和广度遍历的不要忘记) 

同理在上一层是选择最小值的时候 也是同一个道理

最后总结一下最基本的博弈树 和 alpha-beta剪枝算法步骤

1.搜索周边所有的棋型

2.选择每一种可能的走法 不断的搜索棋型 建立一棵博弈树 遍历 剪枝 推导出初始节点分值

3.最终选择一棵分值最高的博弈树的初始节点 按照这种棋型

4.等待人落子

5.重复1


http://chatgpt.dhexx.cn/article/ovjX7ml2.shtml

相关文章

基于博弈树的五子棋 AI 算法及其 C++ 实现

基于博弈树的五子棋 AI 算法及其 C 实现 摘要一 五子棋的游戏规则二 五子棋对弈的算法描述2.1 博弈树搜索算法2.2 α ─ β 剪枝2.3 估价函数 三 五子棋对弈的算法实现3.1 Node类3.1.1 成员变量3.1.2 成员函数 3.2 GameTree类3.2.1 成员变量3.2.2 成员函数 四 五子棋对…

博弈与博弈树

博弈与博弈树 博弈 博弈双方根据事先制定的规则,轮流交替在对应的棋局上做出自己的选择,然后根据规则判定那一方获胜。 博弈树(一种特殊的与或树) 目标:将当前棋局作为根节点,选出最有利于自己获胜的一步…

博弈树搜索算法

即使满腹经纶,但没有好的口才来授课,也会让学生听得昏昏欲睡、不知所云呢!即使满腔热血,没有好的口才来凝聚共识,也会让这份理想温暖黯淡无光。但是,好的说话之道,也要有一颗赤诚的心、诚恳的情…

博弈树-BIT

博弈树-BIT 下棋属于一种博弈游戏,博弈过程可以用树(博弈树)来表示。假设游戏由两个人( A 和 B )玩,开始由某个人从根结点开始走,两个人轮流走棋,每次只能走一步, 下一步…

第四章 博弈树game tree

这里写目录标题 perfect-information game从博弈树得到收益表subgamebackward induction 反向推导一个值得思考的例子: 另一个例子umperfect information extensive混合策略和行为策略(mexed and behavioral strategies)不完美信息博弈的求解 博弈树用于…

人工智能—— 博弈树的启发式搜索

一、概述 博弈的概念 博弈是一类具有智能行为的竞争活动,如下棋、战争等。 博弈的类型 双人完备信息博弈:两位选手(例如MAX和MIN )对垒,轮流走步,每一方不仅知道对方已经走过的棋步,而且还能…

博弈树与α-β剪枝

一、评价函数(Evaluation function) 绝大部分的游戏,决策空间都相当庞大。 即使是最简单的三子棋(又叫做“井”字棋,一字棋)。它的第一步有9种决策,然后对面有9*872种决策,....&…

博弈树

博弈树的搜索 博弈树定义: 一类特殊的与或图 (本次讨论的博弈树都是“与或图”) 应用范围: 下棋、故障诊断、风险投资 基本搜索策略: 极小极大搜索(min-max) 优化的搜索方法: α…

vim的目录树插件NERDtree的安装

下载: https://github.com/preservim/nerdtree 上面是NERDTree插件的下载链接,在github上下载即可将下载的文件的解压,并通过虚拟机的共享文件夹共享到虚拟机 将共享的文件,复制到~./vim/ 目录下,如下图: …

Vim的NerdTree插件

在vundle插件管理的方式,直接在~/.vimrc中的Plugin段落中加入Plugin "scrooloose/nerdtree "然后重启Vim并输入PluginInstall,即可完成安装 然后输入: NERDTreeToggle即可打开文件树。当然,默认是关闭的,需要每次都输入…

分享一个Vim目录树的插件-NERDTree

之前的公司有目录树,方便很多,但是没把代码带过来,这次新找了一个,对于日常工作来说,确实方便很多。NERDTree是github上分享的免费的linux/vim上的目录树插件,有需要的可以参考原来的链接: NER…

java之TreeNode

~ 前言 之前讲的HashMap机制遗漏了一个Tree的操作,我们在这里补上。如果是从头看到这里那么这一章也会非常容易。 后续讲解内容为源码实现,这里使用的是JDK8的版本。 红黑树 HashMap使用的树结构是红黑树,而红黑树是一个平衡二叉树&#xf…

Vim升华之树形目录插件NERDTree安装图解

无意中看到实验室的朋友使用的vim竟然能在左边显示树形目录,感觉很方便,这样子文件夹有什么文件一目了然。她说是一个插件叫NERDTree,安装执行后的效果如下,不是你想要的效果就别安了。我的系统是Ubuntu12.04,版本不同…

gvim安装NERDTree插件

gvim安装NERDTree插件 安装vim plug遇到的问题安装成功 安装NERDTree插件遇到的问题安装成功 安装vim plug 访问网站链接: download vim-plug Linux终端命令敲入: curl -fLo ~/.vim/autoload/plug.vim --create-dirs \https://raw.githubusercontent.com/junegunn…

安装NERDtree

无意中看到实验室的朋友使用的vim竟然能在左边显示树形目录,感觉很方便,这样子文件夹有什么文件一目了然。她说是一个插件叫NERDTree,安装执行后的效果如下,不是你想要的效果就别安了。我的系统是Ubuntu12.04,版本不同…

nerdtree-git-plugin插件

给用 NERDTree 的同学推荐一个很好用的插件 nerdtree-git-plugin,这个插件能显示 git 管理的项目文件变更状态. 配置 这个插件是”开箱即用”的,不过建议大家做如下配置(用zsh的同学是不是很熟悉XD): let g:NERDTreeIndicatorMapCustom {\ "Mod…

NERDTree安装

转自https://blog.csdn.net/qq_33862644/article/details/80545654 安装: 1、下载vundle(管理插件工具) git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim 注意:~开始是下载到哪,…

linux下Nerdtree安装方法

目录 1.下载Nerdtree 2. linux下安装 3. 成功享受吧 1.下载Nerdtree 百度网盘下载,地址为链接:百度网盘 请输入提取码 提取码:07e3 --来自百度网盘超级会员V4的分享 github方式下载,地址为 https://github.com/scrooloose/ner…

GVim配置一个漂亮的NerdTree

GVim配置一个漂亮的NerdTree GVim使用也有一段时间了,有空写几个简单的教程帮助新手快速上手,定制一个个性化的编辑器把。以下是我的NerdTree效果展示。 NerdTree插件 NerdTree下载安装 如果你安装了插件管理器的化安装就很简单了,如果没有安…

NERDTree插件安装和使用

如何安装NERDTree插件,该插件显示一个目录树,可以执行一下文件的操作命令,首先添加配置: " 在vim中安装及配置NERDTree插件,放在Plugin gmarik/Vundle.vim 之后 Plugin scrooloose/nerdtree ""-----…