使用 TensorFlow 实现深度 Q 学习
先决条件:深度 Q 学习
本文将演示如何在比之前演示的更大的环境中进行强化学习。我们将使用 Tensorflow 实现深度 Q 学习技术。
注意:以下演示需要图形渲染库。对于 Windows 操作系统,建议使用PyOpenGl ,而对于 Ubuntu 操作系统,建议使用OpenGl 。
第 1 步:导入所需的库
import numpy as np
import gym
from keras.models import Sequential
from keras.layers import Dense, Activation, Flatten
from keras.optimizers import Adam
from rl.agents.dqn import DQNAgent
from rl.policy import EpsGreedyQPolicy
from rl.memory import SequentialMemory
第 2 步:构建环境
注意: OpenAI 的健身房模块将使用预加载的环境,该模块包含许多用于不同目的的不同环境。可以从他们的网站查看环境列表。
在这里,将使用“MountainCar-v0”环境。在这种情况下,一辆汽车(代理)被困在两座山之间,必须在其中一座山上行驶。汽车的发动机不够强大,无法自行行驶,因此汽车必须建立动力才能上坡
# Building the environment
environment_name = 'MountainCar-v0'
env = gym.make(environment_name)
np.random.seed(0)
env.seed(0)
# Extracting the number of possible actions
num_actions = env.action_space.n
第 3 步:构建学习代理
学习代理将使用深度神经网络构建,出于相同目的,我们将使用 Keras 模块的 Sequential 类。
agent = Sequential()
agent.add(Flatten(input_shape =(1, ) + env.observation_space.shape))
agent.add(Dense(16))
agent.add(Activation('relu'))
agent.add(Dense(num_actions))
agent.add(Activation('linear'))
第 4 步:找到最佳策略
# Building the model to find the optimal strategy
strategy = EpsGreedyQPolicy()
memory = SequentialMemory(limit = 10000, window_length = 1)
dqn = DQNAgent(model = agent, nb_actions = num_actions,
memory = memory, nb_steps_warmup = 10,
target_model_update = 1e-2, policy = strategy)
dqn.compile(Adam(lr = 1e-3), metrics =['mae'])
# Visualizing the training
dqn.fit(env, nb_steps = 5000, visualize = True, verbose = 2)
代理尝试不同的方法来达到顶峰,从而从每一集中获取知识。
第 5 步:测试学习代理
# Testing the learning agent
dqn.test(env, nb_episodes = 5, visualize = True)
代理试图应用它的知识来达到顶峰。