剪枝算法实现一字棋-C++

article/2025/9/28 23:40:43

博弈树

alpha & beta剪枝算法实现一字棋

剪枝算法首先就是要理解,把这个算法彻底弄清楚,我觉得这是一件非常有意义的事情!为后续书写其它棋类的AI打下了坚实的基础

剪枝操作的实现,遍历下一步所有可能取到的点,找出评估值最大的那一步就是我们下一步所需要的做的。
剪枝算法

int Tree::alphaBeta(int &value,int deep,bool MAX){if(isWin()==1){value=10000;return 0;}//递归的终点if(deep+this->count==9){return this->evaluate();}//一开始不剪枝bool prune=false;int temp,flag;//max结点我开始落子,电脑希望flag越大越好if(MAX)flag=10000;//min结点电脑开始落子,我希望flag越小越好elseflag=-10000;for(int i=0;i<NUM && !prune;i++){for(int j=0;j<NUM && !prune;j++){//找出一个空位置下棋if(this->s[i][j]==' '){//如果当前结点是max结点,下一步是我下棋if(MAX){this->s[i][j]='X';//如果我下这一步我赢了,是电脑最不希望看到的,直接值取-100if(this->isWin()==-1)temp=-10000;elsetemp=this->alphaBeta(flag,deep+1,!MAX);if(temp<flag)	flag=temp;//如果我下棋让评分变的低了,电脑完全没必要走这一步,剪枝if(flag<=value) prune=true;}//min结点电脑开始下棋else{this->s[i][j]='O';//如果这一步对于电脑来说直接取得胜利,对于机器来说是十分想看到的if(this->isWin()==1)temp=10000;elsetemp=this->alphaBeta(flag,deep+1,!MAX);//我们希望的flag小于实际的评分,此时flag应该更新if(temp>flag)	flag=temp;//此时对于我来说是十分不利的,我不可能走这一步让电脑获取胜利,我这一步应该被剪枝//或结点的alpha值不能降低其父结点的beta值,剪枝if(flag>=value) prune=true;}this->s[i][j]=' ';}}}//max(或)结点的扩展要是能提高value值if(MAX){if(flag>value)value=flag;}//min(与)结点的扩展要是能降低value值else{if(flag<value)value=flag;}return flag;
}

剪枝算法是一字棋程序中的核心部分,此外还需要定义一个棋类,用于初始化和实现下棋操作
棋类部分代码以及所有函数和变量

class Chess{
private:char a[3][3];		//棋盘的状态int count;          //已经下棋的步数
public:std::string computer,player;        //电脑与玩家int x,y;            				//下棋的位置std::string str,winner;       		//当前落子的对象void initial();     				//初始化函数void getMove();     				//获取走棋的位置bool makeMove(int,int,std::string);	//走棋函数void showStatus();  				//展示棋盘当前的状态bool isGameOver();  				//判断游戏是否结束void getStatus(char[][3]);          //获取当前的状态int getCount();                     //获取当前已经走棋的步数
};
void Chess::initial(){this->computer="Computer";this->player="Player";this->winner=" ";this->count=0;this->str=this->player;for(int i=0;i<NUM;i++){for(int j=0;j<NUM;j++){this->a[i][j]=' ';}}
}

