diff --git a/docs/avaliacoes/2024_1_final/img/min_max.png b/docs/avaliacoes/2024_1_final/img/min_max.png deleted file mode 100644 index 1ba34398..00000000 Binary files a/docs/avaliacoes/2024_1_final/img/min_max.png and /dev/null differ diff --git a/docs/avaliacoes/2024_1_final/index.md b/docs/avaliacoes/2024_1_final/index.md deleted file mode 100644 index 780f9048..00000000 --- a/docs/avaliacoes/2024_1_final/index.md +++ /dev/null @@ -1,208 +0,0 @@ -# Avaliação final 01/2024 - -## Orientações gerais - -* Quaisquer hipóteses relevantes devem ser **explicitamente formuladas**. Faz parte da avaliação a **correta interpretação** das questões. A **clareza** e a **objetividade** das respostas serão consideradas na avaliação. - -* Esta avaliação é **individual**. Em hipótese alguma você poderá fazer uso de material de colegas. - -* Durante esta avaliação você poderá fazer uso do seu material e poderá buscar por informações na Internet. Você não poderá fazer uso de qualquer *Large Language Model* para geração de código, nem ChatGPT, nem CoPilot. **Quem tiver o CoPilot habilitado deverá desabilitá-lo durante a avaliação**. - -* Para a execução desta prova você deverá acessar o Github Classroom neste [https://classroom.github.com/a/dlXUTKW3](https://classroom.github.com/a/dlXUTKW3). A submissão da sua prova será via este link. Neste link você irá encontrar um projeto que já possui alguns arquivos iniciais. Você deverá considerar estes arquivos para o desenvolvimento das suas soluções. - -## Questões - -Considere o ambiente implementado na biblioteca [https://github.com/damat-le/gym-simplegrid](https://github.com/damat-le/gym-simplegrid). Este ambiente fornece um grid 2D onde o agente pode se movimentar para cima, para baixo, para a esquerda e para a direita. O ambiente possui um estado inicial e um estado objetivo, além de obstáculos. O objetivo do agente é encontrar o menor caminho entre o estado inicial e o estado objetivo. - -Este ambiente permite configurar mapas diversos e selecionar aleatóriamente ou de forma pré-determinada a posição inicial e final do agente. Este ambiente implementa uma função de reward considerando a seguinte regra dado uma posição $(x, y)$ do agente: - -```python -def get_reward(self, x: int, y: int) -> float: - """ - Get the reward of a given cell. - """ - if not self.is_in_bounds(x, y): - # if the agent tries to exit the grid, it receives a negative reward - return -1.0 - elif not self.is_free(x, y): - # if the agent tries to walk over a wall, it receives a negative reward - return -1.0 - elif (x, y) == self.goal_xy: - # if the agent reaches the goal, it receives a positive reward - return 1.0 - else: - # otherwise, it receives no reward - return 0.0 -``` - -Nesta questão você terá que implementar duas versões de um agente que encontra o menor caminho entre o estado inicial e o estado objetivo. A primeira versão será utilizando algoritmos de busca (informados ou não informados) e a segunda versão será utilizando aprendizado por reforço. - -### 1. Encontrando o menor caminho com algoritmos de busca (3 pontos) - -No projeto você irá encontrar o arquivo `ambiente.py`, que tem o seguinte código: - -```python -import gymnasium as gym -import gym_simplegrid - -env = gym.make('SimpleGrid-8x8-v0', render_mode='human') -obs, info = env.reset() -done = env.unwrapped.done - -count_actions = 0 -while not done and count_actions < 100: - action = env.action_space.sample() - obs, reward, done, _, info = env.step(action) - count_actions += 1 - -env.close() -``` - -Neste caso, temos um agente que atua de forma aleatória no ambiente. Sugiro executar algumas vezes este arquivo para entender o funcionamento do ambiente. - -No mesmo projeto você irá encontrar os arquivos `ambiente_busca_estatico.py` e `ambiente_busca_dinamico.py`. Estes arquivos são versões modificadas do arquivo `ambiente.py` considerando o uso de algoritmos de busca. O estático fornece sempre o mesmo mapa, estado inicial e final. Enquanto que o dinâmico fornecerá mapas, estados iniciais e finais diferentes a cada execução. - -Ambos os arquivos esperam por um arquivo `my_agent.py` que deve conter a implementação do agente. Além da classe do agente que implementa a interface `from aigyminsper.search.Graph import State`, este arquivo também possui as seguintes funções: - -```python -def get_actions(map, position, goal): - # - # TODO Esta função deve retornar uma lista de ações que o agente deve executar - # Assim conseguimos executar o agente no ambiente usando a biblioteca - # gym_simplegrid - # - # Se nao existir solucao, a funcao deve retornar None - # - return None - -def parser_actions(str_actions): - if str_actions != None: - actions = str_actions.split(';') - actions = list(map(int, actions[1:])) - return actions - return None -``` - -Você deverá implementar o arquivo `my_agent.py` usando o algoritmo de busca que você considerar mais adequado, usando a representação do estado que você considerar mais adequada. Mas você deve respeitar o código utilizado para as ações. Além de sempre gerar 4 sucessores para cada estado, não importanto se existe ou não obstáculo ao redor do agente. - -Para verificar se a soluções está correta, você pode testar a solução da seguinte forma: - -* execute o arquivo de teste `test_my_agent.py`; -* execute o arquivo `ambiente_busca_estatico.py`, neste arquivo o ambiente sempre terá a mesma configuração, o mesmo estado de início e o mesmo estado de fim. Ou seja, é mais fácil visualizar se a sua implementação tem algum problema ou não; -* execute o arquivo `ambiente_busca_dinamico.py`, neste arquivo o ambiente terá configurações diferentes a cada execução. - -Ter passado em todos os testes em `text_my_agent.py` não garante que a sua implementação esteja 100% correta. Você deve testar a sua implementação nos arquivos `ambiente_busca_estatico.py` e `ambiente_busca_dinamico.py`. - -### 2. Encontrando o caminho com aprendizado por reforço (3 pontos) - -Agora é a vez de utilizar reinforcement learning para encontrar o caminho entre o estado inicial e o estado objetivo. Ou seja, você vai treinar um agente que seja capaz de aprender a melhor política para navegar neste ambiente. - -No mesmo projeto você irá encontrar os arquivos `TreinandoAgente.py`, `QLearning.py` e `analise_dados_treinamento.ipynb`. Use este arquivo para responder as perguntas abaixo. - -1. Qual foi a política que o agente aprendeu a executar? Treine o agente para responder a pergunta. Execute várias vezes o agente depois de treinado. Analise os gráficos gerados pelo arquivo `analise_dados_treinamento.ipynb`. Justifique a sua resposta. - -2. O que acontece se alterarmos os hiperparâmetros para $\alpha = 0.1, \gamma = 0.99, \epsilon = 0.8, \epsilon_{min} = 0.05, \epsilon_{dec} = 1, episodes = 1000$? Qual foi o comportamento do agente durante o treinamento? Depois de treinado o agente consegue alcançar o objetivo? Explique o que aconteceu. - -3. O que acontece se alterarmos os hiperparâmetros para $\alpha = 0, \gamma = 0.99, \epsilon = 0.8, \epsilon_{min} = 0.05, \epsilon_{dec} = 1, episodes = 1000$? Justifique a sua resposta. - -Os arquivos `TreinandoAgente.py` e `QLearning.py` estão configurados de tal maneira para sempre gerar um mapa com o mesmo estado final. O único dado que é alterado a cada simulação é a posição inicial do agente. - -No arquivo `TreinandoAgente.py` podemos ver esta consiguração nas linhas 19, 20 e 21: - -```python -(x_goal, y_goal) = (7,4) -g_loc = env.to_s(x_goal, y_goal) -state, info = env.reset(options={'goal_loc':g_loc}) -#state, infor = env.reset() -``` - -E no arquivo `QLearning.py` podemos ver esta configuração nas linhas 32, 33 e 34: - -```python -(x_goal, y_goal) = (7,4) -g_loc = self.env.to_s(x_goal, y_goal) -(state, _) = self.env.reset(options={'goal_loc':g_loc}) -#(state, _) = self.env.reset() -``` - -4. Se deixarmos o objetivo em uma posição diferente a cada simulação, o agente consegue alcançar o objetivo? Quais seriam os hiperparâmetros necessários? Justifique a sua resposta. Dica: dependendo dos hipeparâmetros escolhidos esta execução pode demorar algum tempo. Se bem justificada a sua resposta, talvez não seja necessário executar o código. - -Dica: você pode comentar as linhas 19, 20 e 21 do arquivo `TreinandoAgente.py` e as linhas 32, 33 e 34 do arquivo `QLearning.py` para testar esta hipótese. Não esqueça de descomentar as linhas 22 do arquivo `TreinandoAgente.py` e a linha 35 do arquivo `QLearning.py`. Você pode usar os gráficos gerados no arquivo [analise_dados_treinamento.ipynb](./src/analise_dados_treinamento.ipynb) para justificar a sua resposta. - - -### 3. Problema de otimização (2 pontos) - -Considere um problema de otimização de uma função: - -$f(x) = (x + 2)^{2} - 16 \times \exp(-(x-2)^{2})$ - -que pode ser escrita em python da seguinte forma: - -```python -import numpy as np - -def f_x(x): - return np.power(x + 2, 2) - 16 * np.exp(-np.power((x - 2), 2)) -``` - -Com o seguinte intervalo para a variável $x$: $[-10,+10]$. - -Você deve: - -* utilizar uma das implementações existentes no pacote `aigyminsper.search.*`. -* definir a forma para representação do estado. -* definir o método para geração dos sucessores. Dica: você pode gerar um sucessor que incrementa o valor de $x$ e outro que decrementa o valor de $x$. Além disso, você pode usar um passo de 0.1 para incrementar ou decrementar o valor de $x$. -* não sabemos qual é o valor mínimo que esta função pode ter. - -Além da implementação, entregue via o arquivo `Otimizacao.py`, você deve informar **qual é o valor de $x$ que minimiza o valor de retorno da função acima**. Explique a sua implementação. - -### 4. Problema de tomada de decisão (1 ponto) - -Considere a árvore abaixo. - - - -Esta é árvore que um agente no estado $n0$ montou para tomar a decisão sobre qual movimento realizar (X, Q ou M) em um ambiente competitivo de soma zero. - -Esta árvore foi construída por uma implementação de algoritmo MinMax que vai até a profundidade 3 ou até o estado ser terminal. Neste caso, os estados terminais são $n5, n6, n7, n9, n10$. - -Nos estados que estão na última profundidade foi aplicado uma função de avaliação que resultou nos seguintes valores: - -|Nodo | Valor | -|:----|:-----:| -|n13|-0.5| -|n14|-0.8| -|n15|0.2| -|n16|1 -|n17|1 -|n18|0.5 -|n19|0 -|n20|0 -|n21|1 -|n22|0 -|n23|0.2 -|n24|-0.1 - -Para os nodos terminais, temos: - -|Nodo | Valor | -|:----|:-----:| -|n5| 0| -|n6| 0| -|n7| -1 -|n9| 1 -|n10| 1 - -**Qual a ação o agente irá executar?** - -### 5. Analisando ambientes (1 ponto) - -Ao longo do semestre fizemos algumas implementações, entre elas: busca de menor caminho entre duas cidades, um agente jogador de jogo da velha e um agente que é capaz de andar em um lago congelado. - -Considerando cada um destes ambientes, responda se os mesmos são determinísticos ou estocásticos, single ou multi-agentes, e diga qual foi o algoritmo utilizado para implementar a solução. - -## Entrega - -Ao final da prova, você deverá submeter o seu projeto no Github Classroom. Este projeto deve ter todos os arquivos originais mais os arquivos que você implementou. - -Existe um arquivo especial, que é o `respostas.md`. Neste arquivo você deve responder as questões 2, 3, 4 e 5. Este arquivo já possui um formato pré-definido. Você deve respeitar este formado! diff --git a/docs/avaliacoes/2024_1_final/src/analise_dados_treinamento.ipynb b/docs/avaliacoes/2024_1_final/src/analise_dados_treinamento.ipynb deleted file mode 100644 index a954748c..00000000 --- a/docs/avaliacoes/2024_1_final/src/analise_dados_treinamento.ipynb +++ /dev/null @@ -1,215 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 32, - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "import seaborn as sns\n", - "import matplotlib.pyplot as plt\n", - "sns.set_style(\"darkgrid\")" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
EpisodeEpsilonActionsRewardsRewards_AvgActions_Avg
010.80000200-45.0NaNNaN
120.79600200-37.0NaNNaN
230.7920241.0NaNNaN
340.78806200-39.0NaNNaN
450.7841214-7.0NaNNaN
\n", - "
" - ], - "text/plain": [ - " Episode Epsilon Actions Rewards Rewards_Avg Actions_Avg\n", - "0 1 0.80000 200 -45.0 NaN NaN\n", - "1 2 0.79600 200 -37.0 NaN NaN\n", - "2 3 0.79202 4 1.0 NaN NaN\n", - "3 4 0.78806 200 -39.0 NaN NaN\n", - "4 5 0.78412 14 -7.0 NaN NaN" - ] - }, - "execution_count": 33, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df = pd.read_csv('./data/dados_treinamento.csv')\n", - "df['Rewards_Avg'] = df['Rewards'].rolling(window=100).mean()\n", - "df['Actions_Avg'] = df['Actions'].rolling(window=100).mean()\n", - "df.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAj4AAAHHCAYAAAC/R1LgAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABY30lEQVR4nO3dd3hUZfrG8e9k0iukQkiAUJLQAkQEKYIFsMIKVhbFgrCoq6KooLsqrCKwi/4EVGSxoYhlVbCAuLoqCkoRRJTeIQklvdeZ8/sjZHToCZNMyf25Lq9lzpyceZ45sNy873vOMRmGYSAiIiLSCHg5uwARERGRhqLgIyIiIo2Ggo+IiIg0Ggo+IiIi0mgo+IiIiEijoeAjIiIijYaCj4iIiDQaCj4iIiLSaCj4iIiISKOh4CMiTpWUlMScOXOcXYbLmjRpEpdcckmDfuaaNWtISkpizZo1Dfq5Ig3B29kFiMjJffTRRzz66KO212azmYiICPr27csDDzxATEyME6uTk5kzZw4vvPDCKd9fuXIlUVFRDViRiBxPwUfExd13333ExcVRUVHBxo0bWbx4MevXr+ezzz7Dz8/P2eXJSUyePJnAwMATtoeGhtb6WE899RR6pKKI4yj4iLi4/v3706VLFwCuv/56mjZtyvz58/nf//7HlVde6eTqzqykpOSkIcBdlZaWEhAQcNp9LrvsMsLDwx3yeT4+Pg45johU0xofETfTo0cPAA4ePGi3fffu3dx333307NmTLl26MHz4cP73v//Z3i8oKKBDhw68+eabtm05OTkkJyfTq1cvu1GFJ598kr59+9pe//TTT9x3331cdNFFdO7cmQEDBvDMM89QVlZmV8OkSZPo3r07Bw4cYMyYMXTv3p2HHnoIgIqKCp555hkuuOACunfvzrhx4zh8+PAJ/RUVFTF16lQuueQSOnfuTO/evbn99tvZvHnzab+XOXPmkJSUxO7du7n//vtJTU2lV69ePP3005SXl5+w/8cff8zw4cNJSUmhZ8+ePPDAAxw6dMhun1tuuYWrr76a3377jZEjR9K1a1eee+6509ZxNmrW0CxbtoznnnuOvn370q1bN8aNG3dCDSdb47N06VKGDx9O9+7dSU1NZciQISxYsMBun4MHD9p+P3Tt2pUbbriBb7/99oRaDh8+zN133023bt3o3bs3zzzzDBUVFSet+5dffmH06NGcd955dO3alZtvvpn169ef25ch0sA04iPiZtLT0wH7aZOdO3cyYsQIYmJiGDNmDIGBgXz++efcc889zJkzh0GDBhEaGkr79u356aefGDVqFAAbNmzAZDKRl5fHrl27aN++PQDr16/nvPPOsx1/+fLllJWVMWLECJo0acKmTZtYuHAhhw8fZvbs2Xb1VVVV2f5ynDhxIv7+/gD87W9/45NPPuHqq68mNTWV1atXM3bs2BP6e/LJJ/niiy+4+eabadu2LXl5eaxfv57du3fTqVOnM34/48ePp0WLFkyYMIGNGzfy1ltvUVBQwD//+U/bPnPnzmXWrFlcccUVXHfddeTk5LBw4UJGjhzJkiVL7L7bvLw8xowZw1VXXcXQoUOJiIg4Yw35+fknbPP29j5hqmvu3LmYTCbGjBlDdnY2CxYs4LbbbuPjjz+2fW/HW7VqFQ8++CC9e/e2hco9e/awYcMGbr31VgCysrK46aabKC0t5ZZbbqFp06YsXryYu+66i9mzZzNo0CAAysrKuPXWWzl06BC33HIL0dHRfPzxx6xevfqEz/3xxx8ZM2YMnTt35q9//Ssmk4mPPvqIW2+9lUWLFpGSknLG70XEJRgi4pI+/PBDIzEx0fjhhx+M7Oxs49ChQ8by5cuNCy64wOjcubNx6NAh27633nqrcfXVVxvl5eW2bVar1bjxxhuNwYMH27ZNmTLF6NOnj+31tGnTjJEjRxq9e/c2Fi1aZBiGYeTm5hpJSUnGggULbPuVlpaeUN+8efOMpKQkIz093bZt4sSJRmJiojFz5ky7fbdu3WokJiYakydPttv+4IMPGomJicbs2bNt28477zxjypQpZ/091Zg9e7aRmJhojBs3zm775MmTjcTERGPr1q2GYRhGWlqa0aFDB2Pu3Ll2+23fvt3o2LGj3fabb77ZSExMNN55551a1XCy/y677DLbfqtXrzYSExONCy+80CgsLLRtX7ZsmZGYmGj33U+cONG4+OKLba+ffvppIzU11aiqqjplHVOnTjUSExONdevW2bYVFRUZl1xyiXHxxRcbFovFMAzDeOONN4zExERj2bJltv1KSkqMQYMGGYmJicbq1asNw6j+vTR48GDjjjvuMKxWq23f0tJS45JLLjFuv/32s/p+RFyBprpEXNxtt91G7969GTBgAPfddx8BAQHMnTuXZs2aAdUjEqtXr+aKK66gqKiInJwccnJyyM3NpV+/fuzbt48jR44A1dNkWVlZ7NmzB6iewurRowc9evTgp59+AqpHewzDsE2pAXajDyUlJeTk5NC9e3cMw2DLli0n1DxixAi71ytWrACqp47+qGaE4o9CQ0P55ZdfbDXX1siRI+1e33zzzQB89913AHz55ZdYrVauuOIK23eVk5NDZGQkrVq1OuESbl9fX4YPH16rGubMmcPrr79u99+0adNO2O+aa64hODjY9vryyy8nKirK9n2dTGhoKKWlpaxateqU+6xYsYKUlBS7cxgUFMSNN95Ieno6u3btAqq/k6ioKC6//HLbfgEBAdxwww12x9u6dSv79u1jyJAh5Obm2r6zkpISevfuzbp167BarWf+YkRcgKa6RFzcE088QUJCAoWFhXz44YesW7cOX19f2/sHDhzAMAxmzZrFrFmzTnqM7OxsYmJibNNX69evp1mzZmzdupXx48cTHh7Oa6+9BlSHoeDgYJKTk20/n5GRwezZs/n6669PmMYpKiqye+3t7W0LZTXS09Px8vKiZcuWdtvbtGlzQq0PPfQQkyZN4qKLLqJTp04MGDCAa665hvj4+DN9VQC0atXK7nXLli3x8vIiLS0NgH379mEYBoMHDz7pz3t72//fYkxMjN33fTZ69OhxVoubj6/VZDLRqlUr23Tmyfz5z3/m888/Z8yYMcTExNC3b1+uuOIK+vfvb9snIyODrl27nvCzNd93RkYGiYmJpKen06pVK0wmk91+CQkJdq/37dsHwMSJE09ZV2FhIWFhYad8X8RVKPiIuLiUlBTbVV0DBw7kz3/+MxMmTGD58uUEBQXZ/qV9xx13cOGFF570GDWBIyYmhri4ONatW0eLFi0wDINu3boRHh7O1KlTSU9PZ/369XTv3h0vr+oBYYvFwu23305+fj533nknbdq0ITAwkCNHjjBp0qQT/qXv6+tr+9m6uPLKK+nRowdffvklq1at4tVXX2X+/PnMmTOHAQMG1Pp4x/+lbrVaMZlMzJ8/H7PZfML+x1+Bdqq1Ns4SERHBkiVLWLlyJd999x3fffcdH330Eddccw0zZsyol880ji18f+SRR+jQocNJ9/GkK/fEsyn4iLgRs9nMgw8+yKhRo3j77bcZO3asbSTEx8eHPn36nPEYPXr0YN26dcTFxZGcnGwb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8ksMw2DdunX87W9/Y+7cuQ4rUOquZn2PRntERESq1Tn4FBYWEhYWBsD333/P4MGDCQgI4KKLLmL//v0OK1DqTld0iYiI2Ktz8GnevDk///wzJSUlfP/99/Tt2xeAgoICfH19HVag1F2abcRHV3SJiIgAeNf1B0eNGsXDDz9MYGAgsbGx9OrVC4B169aRmJjosAKl7myXsmvER0REBDiH4DNy5EhSUlI4fPgwffr0wcurevAoPj6e8ePHO6o+OQe2qS6t8REREQHOIfgAdOnShS5duthtu+iii87lkOIglRYrRwrLAWjRRFNdIiIiUMvgM23atLPe99FHH611MeI4hwrKsRrg7+1FhJ7KLiIiAtQy+GzZsuWE1xaLhYSEBAD27duHl5cXnTp1clyFUifp+b9f0aXHhoiIiFSrVfB56623bL9+/fXXCQoKYsaMGbbL2vPz83n00Udt9/cR56m5eaGu6BIREfldnS9nf+2115gwYYIt9ACEhYUxfvx4XnvtNYcUJ3WXrmd0iYiInKDOwaeoqIicnJwTtufk5FBcXHxORcm5s011acRHRETEps7BZ9CgQTz66KP897//5fDhwxw+fJgvvviCv/3tbwwePNiRNUod6B4+IiIiJ6rz5exTpkxhxowZTJgwgaqq6ieAm81mrrvuOh555BGHFSi1ZxgGacfu4aPndImIiPyuTsHHYrHw22+/8cADD/DII49w4MABAFq2bElgYKBDC5Tayy2tpLTSigloHqrgIyIiUqNOU11ms5k77riDgoICAgMDSU5OJjk5WaHHRdRc0RUT4oevd51nM0VERDxOnf9WbN++PWlpaY6sRRzkj/fwERERkd/VOfiMHz+eGTNm8M0333D06FGKiors/hPn0T18RERETq7Oi5vHjh0LwF133WV3Z2DDMDCZTGzduvXcq5M60RVdIiIiJ1fn4PPmm286sg5xID2VXURE5OTqHHx69uzpyDrEQQzDYG92CQCtwrXYXERE5I/qHHxqlJaWkpGRQWVlpd325OTkcz201EFuaSX5ZVWYgFZNtcZHRETkj+ocfHJycnj00Uf57rvvTvq+1vg4R81oT4sm/vj7mJ1cjYiIiGup81VdU6dOpaCggPfffx9/f39eeeUVpk+fTqtWrZg7d64ja6yVb7/9luuvv56UlBTOP/987r77bqfV4gx7jgWfBE1z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EIcf15V4eo/qz/15eo/qz/15eo/12V/Nsc+4n2E476vNyckhNzf3tPvEx8fj6+tre/3RRx/xzDPPnHBVV41du3YxatQorr/+eh544AGH1isiIiLuzakjPuHh4YSHhzvseDt37uTWW2/lmmuuUegRERGRE7jNGp+MjAzy8/PJyMjAYrGwdetWAFq2bElQUBA7duzg1ltvpV+/ftx+++1kZmYCYDabHRquRERExH05daqrNiZNmsTixYtP2P7mm2/Sq1cv5syZwwsvvHDC+y1atODrr79uiBJFRETExblN8BERERE5V3pWl4iIiDQaCj4iIiLSaCj4iIiISKOh4CMiIiKNhoKPiIiINBoKPiIiItJoKPico3Xr1jFu3Dj69etHUlISX331ld37hmEwa9Ys+vXrR0pKCrfddhv79u2z2ycvL48JEyaQmppKjx49eOyxxyguLm7ALk7tTP1NmjSJpKQku/9Gjx5tt48r9zdv3jyuvfZaunfvTu/evbn77rvZs2eP3T7l5eVMmTKFXr160b17d+69916ysrLs9snIyGDs2LF07dqV3r17M2PGDKqqqhqylZM6m/5uueWWE87hE088YbePq/YHsGjRIoYMGUJqaiqpqanceOONrFixwva+O58/OHN/7n7+jvfvf/+bpKQkpk6datvm7ufwj07Wn7ufwzlz5pxQ/+WXX25739XOn9vcudlVlZSUkJSUxLXXXstf//rXE96fP38+b731FtOnTycuLo5Zs2YxevRoli1bhp+fHwAPPfQQmZmZvP7661RWVvLYY4/xxBNP8OyzzzZ0Oyc4U38AF154IdOmTbO9/uOz1cC1+1u7di0jR46kS5cuWCwWnnvuOUaPHs3SpUsJDAwE4JlnnmHFihU8//zzhISE8NRTT/HXv/6Vd999FwCLxcJf/vIXIiMjeffddzl69CgTJ07Ex8eHBx980JntnVV/ADfccAP33Xef7XVAQIDt167cH0CzZs146KGHaNWqFYZhsGTJEu655x4WL15M+/bt3fr8wZn7A/c+f3+0adMm3n33XZKSkuy2u/s5rHGq/sD9z2H79u15/fXXba/NZrPt1y53/gxxmMTEROPLL7+0vbZarUbfvn2NV155xbatoKDA6Ny5s/HZZ58ZhmEYu3btMhITE41NmzbZ9lmxYoWRlJRkHD58uOGKPwvH92cYhjFx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0mhojY+IiIg0Ggo+IiIi0mgo+IiIiEijoeAjIiIijYaCj4iIiDQaCj4iIiLSaCj4iIiISKOh4CMiHiEtLY2kpCTb7f7rw6RJk7j77rvr7fgiUv+cf8tHERGqQ8XixYtP2N6vXz9effXVM/588+bNWblyJU2bNq2P8kTEQyj4iIjLuPDCC5k2bZrdtrN9Vo/ZbHbJJ1WLiGvRVJeIuAxfX1+ioqLs/gsLCwOqnzu2aNEi7rzzTlJSUrj00ktZvny57WePn+rKz89nwoQJXHDBBaSkpDB48GA+/PBD2/7bt29n1KhRpKSk0KtXLx5//HGKi4tt71ssFqZNm0aPHj3o1asX//znPzn+CT9Wq5V58+ZxySWXkJKSwtChQ+1qEhHXo+AjIm5j1qxZXHbZZXz88ccMGTKEBx98kN27d59y3927dzN//nyWLVvG5MmTbdNgJSUljB49mrCwMD744AOef/55fvjhB5566inbz7/22mssXryYZ555hkWLFpGfn8+XX35p9xnz5s1jyZIlTJkyhaVLl3Lbbbfx8MMPs3bt2vr7EkTknGiqS0Rcxrfffkv37t3ttv3lL39h3LhxAFx++eVcf/31AIwfP54ffviBt956i8mTJ59wrIyMDDp06ECXLl0AiIuLs7332WefUVFRwYwZMwgMDATgiSeeYNy4cTz00ENERkayYMECxo4dy+DBgwGYMmUKK1eutB2joqKCefPm8frrr9tqjo+PZ/369bz33nv07NnTQd+KiDiSgo+IuIxevXqdEGJqprqAE0JRt27dTnkV14gRI7jvvvvYsmULffv2ZeDAgaSmpgKwe/dukpKSbKEHIDU1FavVyt69e/Hz8yMzM5OuXbva3vf29qZz58626a79+/dTWlrKHXfcYfe5lZWVdOjQofbNi0iDUPAREZcREBBAq1atHHKsAQMG8M0337BixQpWrVrFbbfdxsiRI5k4caJDjl9SUgJUT3fFxMTYvXe2C7JFpOFpjY+IuI2NGzfavf7ll19o27btKfcPDw9n2LBhzJw5k8cee4z33nsPgLZt27J9+3ZbeAHYsGEDXl5eJCQkEBISQlRUFL/88ovt/aqqKjZv3mx73bZtW3x9fcnIyKBVq1Z2/zVv3txBHYuIo2nER0RcRkVFBZmZmXbbzGYz4eHhACxfvpzOnTtz3nnn8emnn7Jp0yamTp160mPNmjWLTp060b59eyoqKvj2229tIWnIkCHMnj2bSZMm8de//pWcnByeeuop/vSnPxEZGQnAqFGjmD9/Pq1btyYhIYE33niDgoIC2/GDg4O54447mDZtGoZhcN5551FYWMiGDRsIDg5m2LBh9fEVicg5UvAREZfx/fff069fP7ttCQkJtkvE7733XpYtW8aUKVOIiori2WefpV27dic9lo+PD8899xzp6en4+/tz3nnn8dxzzwHVU2qvvvoqU6dO5brrriMgIIDBgwczadIk28/fcccdZGZmMnHiRLy8vLj22msZNGgQhYWFtn3Gjx9PeHg48+bNIy0tjZCQEDp27GhbjC0irsdkHH9jChERF5SUlMSLL77IwIEDnV2KiLgxrfERERGRRkPBR0RERBoNTXWJiIhIo6ERHxEREWk0FHxERESk0VDwERERkUZDwUdEREQaDQUfERERaTQUfERERKTRUPARERGRRkPBR0RERBoNBR8RERFpNP4frepunL15HkUAAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "sns.lineplot(x='Episode', y='Rewards_Avg', data=df)\n", - "plt.title('Rewards per Episode')\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "sns.lineplot(x='Episode', y='Epsilon', data=df)\n", - "plt.title('Epsilon per Episode')\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjMAAAHHCAYAAABKudlQAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABc70lEQVR4nO3dd3hUZfrG8e9MepkkpCeUUBNKpKpIEQRBsOBPwNUVhLUsrrqIa8Vld6WIgLq4AmJjwQIiuooowoq4KipFUOkiIj0EUknvmfP7I2QkhJKQmUxmcn+ui2uTMyfvPM+csNy+5z3nmAzDMBARERFxUWZnFyAiIiJSFwozIiIi4tIUZkRERMSlKcyIiIiIS1OYEREREZemMCMiIiIuTWFGREREXJrCjIiIiLg0hRkRERFxaQozIo3EE088wcCBA51dRqPijM/8u+++IyEhge+++65e31fEmRRmRBqIt99+m4SEBH73u99d9BgpKSnMmzePPXv22LGyxmHevHkkJCSc809aWpqzSxSRc/B0dgEiUmHlypU0bdqUHTt2cPjwYeLi4mo9RmpqKi+++CJNmzalQ4cOVV576qmn0KPYLmzKlCn4+/tX2x4UFFTrsfSZi9QPhRmRBuDo0aNs3bqVF198kSeffJKVK1cyfvx4u76Hl5eXXcdzRYWFhfj5+Z13nyFDhhAaGmqX99NnLlI/dJpJpAFYuXIlwcHB9O/fnyFDhrBy5cqz7peTk8OMGTMYOHAgiYmJ9OvXj8cff5zMzEy+++47br75ZgD++te/2k6PLF++HDj7+o2CggJmzZpF//79SUxMZMiQISxcuLDabEJCQgLTpk3j888/54YbbiAxMZHrr7+er7/+usp+eXl5PP3007b6evXqxZ133snu3bvP23/lKZ79+/fz4IMP0r17d3r27Mn06dMpLi6utv9HH33EiBEj6Ny5M5dffjkPPfQQx48fr7LPmDFjuOGGG9i1axejR4+mS5cuPP/88+etoyYq16SsXr2a559/nj59+tC1a1fuvffeajWc7TNftWoVI0aMoFu3bnTv3p1hw4bx5ptvVtnn6NGjTJgwgcsvv5wuXbpwyy238NVXX1Wr5cSJE9x///107dqVXr16MWPGDEpKSs5a9/bt27n77rvp0aMHXbp04fbbb+eHH36o24ch0kBoZkakAVi5ciWDBw/G29ubG264gXfeeYcdO3bQuXNn2z75+fmMHj2a/fv3M3LkSDp27MjJkyf54osvSElJoU2bNkyYMIG5c+dy66230qNHDwC6d+9+1vc0DIP77rvPFoI6dOjAN998w7PPPktKSgqTJk2qsv8PP/zAZ599xqhRowgICGDx4sVMmDCBL7/8kiZNmgAwefJk1qxZw+23306bNm3Iysrihx9+YP/+/XTq1OmCn8Nf/vIXmjZtyiOPPMK2bdtYvHgxOTk5PPvss7Z9Xn75ZebMmcO1117LzTffTGZmJkuWLGH06NGsWLGiyumgrKwsxo0bx/XXX8+NN95IWFjYBWvIzs6uts3T07PaaaaXX34Zk8nEuHHjyMjI4M033+SOO+7go48+wtfX96xjr1+/nocffphevXrx6KOPAnDgwAF+/PFH/vCHPwCQnp7O73//ewoLCxkzZgxNmjThww8/5L777mPu3LkMHjwYgKKiIv7whz9w/PhxxowZQ2RkJB999BGbNm2q9r4bN25k3LhxJCYmMn78eEwmE8uXL+cPf/gDS5curfJ7JuKSDBFxqp07dxrx8fHG+vXrDcMwDKvVavTr18+YPn16lf3mzJljxMfHG5999lm1MaxWq2EYhrFjxw4jPj7e+OCDD6rtM3HiRGPAgAG279euXWvEx8cbL730UpX9HnjgASMhIcE4fPiwbVt8fLzRqVOnKtv27NljxMfHG4sXL7Zt69GjhzF16tTatG8YhmHMnTvXiI+PN+69994q26dMmWLEx8cbe/bsMQzDMJKSkowOHToYL7/8cpX99u7da3Ts2LHK9ttvv92Ij4833nnnnVrVcLY/Q4YMse23adMmIz4+3rjyyiuN3Nxc2/bVq1cb8fHxxptvvmnbduZnPn36dKN79+5GWVnZOet4+umnjfj4eGPLli22bXl5ecbAgQONAQMGGOXl5YZhGMYbb7xhxMfHG6tXr7btV1BQYAwePNiIj483Nm3aZBhGxe/GNddcY9x111223xPDMIzCwkJj4MCBxp133lmjz0ekIdNpJhEnW7lyJeHh4fTs2RMAk8nEddddx+rVqykvL7ft99lnn9G+fXvbf5mfzmQy1fp9v/76azw8PBgzZkyV7XfddReGYVQ7hdS7d29atGhh+759+/YEBgZy9OhR27agoCC2b99OSkpKresBGD16dJXvb7/9dlutAGvXrsVqtXLttdeSmZlp+xMeHk5cXFy1y5G9vb0ZMWJErWqYN28er7/+epU/M2fOrLbfTTfdRGBgoO37oUOHEhERwbp16845dlBQEIWFhaxfv/6c+6xbt47OnTtz6aWX2rYFBARw6623cuzYMX799Veg4jOJiIhg6NChtv38/Py45ZZbqoy3Z88eDh06xLBhwzh58qTtMysoKKBXr15s2bIFq9V64Q9GpAHTaSYRJyovL2fVqlX07NmTpKQk2/bOnTuzaNEiNm7cSN++fQE4cuQI11xzjd3e+9ixY0RGRlb5BxmgTZs2ttdPFxMTU22M4OBgcnJybN8/+uijPPHEE1x11VV06tSJ/v37c9NNN9G8efMa1XTmFVwtWrTAbDbbPptDhw5hGMY5PwdPz6r/lxYVFYW3t3eN3rvSpZdeWqMFwGfWajKZiIuLq/a5nW7UqFH897//Zdy4cURFRdGnTx+uvfZa+vXrZ9snOTmZLl26VPvZ1q1b216Pj4/n2LFjxMXFVQuyrVq1qvL9oUOHAJg4ceI568rNzSU4OPicr4s0dAozIk60adMm0tLSWLVqFatWrar2+sqVK21hxtk8PDzOut04bbHwddddx6WXXsratWtZv349CxcuZMGCBcybN4/+/fvX+j3P/IfaarViMplYsGDBWes585Lqc61dcZawsDBWrFjBt99+y9dff83XX3/N8uXLuemmm3jmmWcc8p6Vx+fxxx+vdrl+pbNdii7iShRmRJxo5cqVhIWF8eSTT1Z7be3ataxdu5apU6fi6+tLixYt2Ldv33nHq83ppqZNm7Jx40by8vKqzM4cOHDA9vrFiIyMZPTo0YwePZqMjAyGDx/OK6+8UqMwc/jw4SqzOIcPH8ZqtdKsWTOgYqbGMAyaNWtWbQaivh0+fLjK94ZhcPjwYRISEs77c97e3gwcOJCBAwditVqZMmUK7777Lvfffz9xcXHExsZy8ODBaj9XeVxiY2OBiuPzyy+/YBhGleN+5s9Wfp6BgYH07t279o2KuACtmRFxkqKiIj777DOuuuoqhg4dWu3P6NGjyc/P54svvgDgmmuu4eeff2bt2rXVxqr8r+/Ke6icfurnXPr160d5eTlvv/12le1vvPEGJpOpyqmPmigvLyc3N7fKtrCwMCIjI895ufCZzqxlyZIltlqh4jPw8PDgxRdfrHb5uGEYnDx5slY118WKFSvIy8uzff/pp5+SlpZ23s/tzPrMZrMt/FR+Rv3792fHjh1s3brVtl9BQQHvvfceTZs2pW3btkDFZ5Kamsqnn35q26+wsJD33nuvynskJibSokULFi1aRH5+frWaMjMza9qySIOlmRkRJ/niiy/Iz88/57N7unbtSmhoKB9//DHXXXcdd999N2vWrOHBBx9k5MiRdOrUiezsbL744gumTp1K+/btadGiBUFBQSxbtoyAgAD8/f3p3LnzWdesDBw4kJ49e/Kvf/2LY8eOkZCQwPr16/nf//7HH/7whyqLfWsiPz/fdp+c9u3b4+/vz4YNG9i5cydPPPFEjcZISkri3nvv5corr2Tbtm18/PHH3HDDDbRv3x6omJn5y1/+wuzZszl27BiDBg0iICCApKQkPv/8c2655RbuvvvuWtV9pjVr1pz1tEufPn0IDw+3fR8cHMyoUaMYMWKE7dLsuLi4agtwT/f3v/+d7OxsrrjiCqKiokhOTmbJkiV06NDBtlbpnnvuYdWqVYwbN44xY8YQHBzMihUrSEpKYt68eZjNFf8Nesstt/D2228zceJEdu/eTURExFkvCzebzUyfPp1x48Zxww03MGLECKKiokhJSeG7774jMDCQV155pU6fmYizKcyIOMnHH3+Mj48Pffr0OevrZrOZq666ipUrV3Ly5EmaNGnC22+/zbx581i7di0ffvghYWFh9OrVi6ioKKDijrOzZs3i+eefZ8qUKZSVlTFz5syzhhmz2czLL7/M3LlzWb16NcuXL6dp06Y8/vjj3HXXXbXux9fXl9tuu43169fz2WefYRgGLVq0YPLkyYwaNapGY7zwwgvMmTOH2bNn4+npye23387jjz9eZZ977rmHli1b8sYbbzB//nwAoqOj6dOnj10e6jhlypSzbn/rrbeqhJl7772XvXv38tprr5Gfn0+vXr2YPHnyee8wfOONN/Lee++xdOlScnJyiIiI4Nprr+WBBx6whZTw8HCWLVvGc889x5IlSyguLiYhIYFXXnmFq666yjaWn58fb7zxBk899RRLlizB19eXYcOG0a9fP/74xz9Wed+ePXvy7rvv8tJLL7FkyRIKCgqIiIigc+fO3HrrrRf/YYk0ECbjzLlaEZF6Nm/ePF588UU2btxot0cJOMp3333H2LFjmTNnTpXLokXEebRmRkRERFyawoyI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CJ6ezs//F+rx+PHjPPbYY+zbt4+CggJiYmIYNGgQ999/P4GBgbb9G2qPkyZNYtOmTaSmpmKxWEhISGDcuHH06dMHcP3jd77+XP3YncuYMWNo3749f/vb3wDXP4Znc3qPrn4cH3roIbZs2UJWVhahoaH06NGDhx56yLbWpyEeP4UZERERcWlaMyMiIiIuTWFGREREXJrCjIiIiLg0hRkRERFxaQozIiIi4tIUZkRERMSlKcyIiIiIS1OYEZEGKSkpiYSEBNtt4B3hiSee4P7773fY+CJSPxrmrRRFxOU98cQTfPjhh9W29+3bl4ULF17w52NiYvj2229p0qSJI8oTETeiMCMiDnPllVcyc+bMKttq+mwWDw+PBvf0YBFpmHSaSUQcxtvbm4iIiCp/goODgYpnTC1dupQ//vGPdO7cmauvvppPP/3U9rNnnmbKzs7mkUce4YorrqBz585cc801fPDBB7b99+7dy9ixY+ncuTM9e/bkH//4B/n5+bbXy8vLmTlzJpdeeik9e/bk2Wef5cynuVitVl599VUGDhxI586dufHGG6vUJCINk8KMiDjNnDlzGDJkCB999BHDhg3j4YcfZv/+/efcd//+/SxYsIDVq1czZcoU2ymogoIC7r77boKDg3n//fd54YUX2LBhA0899ZTt5xctWsSHH37IjBkzWLp0KdnZ2axdu7bKe7z66qusWLGCqVOnsmrVKu644w4ee+wxNm/e7LgPQUTqTKeZRMRhvvrqK7p161Zl25/+9CfuvfdeAIYOHcrvfvc7AP7yl7+wYcMGFi9ezJQpU6qNlZycTIcOHbjkkksAaNasme21Tz75hJKSEp555hn8/f0BePLJJ7n33nt59NFHCQ8P58033+See+7hmmuuAWDq1Kl8++23tjFKSkp49dVXef311201N2/enB9++IF3332Xyy+/3E6fiojYm8KMiDhMz549qwWTytNMQLWg07Vr13NevXTbbbcxYcIEfvrpJ/r06cOgQYPo3r07APv37ychIcEWZAC6d++O1Wrl4MGD+Pj4kJaWRpcuXWyve3p6kpiYaDvVdPjwYQoLC7nrrruqvG9paSkdOnSoffMiUm8UZkTEYfz8/IiLi7PLWP379+fLL79k3bp1rF+/njvuuIPRo0czceJEu4xfUFAAVJxqioqKqvJaTRcti4hzaM2MiDjNtm3bqny/fft22rRpc879Q0NDGT58OP/85z+ZNGkS7777LgBt2rRh7969tkAC8OOPP2I2m2nVqhUWi4WIiAi2b99ue72srIzdu3fbvm/Tpg3e3t4kJycTFxdX5U9MTIydOhYRR9DMjIg4TElJCWlpaVW2eXh4EBoaCsCnn35KYmIiPXr0YOXKlezYsYOnn376rGPNmTOHTp060a5dO0pKSvjqq69swWfYsGHMnTuXJ554gvHjx5OZmclTTz3F//3f/xEeHg7A2LFjWbBgAS1btqRVq1a88cYb5OTk2MYPDAzkrrvuYubMmRiGQY8ePcjNzeXHH38kMDCQ4cOHO+IjEhE7UJgREYf55ptv6Nu3b5VtrVq1sl3u/MADD7B69WqmTp1KREQEs2fPpm3btmcdy8vLi+eff55jx47h6+tLjx49eP7554GK01kLFy7k6aef5uabb8bPz49rrrmGJ554wvbzd911F2lpaUycOBGz2czIkSMZPHgwubm5tn3+8pe/EBoayquvvkpSUhIWi4WOHTvaFiyLSMNkMs680YKISD1ISEhg/vz5DBo0yNmliIiL05oZERERcWkKMyIiIuLSdJpJREREXJpmZkRERMSlKcyIiIiIS1OYEREREZemMCMiIiIuTWFGREREXJrCjIiIiLg0hRkRERFxaQozIiIi4tIUZkRERMSl/T+kC4JkIZxTBQAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "sns.lineplot(x='Episode', y='Actions_Avg', data=df)\n", - "plt.title('Actions per Episode')\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "venv", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.12" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/docs/avaliacoes/2024_1_gabarito/index.md b/docs/avaliacoes/2024_1_gabarito/index.md deleted file mode 100644 index 90d2f120..00000000 --- a/docs/avaliacoes/2024_1_gabarito/index.md +++ /dev/null @@ -1,43 +0,0 @@ -# Gabarito da prova final - -## 1. Encontrando o menor caminho com algoritmos de busca (3 pontos) - -Uma possível solução é apresentada no arquivo [my_agent.py](./src/my_agent.py). - -A solução entregue deve passar por todos os testes descritos no arquivo de [testes](./src/test_my_agent_depois_entrega.py). - -## 2. Encontrando o caminho com aprendizado por reforço (3 pontos) - -1. Qual foi a política que o agente aprendeu a executar? - -Dado o que é definido na função de reward, o agente aprende a não bater nas paredes e não sair do mapa. No entanto, como o primeiro exercício tem um objetivo fixo então o agente também consegue aprender a chegar no objetivo se os hiperparâmetros forem corretamente definidos. Mas não necessariamente pelo caminho mais curto. - -2. O que acontece se alterarmos os hiperparâmetros para $\alpha = 0.1, \gamma = 0.99, \epsilon = 0.8, \epsilon_{min} = 0.05, \epsilon_{dec} = 1, episodes = 1000$? Qual foi o comportamento do agente durante o treinamento? Depois de treinado o agente consegue alcançar o objetivo? - -Como não existe decaimento do epsilon, pois $\epsilon_{dec}=1$, o agente durante o treinamento sempre vai escolher mais ações aleatórias do que ações baseadas na política aprendida. Isso faz com que o agente demore mais em cada episódio. Mas, dado a simplicidade do ambiente, o agente consegue aprender a não bater nas paredes e não sair do mapa. - -3. O que acontece se alterarmos os hiperparâmetros para $\alpha = 0, \gamma = 0.99, \epsilon = 0.8, \epsilon_{min} = 0.05, \epsilon_{dec} = 1, episodes = 1000$? Justifique a sua resposta. - -O agente não aprende em absoluto pois o valor de $\alpha$ é zero. Isso faz com que o agente não atualize os valores da tabela Q. - -## 3. Problema de otimização (2 pontos) - -Uma possível solução é apresentada no arquivo [Otimizacao.py](./src/Otimizacao.py). - -## 4. Problema de tomada de decisão (1 ponto) - -A decisão executada pelo agente será executar a ação **M**. - -## 5. Analisando ambientes (1 ponto) - -### busca de menor caminho entre duas cidades - -single-agent, determinístico e A* - -### um agente jogador de jogo da velha - -multi-agent (competitivo), determinístico e minimax - -### agente que é capaz de andar em um lago congelado - -single-agent, estocástico e Q-learning ou Sarsa \ No newline at end of file diff --git a/docs/avaliacoes/2024_1_gabarito/src/Otimizacao.py b/docs/avaliacoes/2024_1_gabarito/src/Otimizacao.py deleted file mode 100644 index f4be198e..00000000 --- a/docs/avaliacoes/2024_1_gabarito/src/Otimizacao.py +++ /dev/null @@ -1,58 +0,0 @@ -from aigyminsper.search.CSPAlgorithms import SubidaMontanhaEstocastico, SubidaMontanha -from aigyminsper.search.Graph import State -import numpy as np -import math - -class Otimizacao(State): - - def __init__(self, x): - self.x = x - - def successors(self): - sucessores = [] - sucessores.append(Otimizacao(self.x + 0.1)) - sucessores.append(Otimizacao(self.x - 0.1)) - return sucessores - - def h(self): - #return (np.power(self.x + 2, 2)) - (16 * np.exp2(-np.power((self.x - 2), 2))) - return (self.x + 2)**2 - 16 * math.exp(-(self.x - 2)**2) - - # eu não sei dizer qual eh o goal entao nao vou usar este - # metodo. se eu não uso este metodo entao eu nao posso usar - # o subida da montanha estocastico - def is_goal(self): - return False - - def cost(self): - return 1 - - def env(self): - return self.x - - def description(self): - return "Problema de otimizacao de funcao" - -# sabemos que o subida da montanha tem problema de minimo local -# desta forma eu vou iniciar varias vezes a busca sempre a partir de um -# valor diferente e vou guardar o valor de x e y melhores a cada iteracao - -x = -11 -y = math.inf - -for i in range(-10,10,1): - inicial = Otimizacao(i) - result = SubidaMontanha().search(inicial) - if result == None: - print("Nao encontrou solucao") - else: - print(f'Começando com i = {i} Valor de y = {result.h()} para x = {result.env()}') - if result.h() < y: - x = result.env() - y = result.h() - -print(f'=================================') -print(f'Melhor valor de x = {x} e y = {y}') - - - diff --git a/docs/avaliacoes/2024_1_gabarito/src/my_agent.py b/docs/avaliacoes/2024_1_gabarito/src/my_agent.py deleted file mode 100644 index 7ec4a3c5..00000000 --- a/docs/avaliacoes/2024_1_gabarito/src/my_agent.py +++ /dev/null @@ -1,76 +0,0 @@ -from aigyminsper.search.SearchAlgorithms import BuscaProfundidadeIterativa, BuscaLargura -from aigyminsper.search.Graph import State - -class MyAgent(State): - - def __init__(self, map, op, position, goal): - self.map = map - self.operator = op - self.position = position - self.goal = goal - - def successors(self): - # - # os sucessores que devem ser considerados são: - # 0 - cima - # 1 - baixo - # 2 - esquerda - # 3 - direita - # - sucessors = [] - if self.position[0] > 0 and self.map[self.position[0]-1][self.position[1]] == '0': - sucessors.append(MyAgent(self.map, '0', (self.position[0]-1, self.position[1]), self.goal)) - else: - sucessors.append(MyAgent(self.map, '0', self.position, self.goal)) - - if self.position[0] < len(self.map)-1 and self.map[self.position[0]+1][self.position[1]] == '0': - sucessors.append(MyAgent(self.map, '1', (self.position[0]+1, self.position[1]), self.goal)) - else: - sucessors.append(MyAgent(self.map, '1', self.position, self.goal)) - - if self.position[1] > 0 and self.map[self.position[0]][self.position[1]-1] == '0': - sucessors.append(MyAgent(self.map, '2', (self.position[0], self.position[1]-1), self.goal)) - else: - sucessors.append(MyAgent(self.map, '2', self.position, self.goal)) - - if self.position[1] < len(self.map[0])-1 and self.map[self.position[0]][self.position[1]+1] == '0': - sucessors.append(MyAgent(self.map, '3', (self.position[0], self.position[1]+1), self.goal)) - else: - sucessors.append(MyAgent(self.map, '3', self.position, self.goal)) - - return sucessors - - def is_goal(self): - return self.position == self.goal - - def description(self): - return "Agente que sabe andar em um grid simples" - - def cost(self): - return 1 - - def env(self): - return f'{self.position[0]};{self.position[1]}' - -def get_actions(map, position, goal): - # - # Esta fnção deve retornar uma lista de ações que o agente deve executar - # Assim conseguimos executar o agente no ambiente usando a biblioteca - # gym_simplegrid - # - - state = MyAgent(map, '', position, goal) - algorithm = BuscaLargura() - result = algorithm.search(state,pruning='general') - if result != None: - return result.show_path() - else: - return None - -def parser_actions(str_actions): - if str_actions != None: - actions = str_actions.split(';') - actions = list(map(int, actions[1:])) - return actions - return None - diff --git a/docs/avaliacoes/2024_1_gabarito/src/test_my_agent_depois_entrega.py b/docs/avaliacoes/2024_1_gabarito/src/test_my_agent_depois_entrega.py deleted file mode 100644 index e7da7794..00000000 --- a/docs/avaliacoes/2024_1_gabarito/src/test_my_agent_depois_entrega.py +++ /dev/null @@ -1,161 +0,0 @@ -import pytest -import my_agent as agent - - -def config_0(): - map = [ - "0000", - "0110", - "0000", - ] - position = (0,0) - goal = (0,1) - return map, position, goal - -def config_1(): - map = [ - "0000", - "0110", - "0000", - ] - position = (0,0) - goal = (2,3) - return map, position, goal - -def config_2(): - map = [ - "0000", - "0110", - "0000", - "0000", - "0000", - "0000", - "0000", - ] - position = (3,3) - goal = (4,3) - return map, position, goal - -def config_3(): - # sem solucao - map = [ - "010000", - "011111", - "000000", - "000000", - ] - position = (3,3) - goal = (0,4) - return map, position, goal - -def config_4(): - # mapao - map = [ - "010000000000000000000000", - "011111000000000000000000", - "000000000000000000000000", - "000000000000000000000000", - "010101010101010101010101", - "010101010101010101010101", - "010101010101010101010101", - "010101010101010101010101", - "010101010101010101010101", - "010101010101010101010101", - "010101010101010101010101", - ] - position = (9,4) - goal = (0,4) - return map, position, goal - - -def config_5(): - # mapao - map = [ - "010000000000000000000000", - "011111000000000000000000", - "000000000000000000000000", - "000000000000000000000000", - "010101010101010101010101", - "010101010101010101010101", - "010101010101010101010101", - "010101010101010101010101", - "010101010101010101010101", - "010101010101010101010101", - "010101010101010101010101", - ] - position = (0,10) - goal = (10,12) - return map, position, goal - - -def config_6(): - # mapao - map = [ - "010000000000000000000000", - "011111000000000000000000", - "000000000000000000000000", - "000000000000000000000000", - "010101010101010101010101", - "010101010101010101010101", - "010101010101010101010101", - "010101010101010101010101", - "010101010101010101010101", - "010101010101010101010101", - "010101010101010101010101", - ] - position = (10,0) - goal = (10,12) - return map, position, goal - - -def test_path_0(): - map, position, goal = config_0() - actions = agent.parser_actions(agent.get_actions(map, position, goal)) - assert actions == [3] - -def test_cost_0(): - map, position, goal = config_0() - actions = agent.parser_actions(agent.get_actions(map, position, goal)) - assert len(actions) == 1 - -def test_path_1(): - map, position, goal = config_1() - actions = agent.parser_actions(agent.get_actions(map, position, goal)) - assert actions == [1, 1, 3, 3, 3] or actions == [3, 3, 3, 1, 1] - -def test_cost_1(): - map, position, goal = config_1() - actions = agent.parser_actions(agent.get_actions(map, position, goal)) - assert len(actions) == 5 - -def test_path_2(): - map, position, goal = config_2() - actions = agent.parser_actions(agent.get_actions(map, position, goal)) - assert actions == [1] - -def test_cost_2(): - map, position, goal = config_2() - actions = agent.parser_actions(agent.get_actions(map, position, goal)) - assert len(actions) == 1 - -def test_path_3(): - # testando o comportamento para uma situação onde não existe caminho - map, position, goal = config_3() - actions = agent.parser_actions(agent.get_actions(map, position, goal)) - assert actions == None - -def test_cost_4(): - map, position, goal = config_4() - actions = agent.parser_actions(agent.get_actions(map, position, goal)) - assert len(actions) == 13 - -def test_cost_5(): - map, position, goal = config_5() - actions = agent.parser_actions(agent.get_actions(map, position, goal)) - assert len(actions) == 12 - -def test_cost_6(): - map, position, goal = config_6() - actions = agent.parser_actions(agent.get_actions(map, position, goal)) - assert len(actions) == 26 - diff --git a/docs/avaliacoes/2024_1_intermediaria/img/mapa.dot b/docs/avaliacoes/2024_1_intermediaria/img/mapa.dot deleted file mode 100644 index eace8876..00000000 --- a/docs/avaliacoes/2024_1_intermediaria/img/mapa.dot +++ /dev/null @@ -1,13 +0,0 @@ -digraph G { - /*layout="circo";*/ - /* Relationships */ - "São Paulo" -> "Jundiaí"[label="59", dir="both"] - "Campinas" -> "Jundiaí"[label="39", dir="both"] - "Sorocaba" -> "Campinas"[label="89", dir="both"] - "Sorocaba" -> "Jundiaí"[label="93", dir="both"] - "Sorocaba" -> "São Paulo"[label="104", dir="both"] - "São Paulo" -> "Taubaté"[label="131", dir="both"] - "São Paulo" -> "Santos"[label="72", dir="both"] - "Santos" -> "Ubatuba"[label="238", dir="both"] - "Ubatuba" -> "Taubaté"[label="97", dir="both"] -} \ No newline at end of file diff --git a/docs/avaliacoes/2024_1_intermediaria/img/mapa.png b/docs/avaliacoes/2024_1_intermediaria/img/mapa.png deleted file mode 100644 index 141456f3..00000000 Binary files a/docs/avaliacoes/2024_1_intermediaria/img/mapa.png and /dev/null differ diff --git a/docs/avaliacoes/2024_1_intermediaria/img/mapa2.dot b/docs/avaliacoes/2024_1_intermediaria/img/mapa2.dot deleted file mode 100644 index b3413ca8..00000000 --- a/docs/avaliacoes/2024_1_intermediaria/img/mapa2.dot +++ /dev/null @@ -1,29 +0,0 @@ -digraph G { - /* Node Styles */ - "Sorocaba"[style="filled", fillcolor="yellow", fontcolor="black", color="black"]; - "Limeira"[style="filled", fillcolor="yellow", fontcolor="black", color="black"]; - "São Carlos"[style="filled", fillcolor="red", fontcolor="black", color="black"]; - "Ubatuba"[style="filled", fillcolor="red", fontcolor="black", color="black"]; - - /*layout="circo";*/ - /* Relationships */ - "São Paulo" -> "Jundiaí"[label="59", dir="both"] - "Campinas" -> "Jundiaí"[label="39", dir="both"] - "Sorocaba" -> "Campinas"[label="89", dir="both"] - "Sorocaba" -> "Jundiaí"[label="93", dir="both"] - "Sorocaba" -> "São Paulo"[label="104", dir="both"] - "São Paulo" -> "São José dos Campos"[label="92", dir="both"] - "São José dos Campos" -> "Taubaté"[label="43", dir="both"] - "Ubatuba" -> "São José dos Campos"[label="139", dir="both"] - "São Paulo" -> "Santos"[label="72", dir="both"] - "Santos" -> "Ubatuba"[label="238", dir="both"] - "Ubatuba" -> "Taubaté"[label="97", dir="both"] - "Campinas" -> "Limeira"[label="59", dir="both"] - "Limeira" -> "Rio Claro"[label="28", dir="both"] - "Rio Claro" -> "São Carlos"[label="62", dir="both"] - "São Carlos" -> "Bauru"[label="152", dir="both"] - "Bauru" -> "Piracicaba"[label="194", dir="both"] - "Piracicaba" -> "Campinas"[label="70", dir="both"] - "São Carlos" -> "Campinas"[label="142", dir="both"] - "Bauru" -> "Rio Claro"[label="186", dir="both"] -} \ No newline at end of file diff --git a/docs/avaliacoes/2024_1_intermediaria/img/mapa2.png b/docs/avaliacoes/2024_1_intermediaria/img/mapa2.png deleted file mode 100644 index 2b54ee1a..00000000 Binary files a/docs/avaliacoes/2024_1_intermediaria/img/mapa2.png and /dev/null differ diff --git a/docs/avaliacoes/2024_1_intermediaria/index.md b/docs/avaliacoes/2024_1_intermediaria/index.md deleted file mode 100644 index b039a79f..00000000 --- a/docs/avaliacoes/2024_1_intermediaria/index.md +++ /dev/null @@ -1,106 +0,0 @@ -# Avaliação intermediária 01/2024 - -## Orientações gerais - -* Quaisquer hipóteses relevantes devem ser **explicitamente formuladas**. Faz parte da avaliação a **correta interpretação** das questões. A **clareza** e a **objetividade** das respostas serão consideradas na avaliação. - -* Esta avaliação é **individual**. Em hipótese alguma você poderá fazer uso de material de colegas. - -* Durante esta avaliação você poderá fazer uso do seu material. Não poderá fazer uso de material existente na Internet e também não poderá fazer uso do CoPilot. Quem tiver o CoPilot habilitado deverá desabilitá-lo durante a avaliação. - -## Questões - -### 1. (2 pontos) $2k$ e $2k+1$ - -Considere um espaço de estados onde o estado inicial é o número 1 e cada estado $k$ gera dois estados sucessores, $2k$ e $2k+1$. Suponha que o estado objetivo seja o número 11. - -1. (0.5 pontos) Liste a ordem em que os estados são visitados (retirados de abertos) em uma busca em largura. -1. (0.5 pontos) Liste a ordem em que os estados são visitados (retirados de abertos) em uma busca em profundidade com o limite 3. -1. (1 ponto) Liste a ordem em que os estados são visitados (retirados de abertos) em uma busca A* com a heurística $h(n) = 11 - n$. Neste caso os sucessores só são gerados se $n \leq 11$. - -### 2. (6 pontos) Definindo rotas de ônibus - -Para este exercício, considere uma empresa de ônibus que precisa definir novas rotas de ônibus. Esta empresa tem um mapa com cidades conectadas por estradas de mão dupla. No grafo abaixo as cidades são representadas por vértices e as estradas por arestas. O valor de cada aresta significa a distância entre as cidades. - -![Mapa](img/mapa2.png) - -Neste mapa, algumas cidades estão marcadas com vermelho e outras com amarelo. As cidades marcadas com vermelho são cidades consideradas estratégicas pela empresa de ônibus - cidades que atualmente não são atendidas pela empresa mas que precisam ser atendidas em um futuro próximo. As cidades marcadas com amarelo são cidades que possuem terminais de carga. Sempre que uma rota de ônibus transportar além de pessoas, objetos de carga, ela deve passar por um terminal de carga. - -Estimando a complexidade do problema: - -1. Qual é a ramificação do problema? -1. Qual é a profundidade máxima do problema? -1. Levando-se em consideração a ramificação informada e a profundidade máxima, qual é o tamanho do espaço de estados para o problema? -1. O que é importante representar no estado do problema? Descreve os atributos que a sua classe deve ter e o significado deles. - -Implemente uma solução usando a biblioteca `aigyminsper` que seja capaz de responder as perguntas listadas abaixo: - -1. Qual é o menor caminho entre São Paulo e Piracicaba que passa por um terminal de carga? E qual é o custo deste caminho? -1. Qual é o menor caminho entre Taubaté e Piracicaba que passa por uma cidade estratégica? Qual é o custo deste caminho? -1. Qual é o menor caminho entre Sorocaba e Piracicaba sem considerar cidades estratégicas e terminais de carga? Qual é o custo deste caminho? -1. Qual deve ser a rota de ônibus entre Taubaté e Campinas que passa por um terminal de carga e por uma cidade estratégica? Qual é o custo desta rota? -1. Qual deve ser a rota de ônibus entre Taubaté e Campinas, sem considerar cidades estratégicas ou terminais de carga? Qual é o custo desta rota? - -Para cada rota você também deve calcular o custo da rota. Segundo a empresa, o custo da rota é dado por: - -```python -def custo(km): - return 0.5 * km -``` - -Utilize esta equação na função `cost()` do agente. - -Você deve implementar o agente e o método `main()` que faz a chamada para responder as perguntas acima. Você não será avaliado apenas pela resposta correta, mas também pela implementação do agente. - -Se você implementar uma solução que ignorar a existência de cidades estratégicas e terminais de carga, mas que é capaz de retornar a solução de menor custo então você terá 50% da nota. Para ter 100% da nota você precisa implementar uma solução que considera cidades estratégicas e terminais de carga. - -Você pode usar o dicionário abaixo para implementar a sua solução: - -```python -mapa = { - 'Taubaté':[(43,'São José dos Campos'),(97,'Ubatuba')], - 'São José dos Campos':[(43,'Taubaté'),(139,'Ubatuba'),(92,'São Paulo')], - 'Ubatuba':[(97,'Taubaté'),(139,'São José dos Campos'),(238,'Santos')], - 'Santos':[(238,'Ubatuba'),(72,'São Paulo')], - 'Sorocaba':[(104,'São Paulo'),(89,'Campinas'),(93,'Jundiaí')], - 'Jundiaí':[(59,'São Paulo'),(39,'Campinas'),(93,'Sorocaba')], - 'Campinas':[(89,'Sorocaba'),(39,'Jundiaí'),(142,'São Carlos'),(70,'Piracicaba'),(59,'Limeira')], - 'São Carlos':[(142,'Campinas'),(62,'Rio Claro'),(152,'Bauru')], - 'Limeira':[(59,'Campinas'),(28,'Rio Claro')], - 'Rio Claro':[(62,'São Carlos'),(28,'Limeira'),(186,'Bauru')], - 'Bauru':[(152,'São Carlos'),(186,'Rio Claro'),(194,'Piracicaba')], - 'Piracicaba':[(70,'Campinas'),(194,'Bauru')] - } -``` - -**Importante**: Se você for utilizar o dicionário acima então revise o mesmo. Ele poderá estar incompleto! - -O caminho precisa ter o seguinte formato: - -```bash -sair de Taubaté ; ir para São José dos Campos ; ir para São Paulo ; ir para Jundiaí ; ir para Campinas ; ir para Piracicaba ; ir para Bauru -497 -``` -Na primeira linha o plano e na segunda linha o custo. O plano precisa necessariamente começar com a string "sair de" e a cada nova cidade do plano deve ser concatenada a string "ir para". - -### 3. (2 pontos) Distância entre cidades - -Considere o problema de encontrar o menor caminho entre duas cidades visto em sala de aula. Suponha que a distância entre as cidades é dada pela emissão de CO2 em toneladas. Considere que todos os veículos que circulam entre as cidades emitem 0.1 toneladas de CO2 por quilômetro rodado. Suponha que a única informação que você tem além do mapa e a distância entre as cidades em CO2 é a latitude e longitude das cidades. Que heurística você usaria para resolver o problema? Esta heurística precisa ser admissível. Justifique a sua resposta. Ao definir a heurística faça uso de uma equação para deixar a resposta mais clara e objetiva. - -## Entrega dos itens da avaliação - -Toda a prova deve ser submetida no Github Classroom através deste link: [https://classroom.github.com/a/dBI-3xFz](https://classroom.github.com/a/dBI-3xFz). - -Os arquivos que precisam ser submetidos são: - -* `requirements.txt`: arquivo com todas as bibliotecas necessárias para as soluções que você irá entregar. -* `Mapa.py`: arquivo com a solução para o problema do Mapa. -* `README.md`: no arquivo de README.md você deve colocar as respostas para as perguntas da questão 1, do início da questão 2 e da questão 3. - -Não existe nenhum projeto de *template* e também não existem arquivos de testes. - -No caso das implementações, você deverá definir tudo: como os estados são representados, quais são os parâmetros do construtor da classe, quais são as ações e como elas afetam os estados, qual é o critério que retorna `true` para o método `is_goal()`, e assim em diante. - -**Esta prova tem duração de 2 (duas) horas**. - -O horário limite para entrega da prova é 15:40 do dia 22 de setembro de 2023. Para fins de avaliação será considerado último `push` no repositório. diff --git a/mkdocs.yml b/mkdocs.yml index c137f270..5aa1467a 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -47,10 +47,10 @@ nav: - 'aulas/15_rl_sarsa/index.md' ## - 'aulas/15_xnon_determ/index.md' - - 'Avaliações atuais': - - 'avaliacoes/2024_1_intermediaria/index.md' - - 'avaliacoes/2024_1_final/index.md' - - 'avaliacoes/2024_1_gabarito/index.md' +# - 'Avaliações atuais': +# - 'avaliacoes/2024_1_intermediaria/index.md' +# - 'avaliacoes/2024_1_final/index.md' +# - 'avaliacoes/2024_1_gabarito/index.md' # - 'avaliacoes/2023_2_sub/index.md' - 'Projetos atuais': - 'projetos/11_delivery/index.md'