Acima: resultados no LunarLander-v2 após 60 segundos de treinamento no meu laptop
CppRl é uma estrutura de aprendizagem por reforço, escrita usando o frontend PyTorch C++.
É fortemente baseado no maravilhoso pytorch-a2c-ppo-acktr-gail de Ikostrikov. Você pode até considerar isso um porto. A API e os algoritmos subjacentes são quase idênticos (com as alterações necessárias envolvidas na mudança para C++).
Ele também contém uma implementação de um servidor OpenAI Gym simples que se comunica via ZeroMQ para testar a estrutura em ambientes Gym.
CppRl pretende ser uma estrutura extensível, razoavelmente otimizada e pronta para produção para usar aprendizado por reforço em projetos onde Python não é viável. Ele deve estar pronto para uso em aplicativos de desktop nos computadores do usuário com configuração mínima necessária por parte do usuário.
No momento em que este artigo foi escrito, não havia estruturas de aprendizado por reforço de uso geral para C++. Eu precisava de um para um projeto pessoal, e o frontend PyTorch C++ foi lançado recentemente, então decidi fazer um.
Um exemplo que usa o servidor OpenAI Gym incluído é fornecido no example
. Pode ser executado da seguinte forma: Terminal 1:
./launch_gym_server.py
Terminal 2:
build/example/gym_server
Demora cerca de 60 segundos para treinar um agente para uma recompensa média de 200 no meu laptop (processador i7-8550U).
O ambiente e os hiperparâmetros podem ser definidos em example/gym_client.cpp
.
Nota: O servidor e cliente do Gym não estão muito bem otimizados, principalmente quando se trata de ambientes com observações de imagens. Existem algumas cópias extras necessárias para o uso de um sistema de comunicação entre processos e, em seguida, gym_client.cpp
tem uma ou duas cópias extras para transformar as observações em tensores PyTorch. É por isso que o desempenho não é tão bom quando comparado com bibliotecas Python executando ambientes Gym.
CMake é usado para o sistema de compilação. A maioria das dependências são incluídas como submódulos (execute git submodule update --init --recursive
para obtê-los). O Libtorch deve ser instalado separadamente.
cd pytorch-cpp-rl
mkdir build && cd build
cmake ..
make -j4
cd pytorch-cpp-rl
mkdir build && cd build
cmake -G "Visual Studio 15 2017 Win64" -DCMAKE_PREFIX_PATH=C:/path/to/libtorch ..
cmake --build . --config Release
Antes de executar, certifique-se de adicionar libtorch/lib
à sua variável de ambiente PATH
.
O desempenho do Windows é cerca de 75% do do Linux no momento. Estou pensando em como acelerar as coisas.
Você pode executar os testes com build/cpprl_tests
( build/Release/cpprl_tests.exe
no Windows).