• 解读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)
    
  • 相关阅读:
    8.10
    今日头条笔试题 1~n的每个数,按字典序排完序后,第m个数是什么?
    Gym 100500B Conference Room(最小表示法,哈希)
    CodeForces 438D The Child and Sequence(线段树)
    UVALIVE 6905 Two Yachts(最小费用最大流)
    Gym Conference Room (最小表示法,哈希)
    hdu 2389 Rain on your Parade(二分图HK算法)
    Codeforces Fox And Dinner(最大流)
    zoj 3367 Counterfeit Money(dp)
    ZOJ3370. Radio Waves(2-sat)
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13281652.html
Copyright © 2020-2023  润新知