diff --git a/docs/aulas/08_heuristica/index.md b/docs/aulas/08_heuristica/index.md index 71e5ea59..1ba469a7 100644 --- a/docs/aulas/08_heuristica/index.md +++ b/docs/aulas/08_heuristica/index.md @@ -121,6 +121,8 @@ Ao executar: O algoritmo abriu muitos nodos de forma desnecessária? + + ## Usando heurísticas para otimizar a busca na árvore ??? warning "O que é uma heurística?" diff --git a/docs/aulas/08_heuristica_parte_3/index.md b/docs/aulas/08_heuristica_parte_3/index.md index 81f18605..f96d67c1 100644 --- a/docs/aulas/08_heuristica_parte_3/index.md +++ b/docs/aulas/08_heuristica_parte_3/index.md @@ -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: @@ -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). @@ -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? + + + diff --git a/docs/aulas/08_heuristica_parte_3_aps/index.md b/docs/aulas/08_heuristica_parte_3_aps/index.md new file mode 100644 index 00000000..b04cb38b --- /dev/null +++ b/docs/aulas/08_heuristica_parte_3_aps/index.md @@ -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. + +

+Grafo +

+ +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*. \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index 7ac3f233..97e8b4ce 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -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' #