Skip to content

Commit

Permalink
pre aula 18/09
Browse files Browse the repository at this point in the history
  • Loading branch information
fbarth committed Sep 17, 2024
1 parent d246ae2 commit 977ed56
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 25 deletions.
43 changes: 20 additions & 23 deletions docs/aulas/14_tictactoe/index.md
Original file line number Diff line number Diff line change
@@ -1,22 +1,19 @@
# Jogador de jogo da velha


<!--
## Pré-atividade

Responda as perguntas abaixo:
Pense nas perguntas abaixo:

1. O que é um ambiente competitivo de soma zero?
1. Qual o objetivo do algoritmo Min-Max? Em outras palavras, por que um agente autônomo que atua em um ambiente competitivo deve usar o algoritmo Min-Max?
1. O que é função de utilidade? Por que utilizar funções de utilidade?
1. Qual é a relação da profundidade da árvore de busca do Min-Max com o desempenho final do agente? Existe correlação? Justifique a sua resposta.

-->

## Objetivo da atividade

O objetivo desta atividade é implementar um jogador de jogo da velha usando o algoritmo Min-Max e avaliar o impacto da
profundidade no desempenho do agente.
O objetivo desta atividade é implementar um jogador de jogo da velha usando o algoritmo Min-Max.

O ambiente que vamos utilizar para implementar este jogador é o `kaggle-environments`.

Expand All @@ -32,38 +29,38 @@ O código fonte deste pacote e alguma documentação está disponível [neste li

Além disso, [neste link](tictactoe.ipynb) tem um tutorial bem básico sobre o funcionamento deste ambiente. Para aqueles que estão com dificuldade em instalar o pacote do kaggle, utilizem o [Google Colab](https://colab.research.google.com/gist/fbarth/ad7d167798a0d9097d2aca4a1c98c367/tictactoe.ipynb).

## Implementação para conceito B
## Implementação para conceito C

* Implemente um agente usando o algoritmo `MinMax`, com limite de profundidade, capaz de jogar o jogo da velha.
* Utilize uma função de utilidade não muito complexa, mas que você acredita que é correta para o jogo da velha.
* No caso do jogo da velha, a profundidade pode variar de `1` até `9`.
* Para cada profundidade você deve executar `200` jogos do seu jogador contra o jogador `random`, onde `100` jogos o seu jogador é o primeiro a jogar e `100` jogos onde o seu jogador é o segundo a jogar. Ao final deste processo, você terá uma tabela parecida com esta:
* Utilize uma função de utilidade não muito complexa, mas que você acredita que é correta para o jogo da velha. No caso do jogo da velha, a profundidade pode variar de `1` até `9`.
* Os resultados obtidos pelo seu agente não são importantes.

| Profundidade | Quantidade de vitórias | Quantidade de derrotas | Quantidade de empates | Tempo médio por jogada | Desvio padrão |
|--------------|------------------------|------------------------|------------------------|------------------------|---------------|
| 1 | 100 | 100 | 0 | 0.1 | 0.01 |
| 2 | 100 | 100 | 0 | 0.2 | 0.02 |
Toda a implementação e documentação sobre os resultados deve estar em um arquivo `ipynb`.

## Implementação para conceito B

* Para cada jogada feita pelo seu jogador você deve medir quanto tempo ele gasta para tomar a decisão e calcular a média e o desvio padrão.
* Você deve encontrar uma forma gráfica para sumarizar os dados existentes na tabela acima.
* Para obter conceito B você deve fazer todos os itens especificados no conceito C. Mas, agora, você deve implementar uma função de utilidade mais complexa e que você acredita que é mais correta para o jogo da velha.
* Neste caso, o seu agente não pode perder nenhum jogo.

Toda a implementação e documentação sobre os resultados deve estar em um arquivo `ipynb`.
Toda a implementação e documentação sobre os resultados deve estar em um arquivo `ipynb`.

## Implementação para conceito A+

* Implemente um agente usando o algoritmo `MinMax` com poda alpha-beta, com limite de profundidade, capaz de jogar o jogo da velha.
* Implemente um agente usando o algoritmo `MinMax` com **poda alpha-beta**, com limite de profundidade, capaz de jogar o jogo da velha.
* Você pode utilizar a mesma função de utilidade implementada anteriormente.
* Repita o processo de avaliação do agente, mas agora com a poda alpha-beta.
* Compare os resultados obtidos com a poda alpha-beta com os resultados obtidos sem a poda alpha-beta.
* Você deve encontrar uma forma gráfica para sumarizar os dados dos experimentos.
* Neste caso o seu agente não pode perder nenhum jogo e deve ganhar sempre que possível. Você deve perceber uma melhora no tempo de execução de cada jogada do seu agente.

* Toda a implementação e documentação sobre os resultados deve estar em um arquivo `ipynb`.

## Entrega

* Para a implementação e entrega deste exercício nós vamos utilizar o Github Classroom. O link para para envio do projeto é este aqui [https://classroom.github.com/a/qTtNQURN](https://classroom.github.com/a/qTtNQURN).
* Para a implementação e entrega deste exercício nós vamos utilizar o Github Classroom. O link para para envio do projeto é este aqui [https://classroom.github.com/a/RrBlJCJA](https://classroom.github.com/a/RrBlJCJA).

* A entrega é em equipes com até 3 integrantes e o **prazo para a entrega** é 20/09/2024 (sexta-feira) até às 23:30 horas.

* A entrega é em equipes com até 4 integrantes e o **prazo para a entrega** é 22/04/2024 (segunda-feira) até às 23:30 horas.

<!--
## Um possível solução para o problema
Uma possível solução para este problema está disponível [aqui](./tictactoe_minmax.ipynb).
Uma possível solução para este problema está disponível [aqui](./tictactoe_minmax.ipynb).
-->
4 changes: 2 additions & 2 deletions mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,8 @@ nav:
#
- 'Ambientes competitivos':
- 'aulas/13_jogos/index.md'
# - 'aulas/14_tictactoe/tictactoe.ipynb'
# - 'aulas/14_tictactoe/index.md'
- 'aulas/14_tictactoe/tictactoe.ipynb'
- 'aulas/14_tictactoe/index.md'
#
### - 'aulas/14_competicao/index.md'
# - 'Aprendizagem por reforço':
Expand Down

0 comments on commit 977ed56

Please sign in to comment.