主函数部分

	Onechess.initial();while(!Onechess.isGameOver() && Onechess.getCount()!=9){Onechess.showStatus();if(Onechess.str==Onechess.player){Onechess.getMove();Onechess.makeMove(Onechess.x,Onechess.y,Onechess.str);}else{tree.getChessStatus(Onechess);//不断的去试探,找出一个最大的value的值的走法for(int i=0;i<NUM;i++){for(int j=0;j<NUM;j++){if(tree.s[i][j]==' '){tree.s[i][j]='O';tree.alphaBeta(value,deep,1);if(value>temp){temp=value;row=i;column=j;}tree.s[i][j]=' ';}}}value=-10000;temp=-10000;Onechess.makeMove(row+1,column+1,Onechess.str);}printf("\n**************");}Onechess.showStatus();//并没有分出胜负,但是下棋的步数已经到达了9步,此时判定平局if(!Onechess.isGameOver() && Onechess.getCount()==9){printf("There are no winner! Is Draw!!!");}elseprintf("The winner is %s,let's congratulate!",Onechess.winner.c_str());

通过此次书写一字棋的博弈树,我对人工智能有了一个很好的了解。
部分运行截图。程序运行,结果最多就是平局,然后就是玩家输掉游戏。
在这里插入图片描述


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

相关文章

模型压缩:剪枝算法

过参数化主要是指在训练阶段&#xff0c;在数学上需要进行大量的微分求解&#xff0c;去捕抓数据中的微小变化信息&#xff0c;一旦完成迭代式的训练之后&#xff0c;网络模型推理的时候就不需要这么多参数。而剪枝算法正是基于过参数化的理论基础而提出的。 剪枝算法核心思想…

人工智能算法模型--Alpha-Beta剪枝算法学习笔记

⬜⬜⬜ &#x1f430;&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea; (*^▽^*)欢迎光临 &#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea;&#x1f430;⬜⬜⬜ ✏️write in front✏️ &#x1f4dd;个人主页&#xff1a;陈丹宇jmu &a…

理解Alpha-Beta 剪枝算法

Alpha-beta剪枝是一种搜索算法&#xff0c;用以减少极小化极大算法&#xff08;Minimax算法&#xff09;搜索树的节点数。裁剪搜索树中没有意义的不需要搜索的树枝&#xff0c;提高运算速度。 搜索中传递两个值。 第一个值是Alpha&#xff0c;即搜索到的最好值&#xff0c;任何…

组合总和(剪枝算法)

组合总和&#xff08;剪枝算法&#xff09; 题目 给定一个无重复元素的数组 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复被选取 示例 示例 1&#xff1a;输入: candidates [2,…

Alpha-Beta剪枝算法原理

1. 前言 前文&#xff1a;极小化极大&#xff08;Minimax&#xff09;算法原理 极小化极大算法在完全信息零和博弈中&#xff0c;基于己方努力使得在N步后优势最大化&#xff08;即评估函数输出值最大化&#xff09;和对方努力使得N步后己方优势最小化这两个出发点&#xff0c…

GRNN广义回归神经网络

广义回归神经网络 GRNN &#xff08;General Regression Neural Network&#xff09; 广义回归神经网络是基于径向基函数神经网络的一种改进。 结构分析&#xff1a; 可以看出&#xff0c;这个结构与之前我们所讲过的径向基神经网络非常相似&#xff0c;区别就在于多了一层加和…

m分别使用BP神经网络和GRNN网络进行时间序列预测matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 广义回归神经网络是径向基神经网络的一种&#xff0c;GRNN具有很强的非线性映射能力和学习速度&#xff0c;比RBF具有更强的优势&#xff0c;网络最后普收敛于样本量集聚较多的优化回归&#xff…

广义回归神经网络(GRNN)

广义回归神经网络&#xff08;GRNN&#xff09; 一、GRNN神经网络概述 二、GRNN神经网络理论基础&#xff08;如果对理论不感兴趣可直接看GRNN网络结构&#xff0c;网络结构理解更直观&#xff09; 三、GRNN的网络结构 注意&#xff1a;一定要理解第三个求和层的概念&#xff0…

【GRNN情绪识别】基于GRNN神经网络的情绪识别算法matlab仿真

1.软件版本 matlab2021a 2.本算法理论知识 GRNN&#xff0c;即General Regression Neural Network&#xff0c;中文全称为广义回归神经网络&#xff0c;是由The Lockheed Palo Alto研究实验室在1991年提出的。GRNN是一种新型的基于非线性回归理论的神经网络模型[43,44]。GRN…

m基于C3D-hog-GRNN广义回归神经网络模型的人员异常行为识别算法的matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 实时的人群异常行为识别是一项极具挑战的工作&#xff0c;具有较高的现实意义和社会需求&#xff0c;快速准确地判断出异常行为并及时预警&#xff0c;一直是我们探索的方向。传统的机器学习算法…

基于BP神经网络/GRNN神经网络的电力预测matlab仿真

目录 一、理论基础 二、案例背景 三、MATLAB程序 四、仿真结论分析 一、理论基础 BP神经网络&#xff0c;即Back Propagation神经网络&#xff0c;其本质是一种基于误差反馈传播的神经网络算法。从结构上讲&#xff0c;BP神经网络是由一个信息的正向传播网络和一个误差的反…

RNN CNN GCN

RNN CNN GCN 属于深度学习领域——图像识别 主要用于识别提取图像的特征 CNN:对象是图片&#xff0c;一个二维结构&#xff0c;其主要核心是有一个kernel小窗口&#xff0c;用于图片的平移&#xff0c;然后再利用卷积来提取图片的特征。 RNN:针对一维结构&#xff0c;主要利用…

基于麻雀搜索算法优化的广义回归神经网络(GRNN)预测 -附代码

基于麻雀搜索算法优化的广义回归神经网络(GRNN)预测 文章目录 基于麻雀搜索算法优化的广义回归神经网络(GRNN)预测1.GRNN 神经网络概述2.GRNN 的网络结构3.GRNN的理论基础4.运输系统货运量预测相关背景5.模型建立6.麻雀搜索算法优化GRNN7.实验结果8.参考文献9.Matlab代码 摘要&…

广义回归神经网络(GRNN)的数据预测

广义回归神经网络是径向基神经网络的一种&#xff0c;GRNN具有很强的非线性映射能力和学习速度&#xff0c;比RBF具有更强的优势&#xff0c;网络最后普收敛于样本量集聚较多的优化回归&#xff0c;样本数据少时&#xff0c;预测效果很好&#xff0c; 网络还可以处理不稳定数…

神经网络(一):GRNN广义回归神经网络理论概念笔记

GRNN广义回归神经网络以及相关概念 https://blog.csdn.net/zengxiantao1994/article/details/72787849 https://blog.csdn.net/guoyunlei/article/details/76101899参考博客 小小白入坑系列&#xff0c;欢迎大佬的指教! 算法网上铺天盖地的&#xff0c;我只是把自己对算法的理…

【GRNN回归预测】基于matlab有限增量进化广义回归神经网络LIEV-GRNN数据回归预测【含Matlab源码 2132期】

⛄一、GRNN模型 GRNN是一种非线性回归的前馈式神经网络。通常是由输入层、模式层、求和层和输出层构成。GRNN算法在运算速度与学习能力上比径向基函数神经网络(radial basis function, RBF)、反向传播神经网络(back propagation, BP)更强&#xff0c;广泛应用于系统辨识、预测…

神经网络学习笔记(二)GRNN广义回归神经网络

广义回归神经网络&#xff08;GRNN&#xff09; 广义回归神经网络是径向基神经网络的一种&#xff0c;GRNN具有很强的非线性映射能力和学习速度&#xff0c;比RBF具有更强的优势&#xff0c;网络最后普收敛于样本量集聚较多的优化回归&#xff0c;样本数据少时&#xff0c;预测…

GRNN神经网络概述

GRNN&#xff0c;General Regression Neural Network&#xff0c;即广义回归神经网络&#xff0c;最早是由美国的Donald F.Specht教授于1991年提出的基于非线性的回归理论的人工神经网络模型[47,48]。GRNN广义回归神经网络具有较好的网络适应能力&#xff0c;从而使得神经网络能…

广义回归神经网络GRNN回归预测-MATLAB代码实现

一、GRNN简介 广义回归神经网络&#xff08;General Regression Neural Network, GRNN&#xff09;是1991年提出的基于径向基函数&#xff08;Radial Basis Fuction&#xff0c;RBF&#xff09;网络的一种改进形式&#xff0c;与径向基函数网络相比&#xff0c;其训练更为方便…

广义回归神经网络(GRNN)的实现(Python,附源码及数据集)

文章目录 一、理论基础1、广义回归神经网络结构2、输入层3、模式层4、求和层5、输出层6、优化思路 二、广义回归神经网络的实现1、实现过程&#xff08;GRNN.py&#xff09;2、预测结果3、参考源码及实验数据集 一、理论基础 广义回归神经网络&#xff08;Generalized Regress…