целочисленные скалярные массивы могут быть преобразованы в скалярный индекс - PullRequest
0 голосов
/ 06 декабря 2018

Я пытаюсь создать таблицу Q после этого сообщения в блоге , которое я нашел на Medium.com.В моей пошаговой функции (класс python) для создания настраиваемой открытой среды AI Gym мое пространство действий self.action_space будет иметь 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)

1 Ответ

0 голосов
/ 11 декабря 2018

Используйте env.observation_space.shape[0], чтобы получить размер пространства состояний.То же самое для пространства действий.

В сообщении, которое вы указали в блоге, они решают задачу по замерзшему озеру .Задача наследуется от класса discrete , который определяет действие и пробелы, подобные этому

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

Их Discrete класс имеет атрибут nуказав размер дискретного пространства.Вместо этого вы используете np.array, которого нет.На самом деле вы должны получить сообщение об ошибке, когда попытаетесь выполнить

    action_size = env.action_space.n

или, по крайней мере, я это сделаю, если попытаюсь запустить ваш код.

...