上一章介绍了一下纳什均衡策略,他是用一个叫cfr的算法求得的,介绍cfr前我们先介绍下regret matching
用石头剪刀布举例,石头剪刀布的收益矩阵如下。
算法迭代为
对每个玩家,初始化regretSum[action]为0
迭代T次
每个大于零的regretSum值归一化求策略strategy
把stragegy 加到strategy Sum中
根据strategy抽样动作a
根据抽样动作a的收益u(a)计算其他动作a’后悔值 regret[a'] = u(a) - u(a)
将regret[action]值加到regretSum[action]中
对strategySum归一化求average strategy
这样我们就可以求得剪刀石头布的均衡解为33%,33%,33%。
简单来说就是如果这次出石头比出布多赚了2,我就在regretSum[石头]上累加一个2,我抽样动作的概率strategy是根据regretSum的分布来的,我们就会尝试更多的石头,noam大神的论文有证明regret matching 的收敛性,论文如下。
https://pan.baidu.com/link/zhihu/71hkzYuThliXVLRVR3cvhJRWcteyEzSwZP9E==
这里引入两个概念
best Response ,假设我们已知对手100%出石头,那么我们如果采取100%出布的策略,这个策略就叫做best Response,best Response一定是one hot,100%执行纯动作的。
对手策略的可利用度是best Response的收益
题外话大家可以思考下,当我们修改剪刀石头布的规则为剪刀赢得2分输也是2分,石头和布得一分那么玩家的纳什均衡策略是多少?
这里推荐一篇论文,里面对cfr的介绍很详细并且附带代码
https://pan.baidu.com/link/zhihu/7NhWzYuRh2i1RwRzZFbO9TJTaIVzRDRwZKln==
2.Cfr虚拟遗憾值最小化算法
石头剪刀布利用的regret matching算法收益会立马返回,它不适用于拓展式博弈,当博弈问题是博弈树的形态,需要训练博弈树上每个信息集的策略,如何定义中间节点的状态价值函数,如何更新regret值,如何确保最终结果是纳什均衡这些问题都regret matching 都无法解决的,这就需要我们的cfr 虚拟遗憾值算法来解决。
截取了第一篇论文中对cfr的介绍,其中 kuhn poker 的例子(附带了代码)应该就能了解实现方式,网上也有其他博主讲的比较详细,当看到cfr算法的第一眼会觉得好复杂,其实我们从regret matching的扩展来分析问题分析问题。
regret matching 后悔值计算公式
cfr的后悔值计算公式
对比cfr和regret matching的regret ,最大的区别是多了对手到达概率,当时思考了很久也不清楚他的物理意义,尝试去掉这个概率跑结果就错误了,后来实践后个人认为在博弈树下面自己和对手都会做出大量不同的选择,我们要将不同选择合成一个类似状态价值向上反传所以需要给不同选择的收益给予不同的权重,如果对手都不会走到这个节点,那么这个收益为上层节点的贡献也为0。
还有一个需要注意的点,在统计平均策略时,实时的策略要乘以自己的到达概率来累加,这个也好理解,如果在当前策略下走到这个节点的概率很小,那么累计这个策略到平均策略也是无意义的。
上面只是个人比较主管的推断,还是要看详细的数学证明。
https://pan.baidu.com/link/zhihu/7NhWzYuRh2i1RwRzZFbO9TJTaIVzRDRwZKln==
1.论文首先定义了average overall regret ,并且证明了如果average overall regret 小于 e ,那么平均策略就符合2e 可利用度之内的纳什均衡策略。
接着证明了我们的反事实值所有信息集的regret之和大于average overall regret 。
最后证明了反事实regret的收敛性。也证明cfr 算法 可以收敛到纳什均衡。
下一章介绍一下现在市面上solver 和 Libratus,Pluribus ,deepStack 的原理和区别。