#python-3.x #numpy #split #reinforcement-learning #openai-gym
Вопрос:
Я репетирую, чтобы улучшить свои навыки в разработке игры, используя учебник по обучению с подкреплением, но затем у меня возникают проблемы с тем, чтобы np.split выполнялся правильно (т. Е. Не приводил к равному разделению). В приведенном ниже коде показан сеанс определения вознаграждения при определении параметров среды в другом файле py. Следующая строка затем вызывает проблему, отображаемую в части сведений о трассировке.
rewards_per_thousand_episodes = np.split(np.array(rewards_all_episodes), num_episodes/1000)
Пытался найти решение этой проблемы, но тщетно. Любые предложения по решению будут высоко оценены…;o)
Определение Env:
import numpy as np
import gym
import random
import time
from IPython.display import clear_output
env = gym.make("FrozenLake-v1")
env.reset()
# Construct Q-table, and initialize all the Q-values to zero for each state-action pair
action_space_size = env.action_space.n
state_space_size = env.observation_space.n
q_table = np.zeros((state_space_size, action_space_size))
print("nq_table")
print(q_table)
# Initializing Q-Learning Parameters
num_episodes = 10000 # total number of episodes the agent is to play during training
max_steps_per_episode = 100 # maximum number of steps that agent is allowed to take within a single episode
learning_rate = 0.1
discount_rate = 0.99
exploration_rate = 1
max_exploration_rate = 1 # bounds to how small exploration rate can be
min_exploration_rate = 0.01 # bounds to how large exploration rate can be
# rate at which the exploration_rate will decay
# LR changed to 0.001 due to inconsistencies in results with larger rate - https://youtu.be/HGeI30uATws?t=57
exploration_decay_rate = 0.001
Определение вознаграждения:
import numpy as np
import random
from .... import
num_episodes, env, max_steps_per_episode, q_table, learning_rate, exploration_rate, discount_rate,
min_exploration_rate, max_exploration_rate, exploration_decay_rate
rewards_all_episodes = []
# Q-learning algorithm
for episode in range(num_episodes):
state = env.reset()
# Exploration/exploitation trade-off
done = False
rewards_current_episode = 0
for step in range(max_steps_per_episode):
exploration_rate_threshold = random.uniform(0,1)
if exploration_rate_threshold > exploration_rate:
action = np.argmax(q_table[state,:])
else:
action = env.action_space.sample()
new_state, reward, done, info = env.step(action)
#Update Q-table for Q(s,a)
q_table[state, action] =
q_table[state, action] * (1 - learning_rate) learning_rate * (reward discount_rate *
np.max(q_table[new_state, :]))
state = new_state
rewards_current_episode - reward
if done == True:
break
# Exploration rate decay - exploration rate update - https://youtu.be/HGeI30uATws?t=298
exploration_rate = min_exploration_rate (max_exploration_rate - min_exploration_rate) * np.exp(
-exploration_decay_rate * episode)
rewards_all_episodes.append(rewards_current_episode)
rewards_per_thousand_episodes = np.split(np.array(rewards_all_episodes), num_episodes/1000)
count = 1000
print("n********Average reward per thousand episodes********")
for r in rewards_per_thousand_episodes:
print(count, ": ", str(sum(r/1000)))
count = 1000
print("n********Updated Q-table********")
print(q_table)
Информация о возврате:
Traceback (most recent call last):
File "C:UsersjcstPycharmProjects..._test_Q_learning_and_Gym_run.py", line 48, in <module>
rewards_per_thousand_episodes = np.split(np.array(rewards_all_episodes), num_episodes/1000)
File "<__array_function__ internals>", line 5, in split
File "C:UsersjcstPycharmProjectsPython_3_9_testvenvlibsite-packagesnumpylibshape_base.py", line 872, in split
raise ValueError(
ValueError: array split does not result in an equal division
Комментарии:
1. Поэкспериментируйте с
split
(илиarray_split
) в интерактивном сеансе python. Протестируйте небольшие фрагменты кода, прежде чем использовать их в чем-то сложном. Хорошие ответы обычно так и делают.2. Отлично, тх. Это сработало с array_split. Обычно я занимаюсь учебными пособиями, чтобы выполнить тест на собственных данных, а затем, например, обновить/скорректировать параметры, значения и т. Д., Чтобы понять механизмы.