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

目录

  • CFR-虚拟遗憾最小化算法入门
    • 基本原理
    • 实现部分
      • 游戏说明
      • CFR实现
        • 训练部分
          • 参考代码
          • 举例说明
            • 初始情况(概率相等)
            • 一般情况(概率不等)
        • 决策部分
          • 参考代码
        • 效果分析
  • 目录

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

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

基本原理

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

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

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

实现部分

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

游戏说明

CFR-虚拟遗憾最小化算法入门(一)_第1张图片
游戏非常简单,一个二维俯瞰视角的射击游戏。
玩家自己是黑色的,敌人是黄色的,红色的三角形表示面朝的方向。
可以观察到,右侧画面的玩家面朝上方,看不到处在他右侧的敌人。左侧画面的玩家面朝左侧,可以看到他正面的敌人。
具体游戏代码在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 

你可能感兴趣的:(机器学习,算法,python,游戏,人工智能)