16.04.2013 Views

Resolução de Problemas - DAINF

Resolução de Problemas - DAINF

Resolução de Problemas - DAINF

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!