Page 1 FEUP Métodos de Resolução de Problemas Disciplina: Metodologias de Inteligência Artificial FEUP 2 Sistemas de Produções CONHECIMENTO DADOS OPERADORES ESTRATÉGIAS Paradigma básico dos Sistemas de Produções : “Separabilidade”
Page 1
FEUP
Métodos de Resolução de Problemas
Disciplina: Metodologias de Inteligência Artificial
FEUP 2
Sistemas de Produções
CONHECIMENTO
DADOS
OPERADORES
ESTRATÉGIAS
Paradigma básico dos Sistemas de Produções : “Separabilidade”
Page 2
FEUP 3
Métodos de Resolução de Problemas
Sistemas de Produções– a primeira Arquitectura básica dos Sistemas de Inteligência Artificial
Descrição do problema– através de um espaço de estados
Representação do conhecimento– através da lógica e de estruturas de informação
Resolução do problema– movimentação no espaço de estados da configuração inicial à
configuração final
Arquitectura do sistema computacional– uso de Sistemas de Produções, mantendo separadamente os Factos
(numa ou várias “bases de dados”), os operadores (regras), e o algoritmo de controlo
FEUP 4
Métodos de Pesquisa
– Métodos não informadosNão possuem informação sobre nº passos ou custo até à solução.
– Métodos informadosAplicação de funções dependentes do conhecimento do problema: funções heurísticas
– Direcção de controlo» “Top Down” ou encadeamento inverso» “Bottom Up” ou encadeamento directo» Bidireccional
– Estratégia de controlo» “depth first” ou primeiro em profundidade» “breadth first” ou primeiro em largura
Page 3
FEUP 5
Métodos de pesquisa
• Métodos de pesquisa– Gerar e Testar - não informado
– Subir a colina (“hill climbing”) - informado
– Primeiro em Largura - não informado
– Ramifica e Limita (“Branch and Bound”) - não informado
– Arrefecimento simulado - informado
– Satisfação de Restrições × - não informado
– O melhor-primeiro - informado
Gerar e TestarGera a possível solução e testa-a comparando com o objectivo.
Geração sistemática: primeiro em profundidade com "backtracking“.
Combina-se com outras estratégias.
FEUP 6
Subir a colina
Subir a colina: processo irrevogável– Gera-se e testa-se mas recebe-se "feedback" indicando qual a
direcção aconselhável para o próximo movimento.– Usa-se conhecimento Local.
Procedimento1. Gera-se o primeiro estado2. SE solução RETORNAR
SENÃO Aplicar a esse novo estado os operadores possiveis3. Para cada novo estado
TesteSE solução RETORNARSENÃO
escolha o estado mais próximo da solução como o novo estadoVOLTAR A 2
– Problemas: funções não "bem comportadas" com máximos locais e "planaltos"
também usado como
método de optimização
Page 4
FEUP 7
Solução
Dis
tânc
ia `a
sol
ução
Curvas dos passos necessários para obtêr a solução
Nº de passos (operadores)
Função "Bem-comportada"
Função "mal-comportada"
Subir a colina
FEUP 8
Subir a colina
Dois tipos de subir a colina (“hill climbing”)
1. Subir-a-colina básico:– Gera um a um os sucessores do estado actual– Encontrado um mais próximo da solução que o Estado Actual,
Selecciona-o
2. Ascenção Íngreme (“Steep ascendent”):– Gera todos os sucessores possíveis– Selecciona o mais próximo da solução
Page 5
FEUP 9
Subir a colina
inicio(a).objectivo(x).filho(a,b).filho(a,d).filho(a,c).filho(b,e).filho(b,f).filho(b,g).filho(c,h).filho(d,i).filho(e,j).estimativa(b,4).estimativa(c,5).estimativa(d,6).estimativa(e,3).
scolina(Ef,[]) :- objectivo(Ef).scolina(Ea,[Ea|R]) :- suc(Ea,ESucs),
( ESucs==[], write('insucesso'); select(ESucs,Eseg), scolina(Eseg,R)).
suc(Ea, Esuc) :- findall( F, filho(Ea,F), Esuc).
select([E1],E1).select([E1,E2|OEs],Eseg):-
estimativa(E1,C1),estimativa(E2,C2),( C1<C2, select([E1|OEs],Eseg); select([E2|OEs],Eseg)).
FEUP 10
Primeiro em largura
Primeiro em largura: todos os nós em cada nível são explorados.
– Vantages:» Encontra sempre a solução se existir. » E encontra a melhor em comprimento do passo.
– Problema: tem de guardar todos os nós do nível.» Implica mais memória, trabalhoso.» Havendo muitos passos que levam a soluções, é preferível a
estratégia "primeiro em profundidade“
• "pesquisa em feixe" ("beam search")Método semelhante ao "primeiro em largura" mas, em cada nível nãose expandem todos os nós mas somente alguns seleccionados (oumelhores) - método informado
Page 6
FEUP 11
AB C
S
DE
F
G3
44
42 4
35
5
“Branch and Bound”
Ramifica e Limita ("Branch and Bound“)encontra passos óptimos– Em cada nível da árvore é continuado o passo até aí o de menos
custo (mais curto). – Comparam-se de novo todos os passos e volta-se a estender o de
menor custo até aí. – Repete-se o processo até o objectivo ser encontrado.– O primeiro passo a chegar ao objectivo é o mais curto.
» O exemplo representa um mapade estradas e respectivas distâncias.
» O problema é encontrar o caminho mais curto entre S e G
FEUP 12
“Branch and Bound”
Algoritmo básico do “BRANCH AND BOUND” (“ramifica-e-limita”)
1. Formar uma Fila de passos parciais (caminhos de pesquisa da solução)
A Fila inicial tem comprimento 1 (estado inicial).
2. ATÉ Fila vazia OU Objectivo atingido
determinar se o 1º Passo da Fila é = Objectivoa. SE sim ENTÃO ir para 3b. SE não
i. retirar 1º Passo da Filaii. formar novos Passos a partir do removido aplicando os operadores possíveisiii. acrescente os novos Passos na Filaiv. ordene crescentemente pelos custos acumulados
3. SE estado Objectivo alcançado ENTÃO sucesso /* pode ter de analizar passos com
SENÃO falha /* menor custo
Page 7
FEUP 13
Arrefecimento Simulado
Arrefecimento Simulado ("Simulated Annealing")("annealing é o processo de arrefecer um metal liquefeito até solidificar)
Função SIMULATED-ANNEALING(problema, variação) retorna soluçãoinputs: descrição do problema
variação (mapeamento de tempo para "temperatura")próximo, corrente : nodosT é a "temperatura" controlando a probabilidade dos passos descendentes
corrente <-- gera_próximo(estado_inicial[problema])PARA t=1 ATE � FAZER
T<--variação[t]SE T=0 ENTAO retorna correntepróximo <-- qualquer estado sucessor de corrente�E<-- valor[proximo] - valor[corrente]SE �E>0 ENTAO corrente<--próximoSENAO corrente<--próximo com probabilidade e�E/T
Se variação baixa T suficientemente devagar, o algoritmo encontrará um óptimo global.
também usado como
método de optimização
FEUP 14
Arrefecimento Simulado
– O Algorítmo “arrefecimento simulado” é uma variação do “subir a colina” em que, no início do processo de pesquisa da solução, algunsmovimentos “descendentes” (mais afastadas da solução) podem ser gerados.
– Torna assim a pesquisa mais independente do ponto inicial.
– Dever-se-á dizer que se “desce um vale” em vez de “subir a colina”.
– É similar a uma fusão de metais que depois se arrefece baixando o nívelde energia.
– A aceitação de um novo estado que se afaste da solução é feita com uma probabilidade e�E/T.
– A probabilidade depende ainda de uma “temperatura” que vai diminuindocom o tempo. Com valores altos da “temperatura”, os passos piores têmmais probabilidade de serem executados.
Page 8
FEUP 15
O melhor-primeiro
O melhor-primeiroselecciona o nodo mais promissor de um conjunto deles usando uma função heurística para a avaliação.
– É uma pesquisa em grafo construindo uma árvore de prova.– Combina as estratégias de "primeiro em profundidade" com "primeiro em
largura".– Aplicação de funções dependentes do conhecimento do problema: funções
heurísticas» minimização do custo do passo Vs minimização do custo da pesquisa
desse passo.» o poder heurístico é usado para ordenar os nós a pesquisar.
ex: puzzle de 8 : f(n)=p(n)+c(n) p-profundidadeSe c(n)=0 --> "primeiro em largura"c - número de erros
Usa-se uma "métrica" de algum modo ligada à distância para a solução.
FEUP 16
O melhor-primeiro
Métodos “o melhor-primeiro”:- algoritmo “ganancioso” usa h*(n)
- algoritmo do custo uniforme usa g(n)
- algoritmo A* usa f*(n) = g(n) + h*(n)
Comparação entre métodos sistemáticos p-e-l , p-e-p , c-uniforme
nsscompleto
nssóptimo
b*mbdbdespaço
bm (ou bd se bd<bm)bdbdtempo
p-em-pc-uniformep-em-l
b : factor de ramificação
d : profundidade da solução
m : profundidade máxima
Page 9
FEUP 17
Algoritmo A*
Algoritmo A* para escolher o melhor primeiro numa pesquisa em grafo.
– Cada nó: estado + valor da função heurística + apontador para o pai + sucessores
– 2 listas de nós:» LABERTA: nós já gerados, com as respectivas funções de
avaliação mas não examinados » LFECHADA: nós já examinados
– Função heurística f* = g + h*
– g : custo do passo até ao nó corrente
– h* : estimação do custo do passo do nó corrente à solução
FEUP 18
Algoritmo A*
ALGORITMO A*
LABERTA <-- estado inicial ; LFECHADA <-- vazia
ATE encontrar Solução FAZER
SE LABERTA = vazia ENTAO retornar Falso
Retirar de LABERTA o nó N mais promissor (melhor f*)
Colocar N em LFECHADA
SE N = Solução retornar (N ou passo)
SENAO gerar sucessores de N
PARA CADA sucessor de N FAZER
SucN = SucessorN
SucN aponta para N
Computar g(SucN) = g(N) + custo do passo de N a SucN
Page 10
FEUP 19
Algoritmo A*
SE SucN ⊂ LABERTA comparar os valores de g respectivosSE g(SucN) < g(nó antigo) ENTAO
Refazer apontador do nó antigo para N /*novo pai*/
Registar novo custo g(nó antigo) e novo f* (nó antigo) /*SENAO nada*/
SENAO */⊂ LABERTA*/
SE SucN ⊂ LFECHADA ENTAO /*compare g (SucN) com g (nó antigo) */
SE g (SucN) < g(nó antigo) ENTAORefazer apontador do nó antigo para NRegistar novo custo g (nó antigo) e f* (nó antigo)Propagar a melhoria para sucessores de N
/*SENAO nada*/ /*SENAO nada*/
SENAO /*SucN não pertence às listas*/
junte SucN a LABERTAcomputar f*(SucN) = g(SucN) + h*(SucN)
FIM
FEUP 20
Algoritmo A*
– Como f* também depende de g, em cada nível não se escolhe o maispromissor mas a melhor combinação da promessa com o melhor passo
– No algoritmo A*, h* deve subestimar h para encontrar passo de custo óptimo. Se h*=0, g=cte, primeiro em largura
Corolário: Decrescimento progressivo da AdmissibilidadeSe h* raramente sobre-estima h mais do que d, então A* raramente encontrará uma solução cujo custo seja superior a d + o custo óptimo do passo para a solução.
– A função c(n) para o puzzle de 8 está nesse caso porque é um limite inferior do n. de passos necessários para alcançar o objectivo.
– Seleccionar uma boa função heurística é crucial. No puzzle de 8 é preferível h(n) = D(n) , onde D(n) é a soma das distâncias a que cada elemento se encontra da posição correcta.Outra: h(n) = D(n) + 3S(n). S=0 se n é seguida do seu sucessor e S=2 nos outros casos. S=1 na casa central.
Page 11
FEUP 21
Métodos de Pesquisa
Problema dos baldes
Dois baldes, de capacidades 4 e 3 litros, respectivamente, estão inicialmentevazios. O objectivo é colocar 2 litros no 1º balde, e 0 litros no 2º. Os baldesnão possuem qualquer marcação intermédia. As únicas operações que poderealizar são:
» esvaziar um balde» encher (completamente) um balde» despejar um balde para o outro até que o segundo fique cheio» despejar um balde para o outro até que o primeiro fique vazio
Operadores:
5. despejar do 2º p/ 1º até encher 1º6. despejar do 1º p/ 2º até encher 2º7. despejar do 2º p/ 1º até esvaziar 2º8. despejar do 1º p/ 2º até esvaziar 1º
1. encher 1º balde2. encher 2º balde3. esvaziar 1º balde4. esvaziar 2º balde
FEUP 22
Métodos de Pesquisa
Primeiro em larguraencher 2º balde : b(0,3)
despejar do 2º p/ 1º até esvaziar 2º : b(3,0)
encher 2º balde : b(3,3)
despejar do 2º p/ 1º até encher 1º : b(4,2)
esvaziar 1º balde : b(0,2)
despejar do 2º p/ 1º até esvaziar 2º : b(2,0)
Primeiro em profundidadeencher 1º balde : b(4,0)
encher 2º balde : b(4,3)
esvaziar 1º balde : b(0,3)
despejar do 2º p/ 1º até esvaziar 2º : b(3,0)
encher 2º balde : b(3,3)
despejar do 2º p/ 1º até encher 1º : b(4,2)
esvaziar 1º balde : b(0,2)
despejar do 2º p/ 1º até esvaziar 2º : b(2,0)
Problema dos baldes (solução)
O melhor-primeiro
encher 2º balde : b(0,3)
despejar do 2º p/ 1º até esvaziar 2º : b(3,0)
encher 2º balde : b(3,3)
despejar do 2º p/ 1º até encher 1º : b(4,2)
esvaziar 1º balde : b(0,2)
despejar do 2º p/ 1º até esvaziar 2º : b(2,0)
função heurística (h ) = soma dasdiferenças entre quantidade actual e quantidade objectivo nos dois baldes
Page 12
FEUP 23
Algoritmo A* (aplicação)
Aplicação do Algorítmo A*
Dados 8 Lotes de terreno com 5 possíveis Usos:
Recreio, Apartamentos, Vivendas, Cemitério, Lixeira
Critérios (Restrições) à atribuição:» Recreio próximo do lago» Evitar terrenos inclinados para construção, cemitério e lixeira» Solos instáveis maus para construção» Autoestrada longe de habitações e Recreio
OBJECTIVO: Minimizar custo respeitando critérios
FEUP 24
Algoritmo A* (aplicação)
Page 13
FEUP 25
Algoritmo A* (aplicação)
Representação: Soli : Lista das atribuições de Usos no passo iLUi : Lista dos Usos ainda não atribuídosLli : Lista dos Lotes ainda não atribuídos
Estado inicial: Sol0 = [] ; LU0 = [r,a,v,c,l] ; Ll0 = [l3,l5,l7,l9,l10,l11,l12,l17]Objectivo: Soli = [r-Lr, a-La, v-Lv, c-Lc, l-Ll] ; LUi = [] ; Lli = [L1,L2,L3]Função heurística: f*(N) = g(N) + h*(N)
h*(N) soma dos custos dos p mais baratos lotes ainda não atribuídos; p é o numero de Usos ainda não contempladosg(N) custo da solução parcial até ao momento
0.81.411.71.60.91.31.2custo
bbblago
bbfloresta
mmrmrbbbbinclinação
bbmbbbbsolo
l17l12l11l10l9l7l5l3
FEUP 26
Algoritmo A* (aplicação)
Combinação do A* com Satisfação de Restrições:
» O factor de ramificaçãoem cada estado seria de 40.
» Aplicando as restrições e o princípio do mais restritoprimeiro, reduz-se a Árvore de Pesquisa.
» Estamos aqui também a usar Heurística
Page 14
FEUP 27
Pesquisa em “Jogos”
Pesquisa em "Jogos" ou Estratégias de Pesquisa considerando adversários
Jogos: Campo privilegiado para aplicação e estudo destas técnicas de pesquisa porque:
» a função da avaliação pode ser sempre possível de computar» as regras a aplicar para gerar novos estados são em número não
exagerado e bem definidas. » o objectivo também está bem caracterizado
– É necessário "look ahead“.
– Ex. de função de avaliação no xadrez:soma pesada de vários factores como: vantagem de peças; posição da rainha; controlo do centro, ...
FEUP 28
MiniMax
– Minimax é um procedimento de tipo "primeiro em profundidade". – A profundidade é limitada à priori.
Procedimento básico da estratágia Minimax
Determinar SE o limite de profundidade da pesquisa foi atingidoOU se o nível é minimizador OU se o nível é maximizadorENTAO
SE atingiu profundidade limitecompute o valor da posição corrente e retorne o resultado
SE o nível é minimizadoraplique Minimax nos filhos da posição corrente e retorne o mínimo.
SE o nível é maximizadoraplique Minimax aos filhos da posição corrente e retorne o máximo.
Page 15
FEUP 29
5
4 3
5
3 916
8 9 4
59 6
8 7 3 9 1 6 2 4 1
1 3 5 3 9 2 6 5 2
1 2 3 9 7 2 16 6 4
MAX
MIN
MAX
Minimax
» Processo de pesquisa com Minimax» exemplo de árvore de pesquisa de nível 3 e factor de ramificação 3» os valores da função de mérito são relativas ao jogador "A"
FEUP 30
Minimax-��
Cortes ALFA-BETA ( “�� pruning”)– Permite diminuir o número de nós visitados e de funções nos nós
avaliadas em relação ao Minimax.
– Também é "depth first" com "branch and bound".
– Inclui-se um limite por cada jogador. O limite inferior para o valor a maximizar(�) e um limite superior para o valor a minimizar (�)
– A pesquisa dos sucessores de um nó no nível minimizador terminaquando um valor < � é encontrado;
– Se o nível é maximizador termina quando se encontra um valor paraum sucessor > �
– O nível maximizador (minimizador) tem de conhecer � (�) não para o utilizar mas para o passar para o nível seguinte. Cada nível recebe �e �, um para usar outro para passar.
Page 16
FEUP 31
Minimax-��
Minimax-�� : procedimento básicoDeterminar se o nível é o topo OU a profundidade limite OU é minimizador OU é
maximizador.SE o nível é o Topo ENTAO �=-MAXINT e �MAXINTSE profundidade máxima ENTAO computar a função de avaliação e retornar o resultadoSE é um nível maximizador ENTAO
ENQUANTO (todos os sucessores não forem examinados E �<� ) FAZER� é o maior dos valores seguintes:
� herdado e o máximo de Minimax-�� aplicado aos sucessoresAplique ao próximo sucessor já os novos valores � e �
Retorne �.SE é um nível minimizador ENTAO
ENQUANTO (todos os sucessores não forem examinados E �<�) FAZER� é o mínimo dos valores seguintes:
� herdado e o mínimo valor de Minimax- �� dos sucessoresAplique ao próximo sucessor já os novos valores de � e �
Retorne �
FEUP 32
Minimax-��
4616
279321256293531142619378
[-�,�]
[-�,�]
v=8 v=7
v=3
[8,�][8,�][8,�]
v=8
[-�,8][-�,8][-�,4]
[-�,8]
[-�,8][9,8]--
v=9
v=9
v=2 v=4
v=1
[2,8][4,8][4,8]
v=4
v=4[4,�]
[4,�][5,�][5,�]
[4,5][4,5][4,5]
[5,5]--
[4,�][4,�][5,�]
[4,5][9,5]
-
[6,5]--
[5,�][5,�][5,�]
[4,�][4,5] [4,5]
v=5 v=9v=6
v=1 v=3
v=5
v=3 v=9 v=6 v=1 v=2
v=3
v=5
[5,�]
[5,�] v=5
Page 17
FEUP 33
Negamax
Algorítmo Negamax
Este algorítmo é semelhante ao Minmax mas tira partido das heurísticas poderem ser as mesmas para o jogador e seu adversário (como é o caso do Xadrez)
Enquanto que o Minmax maximiza a heurística do jogador e minimiza a do adversário, o Negamax nega (multiplica por -1) o valor da heurística correspondente ao nível onde teria de minimizar.
Assim não necessita de saber qual é o nível em que se encontra emaximiza sempre.