Jh
Jh
谢谢您的解答。请问: 1.如果观测空间取值范围可以任意给定,那是否意味着观测空间取值范围并没有在玄策中起到什么作用?只是观测空间的维度会有作用?只需将观测空间取值范围都定义为[-np.inf, np.inf],算法也可以正确运行? 2.对于每个智能体的动作空间,我定义的是spaces.Box(low=act_lower_bound, high=act_upper_bound, dtype=np.float32),维度是4为,范围是[-1,1],这种情况下,我需要按照文档中给出例子来定义吗: ``` self.action_space = {k: Box(-np.inf, np.inf, act_shape_i, seed=config.env_seed) for k in self.agents} ``` 还是说我需要做一些调整?例如将范围改为[-1,1],而不是[-np.inf, np.inf] 3.关于state_space,是需要我根据自己的任务来定义一个合适的全局状态空间,而非简单的将所有智能体的观测拼成一个联合观测空间?请问您是这个意思吗? 此外,state信息是否应该从info字典中提取呢?我看示例代码中的实现是随机采样:return self.state_space.sample(),似乎像是一种噪声。我是否应该在自定义环境中去实现def state(self)函数,并标准化为一个BOX类型的向量空间呢? 4.我注意到您在MADDPG,MASAC和MATD3的learner类中,都没有使用state去计算价值函数,而是直接使用了观测的拼接。在MAPPO_Learner中,您才根据use_global_state的值来选择是否使用state。请问同样是CTDE架构,为什么MADDPG,MASAC和MATD3不使用全局状态state呢?
非常感谢您的解答。我仍然有一些疑问想请教您: 1.我目前尝试保持观测空间不变,也即每个智能体的观测空间是一个字典。在这种情况下,我自定义了representation模块单独处理了向量和图像,然后拼接了它们。同时,我还对MARLAgents类的_build_representation和_build_inputs函数进行了修改,以适配我的观测类型。之后我发现似乎OffPolicyMARLAgents类中的_build_memory和store_experience函数也需要去做相应的修改,而且我不确定是否还有其他地方需要修改。请问我的这种思路是否需要改动的地方比较多,所以不太可行? 2.假如按照您之前提到的将“state”和“dep”两个子空间合并为一个整体的向量观测空间,指的是把dep展平,然后与state拼接在一起吗?那么环境在计算观测信息时,就要输出这种形式的obs吗?如果这样的话,我在自定义的representation模块中,应该是需要将这个整体向量再拆分成“state”和“dep”,然后去分别处理吧?对于这种方案,我除了自定义的representation模块外,还需要对玄策的其他部分做改动吗? 3.请问假如采用dep展平的方式,这样会破坏它的空间结构,即使后续reshape回来也会破坏原始的空间邻近关系,就无法用CNN学习了。请问您有其他方式将“state”和“dep”两个子空间合并为一个整体的向量观测空间吗?还是我这里关于合并方式的理解有误? 很抱歉又麻烦您了,希望您能给我一些指导,谢谢!
非常感谢您的解答!
您好,我想请问下:我在使用iddpg训练时,发现内存占用一直增加,最后会导致程序崩溃。这个是不是跟我的观测输入中包含图像有关啊?应该如何解决这个问题呢?降低buffer_size的大小是否有效?
我这边的图像观测从环境输出时就已经normalized到[0,1]范围了,不是整数了,请问这种情况下是不是就不能用uint8了?
我目前采用了您之前的建议,将“state”和“dep”两个子空间合并为一个整体的向量观测空间,具体操作是将dep展平后与state拼接在一起。state我采用了浮点型以保持精度,这种情况下,即使dep设置为uint8,拼接后的向量还是浮点型吧?针对这种情况,请问您有什么好的解决方法吗?
好的,谢谢您,我再尝试下