首页 > 解决方案 > 整数标量数组可以转换为标量索引

问题描述

我正在尝试在我在 Medium.com 上找到的这篇博客文章之后创建一个 Q 表。在用于创建自定义开放式 AI Gym 环境的步骤函数self.action_space(python 类)中,我的动作空间将是 3 个可能的动作,可能的观察值将是 50 到 150 的值,增量为 1 self.observation_space

    #possible actions from more_heat less heat functions
    self.action_space = np.array([ 0,  1,  2])

    #possible deviation values from temp - setpoint
    self.observation_space = np.arange(50,150,1)

我正在关注的博客文章通过以下代码创建 Q 表,我认为它只是根据大小创建一个零数组。

action_size = env.action_space.n
state_size = env.observation_space.n

qtable = np.zeros((state_size, action_size))
print(qtable)

但是当我尝试打印 Q 表时,我得到了这个错误: TypeError: only integer scalar arrays can be converted to a scalar index

明智的人对我做错的任何话都将不胜感激!

仅运行此代码时出现相同的错误:

import numpy as np
action_space = np.array([0,1,2])
observation_space = np.arange(50,150,1)

action_size = action_space
state_size = observation_space

qtable = np.zeros((state_size, action_size))
print(qtable)

标签: pythonreinforcement-learningopenai-gym

解决方案


用于env.observation_space.shape[0]获取状态空间大小。动作空间也是如此。

在您链接的博客文章中,他们解决了冻湖任务。任务继承自定义动作和 obs 空间discrete类,如下所示

    self.action_space = spaces.Discrete(self.nA)

他们的Discrete类具有指定n离散空间大小的属性。相反,您使用np.arraywhich 不使用。当您尝试这样做时,您实际上应该得到一个错误

    action_size = env.action_space.n

或者至少,如果我尝试运行您的代码,我会这样做。


推荐阅读