Я реализовал PPO для среды Cartpole-VO. Однако в определенных итерациях игры это не сходится. Иногда он застревает в локальном оптимуме. Я реализовал алгоритм, используя преимущество TD-0, т.е.
Я реализовал PPO для среды Cartpole-VO. Однако в определенных итерациях игры это не сходится. Иногда он застревает в локальном оптимуме. Я реализовал алгоритм, используя преимущество TD-0, т.е. [code]A(s_t) = R(t+1) + \gamma V(S_{t+1}) - V(S_t)[/code] Вот мой код: [code]def running_average(x, n): N = n kernel = np.ones(N) conv_len = x.shape[0]-N y = np.zeros(conv_len) for i in range(conv_len): y[i] = kernel @ x[i:i+N] # matrix multiplication operator: np.mul y[i] /= N return y
for episode in range(MAX_EPISODES): curr_state = env.reset() done = False all_episode_t = [] score_episode = 0 for t in range(EPISODE_LENGTH): act_prob = model_actor.predict(curr_state) action = np.random.choice(np.array(list(range(env.action_space.n))), p=act_prob) value = model_critic.predict(curr_state) prev_state = curr_state curr_state, reward, done, info = env.step(action) score_episode += reward e_t = {'state': prev_state, 'action':action, 'action_prob':act_prob[action],'reward': reward, 'value': value} all_episode_t.append(e_t) if done: break score.append(score_episode)
episode_values = [all_episode_t[t]['value'] for t in range(len(all_episode_t))] next_state_estimates = [episode_values[i].item() for i in range(1, len(episode_values))] next_state_estimates.append(0) boostrap_estimate = [] for t in range(len(all_episode_t)): G = all_episode_t[t]['reward'] + GAMMA * next_state_estimates[t] boostrap_estimate.append(G)
episode_target = np.array(boostrap_estimate) episode_values = np.array(episode_values) # compute the advantage for each state in the episode: R_{t+1} + \gamma * V(S_{t+1}) - V_{t} adv_batch = episode_target-episode_values
state_batch = np.array([all_episode_t[t]['state'] for t in range(len(all_episode_t))]) action_batch = np.array([all_episode_t[t]['action'] for t in range(len(all_episode_t))]) old_actor_prob = np.array([all_episode_t[t]['action_prob'] for t in range(len(all_episode_t))])
# print the status after every VISUALIZE_STEP episodes if episode % VISUALIZE_STEP == 0 and episode > 0: print('Episode {}\tAverage Score: {:.2f}'.format(episode, np.mean(score[-VISUALIZE_STEP:-1]))) # domain knowledge applied to stop training: if the average score across last 100 episodes is greater than 195, game is solved if np.mean(score[-100:-1]) > 195: break
# train the PPO agent model_actor, model_critic = train_ppo_agent(env, episode_length, n_episodes, gamma, vis_steps, learning_rate_actor=learning_rate_actor, learning_rate_critic=learning_rate_critic, epsilon_clipping=epsilon_clipping, actor_update_epochs=actor_update_epochs) [/code] Я что-то упускаю, или такое поведение ожидается, если использовать простые преимущества TD-0 для PPO, учитывая природу среды Cartpole?
Я пытался создать модель DQN для простой игры с тележкой, но после обучения почти 3000 эпизодов она выдает действительно странный график вознаграждений, и я не уверен, правильно ли она вообще тренируется.
Я видел другие сообщения, в которых у людей...
как я могу изменить начальную точку появления тележки при сбросе окружения? Мне нужно использовать собственное вознаграждение при тестировании. Вознаграждение типа:
def new_reward(state, x0):
s = state
theta = state
max_reward = 500
min_reward =...
Как изменить начальную точку появления тележки при сбросе окружения? Мне нужно использовать собственное вознаграждение при тестировании. Вознаграждение типа:
def new_reward(state, x0):
s = state
theta = state
max_reward = 500
min_reward = 0...
Итак, я пытался решить проблему с картерами. Это общая проблема при работе с обучением подкрепления. По сути, у вас есть тележка, которая уравновешивает шест. Тележка может двигаться влево или вправо. Эпизод заканчивается, когда полюс падает. Весь...
Я попытался сделать модель DQN для простой игры Cartpole, но после обучения ее для почти 3000 эпизодов она создает действительно странный график вознаграждения, и я не уверен, что это даже правильно тренироваться. Я посмотрел и пытался решить все...