微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

q 带健身房的桌子使用盒子观察空间

如何解决q 带健身房的桌子使用盒子观察空间

我正在尝试使用这个观察空间运行 q-learning 算法:

self.observation_space = spaces.Box(low=np.array([0,0]),high=np.array([1,1,1]),dtype=np.flo

当我试图访问 q 表时,像这样:

q_value = q_table[state][action]

我收到此错误

IndexError: arrays used as indices must be of integer (or boolean) type

所以我的问题是:当我使用 space.Box 定义我的观察空间时,我应该如何访问 q 表?

如果需要,这就是 q_table 的定义方式(这是我从互联网上获取代码,试图将其调整到我的项目中):

num_Box = tuple((env.observation_space.high + np.ones(env.observation_space.shape)).astype(int))
q_table = np.zeros(num_Box + (env.action_space.n,))

解决方法

你不是说 q_table 是什么类型。我会假设它是一个在 OpenAI Gym and Python set up for Q-learning 中定义的 numpy 数组:

action_space_size = env.action_space.n
state_space_size = env.observation_space.n

q_table = np.zeros((state_space_size,action_space_size))

您收到此错误是因为您没有使用整数索引 numpy 数组的元素。同样,我还没有看到您的代码,但我相信您正在尝试使用元组获取 Q 表的特定行。

无论如何,在使用 Q-learning 时不应该使用 Box 观察空间,而应该使用离散观察空间。使用Q-learning时,需要提前知道状态数,来初始化Q-table。 盒空间用于实数值,空间的维数不定义状态数。例如,如果您像这样创建一个 Box 空间:

spaces.Box(low=0,high=1,shape=(2,2),dtype=np.float16)

您不会有 4 个状态,而是可能有无限个状态。参数 low=0 和 high=1 表示 Box 空间中四个变量的最小值和最大值,但在 0 和 1 之间可以有多个值(0.1、0.2 等)。因此,您无法事先估计状态数。

如果您使用 np.uint8(或任何整数类型)作为 dtype,您可能会计算状态的数量,但使用 Box 空间而不是离散空间仍然是一种延伸。此外,即使使用整数值,以下内容也不起作用:

num_box = tuple((env.observation_space.high + np.ones(env.observation_space.shape)).astype(int))
q_table = np.zeros(num_box + (env.action_space.n,))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。