Skip to content

Commit

Permalink
pre aula dia 09/07
Browse files Browse the repository at this point in the history
  • Loading branch information
fbarth committed Sep 9, 2024
1 parent eb25f9b commit 7ae6523
Show file tree
Hide file tree
Showing 4 changed files with 92 additions and 6 deletions.
4 changes: 4 additions & 0 deletions docs/aulas/08_heuristica/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,8 @@ Ao executar:

O algoritmo abriu muitos nodos de forma desnecessária?

<!--
## Entrega do exercício
* Para a implementação e entrega deste exercício nós vamos utilizar o [Github Classroom](https://classroom.github.com/a/OQePW2ai).
Expand All @@ -131,6 +133,8 @@ O algoritmo abriu muitos nodos de forma desnecessária?
* **Prazo para a entrega**: 10/03/2024 (domingo) até às 23:30 horas.
-->

## Usando heurísticas para otimizar a busca na árvore

??? warning "O que é uma heurística?"
Expand Down
15 changes: 13 additions & 2 deletions docs/aulas/08_heuristica_parte_3/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,9 @@ No problema apresentado na [aula passada](../08_heuristica/index.md) teve alguma
A heurística é admissível quando ela nunca superestima o custo para alcançar o objetivo.


## Problema do Taxi Driver
## Problemas

### Problema do Taxi Driver

Considere um agente que precisa levar um passageiro de um ponto A para um ponto B como apresentado no mapa abaixo:

Expand All @@ -21,7 +23,7 @@ Para as dimensões apresentadas acima talvez algoritmos de busca cegos poderiam

**O que é necessário fazer para implementar uma solução que sempre fornece uma solução ótima para o problema? Independente das dimensões do mapa?**

## 8-Puzzle
### 8-Puzzle

Defina uma ou mais heurísticas admissíveis para o problema do [8-puzzle](https://www.aiai.ed.ac.uk/~gwickler/eightpuzzle-inf.html).

Expand All @@ -31,5 +33,14 @@ Esta mesma heurística pode ser utilizada para o problema do [15-puzzle](https:/

O que muda do problema do 8-puzzle para o 15-puzzle?

### Cavalo e tabuleiro de xadrez

Considerando um tabuleiro de xadrez (`8x8`) com um
único cavalo, quais os movimentos que o cavalo deve fazer para
percorrer todas as posições do tabuleiro uma única vez e
retornar ao ponto de partida?





69 changes: 69 additions & 0 deletions docs/aulas/08_heuristica_parte_3_aps/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# Problema do 8-Puzzle

Considere o problema dos *8-puzzle* discutido em sala de aula. Implemente uma solução para este problema.

<p align="center">
<img src="../../referencias/03_algoritmos_busca/figuras/fig03-04.png" alt="Grafo" width="400"/>
</p>

Implemente um agente autônomo que consegue resolver este problema. Você deve adotar uma matriz como forma de representação dos estados. Por exemplo, o estado inicial indicado acima deve ser representado da seguinte forma:

```python
[[5,4,0],[6,1,8],[7,3,2]]
```

ou seja, o espaço em branco deve ser representado por um `zero`. O estado final apresentado acima deve ser representado da seguinte forma:

```python
[[1,2,3],[8,0,4],[7,6,5]]
```

As operações que o agente sabe fazer são:

* `cima`: o agente move o espaço em branco para cima;
* `baixo`: o agente move o espaço em branco para baixo;
* `esquerda`: o agente move o espaço em branco para a esquerda, e;
* `direita`: o agente move o espaço em branco para a direita.

Considerando a forma como os estados são representados e as ações que o agente sabe executar, responda as seguintes perguntas:

* Qual a estimativa do tamanho do espaço de busca (número de
estados possíveis)?
* Que algoritmo de busca pode ser utilizado para resolver este problema considerando que a solução apresentada precisa ser ótima?

A entrega da sua implementação deverá ter 1 arquivo chamado `Puzzle8.py` que implementa a interface `State` e que deve passar por TODOS os testes especificados em [test_8_puzzle.py](./src/test_8Puzzle.py).

O seu agente deve ser capaz de identificar um plano para todos os estados iniciais descritos como fáceis e difícieis no arquivo de testes. Para os estados descritos como impossível o agente precisa retornar a mensagem *"Nao achou solucao"*. Deve-se considerar o estado *goal* em formato caracol, como apresentado abaixo:

| 1 | 2 | 3 |
|:-:|:-:|:-:|
| 8 | | 4 |
| 7 | 6 | 5 |

Ao implementar o método `successors` do seu agente considere a seguinte ordem para adicionar os nodos em abertos: cima, baixo, esquerda e direita.

## Formato de entrega

* Para a implementação e entrega deste exercício nós vamos utilizar o [Github Classroom](https://classroom.github.com/a/iZCPEiAe).

* O link para o enunciado é este aqui [https://classroom.github.com/a/iZCPEiAe](https://classroom.github.com/a/iZCPEiAe). Através deste link você consegue baixar o repositório e começar a sua codificação.

* **Prazo para a entrega**: 15/03/2022 (sexta-feira) até às 23:30 horas.

* Este trabalho pode ser feito em equipes com até 3 integrantes.

## Exemplo de código para o método `show_path`

```python
def show_path(self):
algorithm = AEstrela()
if not Puzzle8.tem_solucao(self.tabuleiro):
return 'Nao tem solucao'
result = algorithm.search(self)
if result != None:
return result.show_path()
else:
return 'Nao achou solucao'
```

**Detalhe importante sobre o método `tem_solucao`**: uma forma para cálculo se uma determinada configuração tem solução ou não é seguir a seguinte regra: *deve-se calcular a quantidade de inversões necessárias para ordenar certa sequência numérica, determinado por Possível a quantidade de inversões pares e Impossível a quantidade de inversões ímpares*.
10 changes: 6 additions & 4 deletions mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,12 @@ nav:
- 'aulas/04_x_modelagem/index.md'
## - 'aulas/05_busca_com_custo/index.md'
## # - 'aulas/05_x_busca_cega/index.md'
# - 'aulas/07_revisao/index.md'
# - 'aulas/08_heuristica/index.md'
# - 'aulas/08_heuristica_parte_2/index.md'
## - 'aulas/08_heuristica_parte_3/index.md'
- 'aulas/07_revisao/index.md'
- 'Busca com heurística':
- 'aulas/08_heuristica/index.md'
- 'aulas/08_heuristica_parte_2/index.md'
# proxima aula - 'aulas/08_heuristica_parte_3/index.md'
# proxima aula - 'aulas/08_heuristica_parte_3_aps/index.md'
## # - 'aulas/10_heuristica_revisao/index.md'
## - 'aulas/11_contribuindo_aigyminsper/index.md'
#
Expand Down

0 comments on commit 7ae6523

Please sign in to comment.