CFR

0在线课程

吴老师

1. 综述

参考文献

2. 非完全信息

参考文献
  在围棋这种完全信息的零和博弈中,作为算法需要解决的仅仅只是如何搜索大规模博弈树的问题,但是在德州扑克这种非完全信息博弈的问题中往往还藏有欺骗诈唬等等手段。
在这里插入图片描述

Code Explanation

下图中的, 在这里插入图片描述
或者, z ==terminal history
在这里插入图片描述
一个 s 对应一个 a, 也有 p(a | s), 所有的p 累乘就完事了(一个z 有 好多个 s),

在这里插入图片描述

pass_bet = {'p': 0, 'b': 1}
        if len(h) % 2 == 0:
            tmp_h = str(self.p1.hand) + h  # 手牌hand + 每个玩家的动作 e.g. pp
        else:
            tmp_h = str(self.p2.hand) + h
states = {'1': [0.5, 0.5], '1b': [0.5, 0.5], '1p': [0.5, 0.5], '1pb': [0.5, 0.5], '2': [0.5, 0.5], '2b': [0.5, 0.5],
          '2p': [0.5, 0.5], '2pb': [0.5, 0.5], '3': [0.5, 0.5], '3b': [0.5, 0.5], '3p': [0.5, 0.5], '3pb': [0.5, 0.5]}

# 通过递归实现 累乘
def CFR_algorithm(self, h, pai1, pai2):
	tmp_va = self.CFR_algorithm(
                    h + a, pai1 * states[tmp_h][pass_bet[a]], pai2)
# [tmp_h][0] 表示玩家1的后悔值, 
CFR_r[tmp_h][0] = CFR_r[tmp_h][0] + oppo_pai * (va[0] - ave_va)

求和

在这里插入图片描述

states[tmp_h] = [p / (p + b), b / (p + b)]

# 完整代码
    def change_states(self, h, p):
        if p == 1:
            tmp_h = str(self.p1.hand) + h
        else:
            tmp_h = str(self.p2.hand) + h

        p = max([CFR_r[tmp_h][0], 0])
        b = max([CFR_r[tmp_h][1], 0])
        if p == 0 and b == 0:
            states[tmp_h] = [0.5, 0.5]
        else:
            states[tmp_h] = [p / (p + b), b / (p + b)]

3. CFR+“直觉”(DeepStack)

参考文献
  而在deepstack中采用的方案是CFR+“直觉”。也就是类似于Alphago的估值函数,并不搜索到最终局,在树发展到一定深度就进行截断评估。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值