Python np.random.choice()在实例方法中未按预期工作

Python np.random.choice()在实例方法中未按预期工作,python,numpy,reinforcement-learning,openai-gym,Python,Numpy,Reinforcement Learning,Openai Gym,我正在使用深度Q学习神经网络训练强化学习代理,为此,我主要有2个文件,一个环境python脚本和一个使用Google Colab的Jupyter笔记本,我在其中定义了代理类,并在其中进行训练 我的环境Python脚本中的一个函数是self.reset,顾名思义,它重置所有环境状态值。这就是它的样子 def reset(self): return self.action_space, self.state_space, self.state_space[(np.random.ch

我正在使用深度Q学习神经网络训练强化学习代理,为此,我主要有2个文件,一个环境python脚本和一个使用Google Colab的Jupyter笔记本,我在其中定义了代理类,并在其中进行训练

我的环境Python脚本中的一个函数是self.reset,顾名思义,它重置所有环境状态值。这就是它的样子

 def reset(self):
        return self.action_space, self.state_space, self.state_space[(np.random.choice(len(self.state_space)))], self.reset_days_total(self.days_total) 
self.reset_days_total只是同一类中的另一个函数,我用它来重置另一个实例变量

    for i in range(5):
           print(env.state_space[(np.random.choice(len(env.state_space)))])
--------------------------------------------------------------------------------------------------

 o/p: (4, 7, 0)
      (3, 2, 0)
      (4, 13, 4)
      (2, 16, 3)
      (2, 9, 5)
虽然状态空间和动作空间的值在整个训练过程中保持不变,但每次调用函数时都应随机选择该函数返回的初始状态

当我试图直接在笔记本上选择一个随机状态时,np.random.choice函数作用于类变量

    for i in range(5):
           print(env.state_space[(np.random.choice(len(env.state_space)))])
--------------------------------------------------------------------------------------------------

 o/p: (4, 7, 0)
      (3, 2, 0)
      (4, 13, 4)
      (2, 16, 3)
      (2, 9, 5)
但是,当我尝试使用instance方法实现相同的目标时,它不会在每次运行该方法时返回随机状态。无论我运行函数多少次,它都会在第一次之后停止返回一个随机值,然后返回一个不变的值

 env = CabDriver()
 for i in range(5):
     action_space, state_space, state_new, days_total = env.reset()
     print(f"State: {state_new}")
--------------------------------------------------------------------------------------------------

o/p: State: (4, 22, 0)
     State: (4, 22, 0)
     State: (4, 22, 0)
     State: (4, 22, 0)
     State: (4, 22, 0)

我很想知道为什么这两种情况的表现不同,以及在访问env.reset方法时如何克服这种特殊行为。如果能朝着正确的方向推动此方法按预期工作,我们将不胜感激。

不回答这个问题,但环境状态空间[np.random.choicelenenv.state_空间]可以简化为np.random.choiceenv.state_空间。@Reti43是的,可以,但我需要直接从函数获得状态,而不是国家指数,这正是它所做的。如果输入是iterable,它将直接选择其中一个元素。@Reti43 np.random.choice仅适用于列表中的一维元素,而不适用于包含3个元素的元组。我明白了。我不知道那个函数有那个限制。随机选择在这种情况下是可行的,但我们正在偏离正轨。