Resolução de Problemas - DAINF
Resolução de Problemas - DAINF
Resolução de Problemas - DAINF
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
HDL<br />
<strong>Resolução</strong> <strong>de</strong> <strong>de</strong> <strong>Problemas</strong><br />
Aula 2 - Inteligência Artificial
HDL<br />
<strong>Resolução</strong> <strong>de</strong> <strong>de</strong> <strong>Problemas</strong><br />
(Introdução)<br />
A resolução <strong>de</strong> um problema é composta<br />
por três passos:<br />
• Definir o problema com precisão.<br />
(situações inicial e final)<br />
• Analisar o problema. (recursos)<br />
• Escolher a melhor técnica e aplicá-la ao<br />
problema em particular.
HDL<br />
Definição do do Problema como uma uma<br />
Busca em em um um Espaço <strong>de</strong> <strong>de</strong> Estados<br />
Para exemplificar, vejamos dois<br />
exemplos:<br />
• Blocos<br />
• Vasilhame <strong>de</strong> água
HDL<br />
Problema - - Blocos<br />
Problema: encontrar um plano para<br />
rearranjar os blocos.<br />
C<br />
A<br />
B<br />
?<br />
A<br />
B<br />
C
HDL<br />
Problema - - Blocos<br />
■ Condições<br />
• Um bloco po<strong>de</strong> ser movido apenas se seu<br />
topo está vazio;<br />
• Apenas um bloco po<strong>de</strong> ser movido <strong>de</strong> cada<br />
vez;<br />
• Um bloco po<strong>de</strong> ser colocado sobre a mesa<br />
ou sobre outro bloco;<br />
■ Para encontrar um plano, <strong>de</strong>vemos<br />
encontrar um seqüência <strong>de</strong> movimentos<br />
que nos levem ao objetivo.
HDL<br />
Problema - - Blocos<br />
Explorar entre as diversas<br />
possíveis alternativas.<br />
Como esse exemplo ilustra, existem dois<br />
tipos <strong>de</strong> conceitos envolvidos nesse<br />
problema:<br />
• Situações do problema;<br />
• Movimentos ou ações permitidos, os quais<br />
transformam as situações <strong>de</strong> problema em<br />
outras situações.
HDL<br />
Estado<br />
inicial<br />
C BA<br />
A<br />
B<br />
C<br />
C AB<br />
B<br />
A C<br />
A<br />
B C<br />
B<br />
A C<br />
Problema – – Blocos<br />
ABC<br />
Espaço <strong>de</strong> <strong>de</strong> Estados<br />
A<br />
B C<br />
C<br />
A B<br />
B<br />
A<br />
C<br />
C<br />
A B<br />
A<br />
C B<br />
B<br />
C A
HDL<br />
Estado<br />
inicial<br />
C BA<br />
A<br />
B<br />
C<br />
C AB<br />
B<br />
A C<br />
A<br />
B C<br />
B<br />
A C<br />
Problema – – Blocos<br />
ABC<br />
Estado final<br />
Espaço <strong>de</strong> <strong>de</strong> Estados<br />
A<br />
B C<br />
C<br />
A B<br />
B<br />
A<br />
C<br />
C<br />
A B<br />
A<br />
C B<br />
B<br />
C A
HDL<br />
Problema – – Vasilhame<br />
Problema: são dados dois vasilhames<br />
d’água, em <strong>de</strong> 4 litros e outros <strong>de</strong> 3<br />
litros. Nenhum <strong>de</strong>les possui qualquer<br />
marcação <strong>de</strong> medida. Há uma bomba<br />
que po<strong>de</strong> ser utilizada para encher os<br />
vasilhames <strong>de</strong> água. Como colocar<br />
exatamente 2 litros <strong>de</strong> água no<br />
vasilhame <strong>de</strong> 4 litros?
HDL<br />
Problema – – Vasilhame<br />
■ Espaço <strong>de</strong> estados po<strong>de</strong> ser <strong>de</strong>scrito<br />
como o conjunto <strong>de</strong> pares or<strong>de</strong>nados<br />
<strong>de</strong> inteiros (x,y), tal que x={0,1,2,3,4} e<br />
y={0,1,2,3} on<strong>de</strong> x representa o<br />
vasilhame <strong>de</strong> 4 l e y o vasilhame <strong>de</strong> 3 l.<br />
■ Estado inicial: (0,0)<br />
■ Estado final: (2,n)
HDL<br />
Problema – – Vasilhame<br />
■ Regras:<br />
• (x,y ! x0)→(x,y-d) Esvaziar parcial/<br />
e<br />
• (x,y ! x>0)→(0,y) Esvaziar<br />
• (x,y ! y>0)→(x,0) Esvaziar<br />
• (x,y ! x+y>=4 ^ y>0)→(4,y-(4-x)) Despejar<br />
• (x,y ! x+y>=3 ^ x>0)→(x-(3-y),3) Despejar<br />
• (x,y ! x+y>=4 ^ y>0)→(x+y,0) Despejar tudo<br />
• (x,y ! x+y>=3 ^ x>0)→(0,x+y) Despejar tudo
HDL<br />
Problema – – Vasilhame<br />
Para resolver o problema, <strong>de</strong>ve-se:<br />
• Escolher a regra cujo lado esquerdo seja<br />
igual ao estado atual;<br />
• A mudança a<strong>de</strong>quada ao estado seja<br />
realizada conforme <strong>de</strong>scrito pelo lado<br />
direito correspon<strong>de</strong>nte;<br />
• Verificar se o estado resultante<br />
correspon<strong>de</strong> ao estado meta (final); cc<br />
repetir até que o estado meta seja<br />
alcançado.
HDL<br />
Problema – – Vasilhame<br />
Uma possível solução:<br />
Litros no vasilhame<br />
<strong>de</strong> 4 l<br />
0<br />
0<br />
3<br />
3<br />
4<br />
0<br />
2<br />
Litros no vasilhame<br />
<strong>de</strong> 3 l<br />
0<br />
3<br />
0<br />
3<br />
2<br />
2<br />
0<br />
Regra aplicada<br />
2<br />
9<br />
2<br />
7<br />
5<br />
9
HDL<br />
Problema – – Vasilhame<br />
■ Observar regras 3 e 4.<br />
• Prática x “característica inteligente” ;<br />
• Poucas regras (generalida<strong>de</strong>) x muitas<br />
regras (especificida<strong>de</strong>);<br />
■ Como projetar um programa que<br />
converta <strong>de</strong>scrições informais <strong>de</strong><br />
problemas em representações <strong>de</strong><br />
espaço <strong>de</strong> estados?
HDL<br />
Descrição formal <strong>de</strong> <strong>de</strong> um um<br />
problema<br />
■ Definir o espaço <strong>de</strong> estados;<br />
■ Especificar estado(s) inicial(ais) e final(ais);<br />
■ Especificar o conjunto <strong>de</strong> operadores e a<br />
estratégia <strong>de</strong> controle:<br />
• Que suposições não <strong>de</strong>claradas estão presentes<br />
na <strong>de</strong>scrição informal?<br />
• Qual a generalida<strong>de</strong> a ser consi<strong>de</strong>rada?<br />
• Quanto do trabalho exigido para resolver o<br />
problema <strong>de</strong>ve ser pré-calculado e representado<br />
nas regras?
HDL<br />
Estratégias <strong>de</strong> <strong>de</strong> Controle<br />
■ Importante pois, algumas vezes, mais <strong>de</strong><br />
uma regra po<strong>de</strong> ter seu lado esquerdo<br />
igual ao estado atual;<br />
■ A <strong>de</strong>cisão sobre que regras aplicar tem<br />
um impacto direto sobre o tempo e<br />
possibilida<strong>de</strong> <strong>de</strong> resolução do problema;
HDL<br />
Estratégias <strong>de</strong> <strong>de</strong> Controle<br />
■ Exigências para uma estratégia <strong>de</strong><br />
controle:<br />
• Ela <strong>de</strong>ve causar movimento, cc é possível<br />
que uma solução nunca seja encontrada;<br />
• Ela <strong>de</strong>ve ser sistemática, cc seqüências <strong>de</strong><br />
estados inúteis po<strong>de</strong>m ser exploradas<br />
antes que uma solução seja encontrada.<br />
Exemplo: árvore contendo os estados<br />
possíveis.
HDL<br />
Estratégias <strong>de</strong> <strong>de</strong> Controle<br />
Duas estratégias básicas <strong>de</strong> abordagem<br />
para a busca:<br />
• Busca em profundida<strong>de</strong><br />
• Busca em largura
HDL<br />
Busca em em profundida<strong>de</strong><br />
O nó mais distante do nó inicial é sempre<br />
escolhido.<br />
Idéia:<br />
Se N é um nó solução então Sol=[N], ou<br />
Se há um nó adjacente N1 a N, tal que<br />
existe um caminho Sol1 partindo <strong>de</strong> N1<br />
até o nó final, então Sol=[N|Sol1]
HDL<br />
h<br />
Busca em em profundida<strong>de</strong><br />
b<br />
a<br />
d e f<br />
i j<br />
c<br />
k<br />
g
HDL<br />
Busca em em largura<br />
■ São escolhidos os nós mais próximos<br />
do nó inicial.<br />
■ A busca é realizada mais em “largura”<br />
que em “profundida<strong>de</strong>”.<br />
■ Algoritmo mais complexo, pois é<br />
necessário manter um conjunto <strong>de</strong><br />
candidatos em uma fila e não apenas<br />
um como na busca em profundida<strong>de</strong>.
HDL<br />
Busca em em largura<br />
O caminho mais curto sempre é encontrado.<br />
Idéia:<br />
Dado um conjunto(fila) <strong>de</strong> caminhos candidatos:<br />
• Se o primeiro caminho contém o nó final como<br />
primeiro elemento da fila, esta é a solução;<br />
• Remova o primeiro caminho do conjunto <strong>de</strong><br />
candidatos e gere um conjunto <strong>de</strong> todas as possíveis<br />
extensões <strong>de</strong> um nó <strong>de</strong>sse caminho, adicione esse<br />
conjunto <strong>de</strong> extensões ao final do conjunto <strong>de</strong><br />
candidatos e execute busca em largura no conjunto<br />
resultante.
HDL<br />
h<br />
b<br />
Busca em em largura<br />
a<br />
d e f<br />
i j<br />
c<br />
k<br />
g
HDL<br />
Busca Heurística<br />
■ Busca em profundida<strong>de</strong> e largura ineficientes<br />
para resolver problemas complexos ➪<br />
fundamental procurar por melhores<br />
estratégias <strong>de</strong> busca.<br />
■ Maioria <strong>de</strong>ssas melhores estratégias estão<br />
relacionadas a busca em profundida<strong>de</strong> e<br />
largura.<br />
■ Duas variações: busca usando heurística e<br />
busca usando funções <strong>de</strong> avaliação.
HDL<br />
Alguns problemas clássicos<br />
■ Canibais e Missionários<br />
■ Torre <strong>de</strong> Hanoi<br />
■ Macaco e Bananas<br />
■ Caminho num Grafo<br />
■ Caminho do Cavalo no Tabuleiro <strong>de</strong><br />
Xadrez<br />
■ Problema das Oito Rainhas