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

article/2025/10/8 20:03:14

一、概述

博弈的概念

博弈是一类具有智能行为的竞争活动,如下棋、战争等。

博弈的类型

  • 双人完备信息博弈:两位选手(例如MAX和MIN )对垒,轮流走步,每一方不仅知道对方已经走过的棋步,而且还能估计出对方未来的走步。
  • 机遇性博弈:存在不可预测性的博弈,例如掷币等。

博弈树

若把双人完备信息博弈过程用图表示出来,就得到一棵与/或树,这种与/或树被称为博弈树。在博弈树中,那些下一步该MAX走步的结点称为MAX结点,下一步该MIN走步的结点称为MIN 结点。

博弈树的特点

  1. 博弈的初始状态是初始结点;
  2. 博弈树中的“或”结点和“与”结点是逐层交替出现的;
  3. 整个博弈过程始终站在某一方的立场上,例如MAX方。所有能使自己一方获胜的终局都是本原问题,相应的结点是可解结点;所有使对方获胜的终局都是不可解结点。

二、极大极小过程

(1)算法思想

极大极小过程用当前正在考察的结点生成一棵部分博弈树,并利用估价函数f(n)对叶结点进行静态估值。

求叶结点的值

  • 对MAX有利的结点,其估价函数取正值
  • 对MIN有利的结点,其估价函数取负值
  • 使双方均等的结点,其估价函数取接近于0的值。

求非叶结点的值:

必须从叶结点开始向上倒退。其倒退方法是:

  • 对于MAX结点,由于MAX 方总是选择估值最大的走步,因此,MAX结点的倒退值应该取其后继结点估值的最大值。
  • 对于MIN结点,由于MIN方总是选择使估值最小的走步,因此MIN结点的倒推值应取其后继结点估值的最小值。
  • 这样一步一步的计算倒推值,直至求出初始结点的倒推值为止。这一过程称为极大极小过程。

(2)极大极小过程实例
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


三、α-β剪枝

(1)算法思想

极大极小过程是先生成与/或树,然后再计算各结点的估值,这种生成结点和计算估值相分离的方式,需生成规定深度内的所有结点,搜索效率较低。如果能边生成结点边对结点估值,并剪去一些没用的分枝,这种技术被称为α-β剪枝。

剪枝方法

  1. MAX结点(或结点)的α值为当前子结点的最大倒推值;
  2. MIN结点(与结点)的β值为当前子结点的最小倒推值;
  3. α-β剪枝的规则如下:
  • β剪枝: 任何MAX结点n的α值大于或等于它先辈结点的β值,则n 以下的分枝可停止搜索,并令结点n的倒推值为α。这种剪枝称为β剪枝。
  • α剪枝: 任何MIN结点n的β值小于或等于它先辈结点的α值,则n 以下的分枝可停止搜索,并令结点n的倒推值为β。这种剪枝称为α剪枝。

(2)α-β剪枝实例

在这里插入图片描述

1. 剪枝1:
在这里插入图片描述
α剪枝: MIN结点G的β值(<=1)小于或等于它先辈结点C的α值(>=4),结点G不可能让先辈结点C的α值增大,则G以下的分枝可停止搜索,并令结点n的倒推值为β(<=1)。这种剪枝称为α剪枝。

详解: 在该图中,K、L、M的估值推出结点F的到推值为4,即F的β值为4,由此可推出结点C的到推值≥4。 记C的到推值的下界为4,不可能再比4小,故C的α值为4。由结点N的估值推知结点G的倒推值小于≤1,无论G的其它子结点的估只是多少,G的倒推值都不可能比1大。因此,1是G的倒推值的上界,所以G的值≦1 。另已知C的倒推值≥4,G的其它子结点又不可能使C的倒推值增大。因此对G的其它分支不必再搜索,相当于把这些分枝剪去。

2. 剪枝2:

在这里插入图片描述

β剪枝: MAX结点D的α值(>=5)大于它先辈结点A的β值(<=4),则D以下的分枝可停止搜索,结点D不可能让先辈结点A的β值减小,并令结点D的倒推值为α(>=5)。这种剪枝称为β剪枝。

详解: 由F、G的倒推值可推出结点C的倒推值≥4 ,再由C可推出结点A的倒推值≤4,即A的β值为4。另外,由结点P、Q推出的结点I的倒推值为5,因此D的倒推值 ≥5,即D的α值为5。此时,D的其它子结点的倒推值无论是多少都不能使D及A的倒推值减少或增大,所以D的其他分枝被减去,并可确定A的倒推值为4 。

3. 其它剪枝(省略)


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

相关文章

博弈树与α-β剪枝

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

博弈树

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

vim的目录树插件NERDtree的安装

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

Vim的NerdTree插件

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

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

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

java之TreeNode

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

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

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

gvim安装NERDTree插件

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

安装NERDtree

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

nerdtree-git-plugin插件

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

NERDTree安装

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

linux下Nerdtree安装方法

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

GVim配置一个漂亮的NerdTree

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

NERDTree插件安装和使用

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

Win系统中GVim8.2配置NerdTree插件

目录 功能说明 NerdTree插件实现效果图&#xff1a; NerdTree安装&#xff1a; NerdTree配置 功能说明 NERDTree是Vim最常用的插件之一&#xff0c;可以在Vim运行时显示目录和文件结构&#xff0c;类似TextMate左侧的文件浏览器&#xff0c;但操作起来更为方便&#xff0c;…

vim插件:显示树形目录插件NERDTree安装 和 使用

前言 一、下载和配置 NERDTree插件的官方地址如下&#xff0c;可以从这里获取最新的版本 https://github.com/scrooloose/nerdtree 下载zip安装包 或者使用下面官网源文件安装方法 我的实验环境是centos6.6,其他版本可能有些不同。 安装方法很简单&#xff0c;先把压缩文件下…

VIM插件:目录导航与操作插件NERDTree的使用方法

VIM插件&#xff1a;目录导航与操作插件NERDTree的使用方法 &#x1f4d8; 从外部Buffer打开NERDTree的方法 &#x1f468;‍&#x1f4bb; 假设已经会了VIM的配置基本知识&#xff0c;并会安装和简单配置VIM插件了&#xff0c;如果这点不太熟悉&#xff0c;可以自行查看相关…

webview跳转外部链接

提示&#xff1a;本文章主要讲述js点击跳转外链 前言 一、示例模板 二、使用步骤 1.需点击跳转页面&#xff08;假设为a&#xff09; 2.跳转页面&#xff08;假设为b&#xff09; 3.json文件中配置路由 4.配置业务域名 总结 前言 官方介绍&#xff0c;web-view这个组件…

【小程序】Web-View 小程序跳转外部链接

写这个是因为&#xff0c;最近小程序的一个需求需要从小程序跳转到客户的官网&#xff0c;或者其他外部报名链接。 如果是以前的话&#xff0c;可能就无法实现&#xff0c;但是小程序的版本更新速度还是可观的&#xff0c;现在既可以跳转外部链接&#xff0c;还可以跳转APP&…

【Web-View】小程序跳转外部链接

最近小程序的一个需求要从小程序跳转到客户的官网&#xff0c;或者其他外部链接&#xff0c;如果是以前的话&#xff0c;可能就无法实现&#xff0c;但是小程序的版本更新速度还是可观的&#xff0c;现在既可以跳转外部链接&#xff0c;还可以跳转APP&#xff1b; 文档&#xf…