Comparando os algoritmos DQN, A2C e PPO¶
O objetivo deste projeto é comparar três algoritmos de reinforcement learning considerando alguns ambientes disponíveis na biblioteca Gymnasium. Os algoritmos que serão comparados são DQN, A2C e PPO.
Os ambientes que serão utilizados na comparação são:
- Bipedal Walker;
- Car Racing, versão discreta e contínua;
- Cart Pole, e;
- Lunar Lander
Todas as implementações dos algoritmos citados acima serão feitas utilizando a biblioteca Stable Baselines 3.
Ambiente Cart Pole¶
O ambiente Cart Pole é um ambiente de controle clássico com ações discretas.
Neste ambiente o algoritmo DQN foi executado com os hiperparâmetros padrão da implementação stable baselines, ou seja:
learning_rate=1e-4,
gamma=0.99,
bufer_size=1_000_000,
batch_size=32,
tau=1.0,
target_update_interval=10_000,
exploration_initial_eps=1.0,
exploration_final_eps=0.05
O algoritmo A2C também foi executado com os hiperparâmetros padrão da implementação stable baselines, ou seja: learning_rate=0.0007
e gamma=0.99
O algoritmo PPO foi executado considerando três configurações distintas, com 1, 4 e 8 environment. Os demais hiperparâmetros permaneceram os mesmos da configuração padrão.
A partir do gráfico apresentado acima, é possível observar que o algoritmo DQN obteve um desempenho inferior em relação aos demais algoritmos. O algoritmo A2C obteve um desempenho superior ao DQN, mas inferior ao PPO. O algoritmo A2C tem um comportamento muito instável no início, mas ao final consegue convergir com um recompensa similar ao PPO. O algoritmo PPO, independente da quantidade de environments, obteve o melhor desempenho, com uma convergência mais rápida e uma recompensa acumulada maior em relação aos demais algoritmos.
Bipedal Walker¶
O ambiente Bipedal Walker é um ambiente de controle contínuo. O objetivo deste ambiente é fazer com que um robô bípede ande o maior percurso possível sem cair.
Para este ambiente foram testados três configurações de algoritmos:
- A2C:
model = A2C(
policy = "MlpPolicy",
env = vec_env, # configuração com 1 environment
learning_rate=0.00096,
n_steps=8,
gamma=0.99,
gae_lambda= 0.9,
vf_coef= 0.4,
ent_coef= 0.0,
max_grad_norm= 0.5,
PPO com clip_range de 0.2 e gamma de 0.99, demais configurações padrão da implementação stable baselines;
PPO com clip_range de 0.18 e gamma de 0.999, demais configurações padrão da implementação stable baselines. Esta configuração foi obtida a partir do site Hugging Face.
A partir do gráfico apresentado acima, é possível observar que o algoritmo A2C obteve um desempenho inferior em relação aos demais algoritmos. O algoritmo PPO com clip_range de 0.2 e gamma de 0.99 teve uma convergência mais rápida com algumas oscilações. O algotimo PPO com clip_range de 0.18 e gamma de 0.999 obteve uma convergência mais lenta. No entanto, sem oscilações e com uma recompensa final similar ao PPO com clip_range de 0.2 e gamma de 0.99.
Lunar Lander¶
O ambiente Lunar Lander é um ambiente de controle com espaço de ações discreto. O objetivo deste ambiente é fazer com que uma nave lunar pouse na plataforma de pouso.
Neste ambiente foram testadas algumas configurações com os algoritmos A2C, DQN e PPO. As configurações testadas foram:
- PPO_env1:
env = gym.make("LunarLander-v2")
vec_env = make_vec_env("LunarLander-v2", n_envs=1)
model = PPO("MlpPolicy", vec_env, verbose=1)
- DQN_env1:
model = DQN(
policy="MlpPolicy",
env=vec_env,
learning_rate=1e-3,
buffer_size=1_000,
batch_size=64,
gamma=0.99,
exploration_fraction=0.1,
exploration_initial_eps=0.9,
exploration_final_eps=0.02,
tau=1,
- A2C_env1:
env = gym.make("LunarLander-v2")
model = A2C(policy = "MlpPolicy", env = env)
- A2C_env8:
env = make_vec_env("LunarLander-v2", n_envs=8)
model = A2C(
policy = "MlpPolicy",
env = env,
learning_rate=1e-2,
gamma=0.99,
Ao analisar o gráfico acima, é possível observar que os algoritmos AC2_env1 e PPO_env1 obtiveram as melhores curvas de aprendizado. Mais estáveis e com uma recompensa média maior.
Car racing discreto¶
O ambiente Car Racing é um ambiente de controle com espaço de ações discreto. O objetivo deste ambiente é fazer com que um carro de corrida complete a pista no menor tempo possível.
Foram utilizadas inúmeras configurações para os algoritmos A2C, DQN e PPO. Basicamente, as variações adotadas foram em relação ao número de environments utilizados e com relação a arquitetura da rede neural utilizada (MlpPolicy: uma rede full connected padrão e CnnPolicy: uma CNN).
A estrutura adotada por este ambiente para representar os estados é uma imagem de 96x96 pixels. Portanto, espera-se que a CNN tenha um desempenho superior em relação a MlpPolicy.
A configuração com melhor desempenho foi a PPO com 8 environments e CnnPolicy. A partir do gráfico acima, é possível observar que a PPO com 8 environments e CnnPolicy obteve uma convergência mais rápida e uma recompensa acumulada maior em relação aos demais algoritmos.
Os hiperparâmetros adotados nesta configuração foram:
vec_env = make_vec_env(ENV_NAME, n_envs=8, env_kwargs=env_kwargs)
model = PPO(
policy="CnnPolicy",
env=vec_env,
clip_range=0.2,
ent_coef=0.0,
gae_lambda=0.95,
n_steps=512,
n_epochs=10,
vf_coef=0.5,
learning_rate=2e-4,
batch_size=128,
gamma=0.99,
Car racing contínuo¶
O ambiente Car Racing é um ambiente de controle com espaço de ações contínuo. O objetivo deste ambiente é fazer com que um carro de corrida complete a pista no menor tempo possível. Neste ambiente os estados são representados utilizado uma imagem de 96x96 pixels.
As configurações avaliadas neste ambiente foram PPO com MLPolicy e PPO com CNN.
A partir do gráfico acima, é possível observar que a PPO com CnnPolicy obteve um desempenho superior em relação a PPO com MlpPolicy.
Considerações finais¶
Este estudo avaliou três algoritmos de reinforcement learning (A2C, DQN e PPO) em quatro ambientes distintos. As implementações dos algoritmos foram feitas utilizando a biblioteca Stable Baselines 3. Os ambientes utilizados foram ambientes da biblioteca Gymnasium. A comparação dos algoritmos foi feita considerando a recompensa acumulada ao longo do treinamento, ou seja, a curva de aprendizado de cada algoritmo.
A partir dos experimentos realizados, foi possível observar que o algoritmo PPO obteve um desempenho superior em relação aos demais algoritmos. O algoritmo PPO obteve uma convergência mais rápida e uma recompensa acumulada maior em relação aos demais algoritmos na maioria dos ambientes avaliados.
A forma como os hiperparâmetros foram definidos para cada algoritmo e ambiente pode ter influenciado nos resultados obtidos. A escolha dos hiperparâmetros foi feita de forma arbitrária e não foi feita uma busca sistemática dos melhores hiperparâmetros para cada algoritmo e ambiente.
O uso da biblioteca Stable Baseline 3 facilitou a implementação dos algoritmos e a avaliação dos resultados. Isto só foi possível porque os ambientes utilizados implementam a interface da biblioteca Gymnasium.
Considerando os resultados obtidos por este estudo, é possível concluir que o algoritmo PPO é uma boa escolha para problemas que podem ser resolvidos com reinforcement learning. Além disso, dado um novo problema, é possível desenvolver um ambiente usando a biblioteca Gymnasium e testar o algoritmo PPO com a implementação do stable baseline para verificar se ele é capaz de encontrar uma política ótima. Neste caso, a equipe responsável pelo desenvolvimento do agente deve-se preocupar em definir os estados, ações e recompensas do ambiente de forma adequada para que o algoritmo PPO possa aprender a política ótima. Em outras palavras, o foco do desenvolvimento fica na definição do ambiente e não na implementação do algoritmo de reinforcement learning.