Skip to content

Commit

Permalink
✨ Troca Lunar Lander por Pendulum
Browse files Browse the repository at this point in the history
  • Loading branch information
Berbardo committed Jul 19, 2022
1 parent 8dba5bb commit d5efd7b
Showing 1 changed file with 24 additions and 99 deletions.
123 changes: 24 additions & 99 deletions Tarefa 2 - Stable Baselines.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -107,11 +107,11 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"<h2 align=\"center\">Lunar Lander</h2>\n",
"<h2 align=\"center\">Pendulum</h2>\n",
"\n",
"<img src=\"https://raw.githubusercontent.com/fakemonk1/Reinforcement-Learning-Lunar_Lander/master/images/3.gif\" width=50% />\n",
"<img src=\"https://www.gymlibrary.ml/_static/videos/classic_control/pendulum.gif\" width=30% />\n",
"\n",
"**Lunar Lander** é um ambiente do Gym que simula o pouso de um módulo lunar na Lua. O agente deve controlar os três motores do módulo para guiá-lo até a pista de pouso, sem gastar muita energia."
"**Pendulum** é um ambiente do Gym que simula um pêndulo pendurado por um ponto tentando se balancear de cabeça para baixo. O agente deve um torque no pêndulo de forma que ele se levante e fique parado em pé."
]
},
{
Expand All @@ -124,106 +124,32 @@
"\n",
"| Estado | Informação |\n",
"| :-------- | :--------------------------------------------- |\n",
"| 0 | Posição no eixo _x_ do módulo |\n",
"| 1 | Posição no eixo _y_ do módulo |\n",
"| 2 | Velocidade no eixo _x_ do módulo |\n",
"| 3 | Velocidade no eixo _y_ do módulo |\n",
"| 4 | Ângulo do módulo |\n",
"| 5 | Velocidade angular do módulo |\n",
"| 6 | Se a perna esquerda está em contato com o chão |\n",
"| 7 | Se a perna direita está em contato com o chão |\n",
"\n",
"Já o **Espaço de Ação** é composto por quatro ações: não fazer nada, acionar o motor esquerdo, acionar o motor principal ou acionar o motor direito.\n",
"\n",
"| Ação | Significado |\n",
"| :--- | :---------------------- |\n",
"| 0 | Não fazer nada |\n",
"| 1 | Acionar motor esquerdo |\n",
"| 2 | Acionar motor principal |\n",
"| 3 | Acionar motor direito |\n",
"\n",
"Por fim, cada vez que tomamos uma ação, recebemos do ambiente uma **recompensa**, conforme a tabela abaixo:\n",
"\n",
"| Ocorrência | Recompensa |\n",
"| :---------------------- | ---------------: |\n",
"| Se aproximar da pista | Até $+140$ |\n",
"| Pousar | $+100$ |\n",
"| Colidir | $-100$ |\n",
"| Tocar uma perna no chão | $+10$ |\n",
"| Acionar motor principal | $-0.3$ por frame |\n",
"\n",
"#### Lunar Lander Continuous\n",
"\n",
"Também existe uma versão contínua do ambiente do Lunar Lander, no qual podemos controlar a força que cada um dos motores do módulo exercerá. Nesse caso, teremos duas ações:\n",
"\n",
"| Ação | Intervalo | Significado |\n",
"| :--- | :--------: | :----------------------------------- |\n",
"| 0 | $-1$ a $+1$ | Força do motor principal |\n",
"| 1 | $-1$ a $+1$ | Força dos motores esquerdo e direito |\n",
"\n",
"Na versão contínua, os algoritmos que poderemos usar serão diferentes, e o treinamento provavlmente será mais difícil."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Instalação\n",
"| 0 | Posição no eixo _x_ da ponta do pêndulo |\n",
"| 1 | Posição no eixo _y_ da ponta do pêndulo |\n",
"| 2 | Velocidade angular do pêndulo |\n",
"\n",
"Para instalar os ambientes do Gym que usam a engine Box2D, é necessário rodar os seguintes comandos numa célula do notebook (se preferir, também pode rodar no terminal; é só tirar o ponto de exclamação do começo da linha):\n",
"Já o **Espaço de Ação** é um espaço **contínuo** do torque aplicado no pêndulo.\n",
"\n",
"| Ação | Significado | Intervalo |\n",
"| :--- | :-------------- | :---------- |\n",
"| 0 | Torque | $-2$ a $+2$ |\n",
"\n",
"**Windows**"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"!conda install swig\n",
"!pip install box2d box2d-kengz"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Linux**"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"!apt install swig\n",
"!pip install -u 'gym[box2d]'"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Em seguida, para criar o ambiente, roda-se a linha de código a seguir:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"env = gym.make(\"LunarLander-v2\")"
"Por fim, cada vez que tomamos uma ação, recebemos do ambiente uma **recompensa**, que segue a seguinte equação:\n",
"\n",
"$$r = -(\\theta{}^2 + 0.1 * \\dot{\\theta}^2 + 0.001 * \\tau{})$$\n",
"\n",
"Desta forma, temos que a recompensa é menor quando o ângulo do pêndulo é menor (mais em pé), quando a velocidade angular é baixa, e quando usamos pouco torque.\n",
"\n",
"Por ser um ambiente com espaço de ação contínuo, os algoritmos que podemos usar serão diferentes, e o treinamento pode ser mais demorado."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"ou"
"### Ambiente\n",
"\n",
"Para criar o ambiente, basta rodar a linha de código a seguir:"
]
},
{
Expand All @@ -232,7 +158,7 @@
"metadata": {},
"outputs": [],
"source": [
"env = gym.make(\"LunarLanderContinuous-v2\")"
"env = gym.make(\"Pendulum-v1\")"
]
},
{
Expand Down Expand Up @@ -279,9 +205,8 @@
"metadata": {},
"outputs": [],
"source": [
"# env_name = \"turing_envs:pong-normal-v0\"\n",
"# env_name = \"LunarLander-v2\"\n",
"# env_name = \"LunarLanderContinuous-v2\""
"# env_name = \"CartPole-v1\"\n",
"# env_name = \"Pendulum-v1\""
]
},
{
Expand Down Expand Up @@ -363,7 +288,7 @@
"hash": "c7f18c8a75fd108ead44a979ee6b583a0b7ac14f61cb5b6828c4aa8a7a81d42e"
},
"kernelspec": {
"display_name": "Python 3.9.7 ('base')",
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
Expand Down

0 comments on commit d5efd7b

Please sign in to comment.