Я недавно начал исследовать глубокое обучение Q и столкнулся с проблемами.Следуя статьям в Интернете (включая эту: https://keon.io/deep-q-learning/),), я попытался изменить пример полюса тележки для работы с игрой в понг. Однако, хотя мое решение, похоже, следует другому (минимизируйте состояние, сохраняйте различияи т. д.) буквально никогда не становится лучше (более 800 игр за один раз).
Базовый код
import numpy as np
from ddqn import DQNAgent
import gym
from PIL import Image
env = gym.make('Pong-v0')
state_size = 88*80
action_size = env.action_space.n
agent = DQNAgent(state_size, action_size)
done = False
batch_size = 32
for e in range(EPISODES):
state = env.reset()
prev_state = state
total_reward = 0
for time in range(500000):
env.render()
current_state_diff = minimize_state(state) - minimize_state(prev_state)
action = agent.act(current_state_diff)
next_state, reward, done, _ = env.step(action)
total_reward += reward
next_state_diff = minimize_state(next_state) - minimize_state(state)
agent.remember(current_state_diff, action, reward, next_state_diff, done)
state = next_state
if done:
agent.update_target_model()
print("episode: {}/{}, score: {}, e: {:.2}"
.format(e, EPISODES, total_reward, agent.epsilon))
break
if len(agent.memory) > batch_size:
agent.replay(batch_size)
if e % 10 == 0:
agent.save("./save/pong-v0-ddqn.h5")
Где функция минимизации
def minimize_state(state):
img = Image.fromarray(state)
state = np.array(img.convert("L"))
state = state[34:]
state = state[::2,::2]
return np.reshape(state, [1, state_size])
И DQNAgent от: https://github.com/keon/deep-q-learning
Что не так?