在github上看到一位博主写的很不错,原网址
Counterfactual regret minimization(下称CFR)是目前针对不完全信息博弈问题的一类主流求解方法,在棋牌类游戏中有较为广泛和成功的应用。理解这类算法的思路和性质,将有助于后续对一般的不完全信息博弈问题的研究。在这篇文章中,我将对近期对CFR的学习做一个简单的整理,便于后续回顾。内容主要包括:
对原始的CFR算法及其经典变种的简单实现,以及实现过程中遇到的一些问题点和注意点;
对CFR算法思路的一些个人理解,以及后续拓展方向的思考;
通过一个简单的测试问题(Leduc纸牌游戏),对实现的算法的效果进行仿真评估;相应的代码仓库地址在这里。
问题背景
在不完全信息(imperfect information)的博弈问题中,系统的一些参与方对系统中的信息并不是完全感知的;例如,在许多牌类游戏中,一个玩家并不知道其他玩家的手牌信息。一个值得思考的问题是:不完全信息博弈问题的解决方法,与完全信息博弈问题的解决方法,有何异同?
**答:**对于完全信息博弈(perfect information game)问题,当系统状态的演化方程(transition)已知时,一种自然的求解方法,是通过暴力搜索的方式,对未来可能发生的情况(包括对手的响应策略)进行仿真推演,从而选择当下较优的行为动作(action);在该类求解方法中,一种较为知名的是蒙特卡洛树搜索(MCTS),该方法近年来在围棋等游戏中取得了很好的效果。但是,这类方法较难直接应用到不完全信息博弈中。其中一个主要难点在于仿真的执行问题:由于我们并不清楚对手具体掌握了哪些信息,因此无法仅通过系统演化方程和现有信息,对对手的策略进行仿真推演。
针对上述问题,一种可能的解决思路是:首先,遍历每种与当前信息相容(consistent)的完全信息情况,利用系统演化方程对其进行仿真推演,估计选择不同动作所产生的后果(outcome)的价值;然后,通过某种方式对每种完全信息情况赋予一定权重(例如,在牌类游戏中,根据对手历史行为信息,估计对手手牌的可能情况与相应概率),进而对各行为动作在不同完全信息情况下的价值进行累加,得到期望价值;最后,根据该期望价值,生成行为策略。
在某种程度上,我们可以认为,CFR的做法基本与上述思路一致,只是在后果的价值评估、权重计算、行为策略生成等步骤上给出了更为明确的计算过程。
算法实现
在这一节中,我将主要介绍CFR及其基础变种的具体步骤和实现细节。为了更好地进行描述和讨论,我将首先引入一些常用记号(notation)来表示前一节中提到的基本元素。
在某个系统状态下,我们用 h ∈ H h \in \mathcal{H} h∈H(对应history)代表系统的完全信息(特别地,包含所有历史信息),用 I ∈ I I \in \mathcal{I} I∈I(对应Information)代表当前参与者(agent) p ∈ P = { 1 , ⋯ , N } p \in \mathcal{P} = \{1,\cdots,N\} p∈P={
1,⋯,N}(对应player)的现有信息。特别地,对于给定的完全信息 h h h和当前参与者 p p p,其相应的现有信息 I I I可以通过函数 I ( h ) = I ( h , p ( h ) ) I(h) = I(h,p(h)) I(h)=I(h,p(h))表示。反之,与现有信息 I I I相合的所有完全信息 h h h组成的集合可用 H ( I ) \mathcal{H}(I) H(I)表示。
我们用函数 f f f代表系统状态的演化规律:具体来说,对于当前系统状态 h h h,如果相应的当前参与者 p p p选取的动作是 a ∈ A a \in \mathcal{A} a∈A(对应action),那么下一阶段的系统状态可以用 h ′ = f ( h , a ) h' = f(h,a) h′=f(h,a)来表示。
对于每种系统终态 z ∈ Z ⊂ H z \in \mathcal{Z} \subset \mathcal{H} z∈Z⊂H,各系统参与者所获得的收益可以用向量 u ( z ) ∈ R N u(z) \in \mathbb{R}^N u(z)∈RN表示,其中 N N N是系统参与者的数量。特别地,对于两人零和博弈,向量 u ( z ) u(z) u(z)的自由度为 2 − 1 = 1 2-1=1 2−1=1,因此可以直接使用参与者1的收益进行替代。
系统参与者 p p p的行为策略用函数 σ p : I × A → R \sigma_p: \mathcal{I} \times \mathcal{A} \to \mathbb{R} σp:I×A→R表示:对于每种可能的现有信息 I I I, σ p ( I ) \sigma_p(I) σp(I)对应行为动作集合 A ( I ) \mathcal{A}(I) A(I)上一个概率分布。
给定系统参与者 p p p的策略 σ p \sigma_p σp和系统规律 ( f , I ( ⋅ ) ) (f,I(\cdot)) (f,I(⋅)),对任一完全信息 h h h,我们可以根据系统演化规律 f f f复现出从系统初态 h 0 h_0 h0到当前状态 h h h的过程中,参与者 p p p所作出的所有行为动作 ( I 1 , a 1 ) , ⋯ , ( I m , a m ) (I_1,a_1),\cdots,(I_m,a_m) (I1,a1),⋯,(Im,am),从而计算出 p p p对 h h h这一事件的发生的概率贡献: π p σ ( h ) = ∏ m σ p ( I m , a m ) \pi^{\sigma}_p(h) = \prod_{m} \sigma_p(I_m,a_m) πpσ(h)=∏mσp(Im,am)。
相应地,给定所有系统参与者的策略 σ = { σ p } \sigma=\{\sigma_p\} σ={
σp},我们可以计算出,所有系统参与者对 h h h这一事件的发生的概率贡献 π σ ( h ) = ∏ p ′ ∈ P π p ′ σ ( h ) \pi^{\sigma}(h) = \prod_{p'\in \mathcal{P}}\pi^{\sigma}_{p'}(h) πσ(h)=∏p′∈Pπp′σ(h),以及除 p p p外其他系统参与者的贡献 π − p σ ( h ) = π σ ( h ) / π p σ ( h ) \pi^{\sigma}_{-p}(h) = \pi^{\sigma}(h) / \pi^{\sigma}_p(h) π−pσ(h)=πσ(h)/πpσ(h)。
进一步地,我们可以将 p p p的策略 σ p \sigma_p σp对“从系统状态 h h h到一个后续系统状态 h ′ h' h′的发生概率”的贡献值定义为 π p σ ( h , h ′ ) = π p σ ( h ′ ) / π p σ ( h ) \pi^{\sigma}_p(h,h') = \pi^{\sigma}_p(h')/\pi^{\sigma}_p(h) πpσ(h,h′)=πpσ(h′)/πpσ(h)。其他参与者的贡献值则可相应定义为 π − p σ ( h , h ′ ) = π − p σ ( h ′ ) / π − p σ ( h ) \pi^{\sigma}_{-p}(h,h') = \pi^{\sigma}_{-p}(h')/\pi^{\sigma}_{-p}(h) π−pσ(h,h′)=π−pσ(h<

本文深入探讨了Counterfactual Regret Minimization(CFR)算法在不完全信息博弈中的应用,包括其基本原理、实现细节、优化方法如CFR+和MCCFR。通过实例分析,展示了CFR如何逐步收敛到近似纳什均衡,并讨论了算法在计算复杂性和收敛速度方面的挑战及改进策略。
最低0.47元/天 解锁文章
1083

被折叠的 条评论
为什么被折叠?



