第四章 博弈树game tree

article/2025/10/8 20:01:31

这里写目录标题

  • perfect-information game
    • 从博弈树得到收益表
    • subgame
    • backward induction 反向推导
    • 一个值得思考的例子:
  • 另一个例子
  • umperfect information extensive
  • 混合策略和行为策略(mexed and behavioral strategies)
  • 不完美信息博弈的求解

博弈树用于动态博弈(不是同时决定)。

博弈按照博弈的顺序和信息的情况分为四大类:
   1、完全信息静态博弈(最简单的,表格就行)
   2、完全信息动态博弈(又分为完全且完美信息动态博弈和完全但非完美信息动态博弈两小类)
   3、非完全信息静态博弈
   4、非完全信息动态博弈

perfect-information game

( N , A , H , Z , χ , ρ , σ , u ) (N,~A, ~H, ~Z,~\chi, ~\rho, ~\sigma, ~u ) (N, A, H, Z, χ, ρ, σ, u)

N:人数
A:每个人的行动集合
Z:叶子节点。
H:博弈树中除了叶子节点的其余节点集合。
χ ~\chi  χ:行动函数. H-> 2 A 2^A 2A, 返回可能的行动集合
ρ \rho ρ:玩家函数.H->N, h点是谁行动
σ \sigma σ: HxA -> H + Z,在h点使用a策略,会得到下一个节点,下一个点可能是非叶子节点或叶子节点。z
u: 效用函数。z->R

例子:
在这里插入图片描述
玩家1决定怎么分2块钱,玩家2决定是否接受。

玩家1有3个纯策略:2-0 1-1 0-2
玩家2有8个纯策略:nnn,nny,nyn,nyy,ynn,yny,yyn,yyy.(nny表示玩家2拒绝2-0 1-1的分法,只接受0-2的分法)

怎么数纯策略数量:每个节点的行动集做叉积。
例如上面的例子:{ny}x{ny}x{ny} = {nnn,nny,nyn,nyy,ynn,yny,yyn,yyy}

在这里插入图片描述
上面这个例子中,玩家1的策略也是4个:AG, AH, BG, BH(虽然选了A就不可能来到G/H, 即AG AH都是A,但还是算两个)

混合策略 最优应对 纳什均衡等概念都可以类比过来。

从博弈树得到收益表

在这里插入图片描述

注意:
变成表后会增加重复数据,表变大z。
从表到树的逆变换不一定可行。事实上这种变换本身就不能进行,比如硬币游戏本来就是双方同时出,如果改成博弈树,就有一个人先出,显然改不了。

定理:每个perfect-information game 都有一个纯策略纳什均衡。

怎么找纳什均衡:直接通过树有一定困难。我们可以通过表,利用前面的知识来求(如果这个格子第第一个数是列里最大的,第二个数是行里最大的)。

subgame

上面得到了3个纳什均衡,但是有的和直觉相违背。比如BH、CE。因为玩家1第二次不可能选H而不选G。

为什么会出现这种情况:玩家1威胁玩家2,如果你选F我就选H,因此玩家2只能选E。但是这个威胁真的有效吗。

定义:
G在点h的子博弈:G在点h的子博弈
G的子博弈集合:在所有点的子博弈的集合。
子博弈完美均衡:对于博弈G的任何子博弈G’,结果s都是G’的纳什均衡,那么s是G的子博弈完美均衡。

因此博弈G可能有很多均衡,但是只有一部分是子博弈完美均衡,这些均衡更加符合常理。

在这里插入图片描述
AG CF是一个子博弈完美均衡,因为考虑上面的3个子博弈,得到的结果都是红色的线,而BH、CE不是子博弈完美。

backward induction 反向推导

从子博弈一个一个网上求。

一个用递归来求子博弈完美均衡:

class H:def __init__(self,name,chooseBy,actionList=[],utility=[]) -> None:self.name=nameself.actionList =actionListself.utility=utilityself.chooseBy=chooseBydef backwordInduction(h:H):if len(h.actionList)==0:return h.utilitymaxUtility=[-10000,-10000]maxNode =Nonefor a in h.actionList:temp = backwordInduction(a)if maxUtility[h.chooseBy-1]<temp[h.chooseBy-1]:maxUtility=tempmaxNode=ah.utility=maxUtilitypath.append(maxNode)return maxUtilitynodeG = H("G",2,[],[2,10])
nodeH = H("H",2,[],[1,0])nodeC = H("C",1,[],[3,8])
nodeD = H("D",1,[],[8,3])
nodeE = H("E",1,[],[5,5])
nodeF = H("F",1,[nodeG,nodeH])nodeA = H("A",2,[nodeC,nodeD])
nodeB = H("B",2,[nodeE,nodeF])nodeRoot = H("Root",1,[nodeA,nodeB])path=[]
print(backwordInduction(nodeRoot))
print([i.name for i in path])
print([(i.name,i.utility) for i in path])

