用AI解释AI - 《格斗之王AI》代码解读

该博客详细解读了B站UP主林亦LYi的《格斗之王!AI写出来的AI竟然这么强!》项目的代码,主要涉及train.py中的PPO算法实现,包括环境创建、SubprocVecEnv、Monitor的使用,以及PPO参数、采样流程和学习率调度。同时,解释了street_fighter_custom_wrapper.py中gym.spaces.Box表示的观察空间和test.py中的custom_objects。
摘要由CSDN通过智能技术生成

目录

一、说明

 二、AI的解释

==train.py部分==

1. os.makedirs

 2. SubprocVecEnv([make_env( )...])

 3. env = retro.make()

4. gym.Wrapper 

5. env = Monitor(env) 

 6. PPO()参数

 7. n_epochs和total_timesteps的关系

8. PPO算法采样流程 

9. Linear scheduler 

10.  CheckpointCallback

11. ep_len_mean、approx_kl等指标解释

==street_fighter_custom_wrapper.py部分==

12. gym.spaces.Box()

13. obs形状(200,256,3)

==test.py部分==

14 .custom_objects 


一、说明

该项目针对B站UP主 林亦LYi 的作品 格斗之王!AI写出来的AI竟然这么强!进行代码解读。

因为我们之前对此接触较少,所以我们借助AI的力量进行解读。在理解的基础上,做了一些整理。

林亦LYi项目代码:GitHub - linyiLYi/street-fighter-ai: This is an AI agent for Street Fighter II Champion Edition.

此外,针对项目代码的视频解释《格斗之王AI》代码逐行解读_哔哩哔哩_bilibili。 

 二、AI的解释

基于AI生成,可能对理解代码有帮助。(复制答案的过程中,数字标号有误,可忽略)

==train.py部分==

1. os.makedirs

问:os.makedirs(LOG_DIR, exist_ok=True)什么意思
答:os.makedirs(LOG_DIR, exist_ok=True) 是一个用于创建目录的 Python 代码片段。
os.makedirs() 是一个函数,用于递归创建多层目录。它接受两个参数:
LOG_DIR:要创建的目录的路径。这是一个表示目录路径的字符串变量。
exist_ok=True:一个可选的参数,表示如果目录已经存在是否忽略错误。如果设置为 True,则在目录已存在的情况下不会引发异常;如果设置为 False(默认值),则在目录已存在时会引发 FileExistsError 异常。

 2. SubprocVecEnv([make_env( )...])

问:解释下env = SubprocVecEnv([make_env(game, state="Champion.Level12.RyuVsBison", seed=i) for i in range(NUM_ENV)])
答:这段代码使用 OpenAI Gym 的 SubprocVecEnv 类创建了一个并行化的环境,以便在多个并行的游戏环境中进行训练或评估。

下面是代码中的关键部分的解释:

1. `make_env(game, state="Champion.Level12.RyuVsBison", seed=i)`:这是一个自定义函数 `make_env`,用于创建游戏环境。它接受三个参数:游戏名称、游戏状态和随机种子。在这里,使用游戏名称和特定的游戏状态来创建游戏环境。

2. `NUM_ENV`:这是一个表示要创建的并行环境数量的变量。

3. `[make_env(game, state="Champion.Level12.RyuVsBison", seed=i) for i in range(NUM_ENV)]`:这是一个列表推导式,用于创建多个游戏环境。在这里,使用 `make_env` 函数创建了 `NUM_ENV` 个游戏环境,并将它们放入一个列表中。

4. `SubprocVecEnv([...])`:这是使用 SubprocVecEnv 类创建并行环境的部分。`SubprocVecEnv` 是 Gym 提供的一种环境类,它可以在多个并行进程中运行多个环境实例。它接受一个包含游戏环境的列表作为参数,并返回一个并行化的环境对象。

综合起来,这段代码的目的是使用 SubprocVecEnv 创建多个并行运行的游戏环境,每个环境都使用相同的游戏名称和特定的游戏状态。这样可以在训练或评估过程中同时在多个环境中进行并行操作,以提高效率和性能。

 3. env = retro.make()

问:解释下        env = retro.make(
            game=game, 
            state=state, 
            use_restricted_actions=retro.Actions.FILTERED, 
            obs_type=retro.Observations.IMAGE    
        )

答:这段代码使用 OpenAI Retro 库创建了一个游戏环境。

下面是代码中的关键部分的解释:

1. `retro.make()`:这是 Retro 库中的一个函数,用于创建游戏环境。它接受几个参数来指定游戏名称、游戏状态和其他选项。

1. `game`:这是一个参数,表示游戏的名称。它指定了要创建的游戏环境所对应的游戏。

1. `state`:这是一个参数,表示游戏的状态。游戏状态是游戏的一个特定快照或初始状态。通过指定游戏状态,可以从特定的游戏进度或关卡开始。

1. `use_restricted_actions`:这是一个参数,用于指定游戏环境是否使用受限制的动作集。在 Retro 中,游戏通常提供了完整的动作空间,但有些动作可能是不必要或无效的。通过设置 `use_restricted_actions=retro.Actions.FILTERED`,可以使用经过筛选的动作集来减少动作空间的大小。

1. `obs_type`:这是一个参数,用于指定观测的类型。在这里,`obs_type=retro.Observations.IMAGE` 表示观测的类型为图像。这意味着游戏环境将返回图像作为观测结果。

综合起来,这段代码的目的是使用 Retro 库创建一个特定游戏和状态的游戏环境。它还指定了使用受限制的动作集和返回图像观测结果。这样,您可以在游
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值