不会做饭不改名 2023-09-06 19:53 采纳率: 0%
浏览 125
已结题

PPO算法怎么获得3个连续的动作

PPO算法中actor网络输出(output_dims=3)是3,怎么在samlpe_action中获得三个连续动作[a,b,c]呢,为什么输出总是一个动作

img

img

  • 写回答

15条回答 默认 最新

  • Leodong. 2023-09-06 20:35
    关注
    获得0.90元问题酬金

    该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
    根据您提供的代码,PPO算法中的actor网络输出维度为3,但是在sample_action函数中,输出总是一个动作。要获得三个连续的动作[a, b, c],您可以对actor网络输出的probs进行适当的处理。

    以下是修改后的sample_action函数示例代码,以获得三个连续的动作:

    import torch
    import torch.nn.functional as F
    from torch.distributions import Categorical
    
    def sample_action(self, state):
        self.sample_count += 1
        state = torch.tensor(state, device=self.device, dtype=torch.float32).unsqueeze(dim=0)
        probs = self.actor(state)
        
        actions = []
        for i in range(3):
            dist = Categorical(probs[:, i])
            action = dist.sample()
            actions.append(action.item())
            self.logprobs = dist.log_prob(action).detach()
        
        return actions
    

    在上述示例代码中,我们对actor网络的输出probs进行了逐个处理,每次都使用Categorical分布进行采样,并将采样的动作添加到一个列表中。最后,返回包含三个连续动作的列表。

    请注意,修改后的代码假设actor网络的输出probs是一个形状为(1, 3)的张量,其中1表示批量大小为1,3表示输出维度为3。如果您的情况有所不同,请根据实际情况进行修改。

    希望这可以帮助您获得三个连续的动作!如果您有任何其他问题,请随时提问。


    如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

    评论

报告相同问题?

问题事件

  • 系统已结题 9月14日
  • 创建了问题 9月6日