python - 整数标量数组可以转换为标量索引
问题描述
我正在尝试在我在 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)
解决方案
用于env.observation_space.shape[0]
获取状态空间大小。动作空间也是如此。
在您链接的博客文章中,他们解决了冻湖任务。任务继承自定义动作和 obs 空间的discrete
类,如下所示
self.action_space = spaces.Discrete(self.nA)
他们的Discrete
类具有指定n
离散空间大小的属性。相反,您使用np.array
which 不使用。当您尝试这样做时,您实际上应该得到一个错误
action_size = env.action_space.n
或者至少,如果我尝试运行您的代码,我会这样做。
推荐阅读
- php - 在 PHP 中获取元素 - PHP 简单的 HTML DOM 解析器
- c++ - CMake的问题“找不到cmake模块文件”
- javascript - 网页加载时出现javascript错误“未选择项目”
- flutter - 否则颤振
- sql - 地理点范围和数值范围查询的复合多列索引
- odoo - Odoo如何显示详细信息表并在每个单元格中从many2one字段中选择一个选项?
- python - aws lambda python ImportError:python中没有语言'eng'的本地化支持
- c# - 在后面的代码中设置两个属性之间的绑定
- python - CVXPY - 如何在没有解析表达式的情况下解决优化问题
- python - 对python有限制的排列