CFR-虚拟遗憾最小化算法入门(一)

CFR-虚拟遗憾最小化算法入门

CFR, Counterfactual Regret Minimization,是一个用于解决 信息不对称1 游戏中决策的经典算法。我搜索到网上相关的中文资料比较少,当然这个算法相对于现在来说可以说是有些过时。但我认为作为入门的算法还是很有帮助的。
本人也只是个初学者,如果有错误,尽请指出。
本文主要关注于实现,对于理论部分只是略微概述,详情还是推荐阅读论文原文

基本原理

如算法的名字,CFR是基于遗憾的,或者是后悔。算法先做出决策,然后基于游戏结果来判断游戏中决策的效果,判断是否应该这么做。就是后悔做了什么和后悔没有做什么。

CFR是基于深度优先搜索的。训练时,它针对所得到的信息递归遍历每一种决策,直到游戏结束,在返回的时候根据游戏结果来对每一步的决策进行后悔。将后悔与信息一一对应起来2,决策时,根据这个做出决策。

决策时只根据信息来进行决策,与之前的决策历史无关。可以通过将决策历史加入到信息,以实现决策时参考决策历史来进行决策。

实现部分

网上都是石头剪刀布和打牌,而我想做的是射击游戏,让电脑学会CQB!!!

游戏说明

游戏画面示例
游戏非常简单,一个二维俯瞰视角的射击游戏。
玩家自己是黑色的,敌人是黄色的,红色的三角形表示面朝的方向。
可以观察到,右侧画面的玩家面朝上方,看不到处在他右侧的敌人。左侧画面的玩家面朝左侧,可以看到他正面的敌人。
具体游戏代码在Github

CFR实现

完整代码

训练部分
参考代码
def cfr(self, server:Shoots, history:str, player_id:int) -> float:
	server.update_model() # 判断玩家死亡,判断视野内的敌人
	
	if [i.dead for i in server.players].count(False) == 1: # 只剩下一个活着的玩家,游戏结束,递归结束
	    actions = len(history) / 2
	    win = 1 if not server.players[player_id].dead else -1
	    # 胜利>
  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值