Python np.random.choice()在实例方法中未按预期工作
我正在使用深度Q学习神经网络训练强化学习代理,为此,我主要有2个文件,一个环境python脚本和一个使用Google Colab的Jupyter笔记本,我在其中定义了代理类,并在其中进行训练 我的环境Python脚本中的一个函数是self.reset,顾名思义,它重置所有环境状态值。这就是它的样子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
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个元素的元组。我明白了。我不知道那个函数有那个限制。随机选择在这种情况下是可行的,但我们正在偏离正轨。