• 解读gym中的action_space和observation_space


    做强化学习的相关任务时通常需要获取action和observation的数目,但是单智能体和多智能体环境下的action_space等其实是不同的。

    先看单智能体环境,

    print(env.action_space)
    print(env.observation_space)
    

    打印相关的space,输出如下:

    Discrete(19)
    Box(115,)
    

    其中Discrete(19)是action_space,19代表有19个action,它其实是一个类,并且继承一个Space类,所以不可能用n_actions=env.action_space[0]这样类似数组的手段来得到action的个数,同理observation也是,一般获取action和observation个数如下:

    n_actions=env.action_space.n #19
    n_observations=env.observation_space.shape[0] #115
    

    这样就能得到action个数为19,observation为115。
    而对于多智能体的相关space如下:

    MultiDiscrete([19 19 19])
    Box(3, 115)
    

    其中MultiDiscrete([19 19 19])代表的是action_space,它不能再像单智能体那样n_actions=env.action_space.n来获取action个数,因为MultiDiscrete([19 19 19])这个类没有n这个属性,此外我们需要从这两个space中得到智能体的个数,针对action_space,其实可以用.nvec属性将MultiDiscrete转为数组:

    sa_size=[]
    for acsp in env.action_space.nvec:
    	sa_size.append((env.observation_space.shape[1], acsp))
    
    print(sa_size)
    n_agents=len(sa_size)
    

    将所有的action和observation个数写到sa_size列表中就行。
    如何写一个通用的呢?可以使用env.action_space.shape这个变量来判断,在单智能体该变量为空,如下:

    sa_size=[]
    if env.action_space.shape:
        for acsp in env.action_space.nvec:
            sa_size.append((env.observation_space.shape[1], acsp))
    else:
        sa_size.append((env.observation_space.shape[0], env.action_space.n))
    
    print(sa_size)
    
  • 相关阅读:
    GdiPlus[34]: IGPGraphicsPath (一)
    GdiPlus[33]: 基本绘图与填充命令
    GdiPlus[29]: IGPPen: 虚线样式
    [征询意见]博客园logo
    [公告]网站恢复正常运行
    [公告]博客园将与博文视点合作推出一系列.NET图书
    [公告]由Bruce Zhang负责博客园的出书工作
    通过Windows Live Alerts订阅博客园首页RSS
    [征询意见]博客园新logo
    [新功能]新闻管理
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13281652.html
Copyright © 2020-2023  润新知