输出:

[3, 8]
['C', 'G', 'F', 'A']
[('C', [3, 8]), ('G', [2, 10]), ('F', [2, 10]), ('A', [3, 8])]

这个方法有优化的地方: α − β \alpha-\beta αβ剪枝,可以让一些点不遍历。这里不介绍了。

一个值得思考的例子:

在这里插入图片描述
如果用程序来求,可以得到唯一的子博弈完美均衡(1,0),但这一结果是严格劣于其他多个解的。

如果玩家1选A,玩家2选什么?
如果理性分析,应该选D,但是玩家1选了A,下一次是不是还会选A?所以值得思考的是:如果对方没有按套路出牌,我应该仍然理性吗。

另一个例子

玩家1决定怎么分10金币,玩家2决定是否接受。不接受就都得不到。

理论上的纳什解是玩家1分1金币给2,2接受。或者玩家1全给自己,2接受,或者全给自己,2不接受。

但是实际生活中的试验发现,玩家1往往会分4、5个给2,而玩家2也往往表示:如果给我小于4/5,我不会接受。

umperfect information extensive

象棋这种游戏知道对方怎么走,是完美博弈。而扑克比大小这种游戏,不知道对方大不大,只知道他加码了,我应该加码吗?这就是非完美博弈。

和完美信息博弈相比,多了一个 I I I
I = { I 1 , I 2 , . . . I n } I=\{I_1,I_2,...I_n\} I={I1,I2,...In} 是所有人的XX集合
I i = { I i 1 , I i 2 , . . . I i k i } I_i=\{I_{i1},I_{i2},...I_{iki}\} Ii={Ii1,Ii2,...Iiki} 是个体i的等价类集合(set of equivalence classes):XX集合
I i 1 = { h a , h b . . . } I_{i1}=\{h_a,h_b...\} Ii1={ha,hb...}是equivalence class。包括一个或多个选择点。
同一个equivalence class中的节点h,h’拥有相同的 χ ~\chi  χ ρ \rho ρ,即这两个点都属于同一个人来决策,而且两个节点做出的决策集合相同。 玩家在这两个点时会分不清自己在那个点。(例如玩家只知道自己在 I i 1 I_{i1} Ii1,但是不知道是在ha还是hb(除非里面只有ha一个元素))

混合策略和行为策略(mexed and behavioral strategies)

混合策略:纯策略的混合。例如下图中,(A,G)是1的一个纯策略,(B,H)也是。那么(0.6(A,G),0.4(B,H))就是混合策略。
行为策略:每次决策时都有一个概率。例如这是一个行为策略:0.5A+0.3G。表示第一出0.5选A(0.5B),第二处0.3G(0.7H)
在这里插入图片描述

在完美信息博弈中,两者是可以互换的。即混合策略可以化成行为策略,反过来也可以。事实上在不完美信息博弈中也成立,只要玩家具有完美记忆(知道自己访问过的信息集(I),记得自己的行动)

下面是一个不具有完美信息博弈的例子:
在这里插入图片描述
纯策略:玩家1:(L,R)两个,玩家2:(U,D)两个
混合策略纳什均衡:
因为对玩家2,D比U好,对玩家1RU比LU好,所以RD是纳什均衡。
行为策略:
在这里插入图片描述

不完美信息博弈的求解

个体不知道自己在哪个点。因此不能用递归反推,没有合适的子博弈。求解困难

在这里插入图片描述
一个企业竞争的例子。环境决定公司1强(S)还是弱(W),公司1知道自己是S还是W后进行决策进入市场(E)还是不进入(N),公司2不知道公司1是强是弱,当1进入,2要决定自己抵制(F)还是随和(A)

这个博弈只有一个子博弈,就是它本身,因为上面有个虚线连起来了。

因此子博弈完美均衡就是整个博弈的纳什均衡。

纳什均衡:
如果2声称自己总会抵制(F),就会得到纳什均衡(NN,FF)。
如果这个声称不可信,2实际上总会妥协(A),因为这对它有利,而1采取S则E,W则N的策略。这也是一个纳什均衡。
然后还有一些混合纳什均衡。

第二个纳什均衡更加可信

解决这种问题的两个方法:Sequential Equilibrium, Perfect Bayesian Equilibrium


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

相关文章

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

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

博弈树与α-β剪枝

一、评价函数&#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&…