陆离| 2024-02-25 00:02 采纳率: 71.4%
浏览 7

强化学习输入输出维度如何更改

最近在学习强化学习的DQN算法,看了倒立摆(CartPole)问题,该问题中cartpole env返回状态信息和奖励信息:分别是1x4维的状态信息[x, x_dot, theta, theta_dot],代表 [底座的位置,底座的速度,杆的角度,杆的角速度]和1个代表奖励信息的标量值;一共有向左和向右运动两个动作,接收来自算法的1个标量的动作信号。环境输出的状态信息决定了算法的输入信息形状是1x4,环境只接受1个动作值决定了算法最终的输出信息形状是1。
我的问题:我所研究的问题对于状态信息,他的每一个维度可能有包含多个维度,且他的动作空间是2×m维,所以传入的动作不再是一个,而是一个动作列表,那么我应该怎样修改这个代码呢

  • 写回答

2条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-02-25 00:03
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如需一对一服务私聊我哦
    针对状态信息每一个维度可能包含多个维度的情况,可以将状态信息用一个多维数组来表示,例如用一个shape为(1, 4, m)的数组来表示状态信息,其中第二个维度代表原本的四个状态维度,第三个维度代表每个状态维度的多个维度。 针对动作空间是2×m维的情况,可以将动作列表直接作为一个shape为(2, m)的数组来表示。 修改之后的代码可以如下所示:
    import numpy as np
    class MyEnv:
        def __init__(self, state_dim, action_dim):
            self.state_dim = state_dim  # (1, 4, m)
            self.action_dim = action_dim  # (2, m)
            
        def reset(self):
            self.state = np.zeros(self.state_dim)
            return self.state
            
        def step(self, actions):
            reward = np.sum(actions[0, :] * self.state[0, :, :] + actions[1, :] * self.state[1, :, :])
            self.state += np.random.randn(*self.state.shape)  # 随机更新状态
            done = False
            return self.state, reward, done, {}
    

    这里的reset和step函数分别代表环境的重置和一个步骤的处理。在step函数中,首先根据动作计算奖励,然后随机更新状态(这个只是为了示范,实际上状态的更新需要根据具体的问题来处理)。最后返回更新后的状态、奖励、是否done和额外信息(这里没有额外信息,所以返回一个空字典)。

    评论

报告相同问题?

问题事件

  • 创建了问题 2月25日

悬赏问题

  • ¥15 电脑蓝屏logfilessrtsrttrail问题
  • ¥20 关于wordpress建站遇到的问题!(语言-php)(相关搜索:云服务器)
  • ¥15 【求职】怎么找到一个周围人素质都很高不会欺负他人,并且未来月薪能够达到一万以上(技术岗)的工作?希望可以收到写有具体,可靠,已经实践过了的路径的回答?
  • ¥15 Java+vue部署版本反编译
  • ¥100 对反编译和ai熟悉的开发者。
  • ¥15 带序列特征的多输出预测模型
  • ¥15 Python 如何安装 distutils模块
  • ¥15 关于#网络#的问题:网络是从楼上引一根网线下来,接了2台傻瓜交换机,也更换了ip还是不行
  • ¥15 资源泄露软件闪退怎么解决?
  • ¥15 CCF-CSP 2023 第三题 解压缩(50%)