Você está na página 1de 98

Machine Translated by Google

Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

RESOLVENDO PROBLEMAS POR


3 PROCURANDO

No qual vemos como um agente pode encontrar uma sequência de ações que atinja seus objetivos,
quando nenhuma ação isolada o fará.

Os agentes mais simples discutidos no Capítulo 2 foram os agentes reflexos, que baseiam suas ações em um
mapeamento direto de estados para ações. Esses agentes não podem operar bem em ambientes para os quais
esse mapeamento seria muito grande para armazenar e levaria muito tempo para aprender. Agentes baseados em
objetivos, por outro lado, podem ter sucesso considerando ações futuras e a conveniência de seus resultados.

SOLUÇÃO DE PROBLEMAS
AGENTE
Este capítulo descreve um tipo de agente baseado em objetivos chamado agente de solução de problemas.
Os agentes de solução de problemas pensam sobre o mundo usando representações atômicas , conforme
descrito na Seção 2.4.7 — isto é, os estados do mundo são considerados como um todo, sem nenhuma estrutura
interna visível para os algoritmos de solução de problemas. Agentes baseados em objetivos que usam
representações fatoradas ou estruturadas mais avançadas são geralmente chamados de agentes de
planejamento e são discutidos nos Capítulos 7 e 11.
Começamos nossa discussão sobre resolução de problemas definindo precisamente os elementos que
constituem um “problema” e sua “solução”, e damos vários exemplos para ilustrar essas definições.
Em seguida, descrevemos vários algoritmos de busca de uso geral que podem ser usados para resolver esses
problemas. Veremos vários algoritmos de busca não informados — algoritmos que não recebem nenhuma
informação sobre o problema além de sua definição. Embora alguns desses algoritmos possam resolver qualquer
problema solucionável, nenhum deles pode fazê-lo com eficiência. Algoritmos de busca informados , por outro
lado, muitas vezes podem funcionar muito bem se tiverem alguma ideia de onde procurar soluções.

Neste capítulo, nos limitamos ao tipo mais simples de ambiente de tarefa, para o qual a solução de um
problema é sempre uma sequência fixa de ações. O caso mais geral – em que as ações futuras do agente podem
variar dependendo das percepções futuras – é tratado no Capítulo 4.
Este capítulo usa conceitos da análise de algoritmos. Leitores não familiarizados com os conceitos de
complexidade assintótica (isto é, notação O() ) e NP-completude devem consultar o Apêndice A.

65

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

66 Capítulo 3. Resolução de problemas por pesquisa

3.1 AGENTES DE SOLUÇÃO DE PROBLEMAS

Agentes inteligentes devem maximizar sua medida de desempenho. Como mencionamos no Capítulo 2, alcançar
isso às vezes é simplificado se o agente puder adotar uma meta e almejar satisfazê-la. Vejamos primeiro por
que e como um agente pode fazer isso.
Imagine um agente na cidade de Arad, na Romênia, aproveitando as férias em turnê. A medida de
desempenho do agente contém muitos fatores: ele quer melhorar seu bronzeado, melhorar seu romeno, apreciar
a paisagem, aproveitar a vida noturna (como ela é), evitar ressacas e assim por diante. O problema de decisão
é complexo, envolvendo muitas compensações e leitura cuidadosa de guias. Agora, suponha que o agente
tenha uma passagem não reembolsável para sair de Bucareste no dia seguinte. Nesse caso, faz sentido que o
agente adote o objetivo de chegar a Bucareste.
Os cursos de ação que não chegam a Bucareste a tempo podem ser rejeitados sem maiores considerações e
o problema de decisão do agente é bastante simplificado. As metas ajudam a organizar o comportamento ,
limitando os objetivos que o agente está tentando alcançar e, portanto, as ações que ele precisa considerar. A
formulação de metas, com base na situação atual e na medida de desempenho do agente, é o primeiro passo na solução de
problemas.
Consideraremos uma meta como um conjunto de estados do mundo - exatamente aqueles estados nos
quais a meta é satisfeita. A tarefa do agente é descobrir como agir, agora e no futuro, para que atinja um estado
objetivo. Antes de poder fazer isso, ele precisa decidir (ou precisamos decidir em seu nome) que tipo de ações e
estados deve considerar. Se fosse para considerar ações do tipo “mova o pé esquerdo para a frente uma
polegada” ou “gire o volante um grau para a esquerda”, o agente provavelmente nunca encontraria o caminho
para fora do estacionamento, muito menos para Bucareste, porque nesse nível de detalhe, há muita incerteza
no mundo e haveria muitas etapas em uma solução. A formulação do problema é o processo de decidir quais
PROBLEMA
FORMULAÇÃO ações e estados considerar, dado um objetivo. Discutiremos esse processo com mais detalhes posteriormente.
Por ora, vamos assumir que o agente considerará ações no nível de dirigir de uma grande cidade para outra.
Cada estado, portanto, corresponde a estar em uma determinada cidade.

Nosso agente agora adotou o objetivo de dirigir até Bucareste e está considerando para onde ir de Arad.
Existem três estradas saindo de Arad, uma em direção a Sibiu, uma para Timisoara e uma para Zerind. Nenhum
deles atinge o objetivo, portanto, a menos que o agente esteja muito familiarizado com a geografia da Romênia,
ele não saberá qual caminho seguir.1 Em outras palavras, o agente não saberá qual de suas ações possíveis é
a melhor, porque não ainda não sabem o suficiente sobre o estado resultante de cada ação. Se o agente não
tiver nenhuma informação adicional – isto é, se o ambiente for desconhecido no sentido definido na Seção 2.3
– então ele não tem escolha a não ser tentar uma das ações aleatoriamente. Essa triste situação é discutida no
Capítulo 4.
Mas suponha que o agente tenha um mapa da Romênia. O objetivo de um mapa é fornecer ao agente
informações sobre os estados em que ele pode entrar e as ações que ele pode executar. O agente pode usar
esta informação para considerar as fases subsequentes de uma viagem hipotética através de cada uma das três
cidades, tentando encontrar uma viagem que eventualmente chegue a Bucareste. uma vez que tem

1 Estamos assumindo que a maioria dos leitores está na mesma posição e pode facilmente se imaginar tão sem noção
quanto nosso agente. Pedimos desculpas aos leitores romenos que não conseguem tirar proveito deste dispositivo pedagógico.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

Seção 3.1. Agentes de solução de problemas 67

encontrou um caminho no mapa de Arad a Bucareste, pode atingir seu objetivo realizando as ações de direção
que correspondem às etapas da viagem. Em geral, um agente com várias opções imediatas de valor desconhecido
pode decidir o que fazer examinando primeiro as ações futuras que eventualmente levam a estados de valor
conhecido.
Para ser mais específico sobre o que queremos dizer com “examinar ações futuras”, temos que ser mais
específicos sobre as propriedades do ambiente, conforme definido na Seção 2.3. Por enquanto, assumiremos
que o ambiente é observável, de forma que o agente sempre conheça o estado atual. Para o agente que dirige
na Romênia, é razoável supor que cada cidade do mapa tenha uma placa indicando sua presença aos motoristas
que chegam. Também assumiremos que o ambiente é discreto, de modo que, em qualquer estado, haja apenas
um número finito de ações para escolher.
Isso é verdade para navegar na Romênia porque cada cidade está conectada a um pequeno número de outras
cidades. Vamos assumir que o ambiente é conhecido, para que o agente saiba quais estados são atingidos por
cada ação. (Ter um mapa preciso é suficiente para atender a essa condição para problemas de navegação.)
Finalmente, assumimos que o ambiente é determinístico, de modo que cada ação tenha exatamente um
resultado. Em condições ideais, isso é verdade para o agente na Romênia - significa que, se ele escolher dirigir
de Arad para Sibiu, acabará em Sibiu. É claro que as condições nem sempre são ideais, como veremos no
Capítulo 4.
Sob essas suposições, a solução para qualquer problema é uma sequência fixa de ações.
"Claro!" pode-se dizer: "O que mais poderia ser?" Bem, em geral pode ser uma estratégia de ramificação que
recomenda diferentes ações no futuro, dependendo de quais percepções chegam.
Por exemplo, em condições menos do que ideais, o agente pode planejar dirigir de Arad para Sibiu e depois para
Rimnicu Vilcea, mas também pode precisar de um plano de contingência caso chegue acidentalmente a Zerind
em vez de Sibiu. Felizmente, se o agente conhece o estado inicial e o ambiente é conhecido e determinístico,
ele sabe exatamente onde estará após a primeira ação e o que irá perceber. Como há apenas uma percepção
possível após a primeira ação, a solução pode especificar apenas uma segunda ação possível e assim por diante.

PROCURAR
O processo de buscar uma sequência de ações que alcance o objetivo é chamado de busca.
SOLUÇÃO
Um algoritmo de busca toma um problema como entrada e retorna uma solução na forma de uma sequência de
ações. Uma vez encontrada uma solução, as ações que ela recomenda podem ser realizadas. Isso é chamado
EXECUÇÃO
de fase de execução . Assim, temos um design simples de “formular, pesquisar, executar” para o agente,
conforme mostrado na Figura 3.1. Após formular um objetivo e um problema a resolver, o agente chama um
procedimento de busca para resolvê-lo. Em seguida, ele usa a solução para guiar suas ações, fazendo tudo o
que a solução recomenda como a próxima coisa a fazer – normalmente, a primeira ação da sequência – e, em
seguida, remove essa etapa da sequência. Uma vez executada a solução, o agente formulará uma nova meta.

Observe que enquanto o agente está executando a sequência de soluções, ele ignora suas percepções
ao escolher uma ação, pois sabe antecipadamente quais serão. Um agente que executa seus planos de olhos
fechados, por assim dizer, deve estar bastante seguro do que está acontecendo. Os teóricos do controle chamam
CIRCUITO ABERTO
isso de sistema de loop aberto , porque ignorar as percepções quebra o loop entre o agente e o ambiente.

Primeiro descrevemos o processo de formulação do problema e, em seguida, dedicamos a maior parte do


capítulo a vários algoritmos para a função SEARCH . Não discutiremos o funcionamento das funções UPDATE-
STATE e FORMULATE-GOAL neste capítulo.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

68 Capítulo 3. Resolução de problemas por pesquisa

função SIMPLE-PROBLEM-SOLVING-AGENT(percept) retorna uma ação


persistente: seq, uma sequência de ação, estado inicialmente
vazio, alguma descrição do objetivo do estado atual do
mundo, uma meta, problema
inicialmente nulo, uma formulação de problema

estado ÿ UPDATE-STATE(estado, percepção)


se seq estiver vazio , faça
o objetivo ÿ FORMULATE-GOAL(state)
problema ÿ FORMULATE-PROBLEM(state, goal) seq ÿ
SEARCH(problem) se seq =
falha, então retorne uma ação nula
ação ÿ FIRST(seq) seq ÿ
REST(seq) ação de
retorno

Figura 3.1 Um agente simples de solução de problemas. Ele primeiro formula uma meta e um problema, procura
uma sequência de ações que resolveriam o problema e, em seguida, executa as ações uma de cada vez. Quando
isso é concluído, ele formula outra meta e começa de novo.

3.1.1 Problemas e soluções bem definidas


PROBLEMA Um problema pode ser definido formalmente por cinco componentes:

ESTADO INICIAL • O estado inicial em que o agente inicia. Por exemplo, o estado inicial de nosso agente na Romênia pode
ser descrito como In(Arad). • Uma descrição das
AÇÕES possíveis ações disponíveis para o agente. Dado um determinado estado s, ACTIONS(s) retorna o conjunto
de ações que podem ser executadas em s. Por exemplo, do estado In(Arad), as ações possíveis são
{Go(Sibiu), Go(Timisoara), Go(Zerind)}. • Uma descrição do que cada ação faz; o nome formal para
isso é o modelo de transição, especificado por uma função RESULT(s, a) que retorna o estado resultante
MODELO DE TRANSIÇÃO da execução da ação a no estado s. Também usaremos o termo sucessor para nos referir a qualquer
SUCESSOR estado alcançável a partir de um determinado estado por uma única ação.2 Por exemplo, temos

RESULT(In(Arad),Go(Zerind)) = In(Zerind) .

ESPAÇO DE ESTADO Juntos, o estado inicial, as ações e o modelo de transição definem implicitamente o espaço de estado do
problema - o conjunto de todos os estados alcançáveis a partir do estado inicial por qualquer sequência
GRÁFICO de ações. O espaço de estado forma uma rede ou grafo direcionado no qual os nós são estados e os
links entre os nós são ações. (O mapa da Romênia mostrado na Figura 3.2 pode ser interpretado como
um gráfico de espaço de estados se considerarmos cada estrada como representando duas ações de
CAMINHO direção, uma em cada direção.) Um caminho no espaço de estados é uma sequência de estados
conectados por um seqüência de ações.

2 Muitos tratamentos de solução de problemas, incluindo edições anteriores deste livro, falam sobre a função

sucessor, que retorna o conjunto de todos os sucessores, em vez de ações e resultados. Embora conveniente em
alguns aspectos, essa formulação torna difícil descrever um agente que sabe quais ações pode tentar, mas não o que consegue.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

Seção 3.1. Agentes de solução de problemas 69

Oradea
71
Neamt

Zerind 87
151
75
Iasi
Arad
140
92
Sibiu Fagaras
99
118
Vaslui
80
Rimnicu Vilcea
Timisoara

142
111 211
Pitesti
Lugoj 97

70 98
85 Hirsova
Mehadia 146 101 Urziceni

75 86
138
Bucareste
Drobeta 120
90
Craiova Eforie
Giurgiu

Figura 3.2 Um roteiro simplificado de parte da Romênia.

TESTE DE GOL
• O teste de meta, que determina se um determinado estado é um estado de meta. Às vezes, há um conjunto explícito de
possíveis estados de objetivo e o teste simplesmente verifica se o estado fornecido é um deles. O objetivo do agente na
Romênia é o conjunto único {In(Bucharest)}.
Às vezes, o objetivo é especificado por uma propriedade abstrata em vez de um conjunto de estados explicitamente
enumerados. Por exemplo, no xadrez, o objetivo é atingir um estado chamado “xeque-mate”, onde o rei adversário está
sob ataque e não consegue escapar.

CUSTO DO CAMINHO
• Uma função de custo de caminho que atribui um custo numérico a cada caminho. O agente de solução de problemas
escolhe uma função de custo que reflita sua própria medida de desempenho. Para o agente que tenta chegar a Bucareste,
o tempo é essencial, portanto, o custo de um trajeto pode ser seu comprimento em quilômetros. Neste capítulo, assumimos
que o custo de um caminho pode ser descrito como a soma dos custos das ações individuais ao longo do caminho.3 O
CUSTO DA ETAPA
custo do passo de ação é denotado por c(s, a, sÿ ). Os custos de passos para a Romênia são mostrados na Figura 3.2
a no estado s para alcançar o estado sÿ como distâncias de rota. Assumiremos que os custos das etapas são não

negativos.4

Os elementos anteriores definem um problema e podem ser reunidos em uma única estrutura de dados que é fornecida como
entrada para um algoritmo de solução de problemas. Uma solução para um problema é uma sequência de ações que leva do
estado inicial a um estado objetivo. A qualidade da solução é medida pela OPTIMAL SOLUTION , a função de custo de caminho,
e uma solução ótima tem o menor custo de caminho entre todas as soluções.

3 Essa suposição é algoritmicamente conveniente, mas também tem uma justificativa mais fundamental – veja a página 629
no Capítulo 17.
4 As implicações dos custos negativos são exploradas no Exercício 3.29.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

70 Capítulo 3. Resolução de problemas por pesquisa

3.1.2 Formulando problemas


Na seção anterior, propusemos uma formulação do problema de chegar a Bucareste em termos de estado inicial,
ações, modelo de transição, teste de objetivo e custo do caminho. Essa formulação parece razoável, mas ainda
é um modelo — uma descrição matemática abstrata — e não a coisa real. Compare a simples descrição do
estado que escolhemos, In(Arad), com uma viagem real pelo país, onde o estado do mundo inclui tantas coisas:
os companheiros de viagem, o que está no rádio, a paisagem pela janela, se há algum policial por perto, a que
distância está da próxima parada de descanso, as condições da estrada, o clima e assim por diante. Todas
essas considerações são deixadas de fora de nossas descrições de estado porque são irrelevantes para o
problema de encontrar uma rota para Bucareste. O processo de remover detalhes de uma representação é
chamado de abstração.
ABSTRAÇÃO

Além de abstrair a descrição do estado, devemos abstrair as próprias ações.


Uma ação de condução tem muitos efeitos. Além de mudar a localização do veículo e de seus ocupantes,
consome tempo, consome combustível, gera poluição e muda o agente (como dizem, as viagens estão se
ampliando). Nossa formulação leva em conta apenas a mudança de localização.
Além disso, há muitas ações que omitiremos completamente: ligar o rádio, olhar pela janela, diminuir a velocidade
para os policiais e assim por diante. E, claro, não especificamos ações no nível de "girar o volante três graus
para a esquerda".
Podemos ser mais precisos sobre a definição do nível apropriado de abstração? Pense nos estados e
ações abstratos que escolhemos como correspondentes a grandes conjuntos de estados mundiais detalhados e
sequências de ação detalhadas. Agora considere uma solução para o problema abstrato: por exemplo, o caminho
de Arad para Sibiu para Rimnicu Vilcea para Pitesti para Bucareste. Esta solução abstrata corresponde a um
grande número de caminhos mais detalhados. Por exemplo, poderíamos dirigir com o rádio ligado entre Sibiu e
Rimnicu Vilcea e depois desligá-lo pelo resto da viagem. A abstração é válida se pudermos expandir qualquer
solução abstrata em uma solução no mundo mais detalhado; uma condição suficiente é que para cada estado
detalhado que esteja "em Arad", haja um caminho detalhado para algum estado que esteja "em Sibiu" e assim
por diante.5 A abstração é útil se realizar cada uma das ações na solução é mais fácil do que o problema original;
neste caso, eles são fáceis o suficiente para que possam ser executados sem busca ou planejamento adicional
por um agente de direção médio. A escolha de uma boa abstração envolve remover o máximo de detalhes
possível, mantendo a validade e garantindo que as ações abstratas sejam fáceis de realizar. Se não fosse pela
capacidade de construir abstrações úteis, os agentes inteligentes seriam completamente inundados pelo mundo
real.

3.2 EXEMPLOS DE PROBLEMAS

A abordagem de resolução de problemas foi aplicada a uma vasta gama de ambientes de tarefas. Listamos
alguns dos mais conhecidos aqui, distinguindo entre problemas de brinquedo e problemas do mundo real . Um
PROBLEMA DO BRINQUEDO problema de brinquedo destina-se a ilustrar ou exercitar vários métodos de resolução de problemas. Pode ser

5 Veja a Seção 12.2 para um conjunto mais completo de definições e algoritmos.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

Seção 3.2. Exemplos de problemas 71

dado uma descrição concisa e exata e, portanto, é utilizável por diferentes pesquisadores para comparar o
MUNDO REAL
PROBLEMA
desempenho dos algoritmos. Um problema do mundo real é aquele cujas soluções as pessoas realmente se
importam. Eles tendem a não ter uma única descrição consensual, mas tentaremos dar o sabor geral de suas
formulações.

3.2.1 Problemas com brinquedos

O primeiro exemplo que examinaremos é o mundo do vácuo introduzido pela primeira vez no Capítulo 2. (Veja a
Figura 2.2.) Isso pode ser formulado como um problema da seguinte forma:

• Estados: O estado é determinado pela localização do agente e pelas localizações sujas. O agente está em um
dos dois locais, cada um dos quais pode ou não conter sujeira. Assim, existem 2 × 2 = 8 possíveis estados do
mundo. Um ambiente 2
maior com n locais tem
n · 2 n estados.

• Estado inicial: Qualquer estado pode ser designado como o estado inicial. •

Ações: Neste ambiente simples, cada estado tem apenas três ações: Esquerda, Direita e
Chupar. Ambientes maiores também podem incluir Up e Down.

• Modelo de transição: as ações têm seus efeitos esperados, exceto que mover para a esquerda no quadrado
mais à esquerda, mover para a direita no quadrado mais à direita e chupar em um quadrado limpo não têm
efeito. O espaço de estado completo é mostrado na Figura 3.3.

• Teste de gol: verifica se todos os quadrados estão limpos. • Custo do

caminho: Cada passo custa 1, então o custo do caminho é o número de passos no caminho.

Comparado com o mundo real, este problema de brinquedo tem localizações discretas, sujeira discreta, limpeza
confiável e nunca fica bagunçado depois de limpo. No Capítulo 4, vamos relaxar algumas dessas suposições.

8-PUZZLE O quebra-cabeça de 8 peças, cujo exemplo é mostrado na Figura 3.4, consiste em um tabuleiro 3 × 3 com
oito peças numeradas e um espaço em branco. Uma peça adjacente ao espaço em branco pode deslizar para dentro
do espaço. O objetivo é atingir um estado de meta especificado, como o mostrado à direita da figura. A formulação
padrão é a seguinte:

• Estados: Uma descrição de estado especifica a localização de cada uma das oito peças e o espaço em branco
em um dos nove quadrados. •

Estado inicial: Qualquer estado pode ser designado como o estado inicial. Observe que qualquer meta pode ser
alcançada a partir de exatamente metade dos possíveis estados iniciais (Exercício 3.17). • Ações:

A formulação mais simples define as ações como movimentos do espaço em branco Esquerda, Direita, Cima ou
Baixo. Diferentes subconjuntos destes são possíveis, dependendo de onde está o espaço em branco.

• Modelo de transição: Dado um estado e uma ação, retorna o estado resultante; por exemplo, se aplicarmos
Esquerda ao estado inicial na Figura 3.4, o estado resultante terá o 5 e o espaço em branco trocados.

• Teste de meta: verifica se o estado corresponde à configuração de meta mostrada na Fig.


ura 3.4. (Outras configurações de meta são possíveis.)

• Custo do caminho: Cada passo custa 1, então o custo do caminho é o número de passos no caminho.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google

Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

72 Capítulo 3. Resolução de problemas por pesquisa

R
eu R

eu

S S

R R
eu R eu R

eu eu

S S
S S

R
eu R

eu

S S

Figura 3.3 O espaço de estados para o mundo do vácuo. Links denotam ações: L = Esquerda, R = Direita, S =
Chupar.

Que abstrações incluímos aqui? As ações são abstraídas para seus estados inicial e final, ignorando os locais
intermediários onde o bloco está deslizando. Abstraímos ações como sacudir o tabuleiro quando as peças ficam
presas, ou extrair as peças com uma faca e colocá-las de volta. Ficamos com a descrição das regras do quebra-
cabeça, evitando todos os detalhes das manipulações físicas.

BLOCO DESLIZANTE
PUZZLES
O quebra-cabeça de 8 pertence à família dos quebra-cabeças de blocos deslizantes, que são
frequentemente usados como problemas de teste para novos algoritmos de busca em IA. Essa família é conhecida
por ser NP-completa, portanto não se espera encontrar métodos significativamente melhores no pior caso do que
os algoritmos de busca descritos neste capítulo e no próximo. O quebra-cabeça de 8 tem 9!/2 = 181, 440 estados
alcançáveis e é facilmente resolvido. O quebra-cabeça de 15 (em um tabuleiro 4 × 4 ) tem cerca de 1,3 trilhão de
estados, e instâncias aleatórias podem ser resolvidas de forma otimizada em alguns milissegundos pelos melhores algoritmos de busca.

7 2 4 1 2

5 6 3 4 5

8 3 1 6 7 8

Estado inicial Estado da meta

Figura 3.4 Uma instância típica do quebra-cabeça de 8 peças.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação final.
©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

Seção 3.2. Exemplos de problemas 73

O quebra-cabeça de 24 (em um tabuleiro de 5 × 5 ) tem cerca de 1025 estados, e as instâncias aleatórias levam várias horas para

serem resolvidas de maneira otimizada.


8-PROBLEMA DAS RAINHAS O objetivo do problema das 8 rainhas é colocar oito rainhas em um tabuleiro de xadrez de forma que
nenhuma rainha ataque outra. (A rainha ataca qualquer peça na mesma linha, coluna ou diagonal.) A Figura 3.5
mostra uma tentativa de solução que falha: a rainha na coluna mais à direita é atacada pela rainha no canto superior
esquerdo.

Figura 3.5 Quase uma solução para o problema das 8 rainhas. (A solução é deixada como exercício.)

Embora existam algoritmos eficientes para fins especiais para este problema e para toda a família de n-
rainhas, ele continua sendo um problema de teste útil para algoritmos de busca. Existem dois tipos principais de
INCREMENTAL
FORMULAÇÃO
formulação. Uma formulação incremental envolve operadores que aumentam a descrição do estado, começando
com um estado vazio; para o problema das 8 rainhas, isso significa que cada ação adiciona uma rainha ao estado.
ESTADO COMPLETO
FORMULAÇÃO
Uma formulação de estado completo começa com todas as 8 rainhas no tabuleiro e as move. Em ambos os casos,
o custo do caminho não tem interesse porque apenas o estado final conta. A primeira formulação incremental que se
pode tentar é a seguinte:

• Estados: Qualquer arranjo de 0 a 8 rainhas no tabuleiro é um estado. • Estado

inicial: Nenhuma rainha no tabuleiro. • Ações:

Adicione uma rainha a qualquer quadrado vazio. • Modelo

de transição: Retorna o tabuleiro com a dama adicionada à casa especificada. • Teste de objetivo: 8 rainhas

estão no tabuleiro, nenhuma atacada.

Nesta formulação, temos 64 · 63 · · · 57 ÿ 1,8 × 1014 sequências possíveis para investigar. Uma formulação melhor
proibiria a colocação de uma rainha em qualquer casa já atacada:

• Estados: Todos os arranjos possíveis de n rainhas (0 ÿ n ÿ 8), uma por coluna no


n colunas mais à esquerda , sem nenhuma rainha atacando outra.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

74 Capítulo 3. Resolução de problemas por pesquisa

• Ações: Adicione uma rainha a qualquer quadrado na coluna vazia mais à esquerda, de forma que não seja
atacada por nenhuma outra rainha.

Essa formulação reduz o espaço de estado de 8 rainhas de 1,8 × 1014 para apenas 2.057, e as soluções são
fáceis de encontrar. Por outro lado, para 100 rainhas, a redução é de aproximadamente 10.400 estados para
cerca de 1.052 estados (Exercício 3.18) — uma grande melhoria, mas não o suficiente para tornar o problema
tratável. A Seção 4.1 descreve a formulação de estado completo e o Capítulo 6 fornece um algoritmo simples
que resolve até mesmo o problema de um milhão de rainhas com facilidade.
Nosso problema final do brinquedo foi desenvolvido por Donald Knuth (1964) e ilustra como podem surgir
espaços de estados infinitos. Knuth conjecturou que é possível começar com o número 4, aplicar uma sequência
de fatorial, raiz quadrada e operações mínimas e chegar a qualquer número inteiro positivo desejado. Por
exemplo,

(4!)! = 5 .

A definição do problema é muito simples:


• Estados: Números positivos.
• Estado inicial: 4.

• Ações: Aplicar operação fatorial, raiz quadrada ou piso. O fatorial só pode ser aplicado
para inteiros.
• Modelo de transição: Conforme dado pelas definições matemáticas das operações. • Teste de
objetivo: Estado é o inteiro positivo desejado.

Até onde sabemos, não há limite de quão grande um número pode ser construído no processo de atingir um
determinado alvo - por exemplo, o número 620.448.401.733.239.439.360.000 é gerado na expressão para 5 -
portanto, o espaço de estados para esse problema é infinito. Esses espaços de estado surgem com muita
frequência em tarefas que envolvem a geração de expressões matemáticas, circuitos, provas, programas e
outros objetos definidos recursivamente.

3.2.2 Problemas do mundo real


DESCOBRIMENTO DE ROTAS

PROBLEMA
Já vimos como o problema de localização de rotas é definido em termos de locais especificados e transições
ao longo dos links entre eles. Algoritmos de descoberta de rota são usados em uma variedade de aplicações.
Alguns, como sites da Web e sistemas veiculares que fornecem instruções de direção, são extensões
relativamente diretas do exemplo da Romênia. Outros, como roteamento de fluxos de vídeo em redes de
computadores, planejamento de operações militares e sistemas de planejamento de viagens aéreas, envolvem
especificações muito mais complexas. Considere os problemas de viagens aéreas que devem ser resolvidos por
um site de planejamento de viagens:

• Estados: Cada estado obviamente inclui um local (por exemplo, um aeroporto) e a hora atual.
Além disso, como o custo de uma ação (um segmento de voo) pode depender de segmentos anteriores,
suas bases tarifárias e se foram nacionais ou internacionais, o estado deve registrar informações extras
sobre esses aspectos “históricos”.
• Estado inicial: é especificado pela consulta do usuário.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

Seção 3.2. Exemplos de problemas 75

• Ações: Embarque em qualquer voo do local atual, em qualquer classe de assento, saindo após o horário atual,
deixando tempo suficiente para transferência dentro do aeroporto se houver um segmento de voo anterior.

• Modelo de transição: O estado resultante da realização de um voo terá como local atual o destino do voo e
como horário atual a hora de chegada do voo.

• Teste de meta: estamos no destino final especificado pelo usuário? • Custo do

trajeto: depende do custo monetário, tempo de espera, tempo de voo, procedimentos alfandegários e de
imigração, qualidade do assento, hora do dia, tipo de avião, prêmios de milhagem para passageiros frequentes
e assim por diante.

Os sistemas de aconselhamento de viagens comerciais usam uma formulação de problema desse tipo, com muitas
complicações adicionais para lidar com as estruturas tarifárias bizantinas impostas pelas companhias aéreas.
Qualquer viajante experiente sabe, no entanto, que nem todas as viagens aéreas acontecem de acordo com o
planejado. Um sistema realmente bom deve incluir planos de contingência - como reservas de backup em voos
alternativos - na medida em que sejam justificados pelo custo e pela probabilidade de falha do plano original.
PROBLEMAS DE TOUR Os problemas de turismo estão intimamente relacionados aos problemas de localização de rotas, mas com
uma diferença importante. Considere, por exemplo, o problema “Visite todas as cidades da Figura 3.2 pelo menos
uma vez, começando e terminando em Bucareste”. Assim como na localização de rotas, as ações correspondem a
viagens entre cidades adjacentes. O espaço de estado, no entanto, é bem diferente. Cada estado deve incluir não
apenas a localização atual, mas também o conjunto de cidades que o agente visitou.
Assim, o estado inicial seria In(Bucharest), Visited({Bucharest}), um estado intermediário típico seria In(Vaslui),
Visited({Bucharest, Urziceni, Vaslui}), e o teste de objetivo verificaria se o agente está em Bucareste e todas as 20
cidades foram visitadas.
VIAJANDO
VENDEDOR O problema do caixeiro viajante (TSP) é um problema de turismo no qual cada cidade deve ser visitada
PROBLEMA
exatamente uma vez. O objetivo é encontrar o caminho mais curto . O problema é conhecido por ser NP-difícil, mas
um enorme esforço foi gasto para melhorar as capacidades dos algoritmos TSP. Além de planejar viagens para
vendedores ambulantes, esses algoritmos têm sido usados para tarefas como o planejamento de movimentos de
furadeiras automáticas de placas de circuito e de máquinas de estocagem no chão de fábrica.

LAYOUT VLSI Um problema de layout VLSI requer o posicionamento de milhões de componentes e conexões em um chip
para minimizar a área, minimizar os atrasos do circuito, minimizar as capacitâncias parasitas e maximizar o
rendimento da fabricação. O problema de layout surge após a fase de projeto lógico e geralmente é dividido em duas
partes: layout de célula e roteamento de canal. No layout celular, os componentes primitivos do circuito são
agrupados em células, cada uma das quais desempenha alguma função reconhecida. Cada célula tem uma pegada
fixa (tamanho e forma) e requer um certo número de conexões para cada uma das outras células. O objetivo é colocar
as células no chip de forma que não se sobreponham e que haja espaço para os fios de conexão serem colocados
entre as células.
O roteamento de canal encontra uma rota específica para cada fio através dos espaços entre as células. Esses
problemas de pesquisa são extremamente complexos, mas definitivamente vale a pena resolvê-los. Mais adiante
neste capítulo, veremos alguns algoritmos capazes de resolvê-los.
NAVEGAÇÃO DO ROBÔ A navegação do robô é uma generalização do problema de localização de rotas descrito anteriormente.
Em vez de um conjunto discreto de rotas, um robô pode se mover em um espaço contínuo com (em princípio) um
conjunto infinito de ações e estados possíveis. Para um robô circular movendo-se sobre uma superfície plana,

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

76 Capítulo 3. Resolução de problemas por pesquisa

o espaço é essencialmente bidimensional. Quando o robô possui braços e pernas ou rodas que também devem
ser controlados, o espaço de busca torna-se multidimensional. Técnicas avançadas são necessárias apenas
para tornar o espaço de busca finito. Examinamos alguns desses métodos no Capítulo 25. Além da complexidade
do problema, os robôs reais também devem lidar com erros nas leituras dos sensores e nos controles do motor.

AUTOMÁTICO
CONJUNTO O sequenciamento automático de montagem de objetos complexos por um robô foi demonstrado pela
SEQUÊNCIA
primeira vez por FREDDY (Michie, 1972). O progresso desde então tem sido lento, mas seguro, a ponto de a
montagem de objetos intrincados, como motores elétricos, ser economicamente viável. Em problemas de
montagem, o objetivo é encontrar uma ordem para montar as partes de algum objeto. Se a ordem errada for
escolhida, não haverá como adicionar alguma parte posteriormente na sequência sem desfazer parte do trabalho
já feito. Verificar a viabilidade de uma etapa na sequência é um problema difícil de pesquisa geométrica
intimamente relacionado à navegação do robô. Assim, a geração de ações legais é a parte cara do
sequenciamento da montagem. Qualquer algoritmo prático deve evitar explorar tudo, exceto uma pequena fração
do espaço de estado. Outro importante problema de montagem é o design de proteínas, em que o objetivo é
PROJETO DE PROTEÍNA encontrar uma sequência de aminoácidos que se enobreça em uma proteína tridimensional com as propriedades
certas para curar alguma doença.

3.3 BUSCANDO SOLUÇÕES

Tendo formulado alguns problemas, precisamos agora resolvê-los. Uma solução é uma sequência de ações,
portanto, os algoritmos de busca funcionam considerando várias sequências de ações possíveis. As possíveis
ÁRVORE DE PESQUISA sequências de ação começando no estado inicial formam uma árvore de busca com o estado inicial na raiz; os
NÓ ramos são ações e os nós correspondem a estados no espaço de estados do problema. A Figura 3.6 mostra os
primeiros passos no crescimento da árvore de busca para encontrar uma rota de Arad para Bucareste. O nó raiz
da árvore corresponde ao estado inicial, In(Arad).
O primeiro passo é testar se este é um estado objetivo. (Claramente não é, mas é importante verificar para que
possamos resolver problemas complicados como “começar em Arad, chegar a Arad.”) Então, precisamos
EXPANDINDO considerar a realização de várias ações. Isso é feito expandindo o estado atual; ou seja, aplicar cada ação legal
GERANDO ao estado atual, gerando assim um novo conjunto de estados. Neste caso, adicionamos três ramificações do nó
NÓ PAI pai In(Arad) levando a três novos nós filhos: In(Sibiu), In(Timisoara) e In(Zerind). Agora devemos escolher qual
NÓ FILHO dessas três possibilidades considerar mais adiante.

Essa é a essência da busca – seguir uma opção agora e deixar as outras de lado para depois, caso a
primeira escolha não leve a uma solução. Suponha que escolhemos Sibiu primeiro.
Verificamos se é um estado objetivo (não é) e então expandimos para obter In(Arad), In(Fagaras), In(Oradea) e
In(RimnicuVilcea). Podemos então escolher qualquer um desses quatro, ou voltar e escolher Timisoara ou
NÓ DA FOLHA Zerind. Cada um desses seis nós é um nó folha, ou seja, um nó sem filhos na árvore. O conjunto de todos os
nós folha disponíveis para expansão em qualquer ponto é chamado de fronteira. (Muitos autores a chamam de
FRONTEIRA lista aberta, que é geograficamente menos evocativa e imprecisa, pois não precisa ser armazenada como uma
LISTA ABERTA lista.) Na Figura 3.6, a fronteira de cada árvore consiste nos nós com contornos em negrito.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

Seção 3.3. Procurando por soluções 77

O processo de escolha e expansão dos nós na fronteira continua até que uma solução seja encontrada
ou não haja mais estados a serem expandidos. O algoritmo geral TREE-SEARCH é mostrado informalmente na
Figura 3.7. Todos os algoritmos de busca compartilham essa estrutura básica; eles variam principalmente de
acordo com a forma como escolhem qual estado expandir a seguir - a chamada estratégia de busca ESTRATÉGIA
DE PESQUISA .
O leitor atento notará uma coisa peculiar sobre a árvore de busca mostrada na Figura 3.6: ela inclui o
caminho de Arad a Sibiu e de volta a Arad novamente! Dizemos que In(Arad) é um estado repetido na árvore
ESTADO REPETIDO
de busca, gerado neste caso por um loopy path. Considerar esses caminhos circulares significa que a árvore
CAMINHO EM LOOPY
de busca completa para a Romênia é infinita, porque não há limite para a frequência com que se pode percorrer
um circuito. Por outro lado, o espaço de estados – o mapa mostrado na Figura 3.2 – tem apenas 20 estados.
Como veremos na Seção 3.4, os loops podem fazer com que certos algoritmos falhem, tornando insolúveis
problemas que, de outra forma, poderiam ser resolvidos. Felizmente, não há necessidade de considerar caminhos
em loop. Podemos confiar em mais do que intuição para isso: como os custos de caminho são aditivos e os
custos de passo não são negativos, um caminho em loop para qualquer estado dado nunca é melhor do que o
mesmo caminho com o loop removido.
CAMINHO REDUNDANTE
Caminhos em loop são um caso especial do conceito mais geral de caminhos redundantes, que

(a) O estado inicial Arad

Sibiu Timisoara Zerind

Arad Fagaras Oradea Rimnicu Vilcea Arad Lugoj Arad Oradea

(b) Depois de expandir Arad Arad

Sibiu Timisoara Zerind

Arad Fagaras Oradea Rimnicu Vilcea Arad Lugoj Arad Oradea

(c) Depois de expandir Sibiu Arad

Sibiu Timisoara Zerind

Arad Fagaras Oradea Rimnicu Vilcea Arad Lugoj Arad Oradea

Figura 3.6 Árvores de busca parcial para encontrar uma rota de Arad a Bucareste. Os nós que foram expandidos
são sombreados; os nós que foram gerados, mas ainda não expandidos, são destacados em negrito; nós que
ainda não foram gerados são mostrados em linhas tracejadas fracas.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

78 Capítulo 3. Resolução de problemas por pesquisa

função TREE-SEARCH(problema) retorna uma solução ou falha inicializa a


fronteira usando o estado inicial do loop do problema faça se a
fronteira
estiver vazia então retorne falha escolha um nó
folha e remova-o da fronteira se o nó contiver um estado
objetivo então retorna a solução correspondente expande o nó escolhido, adicionando
os nós resultantes à fronteira

função GRAPH-SEARCH(problema) retorna uma solução ou falha inicializa a


fronteira usando o estado inicial do problema inicializa o conjunto
explorado para ser um loop vazio faz se a
fronteira
estiver vazia então retorna falha escolhe um nó
folha e remove-o da fronteira se o nó contém um estado de
objetivo então retorne a solução correspondente adicione o nó ao conjunto explorado
expanda o nó escolhido, adicionando os
nós resultantes à fronteira somente se não estiver na fronteira ou conjunto
explorado

Figura 3.7 Uma descrição informal dos algoritmos gerais de busca em árvore e busca em grafos. As partes do
GRAPH-SEARCH marcadas em negrito e itálico são as adições necessárias para lidar com estados repetidos.

existem sempre que há mais de uma maneira de ir de um estado para outro. Considere os caminhos Arad–Sibiu
(140 km de extensão) e Arad–Zerind–Oradea–Sibiu (297 km de extensão). Obviamente, o segundo caminho é
redundante - é apenas uma maneira pior de chegar ao mesmo estado. Se você está preocupado em atingir a
meta, nunca há razão para manter mais de um caminho para um determinado estado, porque qualquer estado
de meta que seja alcançável estendendo um caminho também é alcançável estendendo o outro.

Em alguns casos, é possível definir o próprio problema de forma a eliminar caminhos redundantes. Por
exemplo, se formularmos o problema das 8 rainhas (página 73) de modo que uma rainha possa ser colocada em
qualquer coluna, então cada estado com n rainhas pode ser alcançado por n! diferentes caminhos; mas se
reformularmos o problema de modo que cada nova rainha seja colocada na coluna vazia mais à esquerda, então
cada estado pode ser alcançado apenas por um caminho.
Em outros casos, caminhos redundantes são inevitáveis. Isso inclui todos os problemas em que as ações
são reversíveis, como problemas de localização de rotas e quebra-cabeças de blocos deslizantes. Rota
RECTANGULAR GRID encontrada em uma grade retangular, conforme ilustrado na Figura 3.9, é um exemplo particularmente
importante em jogos de computador. Em tal grade, cada estado tem quatro sucessores, então uma árvore de
d folhas;
busca de profundidade d que inclui estados repetidos
mastem
há 4apenas
estados distintos
cerca 2
de 2ddentro de d passos de qualquer
estado dado. Para d = 20, isso significa cerca de um trilhão de nós, mas apenas cerca de 800 estados distintos.
Assim, seguir caminhos redundantes pode fazer com que um problema tratável se torne intratável. Isso é
verdade mesmo para algoritmos que sabem como evitar loops infinitos.
Como diz o ditado, algoritmos que esquecem sua história estão fadados a repeti-la. O

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

Seção 3.3. Procurando por soluções 79

Figura 3.8 Uma sequência de árvores de busca geradas por uma busca em grafos no problema da Romênia da
Figura 3.2. Em cada estágio, estendemos cada caminho em um passo. Observe que no terceiro estágio, a cidade
mais ao norte (Oradea) tornou-se um beco sem saída: ambas as sucessoras já foram exploradas por outros
caminhos.

Uma maneira de evitar explorar caminhos redundantes é lembrar onde se esteve. Para fazer isso,
CONJUNTO EXPLORADO aumentamos o algoritmo TREE-SEARCH com uma estrutura de dados chamada conjunto explorado,
LISTA FECHADA que lembra cada nó expandido. (Muitos autores chamam isso de lista fechada — veja o comentário
anterior sobre listas abertas.) Nodos recém-gerados que correspondam aos nodos gerados anteriormente
— aqueles no conjunto explorado ou na fronteira — podem ser descartados em vez de adicionados à fronteira.
O novo algoritmo, chamado GRAPH-SEARCH, é mostrado informalmente na Figura 3.7. Os algoritmos
específicos neste capítulo são, em sua maioria, casos especiais ou variantes desse projeto geral.

Claramente, a árvore de busca construída pelo algoritmo GRAPH-SEARCH contém no máximo


uma cópia de qualquer estado dado, então podemos pensar nela como uma árvore crescendo
diretamente no próprio grafo de espaço de estados, como mostrado na Figura 3.8. O algoritmo tem
SEPARADOR outra propriedade interessante: a fronteira separa o grafo de espaço de estados na região explorada e
na região inexplorada, de modo que todo caminho do estado inicial para um estado inexplorado tenha
que passar por um estado na fronteira. (Se isso parecer completamente óbvio, tente o Exercício 3.20
agora.) Essa propriedade é ilustrada na Figura 3.9. Como cada passo move um estado da fronteira para
a região explorada, enquanto move alguns estados da região inexplorada para a fronteira, vemos que o
algoritmo está examinando sistematicamente os estados no espaço de estados, um a um, até encontrar uma solução .

3.3.1 Infraestrutura para algoritmos de busca


Algoritmos de busca requerem uma estrutura de dados para acompanhar a árvore de busca que está
sendo construída. Para cada nó n da árvore, teremos uma estrutura que contém os quatro componentes
a seguir:

• n.STATE: o estado no espaço de estados ao qual o nó corresponde; •


n.PARENT: o nó na árvore de busca que gerou este nó; • n.ACTION: a
ação que foi aplicada ao pai para gerar o nó; • n.PATH-COST: o custo,
tradicionalmente denotado por g(n), do caminho desde o estado inicial
para o nó, conforme indicado pelos ponteiros pai.

Dados os componentes de um nó pai, é fácil ver como calcular os componentes necessários para um
nó filho. A função CHILD-NODE pega um nó pai e uma ação e retorna o nó filho resultante:

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

80 Capítulo 3. Resolução de problemas por pesquisa

(a) (b) (c)

Figura 3.9 A propriedade de separação de GRAPH-SEARCH, ilustrada em um problema de grade retangular. A


fronteira (nós brancos) sempre separa a região explorada do espaço de estados (nós pretos) da região inexplorada
(nós cinzas). Em (a), apenas a raiz foi expandida. Em (b), um nó folha foi expandido. Em (c), os sucessores
restantes da raiz foram expandidos no sentido horário.

função CHILD-NODE(problema, pai, ação) retorna um nó retorna um nó com

STATE = problema.RESULT(pai.STATE, ação), PAI = pai,


AÇÃO = ação, PATH-COST = pai.PATH-COST
+ problema.STEP-COST(pai.STATE, ação)

A estrutura de dados do nó é representada na Figura 3.10. Observe como os ponteiros PARENT agrupam
os nós em uma estrutura de árvore. Esses ponteiros também permitem que o caminho da solução seja extraído
quando um nó objetivo é encontrado; usaremos a função SOLUÇÃO para retornar a sequência de ações obtidas
seguindo os ponteiros pais de volta à raiz.
Até agora, não tivemos muito cuidado em distinguir entre nós e estados, mas ao escrever algoritmos
detalhados é importante fazer isso. Um nó é uma estrutura de dados contábeis usada para representar a árvore
de pesquisa. Um estado corresponde a uma configuração do mundo. Assim, os nós estão em caminhos
específicos, conforme definido pelos ponteiros PARENT , enquanto os estados não estão. Além disso, dois nós
diferentes podem conter o mesmo estado mundial, se esse estado for gerado por meio de dois caminhos de
pesquisa diferentes.
Agora que temos nós, precisamos de um lugar para colocá-los. A fronteira precisa ser armazenada de
forma que o algoritmo de busca possa facilmente escolher o próximo nó a ser expandido de acordo com sua
FILA estratégia preferida. A estrutura de dados apropriada para isso é uma fila. As operações em uma fila são as
seguintes:

• VAZIO?(fila) retorna verdadeiro apenas se não houver mais elementos na fila. • POP(queue)

remove o primeiro elemento da fila e o retorna. • INSERT(elemento, fila) insere

um elemento e retorna a fila resultante.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

Seção 3.3. Procurando por soluções 81

PAI

45 45

AÇÃO = Certo
PATH-COST = 6
66 11 88

ESTADO

77 23 23

Figura 3.10 Os nós são as estruturas de dados a partir das quais a árvore de busca é construída. Cada um tem
um pai, um estado e vários campos de contabilidade. As setas apontam do filho para o pai.

As filas são caracterizadas pela ordem em que armazenam os nós inseridos. Três variantes comuns são
FILA FIFO o primeiro a entrar, o primeiro a sair ou a fila FIFO, que abre o elemento mais antigo da fila; a fila de último
LIFO QUEUE a entrar, primeiro a sair ou LIFO (também conhecida como pilha), que abre o elemento mais novo da fila;
FILA DE PRIORIDADE e a fila de prioridade, que retira o elemento da fila com a maior prioridade de acordo com alguma função
de ordenação.
O conjunto explorado pode ser implementado com uma tabela hash para permitir a verificação
eficiente de estados repetidos. Com uma boa implementação, a inserção e a pesquisa podem ser feitas
em tempo aproximadamente constante, independentemente do número de estados armazenados. Deve-
se ter o cuidado de implementar a tabela hash com a noção correta de igualdade entre os estados. Por
exemplo, no problema do caixeiro viajante (página 75), a tabela hash precisa saber que o conjunto de
cidades visitadas {Bucharest,Urziceni,Vaslui} é o mesmo que {Urziceni,Vaslui,Bucharest}. Às vezes, isso
pode ser alcançado mais facilmente insistindo que as estruturas de dados para os estados estejam em
alguma forma CANÔNICA CANÔNICA ; ou seja, estados logicamente equivalentes devem ser mapeados para a mesma
estrutura de dados. No caso de estados descritos por conjuntos, por exemplo, uma representação vetorial
de bits ou uma lista ordenada sem repetição seria canônica, enquanto uma lista não ordenada não.

3.3.2 Medindo o desempenho na solução de problemas

Antes de entrarmos no projeto de algoritmos de busca específicos, precisamos considerar os critérios que
podem ser usados para escolher entre eles. Avaliaremos o desempenho de um algoritmo de quatro
maneiras:

INTEGRALIDADE • Completude: o algoritmo garante que encontrará uma solução quando houver uma? •
OPTIMALIDADE Otimalidade: A estratégia encontra a solução ótima, conforme definido na página 69? •
COMPLEXIDADE DE TEMPO Complexidade de tempo: Quanto tempo leva para encontrar uma
COMPLEXIDADE ESPACIAL solução? • Complexidade do espaço: Quanta memória é necessária para realizar a busca?

A complexidade do tempo e do espaço é sempre considerada em relação a alguma medida da dificuldade


do problema. Em ciência da computação teórica, a medida típica é o tamanho do gráfico de espaço de
estados, |V | + |E|. onde V é o conjunto de vértices (nós) do grafo e E é o conjunto

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

82 Capítulo 3. Resolução de problemas por pesquisa

de arestas (links). Isso é apropriado quando o gráfico é uma estrutura de dados explícita que é inserida no
programa de pesquisa. (O mapa da Romênia é um exemplo disso.) Na IA, o gráfico é muitas vezes representado
implicitamente pelo estado inicial, ações e modelo de transição e é frequentemente infinito. Por estas razões, a
complexidade é expressa em termos de três quantidades: b, o fator BRANCHING FACTOR ou número máximo
de sucessores de qualquer nó; d, a profundidade do nó objetivo mais raso (ou seja, o número de passos ao longo do caminho
PROFUNDIDADE
desde a raiz); e m, o comprimento máximo de qualquer caminho no espaço de estado. O tempo geralmente é
medido em termos do número de nós gerados durante a pesquisa e o espaço em termos do número máximo de
nós armazenados na memória.
Na maior parte, descreveremos a complexidade de tempo e espaço para busca em uma árvore; para um grafo,
a resposta dependerá de quão “redundantes” são os caminhos no espaço de estado.
CUSTO DE PESQUISA Para avaliar a eficácia de um algoritmo de busca, podemos considerar apenas o custo de busca – que
normalmente depende da complexidade do tempo, mas também pode incluir um termo para uso de memória –
CUSTO TOTAL ou podemos usar o custo total, que combina o custo de busca e o caminho custo da solução encontrada. Para
o problema de encontrar uma rota de Arad a Bucareste, o custo de busca é o tempo gasto na busca e o custo
de solução é o comprimento total do caminho em quilômetros. Assim, para calcular o custo total, temos que
somar milissegundos e quilômetros.
Não existe uma “taxa de câmbio oficial” entre os dois, mas pode ser razoável, neste caso, converter quilômetros
em milissegundos usando uma estimativa da velocidade média do carro (porque o tempo é o que importa ao
agente). Isso permite que o agente encontre um ponto de compensação ideal no qual a computação adicional
para encontrar um caminho mais curto se torna contraproducente. O problema mais geral das trocas entre bens
diferentes será abordado no Capítulo 16.

3.4 ESTRATÉGIAS DE BUSCA NÃO INFORMADA

Esta seção cobre várias estratégias de busca que vêm sob o título de busca desinformada (também chamada
DESINFORMADO
PROCURAR de busca cega). O termo significa que eles não têm informações adicionais sobre os estados além dos
BUSCA CEGA fornecidos na definição do problema. Tudo o que podem fazer é gerar sucessores e distinguir um estado objetivo
de um estado sem objetivo. Todas as estratégias de busca são diferenciadas pela ordem em que os nós são
expandidos. As estratégias que sabem se um estado sem objetivo da BUSCA INFORMADA é “mais promissor”
do que outro são chamadas de busca informada ou estratégias de busca heurísticas da BUSCA HEURÍSTICA ; eles serão
abordados na Seção 3.5.

3.4.1 Pesquisa em largura

EM PRIMEIRO LUGAR
PROCURAR A busca em largura é uma estratégia simples na qual o nó raiz é expandido primeiro, depois todos os sucessores
do nó raiz são expandidos em seguida, depois seus sucessores e assim por diante. Em geral, todos os nós são
expandidos em uma determinada profundidade na árvore de busca antes que quaisquer nós no próximo nível
sejam expandidos.
A busca em largura é uma instância do algoritmo geral de busca em grafos (Figura 3.7) em que o nó não
expandido mais raso é escolhido para expansão. Isso é obtido de maneira muito simples usando uma fila FIFO
para a fronteira. Assim, novos nós (que são sempre mais profundos que seus pais) vão para o final da fila e nós
antigos, que são mais rasos que os novos nós,

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

Seção 3.4. Estratégias de pesquisa desinformadas 83

função BREADTH-FIRST-SEARCH(problema) retorna uma solução, ou nó de falha ÿ um nó

com ESTADO = problema.INITIAL-STATE, PATH-COST = 0 se problema.GOAL-


TEST(nó.STATE) então retorne SOLUTION(nó) fronteira ÿ uma fila FIFO com nó
como o único elemento explorado ÿ um loop de conjunto vazio faça
se EMPTY?(frontier ) então
retorne
o nó de falha ÿ POP(frontier ) /* escolhe o nó mais
raso na fronteira */ adiciona node.STATE para explorar cada ação em
problem.ACTIONS(node.STATE)
faça child ÿ CHILD-NODE(problem, node, action) se child.STATE
não estiver em explorado ou fronteira então faça se
problem.GOAL-TEST(child.STATE) então retorne SOLUTION
(criança) fronteira ÿ INSERT(criança,fronteira )

Figura 3.11 Pesquisa em largura em um gráfico.

seja expandido primeiro. Há um pequeno ajuste no algoritmo geral de pesquisa de gráfico, que é que o teste de meta é
aplicado a cada nó quando ele é gerado, e não quando é selecionado para expansão. Essa decisão é explicada a seguir,
onde discutimos a complexidade do tempo. Observe também que o algoritmo, seguindo o modelo geral para busca de
grafos, descarta qualquer novo caminho para um estado já na fronteira ou conjunto explorado; é fácil ver que tal caminho
deve ser pelo menos tão profundo quanto o já encontrado. Assim, a busca em largura sempre tem o caminho mais raso
para cada nó na fronteira.

O pseudocódigo é dado na Figura 3.11. A Figura 3.12 mostra o progresso da busca em uma árvore binária
simples.
Qual é a classificação da pesquisa em largura de acordo com os quatro critérios da seção anterior? Podemos
ver facilmente que ele está completo - se o nó objetivo mais raso estiver em alguma profundidade finita d, a busca em
largura acabará por encontrá-lo depois de gerar todos os nós mais rasos (desde que o fator de ramificação b seja finito).
Observe que assim que um nó objetivo é gerado, sabemos que é o nó objetivo mais raso porque todos os nós mais rasos
já devem ter sido gerados e falharam no teste de objetivo. Agora, o nó objetivo mais raso não é necessariamente o
ótimo ; tecnicamente, a busca em largura é ótima se o custo do caminho for uma função não decrescente da profundidade
do nó. O cenário mais comum é quando todas as ações têm o mesmo custo.

A A A A

B C B C B C B C

D E FG D E FG D E FG D E FG

Figura 3.12 Pesquisa em largura em uma árvore binária simples. Em cada etapa, o próximo nó a ser expandido é
indicado por um marcador.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

84 Capítulo 3. Resolução de problemas por pesquisa

Até agora, as notícias sobre a busca em largura têm sido boas. As notícias sobre tempo e espaço não
são tão boas. Imagine pesquisar uma árvore uniforme onde cada estado tem b sucessores.
A raiz da árvore de busca gera b nós no primeiro nível, cada um dos quais gera mais b nós, para um total de b
2 3
nós no terceiro nível, e no segundo nível. Cada um deles gera b mais nós, produzindo b
assim por diante. Agora suponha que a solução esteja na profundidade d. No pior caso, é o último nó gerado
naquele nível. Então o número total de nós gerados é
23db+b+b+··· d
+b = O(b ).

(Se o algoritmo aplicasse o teste de objetivo aos nós quando selecionados para expansão, em vez de quando
gerados, toda a camada de nós na profundidade d seria expandida antes de detectar o objetivo, e a complexidade
de tempo seria O(b d+1 ).)
Quanto à complexidade espacial: para qualquer tipo de busca em grafos, que armazena cada nó
expandido no conjunto explorado , a complexidade espacial está sempre dentro de um fator b da complexidade
temporal. Para busca em grafos em largura em particular, cada nó gerado permanece na memória. Haverá O(b
dÿ1 d
a complexidade do espaço é O(b ) nós no conjunto explorado e O(b ) nós na fronteira, então ), ou
d
uma busca em árvore não seja, é dominado pelo tamanho da fronteira. Mudando para
economizaria muito espaço, e em um espaço de estado com muitos caminhos redundantes poderia custar muito
tempo.
d
Um limite de complexidade exponencial como O(b ) é assustador. A Figura 3.13 mostra o porquê.
Ele lista o tempo e a memória necessários para uma pesquisa em largura com fator de ramificação b = 10, para
vários valores da profundidade da solução d. A tabela assume que 100.000 nós podem ser gerados por segundo
e que um nó requer 1.000 bytes de armazenamento. Muitos problemas de pesquisa se encaixam aproximadamente
nessas suposições (mais ou menos um fator de 100) quando executados em um computador pessoal moderno.

Profundidade Nós Tempo Memória

2 110 1,1 milissegundos 107 kilobytes


4 11.110 111 milissegundos 10,6 megabytes 1
6 106 11 segundos gigabyte 103
8 108 19 minutos gigabytes 10
10 1010 31 horas terabytes 1
12 1012 129 dias petabytes 99
14 1014 35 anos petabytes 10
16 1016 3.500 anos exabytes

Figura 3.13 Requisitos de tempo e memória para busca em largura. Os números mostrados assumem fator de
ramificação b = 10; 100.000 nós/segundo; 1000 bytes/nó.

Há duas lições a serem aprendidas da Figura 3.13. Primeiro, os requisitos de memória são um problema
maior para a busca em largura do que o tempo de execução. 31 horas não seria muito tempo para esperar a
solução de um problema importante de profundidade 10, mas poucos computadores têm os 10 terabytes de
memória principal necessários. Felizmente, existem outras estratégias de pesquisa que requerem menos
memória.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

Seção 3.4. Estratégias de pesquisa desinformadas 85

a função UNIFORM-COST-SEARCH(problema) retorna uma solução ou nó de falha ÿ um nó

com STATE = problema.INITIAL-STATE, PATH-COST = 0 fronteira ÿ uma fila de prioridade


ordenada por PATH-COST, com o nó como único elemento explorado ÿ um loop de conjunto vazio
faça se EMPTY?(frontier )
então
retorne o nó de falha ÿ POP(frontier ) /* escolhe o
nó de menor custo na fronteira */ se problem.GOAL-TEST(node.STATE) então retorne
SOLUTION(node ) para cada ação no problema.ACTIONS(node.STATE) faça filho ÿ
CHILD-NODE(problema, nó, ação) se filho.STATE não estiver na
fronteira explorada ou explorada, adicione filho.STATE à
fronteira explorada ÿ INSERT(filho,fronteira ) caso
contrário, se child.STATE estiver
na fronteira com PATH-COST mais alto ,
substitua esse nó de fronteira por child

Figura 3.14 Pesquisa de custo uniforme em um grafo. O algoritmo é idêntico ao algoritmo geral de busca em grafos
da Figura 3.7, exceto pelo uso de uma fila de prioridade e pela adição de uma verificação extra caso um caminho
mais curto seja descoberto para um estado de fronteira. A estrutura de dados explorada precisa suportar testes
de associação eficientes, portanto, deve combinar os recursos de uma fila de prioridade e uma tabela de hash.

A segunda lição é que os requisitos de tempo ainda são um fator importante. Se o seu problema tiver uma solução
na profundidade 16, então (dadas as nossas suposições) levará cerca de 3.500 anos para uma pesquisa em largura (ou
mesmo qualquer pesquisa desinformada) para encontrá-lo. Em geral, os problemas de busca de complexidade
exponencial não podem ser resolvidos por métodos desinformados, exceto para instâncias menores.

3.4.2 Pesquisa de custo uniforme

A busca em largura é ótima quando todos os custos de passo são iguais, porque sempre expande o nó não expandido
mais raso . Por uma extensão simples, podemos encontrar um algoritmo ótimo com qualquer função de custo de passo.
CUSTO UNIFORME
PROCURAR
Em vez de expandir o nó mais raso, a busca de custo uniforme expande o nó n com o menor custo de caminho g(n).
Isso é feito armazenando a fronteira como uma fila de prioridade ordenada por g. O algoritmo é mostrado na Figura 3.14.

Além da ordenação da fila pelo custo do caminho, há duas outras diferenças significativas em relação à busca
em largura. A primeira é que o teste de objetivo é aplicado a um nó quando ele é selecionado para expansão (como no
algoritmo de busca de grafo genérico mostrado na Figura 3.7) e não quando é gerado pela primeira vez. A razão é que o
primeiro nó objetivo gerado pode estar em um caminho abaixo do ideal. A segunda diferença é que um teste é adicionado
caso um caminho melhor seja encontrado para um nó atualmente na fronteira.

Ambas as modificações entram em jogo no exemplo mostrado na Figura 3.15, onde o problema é ir de Sibiu a
Bucareste. Os sucessores de Sibiu são Rimnicu Vilcea e Fagaras, com custos de 80 e 99 respectivamente. O nó de
menor custo, Rimnicu Vilcea, é expandido

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

86 Capítulo 3. Resolução de problemas por pesquisa

Sibiu Fagaras
99

80
Rimnicu Vilcea

211
Pitesti
97

101

Bucareste

Figura 3.15 Uma parte do espaço de estados da Romênia, selecionada para ilustrar a busca de custo uniforme.

em seguida, adicionando Pitesti com custo 80+97 = 177. O nó de menor custo agora é Fagaras, então ele é
expandido, adicionando Bucareste com custo 99+211 = 310. Agora um nó objetivo foi gerado, mas a busca de
custo uniforme continua indo, escolhendo Pitesti para expansão e adicionando um segundo caminho para Bucareste
com custo 80+97+101 = 278. Agora o algoritmo verifica se esse novo caminho é melhor que o antigo; é, então o
antigo é descartado. Bucareste, agora com g-cost 278, é selecionada para expansão e a solução é devolvida.

É fácil ver que a busca de custo uniforme é ótima em geral. Primeiro, observamos que sempre que a busca
de custo uniforme seleciona um nó n para expansão, o caminho ótimo para esse nó foi encontrado. (Se não fosse
ÿ
esse o caso, teria que haver outro nó de fronteira no caminho ótimo do nó inicial até n, pela propriedade de sobre

separação do grafo da Figura 3.9; por definição, n teria custo-g menor que n e teria foi selecionado primeiro.) Então,
ÿ
como os custos das etapas não são negativos, os caminhos nunca ficam mais curtos à medida que os nós são
adicionados. Esses dois fatos juntos implicam que a busca de custo uniforme expande os nós na ordem de seu
custo de caminho ótimo. Portanto, o primeiro nó objetivo selecionado para expansão deve ser a solução ótima.

A busca de custo uniforme não se preocupa com o número de passos que um caminho tem, mas apenas
com seu custo total. Portanto, ele ficará preso em um loop infinito se houver um caminho com uma sequência
infinita de ações de custo zero, por exemplo, uma sequência de ações NoOp.6 A completude é garantida desde
que o custo de cada etapa seja maior ou igual a alguma pequena constante positiva ÿ.

A busca de custo uniforme é guiada por custos de caminho ao invés de profundidades, então sua
complexidade não pode ser facilmente caracterizada em termos de b e d. Em vez disso, seja C ÿ o custo da solução
ótima e assuma que cada ação custa pelo menos ÿ. Então, a complexidade de tempo e espaço de pior caso do
d
algoritmo é O(b 1+ÿCÿ/ÿÿ ), que pode ser muito maior do que a busca b . Isso ocorre porque o custo uniforme

pode, e frequentemente o faz, explorar grandes árvores de pequenos passos antes de explorar caminhos
envolvendo grandes e passos talvez úteis. Quando todos os custos das etapas são iguais, b 1+ÿCÿ/ÿÿ é apenas b
d
d+1. Observe que isso é um pouco pior do que a complexidade b para busca em largura, porque a última aplica o
teste de objetivo a cada nó à medida que é gerado e, portanto, não expande os nós na profundidade d.

6
NoOp, ou “sem operação”, é o nome de uma instrução em linguagem assembly que não faz nada.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

Seção 3.4. Estratégias de pesquisa desinformadas 87

A A A

B C B C B C

D E F G D E F G D E F G

HIJKLMNO OI JKLMNO OI JKLMNO

A A A

B C B C C

D E F G D E F G E F G

OI JKLMNO EU
JKLMNO JKLMNO

A A

C B C C

E F G E F G F G

JK LMNO K LMNO LMNO

A A A

C C C

F G F G F G

LMNO LM NÃO M NÃO

Figura 3.16 Pesquisa em profundidade em uma árvore binária. A região inexplorada é mostrada em cinza claro.
Os nós explorados sem descendentes na fronteira são removidos da memória. Os nós na profundidade 3 não têm
sucessores e M é o único nó objetivo.

3.4.3 Pesquisa em profundidade


PROFUNDIDADE PRIMEIRO

PROCURAR A busca em profundidade sempre expande o nó mais profundo na fronteira atual da árvore de busca.
O progresso da busca é ilustrado na Figura 3.16. A busca prossegue imediatamente para o nível mais profundo da árvore
de busca, onde os nós não possuem sucessores. À medida que esses nós são expandidos, eles são descartados da
fronteira, então a busca “volta” para o próximo nó mais profundo que ainda possui sucessores inexplorados.

O algoritmo de busca em profundidade é uma instância do algoritmo de busca em grafo da Figura 3.7; enquanto
a busca em largura usa uma fila FIFO, a busca em profundidade usa uma fila LIFO.
Uma fila LIFO significa que o nó gerado mais recentemente é escolhido para expansão. Este deve ser o nó não expandido
mais profundo, porque é um nó mais profundo que seu pai - que, por sua vez, era o nó não expandido mais profundo
quando foi selecionado.
Como alternativa à implementação do estilo GRAPH-SEARCH , é comum implementar a busca em profundidade
com uma função recursiva que chama a si mesma em cada um de seus filhos. (Um algoritmo recursivo de profundidade
incorporando um limite de profundidade é mostrado na Figura 3.17.)

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

88 Capítulo 3. Resolução de problemas por pesquisa

As propriedades da pesquisa em profundidade dependem fortemente se a versão de pesquisa em gráfico


ou pesquisa em árvore é usada. A versão de pesquisa em grafo, que evita estados repetidos e caminhos
redundantes, é completa em espaços de estado finitos porque eventualmente expandirá todos os nós. A versão
de busca em árvore, por outro lado, não está completa – por exemplo, na Figura 3.6, o algoritmo seguirá o loop
Arad–Sibiu–Arad–Sibiu para sempre. A busca em profundidade na árvore pode ser modificada sem custo extra
de memória para que ela compare novos estados com aqueles no caminho desde a raiz até o nó atual; isso evita
loops infinitos em espaços de estado finitos, mas não evita a proliferação de caminhos redundantes. Em espaços
de estados infinitos, ambas as versões falham se um caminho infinito sem objetivo for encontrado. Por exemplo,
no problema 4 de Knuth, a busca em profundidade continuaria aplicando o operador fatorial para sempre.

Por motivos semelhantes, ambas as versões não são ideais. Por exemplo, na Figura 3.16, a primeira
busca em profundidade explorará toda a subárvore esquerda, mesmo que o nó C seja um nó objetivo. Se o nó J
também fosse um nó objetivo, a pesquisa em profundidade o retornaria como uma solução em vez de C, que
seria uma solução melhor; portanto, a busca em profundidade não é ideal.
A complexidade de tempo da busca em profundidade em grafos é limitada pelo tamanho do espaço de
estado (que pode ser infinito, é claro). Uma busca em árvore em profundidade, por outro lado, pode gerar todos
os nós O(b m) na árvore de busca, onde m é a profundidade máxima de qualquer nó; isso pode ser muito maior
do que o tamanho do espaço de estado. Observe que m em si pode ser muito maior que d (a profundidade da
solução mais rasa) e é infinito se a árvore for ilimitada.
Até agora, a busca em profundidade parece não ter nenhuma vantagem clara sobre a busca em largura,
então por que incluí-la? A razão é a complexidade do espaço. Para uma busca em grafo, não há vantagem, mas
uma busca em profundidade na árvore precisa armazenar apenas um único caminho da raiz até um nó folha,
junto com os nós irmãos não expandidos restantes para cada nó no caminho. Depois que um nó é expandido,
ele pode ser removido da memória assim que todos os seus descendentes forem totalmente explorados. (Veja a
Figura 3.16.) Para um espaço de estado com fator de ramificação b e profundidade máxima m, a busca em
profundidade requer o armazenamento de apenas O(bm) nós.
Usando as mesmas suposições da Figura 3.13 e supondo que os nós na mesma profundidade do nó objetivo
não tenham sucessores, descobrimos que a busca em profundidade exigiria 156 kilobytes em vez de 10 exabytes
na profundidade d = 16, um fator de 7 trilhões vezes menos espaço. Isso levou à adoção da busca em árvore
em profundidade como o burro de carga básico de muitas áreas da IA, incluindo satisfação de restrições (Capítulo
6), satisfatibilidade proposicional (Capítulo 7) e programação lógica (Capítulo 9). No restante deste capítulo,
vamos nos concentrar principalmente na versão de pesquisa em árvore da pesquisa em profundidade.

VOLTAR
PROCURAR
Uma variante da busca em profundidade chamada busca retroativa usa ainda menos memória. (Consulte
o Capítulo 6 para obter mais detalhes.) No retrocesso, apenas um sucessor é gerado por vez, em vez de todos
os sucessores; cada nó parcialmente expandido lembra qual sucessor gerar em seguida. Dessa forma, apenas
a memória O(m) é necessária em vez de O(bm). A pesquisa retroativa facilita ainda outro truque para economizar
memória (e economizar tempo): a ideia de gerar um sucessor modificando a descrição do estado atual
diretamente, em vez de copiá-lo primeiro. Isso reduz os requisitos de memória para apenas uma descrição de
estado e ações O(m) . Para que isso funcione, devemos ser capazes de desfazer cada modificação quando
voltarmos para gerar o próximo sucessor. Para problemas com grandes descrições de estado, como montagem
robótica, essas técnicas são críticas para o sucesso.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

Seção 3.4. Estratégias de pesquisa desinformadas 89

função DEPTH-LIMITED-SEARCH(problema, limite) retorna uma solução, ou falha/corte retorna RECURSIVE-


DLS(MAKE-NODE(problem.INITIAL-STATE), problema, limite)

função RECURSIVE-DLS(nó, problema, limite) retorna uma solução ou falha/corte


se problema.GOAL-TEST(node.STATE) então retorne SOLUTION(node) caso
contrário se limite = 0 então retorne corte
caso
contrário corte ocorreu?
ÿfalse para cada ação no problema.ACTIONS(node.STATE) do
filho ÿ CHILD-NODE( problema, nó, ação) resultado ÿ
RECURSIVE-DLS(filho, problema, limite ÿ 1) se resultado = corte
então ocorreu corte?ÿ verdadeiro caso contrário se
resultado = falha então retorna o resultado se
ocorreu corte? em seguida, retorno de corte caso contrário, retorno de falha

Figura 3.17 Uma implementação recursiva de busca em árvore com profundidade limitada.

3.4.4 Pesquisa de profundidade limitada

A falha embaraçosa da busca em profundidade em espaços de estado infinitos pode ser aliviada ao fornecer a busca em
profundidade com um limite de profundidade predeterminado ÿ. Ou seja, nós em profundidade ÿ são tratados como se não
PROFUNDIDADE LIMITADA

PROCURAR
tivessem sucessores. Essa abordagem é chamada de busca limitada em profundidade. O limite de profundidade resolve
o problema do caminho infinito. Infelizmente, também introduz uma fonte adicional de incompletude se escolhermos ÿ < d,
ou seja, o objetivo mais raso está além do limite de profundidade. (Isso não é improvável quando d é desconhecido.) A busca
limitada por profundidade também não será ótima se escolhermos ÿ > d. Sua complexidade de tempo é O(b primeira busca
ÿ
pode ser vista como um caso especial de busca limitada em ) e sua complexidade espacial é O(bÿ). Profundidade
profundidade com ÿ = ÿ.
Às vezes, os limites de profundidade podem ser baseados no conhecimento do problema. Por exemplo, no mapa da
Romênia existem 20 cidades. Portanto, sabemos que se houver uma solução, ela deve ter no máximo 19 comprimento,
então ÿ = 19 é uma escolha possível. Mas, na verdade, se estudássemos o mapa com cuidado, descobriríamos que qualquer
cidade pode ser alcançada a partir de qualquer outra cidade em no máximo 9 passos. Esse número, conhecido como o
DIÂMETRO diâmetro do espaço de estado, nos dá um melhor limite de profundidade, o que leva a uma busca limitada por profundidade
mais eficiente. Para a maioria dos problemas, no entanto, não saberemos um bom limite de profundidade até que tenhamos
resolvido o problema.
A busca limitada por profundidade pode ser implementada como uma modificação simples na árvore geral ou
algoritmo de busca em grafos. Alternativamente, pode ser implementado como um algoritmo recursivo simples, conforme
mostrado na Figura 3.17. Observe que a pesquisa limitada em profundidade pode terminar com dois tipos de falha: o valor
de falha padrão indica nenhuma solução; o valor de corte indica nenhuma solução dentro do limite de profundidade.

3.4.5 Aprofundamento iterativo busca em profundidade

ITERATIVO
PESQUISA APROFUNDADA
A busca iterativa de aprofundamento (ou busca iterativa de aprofundamento em profundidade) é uma estratégia geral,
frequentemente usada em combinação com a busca em árvore de profundidade, que encontra o melhor limite de profundidade. faz

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

90 Capítulo 3. Resolução de problemas por pesquisa

isso aumentando gradualmente o limite - primeiro 0, depois 1, depois 2 e assim por diante - até que um objetivo seja encontrado.
Isso ocorrerá quando o limite de profundidade atingir d, a profundidade do nó objetivo mais raso. O algoritmo é
mostrado na Figura 3.18. O aprofundamento iterativo combina os benefícios da pesquisa em profundidade e em
largura. Como a pesquisa em profundidade, seus requisitos de memória são muito modestos: O(bd) para ser
mais preciso. Assim como a busca em largura, ela é completa quando o fator de ramificação é finito e ótima
quando o custo do caminho é uma função não decrescente da profundidade do nó.
A Figura 3.19 mostra quatro iterações de ITERATIVE-DEEPENING-SEARCH em uma árvore de busca binária,
onde a solução é encontrada na quarta iteração.
A pesquisa de aprofundamento iterativo pode parecer um desperdício, porque os estados são gerados
várias vezes. Acontece que isso não é muito caro. A razão é que em uma árvore de busca com o mesmo (ou
quase o mesmo) fator de ramificação em cada nível, a maioria dos nós está no nível inferior, então não importa
muito que os níveis superiores sejam gerados múltiplas vezes. Em uma busca iterativa de aprofundamento, os
nós do nível inferior (profundidade d) são gerados uma vez, os do próximo ao nível inferior são gerados duas
vezes, e assim por diante, até os filhos da raiz, que são gerados d vezes. Portanto, o número total de nós
gerados no pior caso é

2 d
N(IDS) = (d)b + (d ÿ 1)b + · · · + (1)b ,

o que dá uma complexidade de tempo de O(b d )—assintoticamente o mesmo que a busca em largura.
Há algum custo extra para gerar os níveis superiores várias vezes, mas não é grande. Por exemplo, se b = 10 e
d = 5, os números são

N(IDS) = 50 + 400 + 3, 000 + 20, 000 + 100, 000 = 123, 450 N(BFS) = 10 + 100

+ 1, 000 + 10, 000 + 100, 000 = 111, 110 .

Em geral, o aprofundamento iterativo é o método de busca desinformado preferido quando há um grande espaço
de busca e a profundidade da solução não é conhecida.
A busca de aprofundamento iterativo é análoga à busca em largura, pois explora uma camada completa
de novos nós em cada iteração antes de passar para a próxima camada. Parece valer a pena desenvolver um
analógico iterativo para a busca de custo uniforme, herdando as garantias de otimalidade do último algoritmo
enquanto evita seus requisitos de memória. A ideia é usar limites de custo de caminho crescentes em vez de
limites de profundidade crescentes. O algoritmo resultante, chamado de busca de alongamento iterativo, é
ITERATIVO
ALONGAMENTO explorado no Exercício 3.24. Acontece, infelizmente, que o alongamento iterativo incorre em sobrecarga
PROCURAR

substancial em comparação com a pesquisa de custo uniforme.

função ITERATIVE-DEEPENING-SEARCH(problema) retorna uma solução, ou falha para profundidade


= 0 a ÿ do resultado ÿ
DEPTH-LIMITED-SEARCH(problema, profundidade) se resultado
= corte então retorna o resultado

Figura 3.18 O algoritmo de busca de aprofundamento iterativo, que aplica repetidamente a busca de profundidade
limitada com limites crescentes. Ele termina quando uma solução é encontrada ou se a busca limitada por
profundidade retornar uma falha, significando que não existe solução.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

Seção 3.4. Estratégias de pesquisa desinformadas 91

A A
Limite = 0

A A A
Limite = 1 A

B C B C B C B C

A A A A
Limite = 2
B C B C B C B C

D E F G D E F G D E F G D E F G

A A A A

B C B C B C B C

D E F G D E F G D E F G D E F G

A A A A
Limite = 3
B C B C B C B C

D E F G D E F G D E F G D E F G

OI JKLMNO OI JKLMNO H EU JKLMNO H eu JKLMNO

A A A A

B C B C B C B C

D E F G D E F G D E F G D E F G

H eu JKLMNO H eu JKLMNO OI JK LMNO OI JK LMNO

A A A A

B C B C B C B C

D E F G D E F G D E F G D E F G

OI JK LMNO OI JK LMNO OI JKLM NÃO OI JKLM NÃO

Figura 3.19 Quatro iterações de busca de aprofundamento iterativo em uma árvore binária.

3.4.6 Pesquisa bidirecional

A ideia por trás da pesquisa bidirecional é executar duas pesquisas simultâneas - uma para frente de
o estado inicial e o outro para trás do objetivo - parando quando as duas buscas se encontram no
meio (Figura 3.20). A motivação é que b d/2 + b d/2 é muito menor que a figura b , a d ou no
,

área dos dois pequenos círculos é menor que a área de um grande círculo centrado no início e
alcançando o objetivo.
A busca bidirecional é implementada substituindo o teste de objetivo por uma verificação para
ver se as fronteiras das duas buscas se cruzam; se o fizerem, uma solução foi encontrada. A
verificação pode ser feita quando cada nó é gerado ou selecionado para expansão e, com uma
tabela de hash, a verificação levará um tempo constante. Por exemplo, se um problema tem
profundidade de solução d = 6, e cada direção executa a busca em largura um nó por vez, então, no pior caso, os d

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

92 Capítulo 3. Resolução de problemas por pesquisa

Começar Meta

Figura 3.20 Uma visão esquemática de uma busca bidirecional que está prestes a ser bem-sucedida,
quando uma ramificação do nó inicial encontra uma ramificação do nó objetivo.

as buscas se encontram quando geraram todos os nós na profundidade 3. Para b = 10, isso significa um total de
2.220 gerações de nós, em comparação com 1.111.110 para uma busca padrão em largura.
Assim, a complexidade de tempo da busca bidirecional usando buscas em largura em ambas as direções é O(b
d/2 ). A complexidade do espaço também é O(b d/2 ). Podemos reduzir isso pela metade se uma das duas buscas
for feita usando aprofundamento iterativo, mas pelo menos uma das fronteiras deve ser mantida na memória para
que a verificação da interseção possa ser feita. Esse requisito de espaço é a fraqueza mais significativa da pesquisa
bidirecional. O algoritmo é completo e ótimo (para custos de passos uniformes) se ambas as buscas forem em
largura; outras combinações podem sacrificar a completude, a otimização ou ambas.

A redução na complexidade do tempo torna a busca bidirecional atrativa, mas como buscamos de trás para
PREDECESSORES frente? Isso não é tão fácil quanto parece. Sejam os predecessores de um estado x todos os estados que têm x
como sucessor. A pesquisa bidirecional requer um método para calcular os predecessores. O caso mais fácil é
quando todas as ações no espaço de estado são reversíveis, de modo que os predecessores de x são os mesmos
que seus sucessores. Outros casos podem exigir engenhosidade substancial.

Considere a questão do que queremos dizer com “o objetivo” ao pesquisar “para trás do objetivo”. Para o
quebra-cabeça de 8 e para encontrar uma rota na Romênia, há apenas um estado objetivo, então a busca
regressiva é muito parecida com a busca direta. Se houver vários estados de objetivo explicitamente listados - por
exemplo, os dois estados de objetivo sem sujeira na Figura 3.3 - então podemos construir um novo estado de
objetivo fictício cujos predecessores imediatos são todos os estados de objetivo reais. Como alternativa, algumas
gerações de nós redundantes podem ser evitadas visualizando o conjunto de estados de objetivo como um único
estado, cada um dos quais predecessores também é um conjunto de estados—especificamente, o conjunto de
estados tendo um sucessor correspondente no conjunto de estados de objetivo. (Consulte também a Seção 4.3.)
O caso mais difícil para busca bidirecional é quando o teste de objetivo fornece apenas uma descrição
implícita de algum conjunto possivelmente grande de estados de objetivo – por exemplo, todos os estados que são
soluções para o problema das n-rainhas . Uma busca regressiva precisaria construir descrições compactas de
“todos os estados que estão a uma rainha de serem soluções” e assim por diante; e essas descrições teriam que
ser testadas contra os estados gerados pela busca direta. Não há uma maneira geral de fazer isso com eficiência.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

Seção 3.5. Estratégias de Pesquisa Informada (Heurística) 93

3.4.7 Comparando estratégias de busca desinformadas

A Figura 3.21 compara as estratégias de busca em termos dos quatro critérios de avaliação estabelecidos na Seção
3.4. Esta comparação é para versões de pesquisa em árvore. Para buscas em grafos, as principais diferenças são
que a busca em profundidade é completa para espaços de estado finitos e que as complexidades de espaço e
tempo são limitadas pelo tamanho do espaço de estado.

Largura- Uniforme- Profundidade- Profundidade- Iterativo Bidirecional


Critério
Primeiro Custo Primeiro Aprofundamento limitado (se aplicável)

Completo? Sim, um sim,b Não Não sim _ sim, d


d ÿ
Tempo O(b ) O(b 1+ÿC ÿ/ÿÿ ) O(b m) O(b ) O(b ) O(b d/2 )
d
Espaço O(b ) O(b 1+ÿC ÿ/ÿÿ ) O(bm) O(bÿ) O(bd) O(b d/2 )
ideal? simc Sim Não Não simc simc,d

Figura 3.21 Avaliação das estratégias de busca em árvore. b é o fator de ramificação; d é a profundidade da solução
mais rasa; m é a profundidade máxima da árvore de busca; l é o limite de profundidade.
b
As advertências sobrescritas são as seguintes: a completo se b for finito; complete se o passo custar ÿ ÿ para ÿ positivo;
d
c ótimo se os custos das etapas forem todos idênticos; se ambas as direções usarem a busca em largura.

3.5 ESTRATÉGIAS DE BUSCA INFORMADA (HEURÍSTICA)

PESQUISA INFORMADA Esta seção mostra como uma estratégia de pesquisa informada – que usa o conhecimento específico do
problema além da definição do problema em si – pode encontrar soluções com mais eficiência do que uma estratégia
desinformada.
MELHOR-PRIMEIRA PESQUISA A abordagem geral que consideraremos é chamada de pesquisa do melhor primeiro. A busca do melhor
primeiro é uma instância do algoritmo geral TREE-SEARCH ou GRAPH-SEARCH em que um nó é selecionado para
AVALIAÇÃO
FUNÇÃO
expansão com base em uma função de avaliação, f(n). A função de avaliação é interpretada como uma estimativa
de custo, então o nó com a avaliação mais baixa é expandido primeiro. A implementação da busca do melhor
primeiro é idêntica à da busca de custo uniforme (Figura 3.14), exceto pelo uso de f em vez de g para ordenar a fila
de prioridade.
A escolha de f determina a estratégia de busca. (Na verdade, como mostra o Exercício 3.33, a melhor
primeira busca inclui largura primeiro, profundidade primeiro e busca de custo uniforme como casos especiais.) A
HEURÍSTICA
FUNÇÃO
maioria dos algoritmos de melhor primeiro inclui como um componente de f uma função heurística , denotada h ( n ):

h(n) = custo estimado do caminho mais barato do estado no nó n para um estado objetivo.

(Observe que h(n) toma um nó como entrada, mas, ao contrário de g(n), depende apenas do estado naquele nó.)
Por exemplo, na Romênia, pode-se estimar o custo do caminho mais barato de Arad para Bucareste em linha reta
distância de Arad a Bucareste.
As funções heurísticas são a forma mais comum na qual o conhecimento adicional do problema é transmitido
ao algoritmo de busca. Estudaremos as heurísticas com mais profundidade na Seção 3.6. Por enquanto, vamos
considerá-los arbitrários, não negativos, específicos do problema.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

94 Capítulo 3. Resolução de problemas por pesquisa

funções, com uma restrição: se n é um nó objetivo, então h(n) = 0. O restante desta seção abrange duas
maneiras de usar informações heurísticas para guiar a pesquisa.

3.5.1 Busca gulosa pelo melhor primeiro

GREEDY MELHOR-PRIMEIRO
PROCURAR
Greedy best-first search7 tenta expandir o nó que está mais próximo do objetivo, alegando que isso
provavelmente levará a uma solução rapidamente. Assim, avalia os nós usando apenas a função heurística: f(n)
= h(n).
Vamos ver como isso funciona para problemas de localização de rotas na Romênia, usando a heurística
LINHA RETA
DISTÂNCIA
de distância em linha reta , que chamaremos de hSLD . Se o objetivo for Bucareste, precisaremos saber
as distâncias em linha reta até Bucareste, que são mostradas na Figura 3.22. Por exemplo, hSLD (In(Arad)) =
366. Observe que os valores de hSLD não podem ser calculados a partir da própria descrição do problema.
Além disso, é necessário um certo nível de experiência para saber que hSLD está correlacionado com distâncias
rodoviárias reais e é, portanto, uma heurística útil.

Arad 366 Mehadia 241


Bucareste Neamt 234
Craiova 0 Oradea 380
Drobeta 160 Pitesti 100
Eforie 242 Rimnicu Vilcea 193
Fagaras 161 176 Sibiu 253
Giurgiu 77 Timisoara 329
Hirsova 151 Urziceni 80
Iasi 226 Vaslui 199
Lugoj 244 Zerind 374

Figura 3.22 Valores de hSLD — distâncias em linha reta para Bucareste.

A Figura 3.23 mostra o progresso de uma busca gulosa do melhor primeiro usando hSLD para encontrar
um caminho de Arad a Bucareste. O primeiro nó a ser expandido de Arad será Sibiu, porque está mais perto de
Bucareste do que Zerind ou Timisoara. O próximo nó a ser expandido será Fagaras, por ser o mais próximo.
Fagaras, por sua vez, gera Bucareste, que é o objetivo.
Para este problema específico, a busca gulosa do melhor primeiro usando hSLD encontra uma solução sem
nunca expandir um nó que não esteja no caminho da solução; portanto, seu custo de pesquisa é mínimo. Não é
ideal, no entanto: o caminho via Sibiu e Fagaras para Bucareste é 32 quilômetros mais longo do que o caminho
através de Rimnicu Vilcea e Pitesti. Isso mostra por que o algoritmo é chamado de “ganancioso” – a cada passo
ele tenta chegar o mais próximo possível do objetivo.
A busca gananciosa do melhor primeiro em árvore também é incompleta mesmo em um espaço de estado
finito, muito parecido com a busca em profundidade. Considere o problema de ir de Iasi a Fagaras. A heurística
sugere que Neamt seja expandido primeiro, por ser o mais próximo de Fagaras, mas é um beco sem saída. A
solução é ir primeiro para Vaslui - um passo que está realmente mais longe do objetivo de acordo com a
heurística - e depois continuar para Urziceni, Bucareste e Fagaras. O algoritmo nunca encontrará essa solução,
no entanto, porque a expansão de Neamt coloca Iasi de volta na fronteira,

7 Nossa primeira edição chamou essa busca gananciosa; outros autores chamaram isso de pesquisa do melhor primeiro.
Nosso uso mais geral do último termo segue Pearl (1984).

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

Seção 3.5. Estratégias de Pesquisa Informada (Heurística) 95

(a) O estado inicial Arad


366

(b) Depois de expandir Arad Arad

Sibiu Timisoara Zerind


253 329 374

(c) Depois de expandir Sibiu Arad

Sibiu Timisoara Zerind


329 374

Arad Fagaras Oradea Rimnicu Vilcea

366 176 380 193

(d) Depois de expandir Fagaras Arad

Sibiu Timisoara Zerind


329 374

Arad Fagaras Oradea Rimnicu Vilcea

366 380 193

Sibiu Bucareste
253 0

Figura 3.23 Estágios em uma busca gulosa da melhor primeira árvore para Bucareste usando a heurística
de distância em linha reta hSLD . Os nós são rotulados com seus valores h.

Iasi está mais perto de Fagaras do que Vaslui, e assim Iasi será expandido novamente, levando a um loop
infinito. (A versão de busca do grafo é completa em espaços finitos, mas não em espaços infinitos.) A
complexidade de tempo e espaço de pior caso para a versão em árvore é O(b m), onde m é a profundidade
máxima do espaço de busca. Com uma boa função heurística, no entanto, a complexidade pode ser reduzida
substancialmente. O valor da redução depende do problema particular e da qualidade da heurística.

3.5.2 Pesquisa A*: Minimizando o custo total estimado da solução


ÿ ÿ
A PROCURAR A forma mais conhecida de pesquisa do melhor primeiro é chamada A search (pronuncia-se “A-star search”). Ele
avalia os nós combinando g(n), o custo para alcançar o nó, e h(n), o custo

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

96 Capítulo 3. Resolução de problemas por pesquisa

para ir do nó ao objetivo:

f(n) = g(n) + h(n) .

Como g(n) fornece o custo do caminho do nó inicial ao nó n, e h(n) é o custo estimado do caminho mais barato
de n até o objetivo, temos f(n) = custo estimado da solução

mais barata através n .

Assim, se estivermos tentando encontrar a solução mais barata, é razoável tentar primeiro o nó com o menor
valor de g(n) + h(n). Acontece que essa estratégia é mais do que razoável: desde que a função heurística h(n)
satisfaça certas condições, a busca Aÿ é completa e ótima. O algoritmo é idêntico ao UNIFORM-COST-SEARCH
exceto que Aÿ usa g + h ao invés de g.

Condições de otimização: Admissibilidade e consistência


ADMISSÍVEL
HEURÍSTICA A primeira condição que exigimos para otimização é que h(n) seja uma heurística admissível. Uma heurística
admissível é aquela que nunca superestima o custo para atingir a meta. Como g(n) é o custo real para atingir n,
e f(n) = g(n) + h(n), temos como consequência imediata que f(n) nunca superestima o custo real de uma solução
através de n.
As heurísticas admissíveis são otimistas por natureza, porque pensam que o custo de resolver o problema
é menor do que realmente é. Um exemplo óbvio de uma heurística admissível é a distância em linha reta hSLD
que usamos para chegar a Bucareste. A distância em linha reta é admissível porque o caminho mais curto entre
quaisquer dois pontos é uma linha reta, então a linha reta não pode ser superestimada. Na Figura 3.24,
mostramos o progresso de uma busca em árvore Aÿ para Bucareste. Os valores de g são calculados a partir dos
custos da etapa na Figura 3.2, e os valores de hSLD são dados na Figura 3.22. Observe em particular que
Bucareste aparece pela primeira vez na fronteira na etapa (e), mas não é selecionada para expansão porque
seu custo-f (450) é maior que o de Pitesti (417). Outra maneira de dizer isso é que pode haver uma solução
através de Pitesti cujo custo seja tão baixo quanto 417, então o algoritmo não se contentará com uma solução
que custe 450.
CONSISTÊNCIA Uma segunda condição, um pouco mais forte, chamada consistência (ou às vezes monotonicidade) é
MONOTONICIDADE necessária apenas para a versão de busca em gráfico de Aÿ . Uma heurística h(n) é consistente se, para cada
ÿ
nó n e cada sucessor n de n gerado por qualquer ação a, o custo estimado para atingir a meta de n não for
ÿ
maior que o custo do passo para chegar a n mais o custo estimado de alcançar a meta de nh(n) ÿ c(n, a, nÿ ) +
h(n ÿ:

ÿ
).
TRIÂNGULO
DESIGUALDADE
Esta é uma forma da desigualdade triangular geral, que estipula que cada lado de um triângulo não pode ser
ÿ
maior que a soma dos outros dois lados. Aqui, o triângulo é formado por n, n e a meta Gn mais próxima de n. ,
Para uma heurística admissível, a desigualdade faz todo o sentido: isso era mais barato que h(n), isso violaria a
ÿ
que h(n) é um limite inferior no custo para chegar propriedade se houvesse uma rota de n para Gn via n em
Gn.
É bastante fácil mostrar (Exercício 3.37) que toda heurística consistente também é admissível.
A consistência é, portanto, um requisito mais rigoroso do que a admissibilidade, mas é preciso trabalhar muito
para inventar heurísticas que sejam admissíveis, mas não consistentes. Todas as heurísticas admissíveis que
discutimos neste capítulo também são consistentes. Considere, por exemplo, hSLD . Nós sabemos isso

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

Seção 3.5. Estratégias de Pesquisa Informada (Heurística) 97

(a) O estado inicial Arad


366=0+366

(b) Depois de expandir Arad Arad

Sibiu Timisoara Zerind


393=140+253 447=118+329 449=75+374

(c) Depois de expandir Sibiu Arad

Sibiu Timisoara Zerind


447=118+329 449=75+374

Arad Fagaras Oradea Rimnicu Vilcea

646=280+366 415=239+176 671=291+380 413=220+193

(d) Depois de expandir Rimnicu Vilcea Arad

Sibiu Timisoara Zerind


447=118+329 449=75+374

Arad Fagaras Oradea Rimnicu Vilcea

646=280+366 415=239+176 671=291+380

Craiova Pitesti Sibiu


526=366+160 417=317+100 553=300+253

(e) Depois de expandir Fagaras Arad

Sibiu Timisoara Zerind


447=118+329 449=75+374

Arad Fagaras Oradea Rimnicu Vilcea

646=280+366 671=291+380

Sibiu Bucareste Craiova Pitesti Sibiu


591=338+253 450=450+0 526=366+160 417=317+100 553=300+253

(f) Depois de expandir Pitesti Arad

Sibiu Timisoara Zerind


447=118+329 449=75+374

Arad Fagaras Oradea Rimnicu Vilcea

646=280+366 671=291+380

Sibiu Bucareste Craiova Pitesti Sibiu


591=338+253 450=450+0 526=366+160 553=300+253

Bucareste Craiova Rimnicu Vilcea

418=418+0 615=455+160 607=414+193

Figura 3.24 Etapas de uma pesquisa Aÿ para Bucareste. Os nós são rotulados com f = g + h. Os valores de h são
as distâncias em linha reta para Bucareste tiradas da Figura 3.22.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

98 Capítulo 3. Resolução de problemas por pesquisa

a desigualdade triangular geral é satisfeita quando cada lado medido pela linha reta não é maior que c(n, a, n' ).
ÿ
linha reta entre n e n Portanto, hSLD é uma heurística consistente. distância, e que a distância em

Otimalidade de A*

Como mencionamos anteriormente, Aÿ tem as seguintes propriedades: a versão de busca em árvore de Aÿ é


ótima se h(n) for admissível, enquanto a versão de busca em grafo é ótima se h(n) for consistente.
Mostraremos a segunda dessas duas afirmações, pois é mais útil. O argumento espelha essencialmente
o argumento para a otimização da busca de custo uniforme, com g substituído por f—exatamente como no
próprio algoritmo Aÿ .
O primeiro passo é estabelecer o seguinte: se h(n) é consistente, então os valores de f(n) ao longo de
qualquer caminho são não decrescentes. A prova decorre diretamente da definição de é um sucessor de n; então
ÿ ÿ
consistência. Suponha que g(n ) = g(n) + c(n, a, nÿ ) para algum a, e
n temos
ÿ ÿ ÿ ÿ
f(n ) = g(n ) + h(n ) = g(n) + c(n, a, nÿ ) + h(n ) ÿ g(n) + h(n) = f(n) .

O próximo passo é provar que sempre que Aÿ seleciona um nó n para expansão, o caminho ótimo para esse nó
foi encontrado. Se não fosse esse o caso, teria que haver outro nó de fronteira n no caminho ideal do nó inicial
para n, pela
ÿ
propriedade de separação do gráfico de teria menor custo f do que n
ÿ
Figura 3.9; porque f é não decrescente ao longo de qualquer caminho,
n e teria sido selecionado primeiro.
Das duas observações anteriores, segue-se que a sequência de nós expandidos por Aÿ usando GRAPH-
SEARCH está em ordem não decrescente de f(n). Portanto, o primeiro nó de objetivo selecionado para expansão
deve ser uma solução ótima, porque f é o custo real para os nós de objetivo (que têm h = 0) e todos os nós de
objetivo posteriores serão pelo menos tão caros.
O fato de os f-custos não serem decrescentes ao longo de qualquer caminho também significa que
CONTORNOS podemos desenhar contornos no espaço de estados, exatamente como os contornos em um mapa topográfico.
A Figura 3.25 mostra um exemplo. Dentro do contorno rotulado como 400, todos os nós têm f(n) menor ou igual
a 400 e assim por diante. Então, como Aÿ expande o nó de fronteira de custo f mais baixo, podemos ver que
A ÿ uma busca se espalha a partir do nó inicial, adicionando nós em bandas concêntricas de custo f crescente.

Com busca de custo uniforme ( busca Aÿ usando h(n) = 0), as bandas serão “circulares” em torno do estado
inicial. Com heurísticas mais precisas, as bandas se estenderão em direção ao estado objetivo e se tornarão
mais estreitamente focadas em torno do caminho ideal. Se C * é o custo do caminho da solução ótima, podemos
dizer o seguinte:

•A ÿ
expande todos os nós com f(n) < Cÿ . pode
•A ÿ
então expandir alguns dos nós diretamente no “contorno do objetivo” (onde f(n) = C ÿ )
antes de selecionar um nó objetivo.

A completude requer que haja apenas um número finito de nós com custo menor ou igual a
C * , uma condição que é verdadeira se todos os custos da etapa excederem algum ÿ finito e se b for finito.
Observe que Aÿ não expande nenhum nó com f(n) > Cÿ — por exemplo, Timisoara não é expandido na
Figura 3.24, embora seja filho da raiz. Dizemos que a subárvore abaixo de Timisoara é podada; porque hSLD é
PODA admissível, o algoritmo pode ignorar com segurança esta subárvore

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

Seção 3.5. Estratégias de Pesquisa Informada (Heurística) 99

N
Z

A EU

380 S
F
V
400
T R

eu
P

H
M você

B
420
D
E
C
G

Figura 3.25 Mapa da Romênia mostrando contornos em f = 380, f = 400 ef = 420, com Arad como estado inicial.
Os nós dentro de um determinado contorno têm custos-f menores ou iguais ao valor do contorno.

enquanto ainda garante a otimização. O conceito de poda – eliminar possibilidades de consideração sem ter que
examiná-las – é importante para muitas áreas da IA.
Uma observação final é que entre os algoritmos ótimos desse tipo – algoritmos que estendem os caminhos
de busca da raiz e usam a mesma informação heurística – Aÿ é otimamente eficiente para qualquer função
OTIMAMENTE
EFICIENTE heurística dada. Ou seja, nenhum outro algoritmo ótimo é garantido para expandir menos nós do que Aÿ (exceto
possivelmente por desempate entre nós com f(n) = C ÿ ). Isso ocorre porque qualquer algoritmo que não expanda
todos os nós com f(n) < Cÿ corre o risco de perder a solução ótima.

Que a busca Aÿ seja completa, ótima e otimamente eficiente entre todos esses algoritmos é bastante
satisfatório. Infelizmente, isso não significa que A* seja a resposta para todas as nossas necessidades de busca.
O problema é que, para a maioria dos problemas, o número de estados dentro do espaço de busca do contorno
objetivo ainda é exponencial no comprimento da solução. Os detalhes da análise estão além do escopo deste
livro, mas os resultados básicos são os seguintes. Para problemas com custos de passos constantes, o
ERRO ABSOLUTO
crescimento do tempo de execução é analisado em termos do erro absoluto ou do erro relativo da heurística.
ÿ
ERRO RELATIVO
O erro absoluto é definido como ÿ ÿ h ÿÿh, onde h é o custo real de ir da raiz ao objetivo, e o erro relativo é
definido como ÿ ÿ (h ÿ ÿ h)/hÿ . Para um espaço de estados que é uma árvore, a complexidade temporal de Aÿ é
exponencial no erro absoluto, ou seja, O(b ÿ). Para custos de etapa constantes, podemos escrever isso como
O(b ÿd), onde d é a profundidade da solução.
Para quase todas as heurísticas em uso prático, o erro absoluto é pelo menos proporcional ao custo do caminho
h
ÿ
, então ÿ é constante ou crescente e a complexidade de tempo é exponencial em d. nós podemos ),
d
veja também o efeito de uma heurística mais precisa: O(b ÿd) = fator O((b então a ramificação efetiva
ÿ ) (definido mais formalmente na próxima seção) é b ÿ .
No caso geral de um gráfico, a situação é ainda pior: pode haver exponencialmente

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

100 Capítulo 3. Resolução de problemas por pesquisa

muitos estados com f(n) < Cÿ mesmo se o erro absoluto for limitado por uma constante. Por exemplo, considere
uma versão simplificada do mundo do aspirador onde o agente pode limpar qualquer quadrado por custo unitário
sem precisar visitá-lo: nesse caso, os quadrados podem ser limpos em qualquer ordem.
N
Com N quadrados inicialmente sujos, existem 2 estados em que algum subconjunto foi limpo e todos eles estão
em um caminho de solução ótima - e, portanto, satisfazem f(n) < Cÿ mesmo que a heurística tenha um erro de 1.

A complexidade de Aÿ muitas vezes torna impraticável insistir em encontrar uma solução ótima.
Pode-se usar variantes de Aÿ que encontram soluções abaixo do ideal rapidamente, ou pode-se, às vezes,
projetar heurísticas mais precisas, mas não estritamente admissíveis. De qualquer forma, o uso de uma boa
heurística ainda proporciona uma enorme economia em relação ao uso de uma busca desinformada.
Na Seção 3.6, veremos a questão de projetar boas heurísticas.
O tempo de computação não é, no entanto, a principal desvantagem de Aÿ . Como ele mantém todos os
nós gerados na memória (como fazem todos os algoritmos GRAPH-SEARCH ), A* geralmente fica sem espaço
muito antes de ficar sem tempo. Por esta razão, Aÿ não é prático para muitos problemas de larga escala.
Algoritmos desenvolvidos recentemente superaram o problema de espaço sem sacrificar a otimalidade ou
completude, com um pequeno custo no tempo de execução. Discutiremos isso a seguir.

3.5.3 Pesquisa heurística limitada por memória

A maneira mais simples de reduzir os requisitos de memória para Aÿ é adaptar a ideia de aprofundamento
ITERATIVO
APROFUNDAMENTO
ÿ
iterativo ao contexto de busca heurística, resultando no algoritmo Aÿ (IDAÿ ) de aprofundamento iterativo . A
A

principal diferença entre o IDAÿ e o aprofundamento iterativo padrão é que o corte usado é o custo-f (g +h) em
vez da profundidade; a cada iteração, o valor de corte é o menor f-custo de qualquer nó que excedeu o corte na
iteração anterior. IDA* é prático para muitos problemas com custos unitários de etapa e evita a sobrecarga
substancial associada à manutenção de uma fila ordenada de nós. Infelizmente, ela sofre das mesmas
dificuldades com custos reais avaliados como a versão iterativa da busca de custo uniforme descrita no
Exercício 3.24.
Esta seção examina brevemente dois algoritmos limitados por memória mais recentes, chamados RBFS e MAÿ
.
RECURSIVO
MELHOR-PRIMEIRA PESQUISA A busca recursiva do melhor primeiro (RBFS) é um algoritmo recursivo simples que tenta imitar a
operação da busca padrão do melhor primeiro lugar, mas usando apenas o espaço linear. O algoritmo é mostrado
na Figura 3.26. Sua estrutura é semelhante à de uma pesquisa recursiva em profundidade, mas em vez de
continuar indefinidamente no caminho atual, ele usa a variável f limite para acompanhar o valor f do melhor
caminho alternativo disponível de qualquer ancestral do atual nó. Se o nó atual exceder esse limite, a recursão
desenrola de volta para o caminho alternativo. À medida que a recursão se desenrola, RBFS substitui o valor f
de cada nó ao longo do caminho BACKED-UP VALUE pelo valor de backup - o melhor valor f de seus filhos.
Dessa forma, o RBFS lembra o valor f da melhor folha na subárvore esquecida e pode, portanto, decidir se vale a pena reexpandir
a subárvore em algum momento posterior. A Figura 3.27 mostra como o RBFS chega a Bucareste. mas ainda
sofre de excesso de nó re
RBFS é um pouco mais eficiente que IDA* ,
geração. No exemplo da Figura 3.27, RBFS primeiro segue o caminho via Rimnicu Vilcea, então “muda de ideia”
e tenta Fagaras, e então muda de ideia novamente. Essas mudanças mentais ocorrem porque toda vez que o
melhor caminho atual é estendido, há uma boa chance

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

Seção 3.5. Estratégias de Pesquisa Informada (Heurística) 101

função RECURSIVE-BEST-FIRST-SEARCH(problema) retorna uma solução, ou falha


retorna RBFS(problem, MAKE-NODE(problem.INITIAL-STATE),ÿ)

a função RBFS(problem, node,f limit) retorna uma solução ou falha e um novo limite de custo f
se problem.GOAL-TEST(node.STATE) então retorne SOLUTION(node)
sucessores ÿ[ ]
para cada ação em problem.ACTIONS(node.STATE) faça
adicione CHILD-NODE(problema, nó, ação) em sucessores se
os sucessores estiverem vazios então retorne a
falha, ÿ para cada s nos sucessores faça /* atualize f com o valor da pesquisa anterior,
se houver */ sf ÿ max(sg + sh,
node.f ))
loop faz o melhor ÿ o nó de menor valor f nos
sucessores se melhor.f > f limite então retorna
falha, melhor.f alternativa ÿo segundo menor valor f entre os
sucessores resulta, melhor.f ÿ RBFS( problema, melhor, min(f
limite, alternativa)) se resultado = falha, então retorne o resultado

Figura 3.26 O algoritmo para busca recursiva do melhor primeiro.

que seu valor f aumentará - h geralmente é menos otimista para nós mais próximos do objetivo. Quando isso
acontece, particularmente em grandes espaços de busca, o segundo melhor caminho pode se tornar o melhor
caminho, então a busca tem que retroceder para segui-lo. Cada mudança de mentalidade corresponde a uma
iteração do
, IDAÿ e pode exigir muitas reexpansões de nós esquecidos para recriar o melhor caminho e estendê-
lo em mais um nó.

Como a busca em árvore Aÿ , RBFS é um algoritmo ótimo se a função heurística h(n) for admissível. Sua
complexidade espacial é linear na profundidade da solução ótima mais profunda, mas sua complexidade temporal
é bastante difícil de caracterizar: depende tanto da precisão da função heurística quanto da frequência com que
o melhor caminho muda à medida que os nós são expandidos.
IDA* e RBFS sofrem por usar pouca memória. Entre iterações, IDAÿ retém apenas um único número: o
limite de custo-f atual. O RBFS retém mais informações na memória, mas usa apenas espaço linear: mesmo que
houvesse mais memória disponível, o RBFS não tem como fazer uso dela. Como eles esquecem a maior parte
do que fizeram, ambos os algoritmos podem acabar reexpandindo os mesmos estados várias vezes. Além disso,
eles sofrem o aumento potencialmente exponencial da complexidade associada a caminhos redundantes em
grafos (consulte a Seção 3.3).
Parece sensato, portanto, usar toda a memória disponível. Dois algoritmos que fazem isso que
AM* são MAÿ ( Aÿ limitado pela memória ) e SMAÿ (MAÿ simplificado ). Descreveremos que o SMAÿ é - bem ,
SMA* - mais simples. SMAÿ procede exatamente como Aÿ , expandindo a melhor folha até que a memória fique cheia.
Nesse ponto, ele não pode adicionar um novo nó à árvore de pesquisa sem descartar o antigo. SMAÿ sempre
descarta o pior nó folha—aquele com o valor f mais alto. Como o RBFS, o SMAÿ faz o backup do valor do nó
esquecido para seu pai. Desta forma, o ancestral de uma subárvore esquecida conhece a qualidade do melhor
caminho naquela subárvore. Com esta informação, o SMAÿ regenera a subárvore apenas quando todos os
outros caminhos tiverem mostrado uma aparência pior do que

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

102 Capítulo 3. Resolução de problemas por pesquisa

(a) Depois de expandir Arad, ÿ

Sibiu e Rimnicu Vilcea Arad 366

447
Sibiu Timisoara Zerind
393
447 449
415
Arad Fagaras Oradea Rimnicu Vilcea
413
646 415 671

Craiova Pitesti Sibiu


526 417 553

(b) Depois de voltar para Sibiu ÿ

Arad
e expandir Fagaras 366

447
Sibiu Timisoara Zerind
393 449
447
417
Arad Fagaras Oradea Rimnicu Vilcea
646 415 671 413 417

Sibiu Bucareste
591 450

(c) Depois de voltar para Rimnicu Vilcea ÿ

e expandir Pitesti Arad


366

447
Sibiu Timisoara Zerind
393 447 449

447
Arad Fagaras Oradea Rimnicu Vilcea
417
646 415 450 671

447
Craiova Pitesti Sibiu
526 417 553

Bucareste Craiova Rimnicu Vilcea


418 615 607

Figura 3.27 Etapas em uma busca RBFS para a rota mais curta para Bucareste. O valor do limite f para cada
chamada recursiva é mostrado no topo de cada nó atual e cada nó é rotulado com seu custo f. (a) O caminho via
Rimnicu Vilcea é percorrido até que a melhor folha atual (Pitesti) tenha um valor pior que o melhor caminho
alternativo (Fagaras). (b) A recursão desenrola e o melhor valor de folha da subárvore esquecida (417) é copiado
para Rimnicu Vilcea; então Fagaras é expandido, revelando um melhor valor de folha de 450. (c) A recursão
desenrola e o melhor valor de folha da subárvore esquecida (450) é copiado para Fagaras; então Rimnicu Vilcea é
expandido. Desta vez, porque o melhor caminho alternativo (através de Timisoara) custa pelo menos 447, a
expansão continua até Bucareste.

o caminho que esqueceu. Outra maneira de dizer isso é que, se todos os descendentes de um nó n forem
esquecidos, não saberemos para onde ir a partir de n, mas ainda teremos uma ideia de como vale a pena ir a
qualquer lugar de n.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

Seção 3.5. Estratégias de Pesquisa Informada (Heurística) 103

O algoritmo completo é muito complicado de reproduzir aqui,8 mas há uma sutileza que vale a pena
mencionar. Dissemos que o SMAÿ expande a melhor folha e exclui a pior folha. E se todos os nós folha tiverem
o mesmo valor f? Para evitar selecionar o mesmo nó para exclusão e expansão, o SMAÿ expande a melhor folha
mais recente e exclui a pior folha mais antiga . Estes coincidem quando há apenas uma folha, mas, nesse caso,
a árvore de busca atual deve ser um único caminho da raiz à folha que preenche toda a memória. Se a folha não
for um nó objetivo, mesmo que esteja em um caminho de solução ideal, essa solução não será alcançável com a
memória disponível. Portanto, o nó pode ser descartado exatamente como se não tivesse sucessores.

O SMAÿ é completo se houver alguma solução alcançável - isto é, se d, a profundidade do nó objetivo


mais raso, for menor que o tamanho da memória (expresso em nós). É ótimo se qualquer solução ótima for
alcançável; caso contrário, retorna a melhor solução alcançável. Em termos práticos, o SMAÿ é uma escolha
bastante robusta para encontrar soluções ótimas, particularmente quando o espaço de estado é um grafo, os
custos das etapas não são uniformes e a geração de nós é cara em comparação com a sobrecarga de manter a
fronteira e o conjunto explorado.
Em problemas muito difíceis, no entanto, frequentemente o SMAÿ é forçado a alternar continuamente
entre muitos caminhos de soluções candidatas, apenas um pequeno subconjunto dos quais pode caber na
DEBATER memória. (Isso se assemelha ao problema de thrashing em sistemas de paginação de disco.) Então, o tempo
extra necessário para regeneração repetida dos mesmos nós significa que problemas que seriam praticamente
solucionáveis por Aÿ , dada memória ilimitada, tornam-se intratáveis para SMAÿ .
Ou seja, limitações de memória podem tornar um problema intratável do ponto de vista do tempo de
computação. Embora não haja uma teoria para explicar a troca entre tempo e memória, parece que esse é um
problema inevitável. A única saída é abandonar o requisito de otimização.

3.5.4 Aprender a pesquisar melhor

Apresentamos várias estratégias fixas — primeiro em largura, melhor primeiro, ganancioso e assim por diante —
que foram projetadas por cientistas da computação. Um agente poderia aprender a pesquisar melhor? A resposta
ESTADO DE NÍVEL METÁLICO

ESPAÇO
é sim, e o método se baseia em um conceito importante chamado espaço de estado de metanível.
Cada estado em um espaço de estado de nível de meta captura o estado interno (computacional) de um programa
ESTADO DE NÍVEL DE OBJETO
ESPAÇO
que está procurando em um espaço de estado de nível de objeto, como a Romênia. Por exemplo, o estado
interno do algoritmo Aÿ consiste na árvore de busca atual. Cada ação no espaço de estado metalevel é uma
etapa de computação que altera o estado interno; por exemplo, cada passo computacional em Aÿ expande um
nó folha e adiciona seus sucessores à árvore. Assim, a Figura 3.24, que mostra uma sequência de árvores de
busca cada vez maiores, pode ser vista como uma representação de um caminho no espaço de estados de
metanível, onde cada estado no caminho é uma árvore de busca em nível de objeto.
Agora, o caminho na Figura 3.24 tem cinco etapas, incluindo uma etapa, a expansão de Fagaras, que não
é especialmente útil. Para problemas mais difíceis, haverá muitos desses erros, e um algoritmo de aprendizado
NÍVEL METÁLICO
APRENDIZADO
de metanível pode aprender com essas experiências para evitar a exploração de subárvores pouco promissoras.
As técnicas usadas para esse tipo de aprendizado são descritas no Capítulo 21. O objetivo do aprendizado é
minimizar o custo total da solução de problemas, compensando o gasto computacional e o custo do caminho.

8 Um rascunho apareceu na primeira edição deste livro.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google

Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

104 Capítulo 3. Resolução de problemas por pesquisa

3.6 FUNÇÕES HEURÍSTICAS

Nesta seção, veremos as heurísticas para o quebra-cabeça de 8 peças, a fim de esclarecer a natureza das heurísticas em
geral.
O quebra-cabeça de 8 foi um dos primeiros problemas de busca heurística. Conforme mencionado na Seção 3.2,
o objetivo do quebra-cabeça é deslizar as peças horizontal ou verticalmente no espaço vazio até que a configuração
corresponda à configuração do objetivo (Figura 3.28).

7 2 4 1 2

5 6 3 4 5

8 3 1 6 7 8

Estado inicial Estado da meta

Figura 3.28 Uma instância típica do quebra-cabeça de 8 peças. A solução tem 26 passos.

O custo médio da solução para uma instância de 8 quebra-cabeças gerada aleatoriamente é de cerca de 22 etapas.
O fator de ramificação é de cerca de 3. (Quando o ladrilho vazio está no meio, há quatro movimentos possíveis; quando
está em um canto, há dois; e quando está ao longo de uma borda, há três.) Isso ÿ 3,1 × 1010 estados. significa que uma
árvore até a profundidade 22 olharia para cerca de 3. Uma pesquisa em gráfico reduziria isso 22 pesquisa exaustiva em
em um fator de cerca de 170.000, porque há apenas 9!/2 = 181.440 estados distintos que são alcançáveis. (Veja o Exercício
3.17.) Esse é um número administrável, mas o número correspondente para o quebra-cabeça de 15 é aproximadamente
1013, então a próxima tarefa é encontrar uma boa função heurística. Se quisermos encontrar as soluções mais curtas
usando Aÿ, precisamos de uma função heurística que nunca superestime o número de passos até o objetivo. Há uma longa
, heurísticas para o quebra-cabeça de 15 peças; aqui estão dois candidatos comumente usados:
história de tais

• h1 = o número de peças mal colocadas. Para a Figura 3.28, todas as oito peças estão fora de posição, então o estado
inicial teria h1 = 8. h1 é uma heurística admissível, porque é claro que qualquer peça que esteja fora do lugar deve
ser movida pelo menos uma vez.

• h2 = a soma das distâncias das telhas de suas posições de meta. Como os ladrilhos não podem se mover ao longo
das diagonais, a distância que contaremos é a soma das distâncias horizontal e vertical. Isso às vezes é chamado
de distância do quarteirão da cidade ou distância de Manhattan. h2 também é admissível, porque tudo o que
MANHATTAN
DISTÂNCIA
qualquer movimento pode fazer é mover um ladrilho um passo mais perto do objetivo. Os ladrilhos de 1 a 8 no
estado inicial fornecem uma distância de Manhattan de

h2 = 3 + 1 + 2 + 2 + 2 + 3 + 3 + 2 = 18 .

Como esperado, nenhum deles superestima o verdadeiro custo da solução, que é 26.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação final.
©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

Seção 3.6. Funções heurísticas 105

3.6.1 O efeito da precisão heurística no desempenho


EFICAZ ÿ

FATOR DE RAMIFICAÇÃO Uma maneira de caracterizar a qualidade de uma heurística é o fator de ramificação efetivo b . Se o
número total de nós gerados por Aÿ para um determinado problema é N e a profundidade da solução é d,
ÿ
então b é o fator de ramificação que uma árvore uniforme de profundidade d teria que ter para conter N +
1 nós. Por isso,
ÿ 2 d
N+1=1+b + (b * ) + · · · + (b ÿ ) .

Por exemplo, se Aÿ encontrar uma solução na profundidade 5 usando 52 nós, então o fator de ramificação
efetivo é 1,92. O fator de ramificação efetivo pode variar entre as instâncias do problema, mas geralmente
é bastante constante para problemas suficientemente difíceis. (A existência de um fator de ramificação
efetivo decorre do resultado, mencionado anteriormente, de que o número de nós expandidos por Aÿ
ÿ
cresce exponencialmente com a profundidade da solução.) Portanto, medições experimentais de com um

um pequeno conjunto de problemas podem fornecer um bom guia para a heurística. utilidade geral. Uma
ÿ
heurística bem projetada teria um valor de b próximo de 1, permitindo a resolução de problemas
relativamente grandes.
Para testar as funções heurísticas h1 e h2, geramos 1200 problemas aleatórios com comprimentos
de solução de 2 a 24 (100 para cada número par) e os resolvemos com busca de aprofundamento iterativo
e com busca em árvore Aÿ usando h1 e h2. A Figura 3.29 fornece o número médio de nós gerados por
cada estratégia e o fator de ramificação efetivo. Os resultados sugerem que h2 é melhor que h1 e é muito
melhor do que usar a pesquisa de aprofundamento iterativo. Mesmo para pequenos problemas com d =
12, Aÿ com h2 é 50.000 vezes mais eficiente do que a busca de aprofundamento iterativo desinformada.

Custo de pesquisa (nós gerados) Fator de Ramificação Efetivo


ÿ ÿ ÿ ÿ
d IDS A (h1) A (h2) IDS A (h1) A (h2)

2 10 6 6 2.45 1,79 1,79


4 112 13 12 2.87 1,48 1,45
6 680 20 18 2.73 1.34 13h30

8 6384 39 25 2,80 1.33 1.24


10 47127 93 39 2.79 1.38 1.22
12 3644035 227 73 2,78 1.42 1.24
14 – 539 113 – 1,44 1,23
16 – 1301 211 – 1,45 1,25
18 – 3056 363 – 1,46 1,26
20 – 7276 676 – 1,47 1,27
22 – 18094 1219 – 1,48 1,28
24 – 39135 1641 – 1,48 1,26

Figura 3.29 Comparação dos custos de busca e fatores de ramificação efetivos para os algoritmos ITERATIVE-
DEEPENING-SEARCH e Aÿ com h1, h2. Os dados são calculados em média sobre 100 instâncias do quebra-
cabeça de 8 para cada um dos vários comprimentos de solução d.

Pode-se perguntar se h2 é sempre melhor que h1. A resposta é: “Essencialmente, sim”. É fácil ver
pelas definições das duas heurísticas que, para qualquer nó n, h2(n) ÿ h1(n).
DOMINAÇÃO
Dizemos então que h2 domina h1. A dominação se traduz diretamente em eficiência: Aÿ usando

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

106 Capítulo 3. Resolução de problemas por pesquisa

h2 nunca expandirá mais nós do que Aÿ usando h1 (exceto possivelmente para alguns nós com f(n) = C ÿ ). O argumento é
simples. Lembre-se da observação na página 98 de que todo nó com f(n) < Cÿ certamente será expandido. Isso é o mesmo que
dizer que todo nó com h(n) < Cÿ ÿ g(n) certamente será expandido. Mas como h2 é pelo menos tão grande quanto h1 para
todos os nós, todo nó que certamente é expandido pela pesquisa Aÿ com h2 também será certamente expandido com h1, e h1
pode fazer com que outros nós também sejam expandidos. Portanto, geralmente é melhor usar uma função heurística com
valores mais altos, desde que não superestime e que o tempo de computação da heurística não seja muito grande.

3.6.2 Gerando heurísticas admissíveis a partir de problemas relaxados

Vimos que h1 (ladrilhos mal colocados) e h2 (distância de Manhattan) são heurísticas bastante boas para o quebra-cabeça de
8 e que h2 é melhor. Como alguém pode ter inventado h2? É possível para um computador inventar tal heurística
mecanicamente? h1 e h2 são estimativas do comprimento restante do caminho para o
quebra-cabeça de 8, mas também são comprimentos de caminho perfeitamente precisos para versões simplificadas do
quebra-cabeça. Se as regras do quebra-cabeça fossem alteradas para que uma peça pudesse se mover para qualquer lugar,
em vez de apenas para o quadrado vazio adjacente, h1 forneceria o número exato de etapas na solução mais curta. Da mesma
forma, se um ladrilho pudesse se mover um quadrado em qualquer direção, mesmo em um quadrado ocupado, então h2
forneceria o número exato de etapas na solução mais curta. Um problema com menos restrições nas ações é um PROBLEMA
RELAXADO chamado de problema relaxado. O grafo de espaço de estado do problema relaxado é um supergrafo do espaço
de estado original, porque a remoção de restrições cria arestas adicionais no grafo.

Como o problema relaxado adiciona arestas ao espaço de estados, qualquer solução ótima no problema original é, por
definição, também uma solução no problema relaxado; mas o problema relaxado pode ter soluções melhores se as arestas
adicionadas fornecerem atalhos. Portanto, o custo de uma solução ótima para um problema relaxado é uma heurística admissível
para o problema original.
Além disso, como a heurística derivada é um custo exato para o problema relaxado, ela deve obedecer à desigualdade triangular
e, portanto, é consistente (consulte a página 96).
Se a definição de um problema for escrita em uma linguagem formal, é possível construir
problemas relaxados automaticamente.9 Por exemplo, se as ações do quebra-cabeça de 8 forem descritas como

Uma peça pode mover-se do quadrado A para o quadrado B se


A é horizontal ou verticalmente adjacente a B e B está em branco,

podemos gerar três problemas relaxados removendo uma ou ambas as condições:

(a) Uma peça pode se mover do quadrado A para o quadrado B se A for adjacente a B. (b)
Uma peça pode se mover do quadrado A para o quadrado B se B estiver em
branco. (c) Uma peça pode se mover do quadrado A para o quadrado B.

De (a), podemos derivar h2 (distância de Manhattan). O raciocínio é que h2 seria a pontuação adequada se movêssemos cada
ladrilho sucessivamente para seu destino. A heurística derivada de (b) é discutida no Exercício 3.39. De (c), podemos derivar
h1 (ladrilhos mal colocados), porque seria a pontuação adequada se os ladrilhos pudessem se mover para o destino pretendido
em uma etapa. Observe que é

9 Nos capítulos 8 e 11, descreveremos as linguagens formais adequadas para essa tarefa; com descrições formais que
podem ser manipuladas, a construção de problemas relaxados pode ser automatizada. Por enquanto, usaremos o inglês.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google

Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

Seção 3.6. Funções heurísticas 107

2 4 1 2

5 6 3 54 6

8 3 1 7 8

Estado inicial Estado da meta

Figura 3.30 Um subproblema da instância de 8 quebra-cabeças dada na Figura 3.28. A tarefa é colocar as peças
1, 2, 3 e 4 em suas posições corretas, sem se preocupar com o que acontecerá com as outras peças.

crucial que os problemas relaxados gerados por esta técnica possam ser resolvidos essencialmente sem busca,
pois as regras relaxadas permitem que o problema seja decomposto em oito subproblemas independentes. Se o
problema relaxado for difícil de resolver, então os valores da heurística correspondente serão caros de se
obter.10 Um programa chamado ABSOLVER
pode gerar heurísticas automaticamente a partir de definições de problemas, usando o método do
“problema relaxado” e várias outras técnicas (Prieditis, 1993).
ABSOLVER gerou uma nova heurística para o quebra-cabeça de 8 que era melhor do que qualquer heurística
preexistente e encontrou a primeira heurística útil para o famoso quebra-cabeça do cubo de Rubik.
Um problema com a geração de novas funções heurísticas é que muitas vezes não se consegue obter
uma heurística “claramente melhor”. Se uma coleção de heurísticas admissíveis h1 . . . hm está disponível para
um problema e nenhum deles domina nenhum dos outros, qual devemos escolher? Acontece que não precisamos
fazer uma escolha. Podemos ter o melhor dos mundos, definindo

h(n) = max{h1(n), . . . , hm(n)} .

Essa heurística composta usa qualquer função que seja mais precisa no nó em questão.
Como as heurísticas do componente são admissíveis, h é admissível; também é fácil provar que h é consistente.
Além disso, h domina todas as suas heurísticas componentes.

3.6.3 Gerando heurísticas admissíveis a partir de subproblemas: bancos de dados de padrões

SUBPROBLEMA As heurísticas admissíveis também podem ser derivadas do custo da solução de um subproblema de um
determinado problema. Por exemplo, a Figura 3.30 mostra um subproblema da instância de 8 quebra-cabeças
da Figura 3.28. O subproblema envolve colocar as peças 1, 2, 3, 4 em suas posições corretas. Claramente, o
custo da solução ótima desse subproblema é um limite inferior do custo do problema completo. Acontece que é
substancialmente mais preciso do que a distância de Manhattan em alguns
casos.
BANCOS DE DADOS DE PADRÕES A ideia por trás dos bancos de dados de padrões é armazenar esses custos exatos de solução para
todas as possíveis instâncias de subproblemas – em nosso exemplo, todas as configurações possíveis dos quatro
ladrilhos e do espaço em branco. (Observe que as localizações das outras quatro peças são irrelevantes para fins de

10 Observe que uma heurística perfeita pode ser obtida simplesmente permitindo que h execute uma busca em largura
completa “às escondidas”. Assim, há uma troca entre precisão e tempo de computação para funções heurísticas.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação final.
©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

108 Capítulo 3. Resolução de problemas por pesquisa

resolvendo o subproblema, mas os movimentos dessas peças contam para o custo.) Em seguida, calculamos um
hDB heurístico admissível para cada estado completo encontrado durante uma pesquisa simplesmente procurando
a configuração do subproblema correspondente no banco de dados. O próprio banco de dados é construído
pesquisando para trás11 a partir do estado objetivo e registrando o custo de cada novo padrão encontrado; a
despesa dessa busca é amortizada em muitas instâncias de problemas subseqüentes.

A escolha de 1-2-3-4 é bastante arbitrária; também poderíamos construir bancos de dados para 5-6-7-8,
para 2-4-6-8 e assim por diante. Cada banco de dados produz uma heurística admissível e essas heurísticas
podem ser combinadas, conforme explicado anteriormente, tomando o valor máximo. Uma heurística combinada
desse tipo é muito mais precisa do que a distância de Manhattan; o número de nós gerados ao resolver quebra-
cabeças aleatórios de 15 pode ser reduzido por um fator de 1000.
Alguém pode se perguntar se as heurísticas obtidas do banco de dados 1-2-3-4 e do 5-6-7-8 poderiam ser
adicionadas, uma vez que os dois subproblemas parecem não se sobrepor. Isso ainda daria uma heurística
admissível? A resposta é não, porque as soluções do subproblema 1-2-3-4 e do subproblema 5-6-7-8 para um
determinado estado quase certamente compartilharão alguns movimentos - é improvável que 1-2-3-4 pode ser
movido para o lugar sem tocar em 5-6-7-8 e vice-versa. Mas e se não contarmos esses movimentos? Ou seja,
registramos não o custo total da resolução do subproblema 1-2-3-4, mas apenas o número de movimentos
envolvendo 1-2-3-4. Então é fácil ver que a soma dos dois custos ainda é um limite inferior no custo de resolver
todo o problema.
PADRÃO DESJUNTO
BANCOS DE DADOS
Essa é a ideia por trás dos bancos de dados de padrões disjuntos. Usando esses bancos de dados, é possível
resolver quebra-cabeças aleatórios de 15 em alguns milissegundos - o número de nós gerados é reduzido por um
fator de 10.000 em comparação com o uso da distância de Manhattan. Para 24 quebra-cabeças, uma aceleração
de aproximadamente um milhão pode ser obtida.
Bancos de dados de padrões disjuntos funcionam para quebra-cabeças de ladrilhos deslizantes porque o
problema pode ser dividido de forma que cada movimento afete apenas um subproblema - porque apenas um
ladrilho é movido por vez. Para um problema como o cubo de Rubik, esse tipo de subdivisão não pode ser feito
porque cada movimento afeta 8 ou 9 dos 26 cubos. Atualmente, não está claro como definir bancos de dados
disjuntos para tais problemas.

3.6.4 Aprender heurísticas a partir da experiência

Uma função heurística h(n) deve estimar o custo de uma solução a partir do estado no nó n. Como um agente
poderia construir tal função? Uma solução foi dada nas seções anteriores - ou seja, criar problemas relaxados para
os quais uma solução ótima pode ser encontrada facilmente. Outra solução é aprender com a experiência.
“Experiência” aqui significa resolver muitos quebra-cabeças de 8, por exemplo. Cada solução ótima para um
problema de 8 quebra-cabeças fornece exemplos dos quais h(n) pode ser aprendido. Cada exemplo consiste em
um estado do caminho da solução e o custo real da solução a partir desse ponto. A partir desses exemplos, um
algoritmo de aprendizado pode ser usado para construir uma função h(n) que pode (com sorte) prever os custos
da solução para outros estados que surgem durante a pesquisa. Técnicas para fazer exatamente isso usando
redes neurais, de

11 Ao trabalhar para trás a partir do objetivo, o custo exato da solução de cada instância encontrada fica imediatamente

disponível sem nenhum cálculo adicional. Este é um exemplo de programação dinâmica, que discutiremos mais adiante
no Capítulo 17.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

Seção 3.7. Resumo 109

árvores de decisão e outros métodos são demonstrados no Capítulo 18. (Os métodos de aprendizado por
reforço descritos no Capítulo 21 também são aplicáveis.)
CARACTERÍSTICAS Os métodos de aprendizado indutivo funcionam melhor quando fornecidos com recursos de um estado
que são relevantes para prever o valor do estado, em vez de apenas com a descrição bruta do estado. Por
exemplo, o recurso “número de ladrilhos mal colocados” pode ser útil para prever a distância real de um estado
até o objetivo. Vamos chamar esse recurso de x1(n). Poderíamos pegar 100 configurações de 8 quebra-
cabeças geradas aleatoriamente e coletar estatísticas sobre seus custos reais de solução. Podemos descobrir
que quando x1(n) é 5, o custo médio da solução é de cerca de 14, e assim por diante. Dados esses dados, o
valor de x1 pode ser usado para prever h(n). Claro, podemos usar vários recursos.
Um segundo recurso x2(n) pode ser “número de pares de ladrilhos adjacentes que não são adjacentes no
estado de objetivo”. Como x1(n) e x2(n) devem ser combinados para prever h(n)? Uma abordagem comum é
usar uma combinação linear:

h(n) = c1x1(n) + c2x2(n) .

As constantes c1 e c2 são ajustadas para dar o melhor ajuste aos dados reais sobre os custos da solução.
Espera-se que c1 e c2 sejam positivos, porque peças mal colocadas e pares adjacentes incorretos tornam o
problema mais difícil de resolver. Observe que esta heurística satisfaz a condição de que h(n) = 0 para estados
de objetivo, mas não é necessariamente admissível ou consistente.

3.7 RESUMO

Este capítulo apresentou métodos que um agente pode usar para selecionar ações em ambientes que são
determinísticos, observáveis, estáticos e completamente conhecidos. Nesses casos, o agente pode construir
sequências de ações que atinjam seus objetivos; esse processo é chamado de pesquisa.

• Antes que um agente possa começar a buscar soluções, um objetivo deve ser identificado e um
problema bem definido deve ser formulado.
• Um problema consiste em cinco partes: o estado inicial, um conjunto de ações, um modelo de
transição que descreve os resultados dessas ações, uma função de teste de objetivo e uma função de custo de cam
O ambiente do problema é representado por um espaço de estados. Um caminho através do espaço
de estados desde o estado inicial até um estado objetivo é uma solução.
• Algoritmos de busca tratam estados e ações como atômicos: eles não consideram nenhuma estrutura
interna que possam possuir.
• Um algoritmo geral TREE-SEARCH considera todos os caminhos possíveis para encontrar uma solução,
enquanto um algoritmo GRAPH-SEARCH evita a consideração de caminhos redundantes.
• Os algoritmos de busca são julgados com base em integridade, otimização, complexidade de tempo
e complexidade de espaço. A complexidade depende de b, o fator de ramificação no espaço de
estado, e d, a profundidade da solução mais rasa.
• Os métodos de pesquisa não informados têm acesso apenas à definição do problema. Os algoritmos
básicos são os seguintes:

– A busca em largura expande primeiro os nós mais rasos; é completo, ótimo


para custos de passo unitário, mas tem complexidade de espaço exponencial.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

110 Capítulo 3. Resolução de problemas por pesquisa

– A busca de custo uniforme expande o nó com menor custo de caminho, g(n), e é ótimo
para custos gerais de etapas.

– A pesquisa em profundidade expande primeiro o nó não expandido mais profundo. Não é nem completo nem
ótimo, mas tem complexidade de espaço linear. A pesquisa limitada por profundidade adiciona um limite de
profundidade.

– A pesquisa de aprofundamento iterativo chama a pesquisa em profundidade com limites de profundidade


crescentes até que um objetivo seja encontrado. É completo, ideal para custos unitários de etapa, tem
complexidade de tempo comparável à busca em largura e tem complexidade de espaço linear.

– A pesquisa bidirecional pode reduzir enormemente a complexidade do tempo, mas nem sempre é
aplicável e pode exigir muito espaço.

• Métodos de busca informados podem ter acesso a uma função heurística h(n) que estima
o custo de uma solução de n.

– O algoritmo genérico de busca do melhor primeiro seleciona um nó para expansão de acordo com uma função
de avaliação.

– A busca gulosa pelo melhor primeiro expande os nós com h(n) mínimo. Não é o ideal, mas
muitas vezes é eficiente.

– Aÿ busca expande nós com mínimo f(n) = g(n) + h(n). Aÿ é completo e ótimo, desde que h(n) seja admissível
(para TREE-SEARCH) ou consistente (para GRAPH-SEARCH). A complexidade espacial de Aÿ ainda é
proibitiva.

– RBFS (recursive best-first search) e SMAÿ (simplified memory-bounded Aÿ ) são algoritmos de busca otimizados
e robustos que usam quantidades limitadas de memória; dado tempo suficiente, eles podem resolver problemas
que A* não consegue resolver porque fica sem memória.

• O desempenho dos algoritmos de busca heurística depende da qualidade da função heurística. Às vezes, boas
heurísticas podem ser construídas relaxando a definição do problema, armazenando custos de solução pré-
computados para subproblemas em um banco de dados de padrões ou aprendendo com a experiência com a classe
do problema.

NOTAS BIBLIOGRÁFICAS E HISTÓRICAS

O tópico da busca no espaço de estados originou-se mais ou menos em sua forma atual nos primeiros anos da IA. O trabalho
de Newell e Simon no Logic Theorist (1957) e no GPS (1961) levou ao estabelecimento de algoritmos de busca como as
principais armas no arsenal dos pesquisadores de IA dos anos 1960 e ao estabelecimento da resolução de problemas como
a tarefa canônica da IA. O trabalho em pesquisa operacional de Richard Bellman (1957) mostrou a importância dos custos de
caminho aditivos na simplificação de algoritmos de otimização. O texto sobre Resolução Automatizada de Problemas de Nils
Nilsson (1971) estabeleceu a área em uma base teórica sólida.

A maioria dos problemas de busca em espaço de estados analisados neste capítulo tem uma longa história na
literatura e são menos triviais do que parecem. O problema dos missionários e canibais usado no Exercício 3.22 foi analisado
em detalhes por Amarel (1968). tinha sido considerado

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

Seção 3.7. Resumo 111

anteriormente em IA por Simon e Newell (1961) e em pesquisa operacional por Bellman e Dreyfus
(1962).
O quebra-cabeça de 8 é um primo menor do quebra-cabeça de 15, cuja história é contada em
detalhes por Slocum e Sonneveld (2006). Durante a maior parte do século 20, acreditou-se amplamente
que foi inventado pelo famoso designer de jogos americano Sam Loyd, com base em suas alegações
nesse sentido de 1891 em diante (Loyd, 1959). Acontece que foi inventado por Noyes Chapman, um
postmaster em Canastota, Nova York, em meados da década de 1870, e alcançou imensa popularidade
nos Estados Unidos e na Europa. (Chapman não conseguiu patentear sua invenção, pois uma patente
genérica cobrindo blocos deslizantes com letras, números ou imagens foi concedida a Ernest Kinsey
em 1878.) Também atraiu rapidamente a atenção de matemáticos (Johnson e Story, 1879; Tait, 1880). ).
Os editores do American Journal of Mathematics declararam: “O quebra-cabeça '15' nas últimas
semanas tem sido proeminente perante o público americano, e pode-se dizer com segurança que atraiu
a atenção de nove em cada dez pessoas de ambos os sexos e todos idades e condições da comunidade.
Mas isso não teria pesado para os editores induzi-los a inserir artigos sobre tal assunto no American
Journal of Mathematics, senão pelo fato de que . . .” (segue um resumo do interesse matemático do
quebra-cabeça de 15). Uma análise exaustiva do quebra-cabeça de 8 foi realizada com auxílio de
computador por Schofield (1967). Ratner e Warmuth (1986) mostraram que a versão geral n × n do
quebra-cabeça de 15 peças pertence à classe de problemas NP-completos.

O problema das 8 rainhas foi publicado pela primeira vez anonimamente na revista alemã de
xadrez Schach em 1848; mais tarde foi atribuído a um certo Max Bezzel. Foi republicado em 1850 e
nessa época chamou a atenção do eminente matemático Carl Friedrich Gauss, que tentou enumerar
todas as soluções possíveis, mas encontrou apenas 72. Nauck publicou todas as 92 soluções mais
tarde, em 1850. Netto (1901) generalizou o problema para n rainhas, e Abramson e Yung (1989)
encontraram um algoritmo O(n) .
Cada um dos problemas de busca do mundo real listados no capítulo foi objeto de bastante
esforço de pesquisa. Os métodos para selecionar voos de companhias aéreas ideais permanecem na
maior parte proprietários, mas Carl de Marcken (comunicação pessoal) mostrou que os preços e as
restrições de passagens aéreas tornaram-se tão complicados que o problema de selecionar um voo
ideal é formalmente indecidível . O problema do caixeiro-viajante é um problema combinatório padrão
em ciência da computação teórica (Lawler, 1985; Lawler et al., 1992). Karp (1972) provou que o TSP é
NP-difícil, mas métodos de aproximação heurística eficazes foram desenvolvidos (Lin e Kernighan,
1973). Arora (1998) desenvolveu um esquema de aproximação totalmente polinomial para TSPs
euclidianos. Os métodos de layout VLSI são pesquisados por Shahookar e Mazumder (1991), e muitos
artigos sobre otimização de layout aparecem em periódicos VLSI. A navegação robótica e os problemas
de montagem são discutidos no Capítulo 25.
Algoritmos de busca não informados para resolução de problemas são um tópico central da
ciência da computação clássica (Horowitz e Sahni, 1978) e da pesquisa operacional (Dreyfus, 1969).
A primeira busca em amplitude foi formulada para resolver labirintos por Moore (1959). O método de
programação dinâmica (Bellman, 1957; Bellman e Dreyfus, 1962), que sistematicamente registra
soluções para todos os subproblemas de comprimentos crescentes, pode ser visto como uma forma de
busca em largura em grafos. O algoritmo de caminho mais curto de dois pontos de Dijkstra (1959) é a
origem da busca de custo uniforme. Esses trabalhos também introduziram a ideia de conjuntos explorados e de fronteir

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

112 Capítulo 3. Resolução de problemas por pesquisa

(listas fechadas e abertas).


Uma versão de aprofundamento iterativo projetada para fazer uso eficiente do relógio de xadrez foi usada
pela primeira vez por Slate e Atkin (1977) no programa de jogo CHESS 4.5, mas a aplicação para busca de
gráfico de caminho mais curto é devido a Korf (1985a). . A busca bidirecional, introduzida por Pohl (1969, 1971),
também pode ser muito eficaz em alguns casos.
O uso de informações heurísticas na resolução de problemas aparece em um artigo inicial de Simon e
Newell (1958), mas a frase “busca heurística” e o uso de funções heurísticas que estimam a distância até o
objetivo surgiram um pouco mais tarde (Newell e Ernst, 1965 ; Lin, 1965).
Doran e Michie (1966) conduziram extensos estudos experimentais de busca heurística aplicada a uma série de
problemas, especialmente o quebra-cabeça de 8 e o quebra-cabeça de 15. Embora Doran e Michie tenham
realizado análises teóricas do comprimento do caminho e “penetrância” (a razão do comprimento do caminho
para o número total de nós examinados até agora) na busca heurística, eles parecem ter ignorado as informações
fornecidas pelo custo do caminho g( n ). O algoritmo Aÿ , incorporando o custo do caminho atual na busca
heurística, foi desenvolvido por Hart, Nilsson e Raphael (1968), com algumas correções posteriores (Hart et al.,
1972). Dechter e Pearl (1985) demonstraram a eficiência ótima de Aÿ O artigo original de Aÿ introduziu a
condição de consistência .
em funções heurísticas. A condição monótona foi introduzida por Pohl (1977) como uma substituição mais
simples, mas Pearl (1984) mostrou que as duas eram equivalentes.

Pohl (1970, 1977) foi pioneiro no estudo da relação entre o erro em funções heurísticas e a complexidade
temporal de Aÿ . Resultados básicos foram obtidospara busca em árvore com custos unitários de passo e um
único nó objetivo (Pohl, 1977; Gaschnig, 1979; Huyn et al., 1980; Pearl, 1984) e com múltiplos nós objetivos
(Dinh et al., 2007). O “fator de ramificação efetivo” foi proposto por Nilsson (1971) como uma medida empírica
da eficiência; é equivalente a assumir um custo de tempo de O((b ÿ ) argumentam que o custo de tempo é melhor
d
modelado como precisão de O(b ; no ). Para busca em árvore aplicada a um grafo, Korf et al. (2001)
d-k
entanto, essa análise gerou alguma controvérsia. Para pesquisa ) onde k depende da heurística
de gráficos, Helmert e R¨oger (2008) observaram que vários problemas conhecidos continham muitos nós
exponencialmente em caminhos de solução ótima, implicando complexidade de tempo exponencial para Aÿ
mesmo com erro absoluto constante em h.

Existem muitas variações no algoritmo Aÿ . Pohl (1973) propôs o uso de ponderação dinâmica, que usa
uma soma ponderada fw(n) = wgg(n) + whh(n) do comprimento do caminho atual e a função heurística como
uma função de avaliação, em vez da simples soma f (n) = g(n)+ h(n) usado em Aÿ . Os pesos wg e wh são
ajustados dinamicamente à medida que a pesquisa avança.
O algoritmo de Pohl pode ser mostrado como ÿ-admissível - isto é, garantido para encontrar soluções dentro de
um fator 1 + ÿ da solução ótima - onde ÿ é um parâmetro fornecido ao algoritmo. A mesma propriedade é exibida
pelo algoritmo Aÿ (Pearl, 1984), que pode selecionar
ÿ qualquer nó da fronteira desde que seu custo f esteja dentro
de um fator 1 + ÿ do nó da fronteira de menor custo f. A seleção pode ser feita de forma a minimizar o custo de
busca.
Versões bidirecionais de Aÿ foram investigadas (de Champeaux e Sint, 1977; de
Champeaux, 1983), mas sua complexidade algorítmica não foi compensada por melhorias significativas de
desempenho em relação a Aÿ . Uma abordagem mais promissora parece ser executar uma
busca em largura para trás a partir do objetivo até uma profundidade fixa, seguida por uma IDA para frente*

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

Seção 3.7. Resumo 113

pesquisa (Dillenburg e Nelson, 1994; Manzini, 1995).


A ÿ e outros algoritmos de busca em espaço de estado estão intimamente relacionados com as
técnicas branch-and-bound que são amplamente utilizadas em pesquisa operacional (Lawler e Wood,
1966). As relações entre busca no espaço de estados e branch-and-bound foram investigadas em
profundidade (Kumar e Kanal, 1983; Nau et al., 1984; Kumar et al., 1988). Martelli e Monta nari (1978)
demonstram uma conexão entre programação dinâmica (ver Capítulo 17) e certos tipos de busca em
espaço de estado. Kumar e Kanal (1988) tentam uma “grande unificação” de busca heurística, programação
dinâmica e técnicas branch-and-bound sob o nome de CDP – o “processo de decisão composto”.

Como os computadores no final dos anos 1950 e início dos anos 1960 tinham no máximo alguns
milhares de palavras na memória principal, a pesquisa heurística limitada à memória foi um dos primeiros
tópicos de pesquisa. O Graph Traverser (Doran e Michie, 1966), um dos primeiros programas de pesquisa,
se compromete com um operador depois de pesquisar melhor primeiro até o limite da memória. IDA* (Korf,
1985a, 1985b) foi o primeiro algoritmo de busca heurística ótimo, limitado pela memória e amplamente
utilizado, e um grande número de variantes foi desenvolvido. Uma análise da eficiência do IDAÿ e de suas
dificuldades com heurísticas de valores reais aparece em Patrick et al. (1992).
RBFS (Korf, 1991, 1993) é na verdade um pouco mais complicado do que o algoritmo mostrado na
Figura 3.26, que está mais próximo de um algoritmo desenvolvido independentemente chamado expansão
ITERATIVO
EXPANSÃO
iterativa, ou IE (Russell, 1992). RBFS usa um limite inferior, bem como o limite superior; os dois algoritmos
se comportam de forma idêntica com heurísticas admissíveis, mas o RBFS expande os nós na melhor
primeira ordem mesmo com uma heurística inadmissível. A ideia de rastrear o melhor caminho alternativo
apareceu anteriormente na elegante implementação Prolog de Aÿ de Bratko (1986) e no algoritmo DTAÿ
(Russell e Wefald, 1991). O último trabalho também discute espaços de estado de metanível e aprendizado
de metanível.
O algoritmo MAÿ apareceu em Chakrabarti et al. (1989). O SMAÿ surgiu de , ou MA Simplificadoÿ ,
uma tentativa de implementar o MAÿ como um algoritmo de comparação para o IE (Russell, 1992).
Kaindl e Khorsand (1994) aplicaram o SMAÿ para produzir um algoritmo de busca bidirecional que é
substancialmente mais rápido que os algoritmos anteriores. Korf e Zhang (2000) descrevem uma
abordagem de dividir e conquistar, e Zhou e Hansen (2002) introduzem a busca de grafos Aÿ limitada à
memória . Korf (1995) examina as técnicas de busca limitadas pela memória.
A ideia de que heurísticas admissíveis podem ser derivadas pelo relaxamento do problema aparece
no artigo seminal de Held e Karp (1970), que usaram a heurística da árvore geradora mínima para resolver
o TSP. (Veja o Exercício 3.38.)
A automação do processo de relaxamento foi implementada com sucesso por Priedi tis (1993), com
base no trabalho anterior com Mostow (Mostow e Prieditis, 1989). O uso de bancos de dados de padrões
para derivar heurísticas admissíveis deve-se a Gasser (1995) e Culberson e Schaeffer (1998); bancos de
dados de padrões disjuntos são descritos por Korf e Felner (2002).
A interpretação probabilística das heurísticas foi investigada em profundidade por Pearl (1984) e Hansson
e Mayer (1989).
De longe, a fonte mais abrangente sobre heurística e algoritmos de busca heurística é o texto
Heuristics de Pearl (1984) . Este livro oferece uma cobertura especialmente boa da ampla variedade de
ramificações e variações de Aÿ , incluindo provas rigorosas de suas propriedades formais.
Os livros didáticos de Nilsson (1971, 1980) são boas fontes gerais de informação sobre aulas.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

114 Capítulo 3. Resolução de problemas por pesquisa

algoritmos de busca sical. Kanal e Kumar (1988) apresentam uma antologia de artigos importantes sobre busca
heurística. Artigos sobre novos algoritmos de busca – que, notavelmente, continuam a ser descobertos – aparecem
em periódicos como Artificial Intelligence e Journal of the ACM.
PESQUISA PARALELA
O tópico de algoritmos de busca paralela não foi abordado no capítulo, em parte porque requer uma longa
discussão sobre arquiteturas de computadores paralelos. A busca paralela tornou-se um tópico popular na década de
1990, tanto na IA quanto na ciência da computação teórica (Mahanti e Daniels, 1993; Grama e Kumar, 1995; Crauser
et al., 1998) e está voltando na era das novas arquiteturas multicore e cluster (Ralphs e outros, 2004; Korf e Schultze,
2005).
Também são de importância crescente os algoritmos de busca para grafos muito grandes que requerem
armazenamento em disco (Korf, 2008).

EXERCÍCIOS

3.1 Defina com suas próprias palavras os seguintes termos: estado, espaço de estado, árvore de busca, nó de busca,
objetivo, ação, modelo de transição e fator de ramificação.

3.2 Explique por que a formulação do problema deve seguir a formulação do objetivo.

3.3 Quais das alternativas a seguir são verdadeiras e quais são falsas? Dê uma breve explicação para cada
responder.

a. A pesquisa em profundidade sempre expande pelo menos tantos nós quanto a pesquisa Aÿ com um admissi
ble heurística.

b. h(n) = 0 é uma heurística admissível para o quebra-cabeça de 8. c.


Uma busca Aÿ não pode ser usada em robótica porque percepções, estados e ações são contínuos
ou.

d. A busca em largura é completa mesmo se forem permitidos custos de etapa zero. e.


Suponha que uma torre pode se mover em um tabuleiro de xadrez qualquer número de casas em linha reta,
vertical ou horizontalmente, mas não pode pular outras peças. A distância de Manhattan é uma heurística
admissível para o problema de mover a torre do quadrado A para o quadrado B no menor número de
movimentos.

3.4 Forneça uma formulação de problema completa para cada um dos seguintes problemas. Escolha uma formulação
que seja precisa o suficiente para ser implementada.

a. Há seis caixas de vidro enfileiradas, cada uma com um cadeado. Cada uma das cinco primeiras caixas contém
uma chave que abre a próxima caixa da fila, a última contém uma banana. Você tem a chave da primeira caixa
e quer a banana.
b. Você começa com a sequência ABABAECCEC ou, em geral, qualquer sequência feita de A, B, C e E. Você
pode transformar essa sequência usando as seguintes igualdades: AC = E, AB = BC, BB = E e Ex = x para
qualquer x. Por exemplo, ABBC pode ser transformado em AEC, depois AC e depois E. Seu objetivo é produzir
a sequência E.
c. Há uma grade n por n de quadrados, cada quadrado inicialmente sendo um piso sem pintura ou um poço sem
fundo. Você começa de pé em um quadrado sem pintura e pode pintar

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

Seção 3.7. Resumo 115

o quadrado abaixo de você ou mova-se para um quadrado adjacente sem pintura. Você quer todo o
chão pintado. d. Um
navio porta-contêineres está no porto, carregado de contêineres. Existem 13 fileiras de contêineres, cada
uma com 13 contêineres de largura e 5 contêineres de altura. Você controla um guindaste que pode se
mover para qualquer local acima do navio, pegar o contêiner embaixo dele e movê-lo para o cais. Você
quer o navio descarregado.

3.5 Seu objetivo é conduzir um robô para fora de um labirinto. O robô começa no centro do labirinto voltado
para o norte. Você pode virar o robô para o norte, leste, sul ou oeste. Você pode direcionar o robô para avançar
uma certa distância, embora ele pare antes de bater em uma parede.

a. Formule este problema. Qual é o tamanho do espaço de estados?


b. Ao navegar em um labirinto, o único lugar que precisamos virar é na interseção de dois ou mais corredores.
Reformule este problema usando esta observação. Qual é o tamanho do espaço de estados agora?

c. A partir de cada ponto do labirinto, podemos nos mover em qualquer uma das quatro direções até
chegarmos a um ponto de virada, e esta é a única ação que precisamos fazer. Reformule o problema
usando essas ações. Precisamos acompanhar a orientação do robô agora?
d. Em nossa descrição inicial do problema já abstraímos do mundo real, restringindo ações e removendo
detalhes irrelevantes. Liste três dessas simplificações que fizemos.

3.6 Qual é a diferença entre um estado mundial, uma descrição de estado e um nó de busca?
Por que essa distinção é útil?

3.7 Você tem uma grade de 9 × 9 quadrados, cada um dos quais pode ser colorido de vermelho ou azul. A
grade é inicialmente toda colorida de azul, mas você pode alterar a cor de qualquer quadrado quantas vezes quiser.
Imaginando a grade dividida em nove sub-quadrados 3 × 3 , você deseja que cada sub-quadrado seja todo de
uma cor, mas os sub-quadrados vizinhos sejam de cores diferentes.

a. Formule esse problema de maneira direta. Calcule o tamanho do espaço de estados. b. Você precisa
colorir um quadrado apenas uma vez. Reformule e calcule o tamanho do espaço de estado. A busca em
grafo em largura teria um desempenho mais rápido nesse problema do que no de (a)? Que tal uma
pesquisa em árvore de aprofundamento iterativo?
c. Dado o objetivo, precisamos considerar apenas colorações onde cada sub-quadrado é uniformemente
colorido. Reformule o problema e calcule o tamanho do espaço de estado.
d. Quantas soluções esse problema tem? e. As partes (b)
e (c) abstraíram sucessivamente o problema original (a). Você pode dar uma tradução das soluções do
problema (c) para as soluções do problema (b) e das soluções do problema (b) para as soluções do
problema (a)?

3.8 Uma ação como Go(Sibiu) realmente consiste em uma longa sequência de ações mais refinadas: ligar o
carro, soltar o freio, acelerar para frente etc. Ter ações compostas desse tipo reduz o número de etapas em
uma sequência de solução , reduzindo assim o tempo de busca.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

116 Capítulo 3. Resolução de problemas por pesquisa

Suponha que levemos isso ao extremo lógico, criando ações supercompostas de todas as sequências possíveis de
ações Go . Em seguida, cada instância do problema é resolvida por uma única ação supercomposta, como
Go(Sibiu)Go(Rimnicu Vilcea)Go(Pitesti)Go(Bucharest). Explique como a pesquisa funcionaria nessa formulação. Esta
é uma abordagem prática para acelerar a resolução de problemas?

3.9 Considere um espaço de estados onde o estado inicial é o número 1 e cada estado k tem dois sucessores,
números 2k e 2k + 1.

a. Desenhe a porção do espaço de estado para os estados 1 a 15. b.

Suponha que o estado objetivo seja 11. Liste a ordem em que os nós serão visitados para a primeira busca em
largura, busca limitada em profundidade com limite 3 e busca iterativa em aprofundamento. c.

Quão bem a pesquisa bidirecional funcionaria nesse problema? Qual é a ramificação


fator em cada direção da busca bidirecional?

d. A resposta para (c) sugere uma reformulação do problema que permitiria que você resolvesse o problema de ir
do estado 1 para um determinado estado objetivo quase sem busca? e. Chame a ação indo de k para 2k

Esquerda, e a ação indo para 2k + 1 Direita. Você pode encontrar um algoritmo para produzir a solução para este
problema sem nenhuma pesquisa?

3.10 Heurísticas precisas não reduzem necessariamente o tempo de busca, no pior caso. Dada qualquer profundidade
d, defina um problema de busca com um nó objetivo na profundidade d, e uma função heurística tal que |h(n) ÿ h ÿ (n)|
ÿ O(log h ÿ (n)) mas Aÿ expande todos os nós de profundidade menor que d.
CAMINHO HEURÍSTICO
ALGORITMO
3.11 O algoritmo de caminho heurístico (Pohl, 1977) é uma busca do melhor primeiro em que a função de avaliação
é f(n) = (2 ÿ w)g(n) + wh(n). Para quais valores de w isso é completo?
Para quais valores ele é ótimo, assumindo que h é admissível? Que tipo de pesquisa isso realiza para w = 0, w = 1 e
w = 2?

3.12 Considere a versão ilimitada da grade 2D regular mostrada na Figura 3.9. O estado inicial está na origem, (0,0), e
o estado final está em (x, y). a. Qual é o fator de ramificação b neste

espaço de estados? b. Quantos estados distintos existem na

profundidade k (para k > 0)? c. Qual é o número máximo de nós expandidos

pela busca em árvore de busca em largura? d. Qual é o número máximo de nós expandidos pela busca em grafo

de busca em largura? e. É h = |u ÿ x| + |v ÿ y| uma heurística admissível para um estado em (u, v)? Explicar. f.

Quantos nós são expandidos pela busca do grafo Aÿ usando h? g. h permanece admissível se alguns
links forem removidos? h. h permanece admissível se alguns links forem

adicionados entre estados não adjacentes?

3.13 n veículos ocupam quadrados (1, 1) até (n, 1) (ou seja, a linha inferior) de uma grade n × n .
Os veículos devem ser movidos para a linha superior, mas na ordem inversa; então o veículo i que começa em (i, 1)
deve terminar em (n ÿ i + 1, n). Em cada intervalo de tempo, cada um dos n veículos pode se mover um quadrado
para cima, para baixo, para a esquerda ou para a direita, ou permanecer parado; mas se um veículo permanecer
parado, outro veículo adjacente (mas não mais de um) pode pular sobre ele. Dois veículos não podem ocupar o mesmo quadrado.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

Seção 3.7. Resumo 117

x 12
x2 x2

x 16

Figura 3.31 As peças dos trilhos em um conjunto ferroviário de madeira; cada um é rotulado com o número
de cópias no conjunto. Observe que as peças curvas e as peças de “garfo” (“interruptores” ou “pontos”)
podem ser viradas, para que possam se curvar em qualquer direção. Cada curva subtende 45 graus.

a. Calcule o tamanho do espaço de estado como uma função de n.


b. Calcule o fator de ramificação como uma função de n. c.
Suponha que o veículo i esteja em (xi , yi); escreva uma heurística admissível não trivial hi para o número
de movimentos necessários para chegar ao local de destino (nÿi+ 1, n), assumindo que não há outros
veículos no grid.
d. Quais das seguintes heurísticas são admissíveis para o problema de mover todos os n veículos
cles para seus destinos? Explicar.

(e) oi . ni
(ii)= 1
max{h1, . . . , hn}. (iii)
min{h1, . . . , hn}.

3.14 Um conjunto ferroviário básico de madeira contém as peças mostradas na Figura 3.31. A tarefa é
conectar essas peças em uma ferrovia que não tenha pontas soltas onde um trem possa correr para o chão
e sem trilhos sobrepostos.

a. Suponha que as peças se encaixem exatamente sem folga. Forneça uma formulação precisa de
a tarefa como um problema de pesquisa.

b. Identifique um algoritmo de busca desinformada adequado para esta tarefa e explique sua escolha. c.
Explique brevemente por que remover qualquer uma das peças do “garfo” torna o problema sem solução
capaz.

d. Forneça um limite superior para o tamanho total do espaço de estados definido por sua formulação.
(Dica: pense no fator de ramificação máximo para o processo de construção e na profundidade
máxima, ignorando o problema de peças sobrepostas e pontas soltas. Comece fingindo que cada peça
é única.)

3.15 Considere o problema de mover k cavalos de k casas iniciais s1, . . . , sk a k quadrados de objetivo
g1, . . . , gk, em um tabuleiro de xadrez ilimitado, sujeito à regra de que dois cavalos não podem pousar na
mesma casa ao mesmo tempo. Cada ação consiste em mover até k cavaleiros simultaneamente. Gostaríamos
de completar a manobra no menor número de ações.

a. Qual é o fator de ramificação máximo neste espaço de estados, expresso como uma função de k?

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

118 Capítulo 3. Resolução de problemas por pesquisa

b. Suponha que hi seja uma heurística admissível para o problema de mover o cavalo i para o objetivo gi por si
só. Quais das seguintes heurísticas são admissíveis para o problema k-cavaleiro? Desses, qual é o melhor?
(i) min{h1, . . . , hk}. (ii)

max{h1, . . . , hk}. (iii) oi .

qui = 1

3.16 Suponha que haja dois amigos morando em cidades diferentes em um mapa, como o mapa da Romênia
mostrado na Figura 3.2. A cada turno, podemos mover cada amigo simultaneamente para uma cidade vizinha no
mapa. O tempo necessário para se deslocar da cidade i até a vizinha j é igual à distância rodoviária d(i, j) entre as
cidades, mas a cada curva o amigo que chegar primeiro deve esperar até que o outro chegue (e chame o primeiro
em seu telefone celular) antes que o próximo turno possa começar. Queremos que os dois amigos se encontrem o
mais rápido possível.

a. Escreva uma formulação detalhada para este problema de busca. (Você achará útil definir alguma notação
formal aqui.) b. Seja D(i, j) a
distância em linha reta entre quaisquer duas cidades i e j. Quais, se houver, das seguintes funções heurísticas
são admissíveis? (i) D(i, j); (ii) 2 · D(i, j); (iii)
D(i, j)/2.
c. Existem mapas completamente conectados para os quais não existe solução? d.
Existem mapas em que todas as soluções exigem que um amigo visite a mesma cidade duas vezes?

3.17 Mostre que os estados do quebra-cabeça de 8 são divididos em dois conjuntos disjuntos, de modo que
qualquer estado é alcançável a partir de qualquer outro estado no mesmo conjunto, enquanto nenhum estado é
alcançável a partir de qualquer estado do outro conjunto. (Dica: consulte Berlekamp et al. (1982).) Desenvolva um
procedimento que lhe diga em qual conjunto um determinado estado está e explique por que isso é bom para gerar
estados aleatórios.

3.18 Considere o problema de n-rainhas usando a formulação incremental “eficiente” fornecida na página 74.
Explique por que o tamanho do espaço de estado é de pelo menos ÿ3 n! e estimar o maior n para o qual a
exploração exaustiva é viável. (Dica: obtenha um limite inferior para o fator de ramificação considerando o número
máximo de casas que uma rainha pode atacar em qualquer coluna.)

3.19 Um espaço de estados finito sempre leva a uma árvore de busca finita? Que tal um espaço de estado finito
que é uma árvore? Você pode ser mais preciso sobre quais tipos de espaços de estado sempre levam a árvores de
busca finitas? (Adaptado de Bender, 1996.)

3.20 Prove que GRAPH-SEARCH satisfaz a propriedade de separação de grafos ilustrada na Figura 3.9. (Dica:
comece mostrando que a propriedade é válida no início e, em seguida, mostre que, se for válida antes de uma
iteração do algoritmo, será válida posteriormente.) Descreva um algoritmo de busca que viole a propriedade.

3.21 Forneça uma formulação de problema completa para cada um dos itens a seguir. Escolha uma formulação
que seja precisa o suficiente para ser implementada.

a. Você deve colorir um mapa planar usando apenas quatro cores, de forma que duas regiões adjacentes não
tenham a mesma cor.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

Seção 3.7. Resumo 119

b. Um macaco de 3 pés de altura está em uma sala onde algumas bananas estão suspensas no teto de 8 pés.
Ele gostaria de pegar as bananas. A sala contém duas caixas empilháveis, móveis e escaláveis de 3 pés de
altura.
c. Você tem um programa que gera a mensagem “registro de entrada ilegal” quando alimentado com um
determinado arquivo de registros de entrada. Você sabe que o processamento de cada registro é independente
dos outros registros. Você quer descobrir qual registro é ilegal. d. Você
tem três jarros, medindo 12 galões, 8 galões e 3 galões, e uma torneira de água.
Você pode encher os jarros ou esvaziá-los de um para o outro ou no chão. Você precisa medir exatamente
um galão.

3.22 O problema dos missionários e canibais costuma ser formulado da seguinte forma. Três missionários e três
canibais estão de um lado de um rio, junto com um barco que pode levar uma ou duas pessoas. Encontre uma
maneira de levar todos para o outro lado, sem nunca deixar um grupo de missionários em um lugar em menor
número que os canibais daquele lugar. Este problema é famoso em IA porque foi o tema do primeiro artigo que
abordou a formulação de problemas do ponto de vista analítico (Amarel, 1968).

a. Formule o problema com precisão, fazendo apenas as distinções necessárias para garantir uma
solução válida. Desenhe um diagrama do espaço de estados completo.
b. Implemente e resolva o problema de forma otimizada usando um algoritmo de busca apropriado. É uma boa
ideia verificar se há estados repetidos? c. Por que
você acha que as pessoas têm dificuldade em resolver esse quebra-cabeça, dado que o espaço de estado
é tão simples?

3.23 Implemente duas versões da função RESULT(s, a) para o quebra-cabeça de 8: uma que copia e edita a
estrutura de dados para os nós pais e outra que modifica o estado pai diretamente (desfazendo as modificações
conforme necessário). Escreva versões de pesquisa em profundidade de aprofundamento iterativo que use essas
funções e compare seu desempenho.

3.24 Na página 90, mencionamos a busca de alongamento iterativo, um análogo iterativo da busca de custo
uniforme. A ideia é usar limites crescentes no custo do caminho. Se for gerado um nó cujo custo de caminho exceda
o limite atual, ele é imediatamente descartado. Para cada nova iteração, o limite é definido como o menor custo de
caminho de qualquer nó descartado na iteração anterior.

a. Mostre que esse algoritmo é ótimo para custos gerais de caminho. b.


Considere uma árvore uniforme com fator de ramificação b, profundidade da solução d e custos de passo unitário.
Quantas iterações o alongamento iterativo exigirá? c. Agora considere

os custos das etapas extraídos do intervalo contínuo [ÿ, 1] onde 0 < ÿ < 1. Como
muitas iterações são necessárias no pior caso?
d. Implemente o algoritmo e aplique-o a instâncias dos problemas do quebra-cabeça de 8 e do vendedor
ambulante. Compare o desempenho do algoritmo com o da pesquisa de custo uniforme e comente seus
resultados.

3.25 Descreva um espaço de estado no qual a busca de aprofundamento iterativo tem desempenho muito pior do
2
que a busca em profundidade (por exemplo, O(n
) vs. O(n)).

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google

Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

120 Capítulo 3. Resolução de problemas por pesquisa

3.26 Escreva um programa que receba como entrada dois URLs de páginas da Web e encontre um caminho de
links de um para o outro. O que é uma estratégia de busca apropriada? A pesquisa bidirecional é uma boa ideia?
Um mecanismo de busca poderia ser usado para implementar uma função predecessora?

3.27 Considere o problema de encontrar o caminho mais curto entre dois pontos em um plano que possui
obstáculos poligonais convexos conforme mostrado na Figura 3.32. Esta é uma idealização do problema que um
robô tem que resolver para navegar em um ambiente lotado.

a. Suponha que o espaço de estado consiste em todas as posições (x, y) no plano. quantos estados
existem? Quantos caminhos existem para a meta?

b. Explique brevemente por que o caminho mais curto de um vértice do polígono para qualquer outro na cena
deve consistir em segmentos de linha reta que unem alguns dos vértices dos polígonos.
Defina um bom espaço de estados agora. Qual é o tamanho desse espaço de estado?

c. Defina as funções necessárias para implementar o problema de busca, incluindo uma função ACTIONS
que recebe um vértice como entrada e retorna um conjunto de vetores, cada um dos quais mapeia o
vértice atual para um dos vértices que podem ser alcançados em uma linha reta. (Não se esqueça dos
vizinhos no mesmo polígono.) Use a distância em linha reta para a função heurística.

d. Aplique um ou mais dos algoritmos deste capítulo para resolver uma variedade de problemas no
domínio e comente sobre seu desempenho.

Figura 3.32 Uma cena com obstáculos poligonais. S e G são os estados inicial e final.

3.28 Compare o desempenho de Aÿ e RBFS em um conjunto de problemas gerados aleatoriamente nos domínios
de 8 quebra-cabeças (com distância de Manhattan) e TSP (com MST — consulte o Exercício 3.38).
Discuta seus resultados. O que acontece com o desempenho de RBFS quando um pequeno número aleatório
é adicionado aos valores heurísticos no domínio de 8 quebra-cabeças?

3.29 Na página 69, dissemos que não consideraríamos problemas com custos de caminho negativos. Neste
exercício, exploramos isso com mais profundidade.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

Seção 3.7. Resumo 121

a. Suponha que as ações possam ter custos negativos arbitrariamente grandes; explique por que essa possibilidade
forçaria qualquer algoritmo ótimo a explorar todo o espaço de estados. b. Ajuda se insistirmos
que os custos das etapas devem ser maiores ou iguais a alguma constante negativa c? Considere árvores e
gráficos. c. Suponha que haja um conjunto de ações
que formam um loop no espaço de estado, de modo que a execução do conjunto em alguma ordem resulta em
nenhuma mudança líquida no estado. Se todas essas ações têm custo negativo, o que isso implica sobre o
comportamento ótimo de um agente em tal ambiente?

d. Pode-se facilmente imaginar ações com alto custo negativo, mesmo em domínios como localização de rotas. Por
exemplo, alguns trechos de estrada podem ter paisagens tão bonitas que superam em muito os custos normais
em termos de tempo e combustível. Explique, em termos precisos, no contexto da busca de espaço de estado,
por que os humanos não dirigem loops cênicos indefinidamente e explique como definir o espaço de estado e
as ações para encontrar rotas de modo que agentes artificiais também possam evitar loops.

e. Você consegue pensar em um domínio real no qual os custos das etapas sejam tais que causem loops?

3.30 Considere o problema do mundo do vácuo definido na Figura 2.2.

a. Qual dos algoritmos definidos neste capítulo seria apropriado para este problema?
O algoritmo deve usar pesquisa em árvore ou pesquisa em gráfico?
b. Aplique o algoritmo escolhido para calcular uma sequência ideal de ações para um mundo 3 × 3 cujo estado
inicial tenha sujeira nos três quadrados superiores e o agente no centro. c. Construa um agente de busca
para o mundo do vácuo e avalie seu desempenho em um conjunto de 3 × 3 mundos com probabilidade de 0,2 de
sujeira em cada quadrado. Inclua o custo de pesquisa e o custo do caminho na medida de desempenho,
usando uma taxa de câmbio razoável. d. Compare seu melhor agente de busca com um simples
agente de reflexo aleatório que suga se houver sujeira e se move aleatoriamente.

e. Considere o que aconteceria se o mundo fosse ampliado para n × n. Como varia o desempenho do agente de
busca e do agente de reflexo com n?

3.31 Trace a operação de busca Aÿ aplicada ao problema de ir de Lugoj a Bucareste usando a heurística de distância
em linha reta. Ou seja, mostre a sequência de nós que o algoritmo irá considerar e a pontuação f, g e h para cada nó.

3.32 Algumas vezes não existe uma boa função de avaliação para um problema, mas existe um bom método de
comparação: uma maneira de dizer se um nó é melhor que outro, sem atribuir valores numéricos a nenhum deles.
Mostre que isso é suficiente para fazer uma pesquisa do melhor primeiro. Existe um analógico de Aÿ para esta
configuração?

3.33 Prove cada uma das seguintes afirmações:

a. A busca em largura é um caso especial de busca de custo uniforme. b. Busca


em largura, busca em profundidade e busca por custo uniforme são casos especiais de
pesquisa do melhor primeiro.

c. A busca de custo uniforme é um caso especial de busca Aÿ .

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

122 Capítulo 3. Resolução de problemas por pesquisa

3.34 Crie um espaço de estado no qual Aÿ usando GRAPH-SEARCH retorna uma solução subótima com uma
função h(n) que é admissível, mas inconsistente.

3.35 Vimos na página 94 que a heurística da distância em linha reta desvia a busca gananciosa do melhor
primeiro para o problema de ir de Iasi para Fagaras. No entanto, a heurística é perfeita no problema oposto: ir
de Fagaras para Iasi. Existem problemas para os quais a heurística é enganosa em ambas as direções?

3.36 Invente uma função heurística para o quebra-cabeça de 8 que às vezes superestima e mostre como ela
pode levar a uma solução abaixo do ideal para um problema específico. (Você pode usar um computador para
ajudar, se quiser.) Prove que, se h nunca superestima em mais de c, Aÿ usando h retorna uma solução cujo
custo excede o da solução ótima em não mais que c.

3.37 Prove que se uma heurística for consistente, ela deve ser admissível. Construa uma heurística admissível
que não seja consistente.

3.38 O problema do caixeiro viajante (TSP) pode ser resolvido por meio da heurística da árvore geradora
mínima (MST), que é usada para estimar o custo de completar um passeio, dado que um passeio parcial já foi
construído. O custo MST de um conjunto de cidades é a menor soma dos custos de enlace de qualquer árvore
que conecte todas as cidades.
a. Mostre como essa heurística pode ser derivada de uma versão relaxada do TSP.

b. Mostre que a heurística MST domina a distância em linha reta. c. Escreva


um gerador de problemas para instâncias do TSP onde as cidades são representadas por
pontos aleatórios no quadrado unitário.
d. Encontre um algoritmo eficiente na literatura para construir o MST e use-o com busca de grafo Aÿ para
resolver instâncias do TSP.

3.39 Na página 106, definimos a relaxação do quebra-cabeça de 8 em que uma peça pode se mover do quadrado
A para o quadrado B se B estiver em branco. A solução exata deste problema define a heurística de Gaschnig
(Gaschnig, 1979). Explique por que a heurística de Gaschnig é pelo menos tão precisa quanto h1 (ladrilhos mal
posicionados) e mostre casos em que ela é mais precisa que h1 e h2 (distância de Manhattan). Você pode
sugerir uma maneira de calcular a heurística de Gaschnig com eficiência?

3.40 Demos duas heurísticas simples para o quebra-cabeça de 8: distância de Manhattan e peças mal colocadas.
Várias heurísticas na literatura pretendem melhorar isso - veja, por exemplo, Nils son (1971), Mostow e Prieditis
(1989) e Hansson et al. (1992). Teste essas afirmações implementando a heurística e comparando o desempenho
dos algoritmos resultantes.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

4 ALÉM DO CLÁSSICO
PROCURAR

No qual relaxamos as hipóteses simplificadoras do capítulo anterior, aproximando-nos assim


do mundo real.

O Capítulo 3 abordou uma única categoria de problemas: ambientes observáveis, determinísticos


e conhecidos em que a solução é uma sequência de ações. Neste capítulo, veremos o que acontece
quando essas suposições são relaxadas. Começamos com um caso bastante simples: as Seções 4.1 e
4.2 abordam algoritmos que executam busca puramente local no espaço de estados, avaliando e
modificando um ou mais estados atuais em vez de explorar sistematicamente caminhos a partir de um
estado inicial. Esses algoritmos são adequados para problemas em que o custo do caminho é irrelevante
e tudo o que importa é o próprio estado da solução. A família de algoritmos de busca local inclui métodos
inspirados em física estatística (recozimento simulado) e biologia evolutiva (algoritmos genéticos).

Então, nas Seções 4.3–4.4, examinamos o que acontece quando relaxamos as suposições de
determinismo e observabilidade. A ideia-chave é que, se um agente não puder prever exatamente qual
percepção receberá, precisará considerar o que fazer em cada contingência que suas percepções
possam revelar. Com a observabilidade parcial, o agente também precisará acompanhar os estados em
que pode estar.
Por fim, a Seção 4.5 investiga a busca online, na qual o agente se depara com um espaço de
estados inicialmente desconhecido e que deve ser explorado.

4.1 ALGORITMOS DE BUSCA LOCAL E PROBLEMAS DE OTIMIZAÇÃO

Os algoritmos de busca que vimos até agora são projetados para explorar os espaços de busca
sistematicamente. Essa sistematicidade é alcançada mantendo um ou mais caminhos na memória e
registrando quais alternativas foram exploradas em cada ponto ao longo do caminho e quais não foram.
Quando um objetivo é encontrado, o caminho para esse objetivo também constitui uma solução para o problema.
Em muitos problemas, no entanto, o caminho para a meta é irrelevante. Por exemplo, no problema
das 8 rainhas (ver página 73), o que importa é a configuração final das rainhas, não a ordem em que são
adicionadas. A mesma propriedade geral é válida para muitas aplicações importantes, como projeto de
circuito integrado, layout de chão de fábrica, programação de oficina, automação automática

123

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

124 Capítulo 4. Além da pesquisa clássica

programação, otimização de rede de telecomunicações, roteamento de veículos e gerenciamento de


portfólio.
Se o caminho para o objetivo não importa, podemos considerar uma classe diferente de algoritmos,
PESQUISA LOCAL aqueles que não se preocupam com os caminhos. Os algoritmos de busca local operam usando um
NÓ ATUAL único nó atual (em vez de vários caminhos) e geralmente se movem apenas para os vizinhos desse nó.
Normalmente, os caminhos seguidos pela pesquisa não são retidos. Embora os algoritmos de busca local
não sejam sistemáticos, eles têm duas vantagens principais: (1) usam muito pouca memória – geralmente
uma quantidade constante; e (2) eles podem frequentemente encontrar soluções razoáveis em espaços
de estado grandes ou infinitos (contínuos) para os quais os algoritmos sistemáticos são inadequados.
Além de encontrar objetivos, os algoritmos de busca local são úteis para resolver problemas de
OTIMIZAÇÃO
PROBLEMAS otimização pura, nos quais o objetivo é encontrar o melhor estado de acordo com uma função objetivo.
OBJETIVO
FUNÇÃO
Muitos problemas de otimização não se encaixam no modelo de busca “padrão” apresentado no Capítulo
3. Por exemplo, a natureza fornece uma função objetiva – aptidão reprodutiva – que a evolução darwiniana
poderia ser vista como uma tentativa de otimizar, mas não há um “teste de meta” e nenhum “custo do
caminho” para este problema.
Para entender a busca local, acharemos muito útil considerar a paisagem do espaço de estados
ESTADO-ESPAÇO
PAISAGEM (como na Figura 4.1). Uma paisagem tem tanto “localização” (definida pelo estado) quanto
“elevação” (definida pelo valor da função de custo heurística ou função objetivo). Se a elevação
MÍNIMO GLOBAL corresponder ao custo, então o objetivo é encontrar o vale mais baixo – um mínimo global; se a elevação
corresponder a uma função objetivo, então o objetivo é encontrar o pico mais alto – um máximo global
MÁXIMO GLOBAL . (Você pode converter de um para o outro apenas inserindo um sinal de menos.) Os algoritmos de
pesquisa local exploram esse cenário. Um algoritmo de busca local completo sempre encontra uma meta,
se existir; um algoritmo ótimo sempre encontra um mínimo/máximo global.

função objetiva
máximo global

ombro

máximo local

Máximo local “plano”

espaço de estado
Estado
atual

Figura 4.1 Uma paisagem de espaço de estado unidimensional na qual a elevação corresponde à função objetivo.
O objetivo é encontrar o máximo global. A busca de escalada modifica o estado atual para tentar melhorá-lo, como
mostra a seta. As várias características topográficas são definidas no texto.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

Seção 4.1. Algoritmos de busca local e problemas de otimização 125

função HILL-CLIMBING(problema) retorna um estado que é um máximo local

atual ÿ MAKE-NODE(problema.INITIAL-STATE) loop do


vizinho
ÿ um sucessor de valor mais alto de atual se vizinho.VALOR
ÿ atual.VALOR então retorna atual.ESTADO atual ÿ vizinho

Figura 4.2 O algoritmo de busca por subida de encosta, que é a técnica de busca local mais básica. A cada passo
o nó atual é substituído pelo melhor vizinho; nesta versão, isso significa o vizinho com o maior VALUE, mas se uma
estimativa de custo heurística h for usada, encontraríamos o vizinho com o menor h.

4.1.1 Busca de subida de encosta

ESCALADA O algoritmo de busca de subida de encosta ( versão de subida mais íngreme) é mostrado na Figura 4.2. É
STEEPEST ASCENT simplesmente um loop que se move continuamente na direção do valor crescente - ou seja, para cima. Ele
termina quando atinge um “pico” onde nenhum vizinho tem um valor maior. O algoritmo não mantém uma árvore
de busca, então a estrutura de dados para o nó atual precisa apenas registrar o estado e o valor da função
objetivo. A escalada de encostas não olha além dos vizinhos imediatos do estado atual. Isso se assemelha a
tentar encontrar o topo do Monte Everest em uma névoa espessa enquanto sofre de amnésia.

Para ilustrar a subida de colina, usaremos o problema das 8 rainhas apresentado na página 73. Os
algoritmos de busca local geralmente usam uma formulação de estado completo, em que cada estado tem 8
rainhas no tabuleiro, uma por coluna. Os sucessores de um estado são todos os estados possíveis gerados ao
mover uma única rainha para outro quadrado na mesma coluna (portanto, cada estado tem 8 × 7 = 56
sucessores). A função de custo heurística h é o número de pares de rainhas que estão se atacando, direta ou
indiretamente. O mínimo global desta função é zero, o que ocorre apenas em soluções perfeitas. A Figura 4.3(a)
mostra um estado com h = 17. A figura também mostra os valores de todos os seus sucessores, com os melhores
sucessores tendo h = 12. Algoritmos de escalada normalmente escolhem aleatoriamente entre o conjunto de
melhores sucessores, se houver mais do que um.

GREEDY LOCAL
PROCURAR
Às vezes, a escalada de colina é chamada de busca local gananciosa porque captura um bom estado
vizinho sem pensar com antecedência sobre para onde ir em seguida. Embora a ganância seja considerada um
dos sete pecados capitais, verifica-se que os algoritmos gananciosos geralmente funcionam muito bem. A
escalada de encosta geralmente faz um progresso muito rápido em direção a uma solução, porque geralmente é
muito fácil melhorar um estado ruim. Por exemplo, do estado da Figura 4.3(a), são necessários apenas cinco
passos para chegar ao estado da Figura 4.3(b), que tem h = 1 e é quase uma solução. Infelizmente, a escalada
de colinas costuma travar pelos seguintes motivos:

MÁXIMO LOCAL • Máximos locais: um máximo local é um pico maior que cada um de seus estados vizinhos, mas menor
que o máximo global. Os algoritmos de subida de encosta que atingem a vizinhança de um máximo local
serão atraídos para cima em direção ao pico, mas ficarão presos sem ter para onde ir. A Figura 4.1 ilustra
esquematicamente o problema. Mais

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

126 Capítulo 4. Além da pesquisa clássica

18 12 14 13 13 12 14 14

14 16 13 15 12 14 12 16

14 12 18 13 15 12 14 14

15 14 14 13 16 13 16

14 17 15 14 16 16

17 16 18 15 15

18 14 15 15 14 16

14 14 13 17 12 14 12 18

(a) (b)

Figura 4.3 (a) Um estado de 8 rainhas com estimativa de custo heurística h = 17, mostrando o valor de h para cada
possível sucessor obtido movendo uma rainha dentro de sua coluna. As melhores jogadas são marcadas. (b) Um
mínimo local no espaço de estados de 8 rainhas; o estado tem h = 1 , mas todo sucessor tem um custo maior.

concretamente, o estado na Figura 4.3(b) é um máximo local (isto é, um mínimo local para o custo h); cada
movimento de uma única rainha piora a situação. • Cumes: um cume é mostrado
CUME na Figura 4.4. As cristas resultam em uma sequência de máximos locais
isso é muito difícil para algoritmos gananciosos navegarem.
PLATÔ • Planaltos: um planalto é uma área da paisagem do espaço de estado onde a função objetivo é plana. Pode ser
OMBRO um máximo local plano, a partir do qual não existe saída ascendente, ou um acostamento, a partir do qual é
possível progredir. (Veja a Figura 4.1.) Uma busca por subida de encosta pode ser incapaz de encontrar o
caminho para fora do platô.

Em cada caso, o algoritmo atinge um ponto em que nenhum progresso está sendo feito. Partindo de um estado de 8
rainhas gerado aleatoriamente, a subida mais íngreme fica travada 86% do tempo, resolvendo apenas 14% das
instâncias do problema. Funciona rapidamente, dando apenas 4 passos em média quando
8 ÿ 17 milhões de estados.
é bem-sucedido e 3 quando fica preso - nada mal para um espaço de estado com 8
O algoritmo da Figura 4.2 para se atingir um platô onde o melhor sucessor tem o mesmo valor do estado atual.
Não seria uma boa ideia continuar - permitir um movimento lateral na esperança de que o platô seja realmente um
MOVIMENTO PARA O LADO ombro, como mostrado na Figura 4.1? A resposta geralmente é sim, mas devemos tomar cuidado. Se sempre
permitirmos movimentos laterais quando não houver movimentos ascendentes, um loop infinito ocorrerá sempre que
o algoritmo atingir um máximo local plano que não seja um ombro. Uma solução comum é colocar um limite no
número de movimentos laterais consecutivos permitidos. Por exemplo, poderíamos permitir até, digamos, 100
movimentos laterais consecutivos no problema das 8 rainhas. Isso aumenta a porcentagem de instâncias do problema
resolvidas por escalada de 14% para 94%. O sucesso tem um custo: as médias do algoritmo

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

Seção 4.1. Algoritmos de busca local e problemas de otimização 127

Figura 4.4 Ilustração de por que os cumes causam dificuldades para escalar colinas. A grade de estados
(círculos escuros) é sobreposta em uma crista ascendente da esquerda para a direita, criando uma
sequência de máximos locais que não estão diretamente conectados entre si. A partir de cada máximo local,
todas as ações disponíveis apontam para baixo.

aproximadamente 21 etapas para cada instância bem-sucedida e 64 para cada falha.


MONTE ESTOCÁSTICO

ESCALANDO Muitas variantes de escalada foram inventadas. A escalada estocástica escolhe aleatoriamente entre os
movimentos ascendentes; a probabilidade de seleção pode variar com a inclinação do movimento ascendente.
Isso geralmente converge mais lentamente do que a subida mais íngreme, mas em algumas paisagens do estado
MONTE DE PRIMEIRA ESCOLHA

ESCALANDO encontra soluções melhores. A escalada de primeira escolha implementa a escalada estocástica, gerando
sucessores aleatoriamente até que seja gerado um que seja melhor do que o estado atual. Esta é uma boa
estratégia quando um estado tem muitos (por exemplo, milhares) de sucessores.
O Exercício 4.12 pede que você investigue.
Os algoritmos de subida descritos até agora são incompletos – eles muitas vezes falham em encontrar um
objetivo quando existe porque podem ficar presos em máximos locais. A subida de rampa com reinício aleatório
RANDOM-RESTART

ESCALADA DE MONTANHA adota o conhecido ditado: “Se você não conseguir de primeira, tente, tente novamente”. Ele conduz uma série de
buscas de escalada a partir de estados iniciais gerados aleatoriamente,1 parando quando um objetivo é encontrado.
É completo com probabilidade próxima de 1, pela razão trivial de que eventualmente gerará um estado objetivo
como o estado inicial. Se cada busca de subida tem uma probabilidade p de sucesso, então o número esperado
de reinicializações necessárias é 1/p. Para instâncias de 8 rainhas sem movimentos laterais permitidos, p ÿ 0,14,
então precisamos de aproximadamente 7 iterações para encontrar uma meta (6 falhas e 1 sucesso). O número
esperado de etapas é o custo de uma iteração bem-sucedida mais (1 ÿ p)/p vezes o custo da falha, ou
aproximadamente 22 etapas no total. Quando permitimos movimentos laterais, 1/0,94 ÿ 1,06 iterações são
necessárias em média e (1 × 21) + (0,06/0,94) × 64 ÿ 25 passos. Para 8-rainhas, então, a subida de colina com
reinício aleatório é realmente muito eficaz. Mesmo para três milhões de rainhas, a abordagem pode encontrar
soluções em menos de

1 Gerar um estado aleatório a partir de um espaço de estado especificado implicitamente pode ser um problema difícil por si só.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

128 Capítulo 4. Além da pesquisa clássica

um minuto.2
O sucesso da subida de encosta depende muito da forma da paisagem do espaço de estados: se houver
poucos máximos e platôs locais, a subida de encosta com reinício aleatório encontrará uma boa solução muito
rapidamente. Por outro lado, muitos problemas reais têm uma paisagem que mais parece uma família amplamente
dispersa de porcos-espinhos carecas em um piso plano, com porcos-espinhos em miniatura vivendo na ponta de
cada agulha de porco-espinho, ad infinitum . Problemas NP-difíceis normalmente têm um número exponencial de
máximos locais para se fixar. Apesar disso, um máximo local razoavelmente bom geralmente pode ser encontrado
após um pequeno número de reinicializações.

4.1.2 Pesquisa de recozimento simulado

Um algoritmo de subida de colina que nunca faz movimentos “descendo” em direção a estados com menor valor
(ou maior custo) é garantido como incompleto, porque pode ficar preso em um máximo local.
Em contraste, um passeio puramente aleatório – isto é, movendo-se para um sucessor escolhido uniformemente
ao acaso do conjunto de sucessores – é completo, mas extremamente ineficiente. Portanto, parece razoável
tentar combinar a subida de encosta com uma caminhada aleatória de alguma forma que produza eficiência e
SIMULADO
ANELAMENTO
completude. O recozimento simulado é um algoritmo desse tipo. Na metalurgia, o recozimento é o processo
usado para temperar ou endurecer metais e vidro, aquecendo-os a uma temperatura elevada e depois resfriando-
os gradualmente, permitindo assim que o material atinja um estado cristalino de baixa energia. Para entender o
recozimento simulado, vamos mudar nosso ponto de vista da subida do GRADIENT DESCENT para a descida
do gradiente (ou seja, minimizando o custo) e imagine a tarefa de colocar uma bola de pingue-pongue na fenda mais profunda de
uma superfície irregular. Se apenas deixarmos a bola rolar, ela irá parar em um mínimo local. Se sacudirmos a
superfície, podemos quicar a bola para fora do mínimo local. O truque é sacudir com força suficiente para quicar
a bola para fora dos mínimos locais, mas não com força suficiente para desalojá-la do mínimo global. A solução
de recozimento simulado é começar agitando forte (ou seja, em alta temperatura) e depois reduzir gradualmente
a intensidade da agitação (ou seja, diminuir a temperatura).

O loop mais interno do algoritmo de recozimento simulado (Figura 4.5) é bastante semelhante à subida de
colina. Em vez de escolher o melhor movimento, no entanto, ele escolhe um movimento aleatório . Se a mudança
melhorar a situação, ela é sempre aceita. Caso contrário, o algoritmo aceita o movimento com alguma probabilidade
menor que 1. A probabilidade diminui exponencialmente com a “ruimidade” do movimento – a quantidade ÿE pela
qual a avaliação piora. A probabilidade também diminui à medida que a “temperatura” T diminui: movimentos
“ruins” são mais prováveis de serem permitidos no início quando a temperatura está alta, e tornam-se mais
improváveis à medida que T diminui. Pode-se provar que, se o cronograma diminuir T devagar o suficiente, o
algoritmo encontrará um ótimo global com probabilidade próxima de 1.

O recozimento simulado foi usado extensivamente pela primeira vez para resolver problemas de layout
VLSI no início de 1980. Tem sido amplamente aplicado ao agendamento de fábrica e outras tarefas de otimização
em larga escala. No Exercício 4.12, você é solicitado a comparar seu desempenho com o de uma subida de
colina com reinício aleatório no quebra-cabeça de 8 rainhas.

2 Luby et ai. (1993) provam que é melhor, em alguns casos, reiniciar um algoritmo de busca aleatória após um

determinado período de tempo fixo e que isso pode ser muito mais eficiente do que deixar cada busca continuar indefinidamente.
Proibir ou limitar o número de movimentos laterais é um exemplo disso.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

Seção 4.1. Algoritmos de busca local e problemas de otimização 129

função SIMULATED-ANNEALING(problem, schedule) retorna um estado de solução


entradas: problema, cronograma
de problemas , mapeamento de tempo para “temperatura”
variáveis locais: T, uma “temperatura” controlando a probabilidade de passos descendentes

current ÿ MAKE-NODE(problem.INITIAL-STATE) for t ÿ 1 to ÿ


do T ÿ schedule(t) se
T = 0 então retorna
current next ÿ um sucessor
selecionado aleatoriamente de current ÿE ÿ next.VALUE –
current.VALUE se ÿE > 0 então corrente ÿ
próxima ÿE/T senão corrente ÿ próxima
apenas com
probabilidade e

Figura 4.5 O algoritmo de busca de recozimento simulado, uma versão estocástica de subida de encosta onde
alguns movimentos de descida são permitidos. Os movimentos descendentes são aceitos prontamente no início do
cronograma de recozimento e, em seguida, com menos frequência com o passar do tempo. A entrada do
cronograma determina o valor de T em função do tempo.

4.1.3 Pesquisa de feixe local

Manter apenas um nó na memória pode parecer uma reação extrema ao problema de limitações de memória. O
FEIXE LOCAL
PROCURAR algoritmo de busca de feixe local3 rastreia k estados em vez de apenas um. Começa com k estados gerados
aleatoriamente. A cada passo, todos os sucessores de todos os k estados são gerados. Se qualquer um for uma
meta, o algoritmo para. Caso contrário, ele seleciona os k melhores sucessores da lista completa e repete.

À primeira vista, uma busca de feixe local com k estados pode parecer nada mais do que executar k
reinicializações aleatórias em paralelo, em vez de em sequência. Na verdade, os dois algoritmos são bastante
diferentes. Em uma pesquisa de reinício aleatório, cada processo de pesquisa é executado independentemente
dos outros. Em uma busca de feixe local, informações úteis são passadas entre os k threads de busca paralelos.
Por exemplo, se um estado gera vários sucessores bons e todos os outros kÿ1 estados geram sucessores ruins,
então o efeito é que o primeiro estado diz aos outros: “Venha aqui, a grama é mais verde!” O algoritmo abandona
rapidamente as buscas infrutíferas e move seus recursos para onde o maior progresso está sendo feito.

Em sua forma mais simples, a busca de feixe local pode sofrer com a falta de diversidade entre os k
estados - eles podem se concentrar rapidamente em uma pequena região do espaço de estados, tornando a
busca pouco mais do que uma versão cara de subida de colina. Uma variante chamada busca de feixe
FEIXE ESTOCÁSTICO
PROCURAR estocástico, análoga à subida de encosta estocástica, ajuda a aliviar esse problema. Em vez de escolher o
melhor k do pool de candidatos a sucessores, a busca estocástica de feixes escolhe k sucessores aleatoriamente,
com a probabilidade de escolher um dado sucessor sendo uma função crescente de seu valor. A busca de feixe
estocástico tem alguma semelhança com o processo de seleção natural, pelo qual os “sucessores” (filhos) de
um “estado” (organismo)

3 A busca de feixe local é uma adaptação da busca de feixe, que é um algoritmo baseado em caminho.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

130 Capítulo 4. Além da pesquisa clássica

24748552 24 31% 32752411 32748552 32748152

32752411 23 29% 24748552 24752411 24752411

24415124 20 26% 32752411 32752124 32252124

32543213 11 14% 24415124 24415411 24415417

(a) (b) (c) (d) (e)


População inicial Função de condicionamento físico Seleção Cruzamento Mutação

Figura 4.6 O algoritmo genético, ilustrado para strings de dígitos representando estados de 8 rainhas.
A população inicial em (a) é ranqueada pela função fitness em (b), resultando em pares para acasalamento em (c).
Eles produzem descendentes em (d), que estão sujeitos à mutação em (e).

povoar a próxima geração de acordo com seu “valor” (fitness).

4.1.4 Algoritmos Genéticos


GENÉTICO
ALGORITMO
Um algoritmo genético (ou AG) é uma variante da busca de feixe estocástico em que os estados sucessores
são gerados pela combinação de dois estados pais, em vez de modificar um único estado. A analogia com a
seleção natural é a mesma que na busca estocástica de feixes, exceto que agora estamos lidando com
reprodução sexual em vez de assexuada.
Assim como a busca por feixes, os AGs começam com um conjunto de k estados gerados aleatoriamente,
POPULAÇÃO chamados de população. Cada estado, ou indivíduo, é representado como uma string sobre um alfabeto finito
INDIVIDUAL – mais comumente, uma string de 0s e 1s. Por exemplo, um estado de 8 rainhas deve especificar as posições de
8 rainhas, cada uma em uma coluna de 8 quadrados e, portanto, requer 8 × log2 8 = 24 bits. Alternativamente,
o estado pode ser representado como 8 dígitos, cada um no intervalo de 1 a 8. (Veremos mais tarde que as duas
codificações se comportam de maneira diferente.) A Figura 4.6(a) mostra uma população de quatro strings de 8
dígitos representando 8- estados das rainhas.
A produção da próxima geração de estados é mostrada na Figura 4.6(b)–(e). Em (b), FUNÇÃO DE
APTIDÃO , cada estado é avaliado pela função objetivo ou (na terminologia AG) pela função de aptidão. Uma função de aptidão
deve retornar valores mais altos para melhores estados, portanto, para o problema das 8 rainhas, usamos o
número de pares de rainhas não atacantes , que tem um valor de 28 para uma solução.
Os valores dos quatro estados são 24, 23, 20 e 11. Nesta variante específica do algoritmo genético, a
probabilidade de ser escolhido para reprodução é diretamente proporcional à pontuação de aptidão e as
porcentagens são mostradas ao lado das pontuações brutas .
Em (c), dois pares são selecionados aleatoriamente para reprodução, de acordo com as probabilidades
em (b). Observe que um indivíduo é selecionado duas vezes e o outro não.4 Para cada par a ser acasalado, um
CROSSOVER ponto de cruzamento é escolhido aleatoriamente a partir das posições no cordão. Na Figura 4.6, os pontos de
cruzamento estão após o terceiro dígito no primeiro par e após o quinto dígito

4 Existem muitas variantes dessa regra de seleção. O método de abate, no qual todos os indivíduos abaixo de um determinado
limite são descartados, pode mostrar uma convergência mais rápida do que a versão aleatória (Baum et al., 1995).

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google

Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

Seção 4.1. Algoritmos de busca local e problemas de otimização 131

+ =

Figura 4.7 Os estados de 8 rainhas correspondentes aos dois primeiros pais na Figura 4.6(c) e ao primeiro filho na
Figura 4.6(d). As colunas sombreadas são perdidas na etapa de cruzamento e as colunas não sombreadas são
mantidas.

no segundo par.5 Em
(d), os próprios descendentes são criados cruzando as sequências-mãe no ponto de cruzamento.
Por exemplo, o primeiro filho do primeiro par recebe os três primeiros dígitos do primeiro pai e os dígitos
restantes do segundo pai, enquanto o segundo filho recebe os três primeiros dígitos do segundo pai e o
restante do primeiro pai. Os estados de 8 rainhas envolvidos nessa etapa de reprodução são mostrados
na Figura 4.7. O exemplo ilustra o fato de que, quando dois estados pais são bastante diferentes, a
operação de cruzamento pode produzir um estado muito distante de qualquer um dos estados pais.
Muitas vezes, a população é bastante diversa no início do processo, de modo que o cruzamento (como
o recozimento simulado) frequentemente dá grandes passos no espaço de estado no início do processo
de busca e passos menores mais tarde, quando a maioria dos indivíduos é bastante semelhante.

MUTAÇÃO Finalmente, em (e), cada localização está sujeita a mutação aleatória com uma pequena
probabilidade independente. Um dígito foi mutado no primeiro, terceiro e quarto descendentes. No
problema das 8 rainhas, isso corresponde a escolher uma rainha ao acaso e movê-la para um quadrado
aleatório em sua coluna. A Figura 4.8 descreve um algoritmo que implementa todas essas etapas.
Como a busca de feixe estocástico, os algoritmos genéticos combinam uma tendência ascendente
com exploração aleatória e troca de informações entre segmentos de busca paralelos. A principal
vantagem, se houver, dos algoritmos genéticos vem da operação de cruzamento. No entanto, pode-se
mostrar matematicamente que, se as posições do código genético forem permutadas inicialmente em
uma ordem aleatória, o cruzamento não traz nenhuma vantagem. Intuitivamente, a vantagem vem da
capacidade do crossover de combinar grandes blocos de letras que evoluíram independentemente para
desempenhar funções úteis, elevando assim o nível de granularidade em que a busca opera. Por
exemplo, pode ser que colocar as três primeiras rainhas nas posições 2, 4 e 6 (onde elas não se atacam)
constitua um bloco útil que pode ser combinado com outros blocos para construir uma solução.

ESQUEMA A teoria dos algoritmos genéticos explica como isso funciona usando a ideia de um esquema,
que é uma substring na qual algumas das posições podem ser deixadas sem especificação. Por
exemplo, o esquema 246***** descreve todos os estados de 8 rainhas nos quais as três primeiras rainhas estão em

5 É aqui que a codificação importa. Se uma codificação de 24 bits for usada em vez de 8 dígitos, o ponto de cruzamento
terá 2/3 de chance de estar no meio de um dígito, o que resulta em uma mutação essencialmente arbitrária desse dígito.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

132 Capítulo 4. Além da pesquisa clássica

função GENETIC-ALGORITHM(population, FITNESS-FN) retorna entradas individuais : população,


um conjunto de indivíduos
FITNESS-FN, uma função que mede a aptidão de um indivíduo

repetir
nova população ÿ conjunto vazio
para i = 1 para TAMANHO(população)
do x ÿ SELEÇÃO ALEATÓRIA(população, FITNESS-FN) y ÿ
SELEÇÃO ALEATÓRIA(população, FITNESS-FN) filho ÿ
REPRODUZIR(x , y) if ( pequena
probabilidade aleatória) então filho ÿ MUTATE(filho) adiciona filho à nova
população
população ÿ nova população
até que algum indivíduo esteja apto o suficiente, ou tenha decorrido tempo
suficiente, retorne o melhor indivíduo da população, de acordo com o FITNESS-FN

a função REPRODUCE(x , y) retorna entradas individuais :


x , y, pais individuais

n ÿ COMPRIMENTO(x ); c ÿnúmero aleatório de 1 a n return


APPEND(SUBSTRING(x , 1, c), SUBSTRING(y, c + 1, n))

Figura 4.8 Um algoritmo genético. O algoritmo é o mesmo diagramado na Figura 4.6, com uma variação: nessa
versão mais popular, cada acasalamento de dois pais produz apenas um descendente, não dois.

posições 2, 4 e 6 respectivamente. Strings que correspondem ao esquema (como 24613578) são


INSTÂNCIA chamadas de instâncias do esquema. Pode-se mostrar que, se a adequação média das instâncias de
um esquema estiver acima da média, o número de instâncias do esquema dentro da população crescerá
com o tempo. Claramente, é improvável que esse efeito seja significativo se os bits adjacentes não
estiverem totalmente relacionados entre si, porque haverá poucos blocos contíguos que fornecem um
benefício consistente. Os algoritmos genéticos funcionam melhor quando os esquemas correspondem
a componentes significativos de uma solução. Por exemplo, se a string é uma representação de uma
antena, então os esquemas podem representar componentes da antena, como refletores e defletores.
Um bom componente provavelmente será bom em uma variedade de designs diferentes. Isso sugere
que o uso bem-sucedido de algoritmos genéticos requer uma engenharia cuidadosa da representação.
Na prática, os algoritmos genéticos tiveram um impacto generalizado em problemas de otimização,
como layout de circuitos e escalonamento de oficinas. No momento, não está claro se o apelo dos
algoritmos genéticos decorre de seu desempenho ou de suas origens esteticamente agradáveis na
teoria da evolução. Ainda há muito trabalho a ser feito para identificar as condições sob as quais os
algoritmos genéticos funcionam bem.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

Seção 4.1. Algoritmos de busca local e problemas de otimização 133

EVOLUÇÃO E PESQUISA

A teoria da evolução foi desenvolvida em Charles Darwin's On the Origin of Species by


Means of Natural Selection (1859). (Algum crédito também é dado a Alfred Russel Wallace
(1858).) A idéia central é simples: variações (conhecidas como mutações) ocorrem na
reprodução e serão preservadas em gerações sucessivas aproximadamente na proporção
de seu efeito na aptidão reprodutiva.
A teoria de Darwin foi desenvolvida sem nenhum conhecimento de como as
características dos organismos podem ser herdadas e modificadas. As leis probabilísticas
que regem esses processos foram identificadas pela primeira vez por Gregor Mendel (1866),
um monge que fez experiências com ervilhas-de-cheiro. Muito mais tarde, Watson e Crick
(1953) identificaram a estrutura da molécula de DNA e seu alfabeto, AGTC (adenina,
guanina, timina, citosina). No modelo padrão, a variação ocorre tanto por mutações pontuais
na sequência de letras quanto por “crossover” (no qual o DNA de um descendente é gerado
pela combinação de longas seções de DNA de cada pai).
A analogia com algoritmos de busca local já foi descrita; a principal diferença entre a
busca de feixe estocástico e a evolução é o uso da reprodução sexual , em que os
sucessores são gerados a partir de múltiplos organismos em vez de apenas um. Os
mecanismos reais da evolução são, no entanto, muito mais ricos do que a maioria dos
algoritmos genéticos permite. Por exemplo, as mutações podem envolver reversões,
duplicações e movimentação de grandes pedaços de DNA; alguns vírus pegam emprestado
o DNA de um organismo e o inserem em outro; e existem genes transponíveis que não
fazem nada além de se copiarem milhares de vezes dentro do genoma. Existem até genes
que envenenam células de parceiros em potencial que não carregam o gene, aumentando
assim suas próprias chances de replicação. O mais importante é o fato de que os próprios
genes codificam os mecanismos pelos quais o genoma é reproduzido e traduzido em um
organismo. Nos algoritmos genéticos, esses mecanismos são um programa separado que
não é representado nas strings que estão sendo manipuladas.
A evolução darwiniana pode muito bem parecer um mecanismo ineficiente, tendo
gerado cegamente cerca de 1.045 organismos, sem melhorar nem um pouco sua heurística
de busca. Cinquenta anos antes de Darwin, entretanto, o outrora grande naturalista francês
Jean Lamarck (1809) propôs uma teoria da evolução segundo a qual traços adquiridos por
adaptação durante a vida de um organismo seriam transmitidos a seus descendentes.
Tal processo seria eficaz, mas não parece ocorrer na natureza. Muito mais tarde, James
Baldwin (1896) propôs uma teoria superficialmente semelhante: que o comportamento
aprendido durante a vida de um organismo poderia acelerar a taxa de evolução. Ao contrário
da teoria de Lamarck, a de Baldwin é inteiramente consistente com a evolução darwiniana,
porque se baseia em pressões de seleção operando em indivíduos que encontraram ótimos
locais entre o conjunto de comportamentos possíveis permitidos por sua composição
genética. Simulações de computador modernas confirmam que o “efeito Baldwin” é real,
desde que a evolução “comum” possa criar organismos cuja medida interna de desempenho
esteja de alguma forma correlacionada com a aptidão real.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

134 Capítulo 4. Além da pesquisa clássica

4.2 BUSCA LOCAL EM ESPAÇOS CONTÍNUOS

No Capítulo 2, explicamos a distinção entre ambientes discretos e contínuos, apontando que a maioria
dos ambientes do mundo real é contínua. No entanto, nenhum dos algoritmos que descrevemos
(exceto para escalada de primeira escolha e recozimento simulado) pode lidar com estados contínuos
e espaços de ação, porque eles têm fatores de ramificação infinitos. Esta seção fornece uma breve
introdução a algumas técnicas de busca local para encontrar soluções ótimas em espaços contínuos.
A literatura sobre esse tópico é vasta; muitas das técnicas básicas se originaram no século XVII, após
o desenvolvimento do cálculo por Newton e Leibniz.6 Encontraremos usos para essas técnicas em
várias partes do livro, incluindo os capítulos sobre aprendizagem, visão e robótica.

Comecemos com um exemplo. Suponha que queremos colocar três novos aeroportos em
qualquer lugar da Romênia, de modo que a soma das distâncias quadradas de cada cidade no mapa
(Figura 3.2) ao aeroporto mais próximo seja minimizada. Então o espaço de estados é definido pelas
coordenadas dos aeroportos: (x1, y1), (x2, y2) e (x3, y3). Este é um espaço de seis dimensões ;
VARIÁVEL também dizemos que os estados são definidos por seis variáveis. (Em geral, os estados são definidos
por um vetor n-dimensional de variáveis, x.) Mover-se neste espaço corresponde a mover um ou mais
aeroportos no mapa. A função objetivo f(x1, y1, x2, y2, x3, y3) é relativamente fácil de calcular para
qualquer estado particular, uma vez que calculamos as cidades mais próximas. Seja Ci o conjunto de
cidades mais próximas da posição atual do aeroporto i. Então, na vizinhança do estado atual, onde os
Cis permanecem constantes, temos
3
2 2
f(x1, y1, x2, y2, x3, y3) = (xi ÿ xc) + (yi ÿ yc) . (4.1)
i = 1 cÿCi

Esta expressão está correta localmente , mas não globalmente, porque os conjuntos Ci são funções
(descontínuas) do estado.
DISCRETIZAÇÃO Uma forma de evitar problemas contínuos é simplesmente discretizar a vizinhança de cada
estado. Por exemplo, podemos mover apenas um aeroporto por vez na direção x ou y por um valor
fixo ±ÿ. Com 6 variáveis, isso dá 12 sucessores possíveis para cada estado. Podemos então aplicar
qualquer um dos algoritmos de busca local descritos anteriormente. Também poderíamos aplicar
escalada estocástica e recozimento simulado diretamente, sem discretizar o espaço.
Esses algoritmos escolhem os sucessores aleatoriamente, o que pode ser feito gerando vetores aleatórios
de comprimento ÿ.
GRADIENTE Existem muitos métodos que tentam usar o gradiente da paisagem para encontrar um máximo.
O gradiente da função objetivo é um vetor ÿf que fornece a magnitude e a direção da inclinação mais
íngreme. Para o nosso problema, temos ÿf ÿx2
ÿf ÿf ÿf ÿf ÿf
ÿf = , , , , , .
ÿx1 ÿy1 ÿy2 ÿx3 ÿy3
Em alguns casos, podemos encontrar um máximo resolvendo a equação ÿf = 0. (Isso poderia ser feito,
por exemplo, se estivéssemos colocando apenas um aeroporto; a solução é a média aritmética de todos os

6 Um conhecimento básico de cálculo multivariado e aritmética vetorial é útil para a leitura desta seção.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

Seção 4.2. Pesquisa Local em Espaços Contínuos 135

coordenadas das cidades.) Em muitos casos, porém, essa equação não pode ser resolvida de forma fechada.
Por exemplo, com três aeroportos, a expressão do gradiente depende de quais cidades estão mais próximas
de cada aeroporto no estado atual. Isso significa que podemos calcular o gradiente localmente (mas não
globalmente); por exemplo, ÿf ÿx1

=2 (xi ÿ xc) . (4.2)


cÿC1

Dada uma expressão localmente correta para o gradiente, podemos executar a subida mais íngreme
atualizando o estado atual por meio da fórmula

x ÿ x + ÿÿf(x) ,

onde ÿ é uma pequena constante. Em outros casos, a função objetivo pode não estar disponível em uma
forma diferenciável – por exemplo, o valor de um determinado conjunto de localizações de aeroportos pode
ser determinado pela execução de algum pacote de simulação econômica em larga escala. Nesses casos,
EMPÍRICO
GRADIENTE
um chamado gradiente empírico pode ser determinado avaliando a resposta a pequenos incrementos e
decréscimos em cada coordenada. A busca em gradiente empírica é a mesma que a subida mais íngreme
em uma versão discretizada do espaço de estado.
Escondida sob a frase “ÿ é uma pequena constante” encontra-se uma enorme variedade de métodos
para ajustar ÿ. O problema básico é que, se ÿ for muito pequeno, serão necessários muitos passos; se ÿ for
PESQUISA DE LINHA muito grande, a busca pode ultrapassar o máximo. A técnica de busca linear tenta superar esse dilema
estendendo a direção do gradiente atual – geralmente dobrando repetidamente ÿ – até que f comece a
diminuir novamente. O ponto em que isso ocorre torna-se o novo estado atual. Existem várias escolas de
pensamento sobre como a nova direção deve ser escolhida neste momento.

NEWTON-RAPHSON Para muitos problemas, o algoritmo mais eficaz é o venerável método Newton-Raphson (Newton,
1671; Raphson, 1690). Esta é uma técnica geral para encontrar raízes de funções - isto é, resolver equações
da forma g(x) = 0. Funciona calculando uma nova estimativa para a raiz x de acordo com a fórmula de Newton

x ÿ x ÿ g(x)/gÿ (x) .

Para encontrar um máximo ou mínimo de f, precisamos encontrar x tal que o gradiente seja zero (isto é, ÿf(x)
= 0). Assim, g(x) na fórmula de Newton torna-se ÿf(x), e a equação de atualização pode ser escrita na forma
de matriz-vetor como
ÿ1
xÿxÿHf (x)ÿf(x) ,

HESSIANO onde Hf (x) é a matriz Hessiana das segundas derivadas, cujos elementos Hij são dados por ÿ 2f /ÿxiÿxj .
Para nosso exemplo de aeroporto, podemos ver na Equação (4.2) que Hf (x) é particularmente simples: os
elementos fora da diagonal são zero e os elementos da diagonal para o aeroporto i são apenas duas vezes o
número de cidades em Ci . Um cálculo rápido mostra que uma etapa da atualização move o
aeroporto i diretamente para o centróide de Ci , que é,o mínimo da expressão local para f da Equação (4.1).7
Em geral, problemas de alta dimensão, no entanto, calcular o

7 Em geral, a atualização de Newton-Raphson pode ser vista como ajustando uma superfície quadrática a f em x e, em seguida,
movendo-se diretamente para o mínimo dessa superfície — que também é o mínimo de f se f for quadrática.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

136 Capítulo 4. Além da pesquisa clássica

2n entradas do Hessian e invertê-lo torna-se caro, tantas versões aproximadas


do método de Newton-Raphson foram desenvolvidos.
Os métodos de busca local sofrem de máximos locais, cristas e platôs em espaços de estado
contínuos tanto quanto em espaços discretos. Reinicializações aleatórias e recozimento simulado podem
ser usados e geralmente são úteis. Espaços contínuos de alta dimensão são, no entanto, grandes lugares
nos quais é fácil se perder.
LIMITADO
OTIMIZAÇÃO Um tópico final com o qual um conhecimento passageiro é útil é a otimização restrita.
Um problema de otimização é restrito se as soluções devem satisfazer algumas restrições rígidas nos
valores das variáveis. Por exemplo, em nosso problema de localização de aeroportos, podemos restringir
os locais para dentro da Romênia e em terra firme (em vez de no meio de lagos). A dificuldade dos
problemas de otimização com restrições depende da natureza das restrições e da função objetivo. A
LINEAR
PROGRAMAÇÃO categoria mais conhecida é a dos problemas de programação linear , em que as restrições devem ser
desigualdades lineares formando uma região convexa8 e a função objetivo também é linear. Problemas
de programação linear podem ser resolvidos em tempo polinomial no número de variáveis.

A programação linear é provavelmente a classe de problemas de otimização mais amplamente


estudada e útil. É um caso especial do problema mais geral de otimização convexa, que permite que a
CONVEXO
OTIMIZAÇÃO região de restrição seja qualquer região convexa e o objetivo seja qualquer função que seja convexa
dentro da região de restrição. Sob certas condições, os problemas de otimização convexa também são
solucionáveis polinomialmente e podem ser viáveis na prática com milhares de variáveis. Vários problemas
importantes em aprendizado de máquina e teoria de controle podem ser formulados como problemas de
otimização convexa (consulte o Capítulo 20).

4.3 PESQUISA COM AÇÕES NÃO DETERMINÍSTICAS

No Capítulo 3, assumimos que o ambiente é totalmente observável e determinístico e que o agente sabe
quais são os efeitos de cada ação. Portanto, o agente pode calcular exatamente qual estado resulta de
qualquer sequência de ações e sempre sabe em qual estado está. Suas percepções não fornecem novas
informações após cada ação, embora, é claro, digam ao agente o estado inicial.

Quando o ambiente é parcialmente observável ou não determinístico (ou ambos), as percepções


tornam-se úteis. Em um ambiente parcialmente observável, cada percepção ajuda a restringir o conjunto
de possíveis estados em que o agente pode estar, tornando mais fácil para o agente atingir seus objetivos.
Quando o ambiente é não determinístico, as percepções dizem ao agente qual dos possíveis resultados
de suas ações realmente ocorreu. Em ambos os casos, as percepções futuras não podem ser
determinadas antecipadamente; e as ações futuras do agente dependerão dessas percepções futuras do
PLANO DE CONTINGÊNCIA ; então a solução para um problema não é uma sequência, mas um plano de contingência
ESTRATÉGIA (também conhecido como estratégia) que especifica o que fazer dependendo de quais percepções são
recebidas. Nesta seção, examinamos o caso de não determinismo, adiando a observabilidade parcial para a Seção 4.4.

8 Um conjunto de pontos S é convexo se a linha que une quaisquer dois pontos em S também está contida em S. Uma função é
convexa se o espaço “acima” dela forma um conjunto convexo; por definição, as funções convexas não têm mínimos locais.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google

Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

Seção 4.3. Pesquisando com ações não determinísticas 137

1 2

3 4

5 6

7 8

Figura 4.9 Os oito estados possíveis do mundo do vácuo; os estados 7 e 8 são estados objetivos.

4.3.1 O mundo do vácuo errático


Como exemplo, usaremos o mundo do vácuo, introduzido pela primeira vez no Capítulo 2 e definido como um
problema de busca na Seção 3.2.1. Lembre-se de que o espaço de estados tem oito estados, conforme
mostrado na Figura 4.9. Existem três ações - Esquerda, Direita e Chupar - e o objetivo é limpar toda a sujeira
(estados 7 e 8). Se o ambiente for observável, determinístico e completamente conhecido, então o problema
pode ser resolvido trivialmente por qualquer um dos algoritmos do Capítulo 3 e a solução é uma sequência de
ações. Por exemplo, se o estado inicial for 1, então a sequência de ação [Suck, Right, Suck] alcançará um
estado objetivo, 8.
Agora suponha que introduzimos o não determinismo na forma de um poderoso, mas errático
VÁCUO ERRÁTICO
MUNDO
aspirador de pó. No mundo do vácuo errático, a ação Suck funciona da seguinte maneira:

• Quando aplicado a um quadrado sujo, ele o limpa e, às vezes, limpa a sujeira em um quadrado adjacente
quadrado também.

• Quando aplicado em um quadrado limpo, às vezes deposita sujeira no carpete.9

Para fornecer uma formulação precisa desse problema, precisamos generalizar a noção de modelo de
transição do Capítulo 3. Em vez de definir o modelo de transição por uma função RESULT que retorna um
único estado, usamos uma função RESULTS que retorna um conjunto de possíveis estados de resultado. Por
exemplo, no mundo do vácuo errático, a ação Sugar no estado 1 leva a um estado no conjunto {5, 7} - a sujeira
no quadrado à direita pode ou não ser aspirada.
Também precisamos generalizar a noção de solução para o problema. Por exemplo, se começarmos
no estado 1, não existe uma única sequência de ações que resolva o problema. Em vez disso, precisamos de
um plano contingente como o seguinte:

[Suck, se State = 5 então [Certo, Suck] else [ ]] . (4.3)

9 Presumimos que a maioria dos leitores enfrenta problemas semelhantes e pode simpatizar com nosso agente. Pedimos desculpas
aos proprietários de eletrodomésticos modernos e eficientes que não possam usufruir deste dispositivo pedagógico.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação final.
©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

138 Capítulo 4. Além da pesquisa clássica

Assim, as soluções para problemas não determinísticos podem conter instruções if-then-else aninhadas ,
de modo que sejam árvores em vez de sequências. Isso permite a seleção de ações com base nas
contingências surgidas durante a execução. Muitos problemas no mundo físico real são problemas de
contingência, porque a previsão exata é impossível. Por esse motivo, muitas pessoas mantêm os olhos
abertos enquanto caminham ou dirigem.

4.3.2 Árvores de busca AND-OR

A próxima questão é como encontrar soluções contingentes para problemas não determinísticos. Como
no Capítulo 3, começamos construindo árvores de busca, mas aqui as árvores têm um caráter diferente.
Em um ambiente determinístico, a única ramificação é introduzida pelas próprias escolhas do agente
OU NÓ em cada estado. Chamaremos esses nós de OU nós. No mundo do vácuo, por exemplo, em um nó
OU , o agente escolhe Esquerda, Direita ou Sucção. Em um ambiente não determinístico, a ramificação
também é introduzida pela escolha do resultado do ambiente para cada ação. Chamaremos esses nós
E NÓ de E nós. Por exemplo, a ação Suck no estado 1 leva a um estado no conjunto {5, 7}, então o agente
precisaria encontrar um plano para o estado 5 e para o estado 7. Esses dois tipos de nós se alternam,
E-OU ÁRVORE levando a um AND -OR conforme ilustrado na Figura 4.10.

chupar Certo

7 5 2

META
chupar Certo Esquerda chupar

5 1 6 1 8 4
chupar
LAÇO LAÇO Esquerda
LAÇO META

8 5

META LAÇO

Figura 4.10 Os dois primeiros níveis da árvore de busca para o mundo do vácuo errático. Os nós de estado são
nós OU onde alguma ação deve ser escolhida. Nos nós AND , mostrados como círculos, cada resultado deve ser
tratado, conforme indicado pelo arco que liga os ramos de saída. A solução encontrada é mostrada em linhas em
negrito.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

Seção 4.3. Pesquisando com ações não determinísticas 139

função AND-OR-GRAPH-SEARCH(problema) retorna um plano condicional ou falha


OR-SEARCH(problema.INITIAL-STATE, problema, [ ])

função OR-SEARCH(estado, problema, caminho) retorna um plano condicional ou falha


se problem.GOAL-TEST(state) então retorne o plano vazio se
state estiver no caminho então retorne
falha para cada ação em problem.ACTIONS(state) faça
plano ÿ AND-SEARCH(RESULTADOS(estado, ação), problema, [estado |
caminho]) se plano = falha então retorne [ação |
plano] falha de retorno

função AND-SEARCH(estados, problema, caminho) retorna um plano condicional ou falha


para cada si nos estados
faça plani ÿ OR-SEARCH(si , problema,
caminho) se plani = falha então retorne
falha return [se s1 então planeje1 senão se s2 então planeje2 senão . . . se snÿ1 então plannÿ1 senão plann]

Figura 4.11 Um algoritmo para pesquisar grafos AND-OR gerados por ambientes não determinísticos.
Ele retorna um plano condicional que atinge um estado de meta em todas as circunstâncias. (A notação
[x | l] refere-se à lista formada pela adição do objeto x à frente da lista l.)

Uma solução para um problema de busca AND-OR é uma subárvore que (1) tem um nó objetivo em cada
folha, (2) especifica uma ação em cada um de seus nós OR e (3) inclui todos os ramos de saída em cada um de
seus nós AND . nós. A solução é mostrada em negrito na figura; corresponde ao plano dado na Equação (4.3).
(O plano usa a notação if-then-else para lidar com as ramificações AND , mas quando há mais de duas
ramificações em um nó, pode ser melhor usar uma construção case .) Modificando o agente básico de solução
de problemas mostrado na Figura 3.1 para executar soluções contingentes desse tipo é simples. Pode-se
também considerar um design de agente um pouco diferente, no qual o agente pode agir antes de encontrar um
plano garantido e lidar com algumas contingências apenas quando elas surgem durante a execução. Esse tipo
INTERCALANDO de intercalação de pesquisa e execução também é útil para problemas de exploração (consulte a Seção 4.5) e
para jogos (consulte o Capítulo 5).

A Figura 4.11 fornece um algoritmo recursivo em profundidade para pesquisa de grafos AND-OR . Um
aspecto fundamental do algoritmo é a maneira como ele lida com os ciclos, que geralmente surgem em problemas
não determinísticos (por exemplo, se uma ação às vezes não tem efeito ou se um efeito não intencional pode ser
corrigido). Se o estado atual for idêntico a um estado no caminho da raiz, ele retornará com falha. Isso não
significa que não haja solução do estado atual; significa simplesmente que, se houver uma solução não cíclica,
ela deve ser alcançável a partir da encarnação anterior do estado atual, para que a nova encarnação possa ser
descartada. Com essa verificação, garantimos que o algoritmo termine em todo espaço de estado finito, porque
todo caminho deve atingir uma meta, um beco sem saída ou um estado repetido. Observe que o algoritmo não
verifica se o estado atual é uma repetição de um estado em algum outro caminho da raiz, o que é importante
para a eficiência. O Exercício 4.3 investiga esta questão.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

140 Capítulo 4. Além da pesquisa clássica

chupar Certo

5 2

Certo

Figura 4.12 Parte do grafo de busca para o mundo do vácuo escorregadio, onde mostramos (alguns) ciclos
explicitamente. Todas as soluções para este problema são planos cíclicos porque não há como se mover de forma
confiável

Os gráficos AND-OR também podem ser explorados por métodos de largura primeiro ou melhor
primeiro, e há um análogo direto do algoritmo Aÿ para encontrar soluções ótimas. Indicadores são dados
nas notas bibliográficas no final do capítulo.

4.3.3 Tente, tente novamente

Considere o mundo do vácuo escorregadio, que é idêntico ao mundo do vácuo comum (não errático),
exceto que as ações de movimento às vezes falham, deixando o agente no mesmo local.
Por exemplo, mover para a direita no estado 1 leva ao conjunto de estados {1, 2}. A Figura 4.12 mostra
parte do grafo de busca; claramente, não há mais soluções acíclicas do estado 1, e CYCLIC SOLUTION
AND-OR-GRAPH-SEARCH retornaria com falha. Existe, porém, uma solução cíclica, que é continuar tentando o Certo
RÓTULO até dar certo. Podemos expressar essa solução adicionando um rótulo para denotar alguma parte do
plano e usar esse rótulo posteriormente, em vez de repetir o próprio plano.
Assim, nossa solução cíclica é

[Suck, L1 : Certo, se State = 5 então L1 mais Suck].

(Uma sintaxe melhor para a parte de loop deste plano seria “while State = 5 do Right.”)
Em geral, um plano cíclico pode ser considerado uma solução, desde que cada folha seja um estado
objetivo e uma folha seja alcançável de todos os pontos do plano. As modificações necessárias para
AND-OR-GRAPH-SEARCH são abordadas no Exercício 4.4. A principal percepção é que um loop no
espaço de estado de volta para um estado L se traduz em um loop no plano de volta ao ponto onde o
subplano para o estado L é executado.
Dada a definição de uma solução cíclica, um agente executando tal solução eventualmente
alcançará o objetivo desde que cada resultado de uma ação não determinística eventualmente ocorra.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

Seção 4.4. Pesquisando com Observações Parciais 141

Essa condição é razoável? Depende da razão para o não determinismo. Se a ação rolar um dado, então é
razoável supor que, eventualmente, sairá um seis. Se a ação for inserir a chave do cartão do hotel na
fechadura da porta e não funcionar da primeira vez, talvez funcione eventualmente ou talvez alguém tenha a
chave errada (ou o quarto errado!). Depois de sete ou oito tentativas, a maioria das pessoas presumirá que o
problema está na chave e retornará à recepção para obter uma nova. Uma forma de entender essa decisão é
dizer que a formulação inicial do problema (observável, não determinístico) é abandonada em favor de uma
formulação diferente (parcialmente observável, determinístico) onde a falha é atribuída a uma propriedade
não observável da chave. Teremos mais a dizer sobre esse assunto no Capítulo 13.

4.4 PESQUISA COM OBSERVAÇÕES PARCIAIS

Agora nos voltamos para o problema da observabilidade parcial, onde as percepções do agente não são
suficientes para definir o estado exato. Conforme observado no início da seção anterior, se o agente estiver
em um dos vários estados possíveis, uma ação pode levar a um dos vários resultados possíveis - mesmo que
o ambiente seja determinístico. O conceito-chave necessário para resolver problemas parcialmente observáveis
ESTADO DE CRENÇA é o estado de crença, representando a crença atual do agente sobre os possíveis estados físicos em que ele
pode estar, dada a sequência de ações e percepções até aquele ponto. Começamos com o cenário mais
simples para estudar estados de crença, que é quando o agente não tem nenhum sensor; então adicionamos
detecção parcial, bem como ações não determinísticas.

4.4.1 Busca sem observação


Quando as percepções do agente não fornecem nenhuma informação, temos o que é chamado de problema
SENSORLESS sensorless ou, às vezes, conformante . A princípio, pode-se pensar que o agente sensorless não tem
CONFORMANTE esperança de resolver um problema se não tiver ideia do estado em que se encontra; na verdade, os
problemas sem sensor são frequentemente solucionáveis.
No mundo do vácuo sem sensores, o agente sabe apenas que seu estado inicial é um dos conjuntos
{1, 2, 3, 4, 5, 6, 7, 8}. Agora, considere o que acontece se ele tentar a ação Certo. Isso fará com que ele fique
em um dos estados {2, 4, 6, 8} - o agente agora tem mais informações!
Além disso, a sequência de ação [Right,Suck] sempre terminará em um dos estados {4, 8}.
Finalmente, a sequência [Right,Suck,Left,Suck] é garantida para atingir o estado objetivo 7, não importa qual
COERÇÃO seja o estado inicial. Dizemos que o agente pode coagir o mundo para o estado 7.
Para resolver problemas sem sensoriamento, buscamos no espaço de estados de crença em vez de
estados físicos.10 Observe que no espaço de estado de crença, o problema é totalmente observável porque
o agente sempre conhece seu próprio estado de crença. Além disso, a solução (se houver) é sempre uma
sequência de ações. Isso ocorre porque, como nos problemas comuns do Capítulo 3, as percepções recebidas
após cada ação são completamente previsíveis — elas estão sempre vazias! Portanto, não há contingências
para planejar. Isso é verdade mesmo se o ambiente não for determinístico.
É instrutivo ver como o problema de busca do estado de crença é construído. Suponha

10 Em um ambiente totalmente observável, cada estado de crença contém um estado físico. Assim, podemos ver os algoritmos no
Capítulo 3 como pesquisando em um espaço de estado de crença de estados de crença singleton.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

142 Capítulo 4. Além da pesquisa clássica

o problema físico subjacente P é definido por ACTIONSP STEP- , RESULTP, GOAL-TESTP ,


e
COSTP . Então podemos definir o problema sensorless correspondente da seguinte forma:

• Estados de crença: Todo o espaço de estado de crença contém todos os conjuntos possíveis de estados
N
Se P tiver N estados, então o problema sensorless tem até 2 físicos. estados, embora muitos possam
inalcançáveis a partir do estado inicial.

• Estado inicial: Tipicamente o conjunto de todos os estados em P, embora em alguns casos o agente
ter mais conhecimento do que isso.
• Ações: Isso é um pouco complicado. Suponha que o agente esteja no estado de crença b = {s1, s2},
mas ACTIONSP (s1) = ACTIONSP (s2); então o agente não tem certeza de quais ações são legais.
Se assumirmos que emitir uma ação ilegal não tem efeito sobre o meio ambiente, então é seguro fazer
a união de todas as ações em qualquer um dos estados físicos no estado de crença atual b:

AÇÕES(b) = AÇÕESSP (ões) .


sÿb

Por outro lado, se uma ação ilegal pode ser o fim do mundo, é mais seguro permitir apenas a
interseção, ou seja, o conjunto de ações legais em todos os estados. Para o mundo do vácuo, todo
estado tem as mesmas ações legais, então união e interseção dão o mesmo resultado. • Modelo
de transição: O agente não sabe qual estado no estado de crença é o correto, pelo que sabe, pode
chegar a qualquer um dos estados resultantes da aplicação da ação a um dos estados físicos da
crença estado. Para ações determinísticas, o conjunto de estados que podem ser alcançados é

bÿ = RESULTADO(b, a) = {s ÿ ÿ:s = RESULTADOP (s, a) es ÿ b} .


ÿ
Com ações determinísticas, b tem nunca é maior que b. Com ações não determinísticas,

ÿ
ÿb
= RESULTADO(b, a) = {s ÿ:s ÿ RESULTSP (s, a) es ÿ b}
=
RESULTADOSSP (s,a) .
sÿb

que pode ser maior que b, como mostra a Figura 4.13. O processo de geração do novo estado de
PREDIÇÃO crença após a ação é chamado de etapa de previsão ; a notação b PREDICTP (b, a) será útil.
ÿ =

• Teste de objetivo: O agente deseja um plano que funcione com certeza, o que significa que um estado
de crença satisfaz o objetivo somente se todos os estados físicos nele satisfizerem GOAL-TESTP . O
agente pode acidentalmente atingir o objetivo antes, mas não saberá que o fez. • Custo do
caminho: Isso também é complicado. Se a mesma ação pode ter custos diferentes em estados diferentes,
então o custo de realizar uma ação em um determinado estado de crença pode ser um dos vários
valores. (Isso dá origem a uma nova classe de problemas, que exploramos no Exercício 4.7.)
Por enquanto, assumimos que o custo de uma ação é o mesmo em todos os estados e, portanto, pode
ser transferido diretamente do problema físico subjacente.

A Figura 4.14 mostra o espaço de estado de crença alcançável para o mundo de vácuo determinístico e sem
sensores. Existem apenas 12 estados de crença alcançáveis em 28 = 256 possíveis estados de crença.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

Seção 4.4. Pesquisando com Observações Parciais 143

1 2 1 2

3 4 3 4

(a) (b)

Figura 4.13 (a) Prevendo o próximo estado de crença para o mundo do vácuo sem sensores com uma ação
determinística, Certo. (b) Previsão para o mesmo estado de crença e ação na versão escorregadia do mundo do
vácuo sem sensores.

As definições anteriores permitem a construção automática da formulação do problema do estado de crença a


partir da definição do problema físico subjacente. Feito isso, podemos aplicar qualquer um dos algoritmos de busca do
Capítulo 3. Na verdade, podemos fazer um pouco mais do que isso. Na pesquisa de gráfico “comum”, os estados recém-
gerados são testados para ver se são idênticos aos estados existentes. Isso também funciona para estados de crença;
por exemplo, na Figura 4.14, a sequência de ação [Chupar, Esquerda, Chupar] começando no estado inicial atinge o
mesmo estado de crença que [Direita, Esquerda, Chupar], ou seja , {5, 7}. Agora, considere o estado de crença
alcançado por [Esquerda], ou seja, {1, 3, 5, 7}. Obviamente, isso não é idêntico a {5, 7}, mas é um superconjunto. É fácil
provar (Exercício 4.6) que se uma sequência de ações é uma solução para um estado de crença b, também é uma
solução para qualquer subconjunto de b. Portanto, podemos descartar um caminho que alcance {1, 3, 5, 7} se {5, 7} já
tiver sido gerado. Por outro lado, se {1, 3, 5, 7} já foi gerado e considerado solucionável, qualquer subconjunto, como {5,
7}, é garantido como solucionável. Esse nível extra de poda pode melhorar drasticamente a eficiência da solução de
problemas sem sensor.

Mesmo com essa melhoria, no entanto, a solução de problemas sem sensores, como descrevemos, raramente é
viável na prática. A dificuldade não é tanto a vastidão do espaço do estado de crença - mesmo que seja exponencialmente
maior do que o espaço do estado físico subjacente; na maioria dos casos, o fator de ramificação e o comprimento da
solução no espaço de estado de crença e no espaço de estado físico não são tão diferentes. A verdadeira dificuldade
reside no tamanho de cada estado de crença. Por exemplo, o estado de crença inicial para o mundo do vácuo de 10 ×
100
10 contém 100 × 2 1032 estados físicos — muito demais se usarmos a representação atômica, que é ou por volta

uma lista explícita de estados.

Uma solução é representar o estado de crença por alguma descrição mais compacta. Em inglês, poderíamos
dizer que o agente conhece “Nothing” no estado inicial; depois de mover para a esquerda, poderíamos dizer: “Não na
coluna mais à direita” e assim por diante. O Capítulo 7 explica como fazer isso em um esquema de representação formal.
Quando tal esquema pode ser desenvolvido, os solucionadores de problemas sem sensores são surpreendentemente
úteis, principalmente porque não dependem de sensores funcionando corretamente.
Em sistemas de manufatura, por exemplo, muitos métodos engenhosos foram desenvolvidos para orientar as peças
corretamente a partir de uma posição inicial desconhecida usando uma sequência de ações com

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

144 Capítulo 4. Além da pesquisa clássica

eu

eu R

S S

eu R
eu
S S

R
LR eu R

eu
S S

Figura 4.14 A porção alcançável do espaço de estado de crença para o mundo determinístico, sensor menos
vácuo. Cada caixa sombreada corresponde a um único estado de crença. Em qualquer ponto, o agente está em
um determinado estado de crença, mas não sabe em qual estado físico está. O estado de crença inicial (total
ignorância) é a caixa central superior. As ações são representadas por links rotulados. Auto-loops são omitidos
para maior clareza.

sem sentir nada.


Outra abordagem é evitar os algoritmos de busca padrão, que tratam os estados de crença como caixas
pretas, assim como qualquer outro estado de problema. Em vez disso, podemos olhar dentro dos estados de
INCREMENTAL
CRENÇA-ESTADO
crença e desenvolver algoritmos incrementais de busca de estado de crença que construam a solução um
PROCURAR

estado físico por vez. Por exemplo, no mundo do vácuo sem sensores, o estado de crença inicial é {1, 2, 3, 4, 5,
6, 7, 8} e temos que encontrar uma sequência de ação que funcione em todos os 8 estados. Podemos fazer isso
primeiro encontrando uma solução que funcione para o estado 1; então verificamos se funciona para o estado 2;
caso contrário, volte e encontre uma solução diferente para o estado 1 e assim por diante. Assim como uma
busca AND-OR precisa encontrar uma solução para cada ramificação em um nó AND , esse algoritmo precisa
encontrar uma solução para cada estado no estado de crença; a diferença é que a busca AND-OR pode encontrar
uma solução diferente para cada ramificação, enquanto uma busca incremental por estado de crença precisa
encontrar uma solução que funcione para todos os estados.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

Seção 4.4. Pesquisando com Observações Parciais 145

A principal vantagem da abordagem incremental é que ela normalmente é capaz de detectar falhas muito
rapidamente - quando um estado de crença é insolúvel, geralmente é o caso de um pequeno subconjunto do
estado de crença, consistindo nos primeiros estados examinados, também é insolúvel. Em alguns casos, isso
leva a uma aceleração proporcional ao tamanho dos estados de crença, que podem ser tão grandes quanto o
próprio espaço de estado físico.
Mesmo o algoritmo de solução mais eficiente não é muito útil quando não existem soluções. Há muitas
coisas que não podem ser feitas sem sentir. Por exemplo, o quebra-cabeça de 8 sensores sem sensor é
impossível. Por outro lado, um pouco de percepção pode ajudar bastante. Por exemplo, cada instância do
quebra-cabeça de 8 é solucionável se apenas um quadrado estiver visível - a solução envolve mover cada
ladrilho sucessivamente para o quadrado visível e, em seguida, acompanhar sua localização.

4.4.2 Como as observações fornecem informações

Para um problema geral parcialmente observável, temos que especificar como o ambiente gera percepções para
o agente. Por exemplo, podemos definir o mundo de vácuo de detecção local como aquele em que o agente
possui um sensor de posição e um sensor de sujeira local, mas nenhum sensor capaz de detectar sujeira em
outros quadrados. A especificação formal do problema inclui uma função PERCEPT(s) que retorna a percepção
recebida em um determinado estado. (Se a detecção for não determinística, então usamos uma função
PERCEPTS que retorna um conjunto de percepções.) Por exemplo, no mundo do vácuo de detecção local, a
PERCEPÇÃO no estado 1 é [A, Sujo]. Problemas totalmente observáveis são um caso especial em que
PERCEPT(s) = s para cada estado s, enquanto problemas sem sensores são um caso especial em que
PERCEPT(s) = nulo.
Quando as observações são parciais, geralmente é o caso de vários estados poderem ter produzido uma
determinada percepção. Por exemplo, a percepção [A, Sujo] é produzida pelo estado 3, bem como pelo estado
1. Portanto, dado isso como a percepção inicial, o estado de crença inicial para o problema do mundo do vácuo
de detecção local será {1, 3}. As AÇÕES, STEP-COST e GOAL-TEST são construídas a partir do problema
físico subjacente, assim como para problemas sem sensores, mas o modelo de transição é um pouco mais
complicado. Podemos pensar nas transições como ocorrendo em três estágios, conforme mostrado na Figura
4.15:

• O estágio de predição é o mesmo para problemas sensorless: dada a ação a no estado de crença b, o
estado de crença predito é ˆb = PREDICT(b, a).
• O estágio de observação determina o conjunto de percepções que podem ser observadas no estado de
crença previsto:

PERCEPÇÕES-POSSÍVEIS( ˆb) = {o : o = PERCEPÇÃO(s) es ÿ ˆb} .

• O estágio de atualização determina o estado de crença que resultaria de cada uma das percepções
possíveis. O novo estado de crença bo é apenas o conjunto de estados em ˆb que poderia ter produzido
a percepção o:

bo = ATUALIZAR( ˆb, o) = {s : o = PERCEBER(s) e s ÿ ˆb} .

Observe que cada estado de crença atualizado bo não pode ser maior que o estado de crença previsto ˆb.
Além disso, para detecção determinística, os estados de crença para as diferentes percepções possíveis
serão disjuntos, formando uma partição do estado de crença previsto original.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

146 Capítulo 4. Além da pesquisa clássica

[B, Sujo] 2
Certo
1 2
(a)
3 4

[B, Limpo] 4

2
[B, Sujo]

Certo 2

1 1 [A, Sujo] 1
(b)
3 3 3

[B, Limpo]
4

Figura 4.15 Dois exemplos de transições em mundos de vácuo de detecção local. (a) No mundo determinístico,
Right é aplicado no estado de crença inicial, resultando em um novo estado de crença com dois estados físicos
possíveis; para esses estados, as percepções possíveis são [B, Sujo] e [B, Limpo], levando a dois estados de
crença, cada um dos quais é um singleton. (b) No mundo escorregadio, Right é aplicado no estado de crença
inicial, dando um novo estado de crença com quatro estados físicos; para esses estados, as percepções possíveis
são [A, Sujo], [B, Sujo] e [B, Limpo], levando a três estados de crença, conforme mostrado.

Juntando essas três etapas, obtemos os possíveis estados de crença resultantes de uma determinada
ação e as possíveis percepções subsequentes:

RESULTS(b, a) = {bo : bo = UPDATE(PREDICT(b, a), o) e


o ÿ PERCEPÇÕES POSSÍVEIS(PREDIÇÃO(b, a))} . (4.4)

Novamente, o não determinismo no problema parcialmente observável vem da incapacidade de


predizer exatamente qual percepção será recebida após a ação; O não determinismo subjacente no
ambiente físico pode contribuir para essa incapacidade, ampliando o estado de crença no estágio de
previsão, levando a mais percepções no estágio de observação.

4.4.3 Resolvendo problemas parcialmente observáveis

A seção anterior mostrou como formular um problema de estado de crença não determinístico - em
particular, a função RESULTS - de um problema físico subjacente e o PERCEPT

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

Seção 4.4. Pesquisando com Observações Parciais 147

3
chupar Certo

[A, Limpo] [B, Sujo] [B, Limpo]

5
2 4

Figura 4.16 O primeiro nível da árvore de busca AND-OR para um problema no mundo do vácuo de detecção
local; Suck é o primeiro passo da solução.

função. Dada tal formulação, o algoritmo de busca AND-OR da Figura 4.11 pode ser aplicado diretamente
para derivar uma solução. A Figura 4.16 mostra parte da árvore de busca para o mundo de detecção local
de vácuo, assumindo uma percepção inicial [A, Suja]. A solução é o plano condicional

[Suck, Certo, se Bstate = {6} então Suck else [ ]] .

Observe que, como fornecemos um problema de estado de crença ao algoritmo de pesquisa AND-OR , ele
retornou um plano condicional que testa o estado de crença em vez do estado real. É assim que deve ser:
em um ambiente parcialmente observável, o agente não será capaz de executar uma solução que exija
testar o estado real.
Como no caso dos algoritmos de busca padrão aplicados a problemas sem sensores, o algoritmo
de busca AND OR trata os estados de crença como caixas pretas, assim como qualquer outro estado. Pode-
se melhorar isso verificando os estados de crença gerados anteriormente que são subconjuntos ou
superconjuntos do estado atual, assim como para problemas sem sensoriamento. Pode-se também derivar
algoritmos de busca incremental, análogos aos descritos para problemas sem sensores, que fornecem
acelerações muito substanciais em relação à abordagem de caixa preta.

4.4.4 Um agente para ambientes parcialmente observáveis


O projeto de um agente de solução de problemas para ambientes parcialmente observáveis é bastante
semelhante ao agente de solução de problemas simples da Figura 3.1: o agente formula um problema,
chama um algoritmo de busca (como AND-OR-GRAPH-SEARCH) para resolvê - lo , e executa a solução.
Existem duas diferenças principais. Primeiro, a solução para um problema será um plano condicional em
vez de uma sequência; se a primeira etapa for uma expressão if-then-else, o agente precisará testar a
condição na parte if e executar a parte then ou else de acordo. Em segundo lugar, o agente precisará
manter seu estado de crença enquanto executa ações e recebe percepções.
Esse processo se assemelha ao processo de previsão-observação-atualização na Equação (4.4), mas na
verdade é mais simples porque a percepção é dada pelo ambiente em vez de calculada pelo ambiente.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

148 Capítulo 4. Além da pesquisa clássica

chupar [A, Limpo] Certo 2 [B, Sujo]

1 5 5 6 2

3 7 7 4 6

Figura 4.17 Dois ciclos de previsão-atualização da manutenção do estado de crença no mundo do vácuo
do jardim de infância com detecção local.

agente. Dado um estado de crença inicial b, uma ação a e uma percepção o, o novo estado de crença é o seguinte:

bÿ = ATUALIZAÇÃO(PREVISÃO(b, a), o) . (4.5)

A Figura 4.17 mostra o estado de crença sendo mantido no mundo do vácuo do jardim de infância com detecção
local, em que qualquer quadrado pode ficar sujo a qualquer momento, a menos que o agente o esteja limpando
ativamente naquele momento.11
Em ambientes parcialmente observáveis - que incluem a grande maioria dos - ambientes mundiais - manter
o estado de crença de alguém é uma função central de qualquer sistema inteligente. Ele tem vários nomes, incluindo
FILTRAGEM filtragem e estimativa de estado. A Equação (4.5) é chamada de STATE ESTIMATION , um estimador de estado
recursivo porque calcula o novo estado de crença a partir do anterior, em vez de examinar toda a sequência de percepção. Para que
RECURSIVO o agente não “fique para trás”, a computação deve acontecer tão rápido quanto as percepções estão chegando. À
medida que o ambiente se torna mais complexo, isso se torna impossível de ser feito exatamente e o agente terá
que calcular um estado de crença aproximado, talvez enfocando as implicações da percepção para os aspectos do
ambiente que são de interesse atual. A maioria das pesquisas sobre esse problema foi feita para ambientes
estocásticos de estado contínuo usando as ferramentas da teoria da probabilidade, conforme explicado no Capítulo
15.

4.5 AGENTES DE BUSCA ONLINE E AMBIENTES DESCONHECIDOS

PESQUISA OFFLINE Até agora nos concentramos em agentes que usam algoritmos de pesquisa offline . Eles calculam uma
solução completa antes de pisar no mundo real e, em seguida, executam a solução. Em contraste, um agente de
PESQUISA ONLINE pesquisa online12 opera intercalando computação e ação: primeiro ele realiza uma ação, depois observa o
ambiente e calcula a próxima ação. A pesquisa online é uma boa ideia em domínios dinâmicos ou semidinâmicos -
domínios onde há uma penalidade para

11 As desculpas usuais para aqueles que não estão familiarizados com o efeito de crianças pequenas no meio ambiente.
12 O termo “online” é comumente usado em ciência da computação para se referir a algoritmos que devem processar dados de entrada
à medida que são recebidos, em vez de esperar que todo o conjunto de dados de entrada fique disponível.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

Seção 4.5. Agentes de busca online e ambientes desconhecidos 149

sentado e computando por muito tempo. A pesquisa online também é útil em domínios não determinísticos,
porque permite que o agente concentre seus esforços computacionais nas contingências que realmente
surgem, em vez daquelas que podem acontecer, mas provavelmente não acontecerão. Claro, há uma
compensação: quanto mais um agente planeja com antecedência, menos frequentemente ele se encontrará
no riacho sem remar.
A busca online é uma ideia necessária para ambientes desconhecidos, onde o agente não sabe quais
estados existem ou o que suas ações fazem. Nesse estado de ignorância, o agente enfrenta um problema
EXPLORAÇÃO
PROBLEMA de exploração e deve usar suas ações como experimentos para aprender o suficiente para fazer a
deliberação valer a pena.
O exemplo canônico de busca online é um robô que é colocado em um novo prédio e deve explorá-lo
para construir um mapa que possa usar para ir de A a B. Métodos para escapar de labirintos - conhecimento
necessário para aspirantes a heróis da antiguidade - são também exemplos de algoritmos de busca online.
No entanto, a exploração espacial não é a única forma de exploração.
Considere um bebê recém-nascido: ele tem muitas ações possíveis, mas não conhece os resultados de
nenhuma delas e experimentou apenas alguns dos possíveis estados que pode atingir. A descoberta gradual
do bebê sobre como o mundo funciona é, em parte, um processo de busca online.

4.5.1 Problemas de pesquisa online

Um problema de busca online pode ser resolvido apenas por um agente executando ações, ao invés de um
processo puramente computacional. Assumiremos um ambiente determinístico e totalmente observável (o
Capítulo 17 relaxa essas suposições), mas estipularemos que o agente conhece apenas o seguinte:

• ACTIONS(s), que retorna uma lista de ações permitidas no estado s; • A


função step-cost c(s, a, sÿ )—observe que ela não pode ser usada até que o agente saiba qual é o
isso é ÿ resultado; e • TESTE(s)

DE METAS.

Observe em particular que o agente não pode determinar RESULT(s, a) exceto estando realmente em s e
fazendo a. Por exemplo, no problema do labirinto mostrado na Figura 4.18, o agente não sabe que subir de
(1,1) leva a (1,2); nem, tendo feito isso, sabe que descer o levará de volta a (1,1). Esse grau de ignorância
pode ser reduzido em algumas aplicações - por exemplo, um robô explorador pode saber como suas ações
de movimento funcionam e ignorar apenas a localização dos obstáculos.

Finalmente, o agente pode ter acesso a uma função heurística admissível h(s) que estima a distância
do estado atual ao estado objetivo. Por exemplo, na Figura 4.18, o agente pode saber a localização do
objetivo e ser capaz de usar a heurística da distância de Manhattan.
Normalmente, o objetivo do agente é atingir um estado de meta enquanto minimiza o custo. (Outro
objetivo possível é simplesmente explorar todo o ambiente.) O custo é o custo total do caminho que o agente
realmente percorre. É comum comparar esse custo com o custo do caminho que o agente seguiria se
conhecesse o espaço de busca com antecedência, ou seja , o caminho mais curto real (ou a exploração
completa mais curta). Na linguagem dos algoritmos online,
RELAÇÃO COMPETITIVA é chamada de relação competitiva; gostaríamos que fosse o menor possível.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google

Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

150 Capítulo 4. Além da pesquisa clássica

3 G

1S _

1 2 3

Figura 4.18 Um problema de labirinto simples. O agente começa em S e deve chegar a G, mas não conhece
nada do ambiente.

S A

S G

S A

G
(a) (b)

Figura 4.19 (a) Dois espaços de estado que podem levar um agente de busca online a um beco sem saída.
Qualquer determinado agente falhará em pelo menos um desses espaços. (b) Um ambiente bidimensional
que pode fazer com que um agente de busca online siga uma rota arbitrariamente ineficiente para o objetivo.
Qualquer que seja a escolha do agente, o adversário bloqueia essa rota com outra parede longa e fina, de
modo que o caminho percorrido seja muito mais longo do que o melhor caminho possível.

Embora pareça uma solicitação razoável, é fácil ver que a melhor relação competitiva alcançável
IRREVERSÍVEL é infinita em alguns casos. Por exemplo, se algumas ações forem irreversíveis – ou seja, elas levam
a um estado do qual nenhuma ação leva de volta ao estado anterior – a pesquisa online pode
FIM DA LINHA acidentalmente chegar a um estado sem saída a partir do qual nenhum estado objetivo é alcançável.
Talvez você ache o termo "acidentalmente" pouco convincente - afinal, pode haver um algoritmo que
não segue o caminho sem saída enquanto explora. Nossa afirmação, para ser mais preciso, é que
nenhum algoritmo pode evitar becos sem saída em todos os espaços de estado. Considere os dois
espaços de estado sem saída na Figura 4.19(a). Para um algoritmo de busca online que visitou os
estados S e A, os dois espaços de estado parecem idênticos, então ele deve tomar a mesma decisão em ambos. Portanto, fa

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

Seção 4.5. Agentes de busca online e ambientes desconhecidos 151

ADVERSÁRIO
ARGUMENTO um deles. Este é um exemplo de argumento do adversário – podemos imaginar um adversário que constrói o
espaço de estado enquanto o agente o explora e pode colocar os objetivos e becos sem saída onde quiser.

Os becos sem saída são uma dificuldade real para a exploração do robô - escadas, rampas, penhascos, ruas de
mão única e todos os tipos de terreno natural apresentam oportunidades para ações irreversíveis. Para fazer um progresso
EXPLORÁVEL COM SEGURANÇA , simplesmente assumiremos que o espaço de estados é explorável com segurança - ou seja, algum
estado objetivo é alcançável a partir de todos os estados alcançáveis. Espaços de estado com ações reversíveis, como
labirintos e quebra-cabeças de 8, podem ser vistos como grafos não direcionados e são claramente exploráveis com segurança.
Mesmo em ambientes exploráveis com segurança, nenhuma taxa competitiva limitada pode ser garantida
se houver caminhos de custo ilimitado. Isso é fácil de mostrar em ambientes com ações irreversíveis, mas na
verdade também permanece verdadeiro para o caso reversível, como mostra a Figura 4.19(b). Por esse motivo,
é comum descrever o desempenho dos algoritmos de busca online em termos do tamanho de todo o espaço de
estado, e não apenas da profundidade do objetivo mais superficial.

4.5.2 Agentes de busca online

Após cada ação, um agente online recebe uma percepção informando em que estado ele atingiu; a partir dessas
informações, ele pode aumentar seu mapa do ambiente. O mapa atual é usado para decidir para onde ir a seguir.
Essa intercalação de planejamento e ação significa que os algoritmos de busca online são bem diferentes dos
algoritmos de busca offline que vimos anteriormente.
Por exemplo, algoritmos off-line como Aÿ têm a capacidade de expandir um nó em uma parte do espaço e
imediatamente expandir um nó em outra parte do espaço, porque a expansão do nó envolve ações simuladas
em vez de ações reais. Um algoritmo online, por outro lado, pode descobrir sucessores apenas para um nó que
ele ocupa fisicamente. Para evitar viajar por toda a árvore para expandir o próximo nó, parece melhor expandir
os nós em uma ordem local . A pesquisa em profundidade tem exatamente essa propriedade, porque (exceto ao
retroceder) o próximo nó expandido é um filho do nó anterior expandido.

Um agente de busca em profundidade on-line é mostrado na Figura 4.20. Este agente armazena seu
mapa em uma tabela, RESULT[s, a], que registra o estado resultante da execução da ação a no estado s.
Sempre que uma ação do estado atual não foi explorada, o agente tenta essa ação.
A dificuldade surge quando o agente já tentou todas as ações em um estado. Na pesquisa em profundidade off-
line, o estado é simplesmente retirado da fila; em uma busca online, o agente precisa voltar atrás fisicamente.
Na pesquisa em profundidade, isso significa voltar ao estado do qual o agente entrou no estado atual mais
recentemente. Isso é obtido mantendo uma tabela que lista, para cada estado, os estados predecessores aos
quais o agente ainda não voltou atrás. Se o agente esgotou os estados para os quais ele pode retornar, então
sua busca está completa.
Recomendamos que o leitor rastreie o progresso do ONLINE-DFS-AGENT quando aplicado ao labirinto
dado na Figura 4.18. É bastante fácil ver que o agente, no pior caso, acabará percorrendo cada enlace no espaço
de estado exatamente duas vezes. Para exploração, isso é ideal; para encontrar um objetivo, por outro lado, a
razão competitiva do agente pode ser arbitrariamente ruim se ele sair em uma longa excursão quando houver
um objetivo próximo ao estado inicial. Uma variante online de aprofundamento iterativo resolve esse problema;
para um ambiente que é uma árvore uniforme, a razão competitiva de tal agente é uma pequena constante.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

152 Capítulo 4. Além da pesquisa clássica

ÿ
função ONLINE-DFS-AGENT(s ) retorna uma ação
ÿ
entradas: , uma percepção que identifica o estado atual
s persistente: resultado, uma tabela indexada por estado e ação, inicialmente vazia
untryed, uma tabela que lista, para cada estado, as ações ainda não
tentadas unbacktracked, uma tabela que lista, para cada estado, os backtracks ainda
não tentados s, a, o estado anterior e a ação, inicialmente nula
ÿ
se GOAL-TEST(s ) então return stop é
se éÿ um novo estado (não em não tentado) então não ÿ
] ÿ AÇÕES(ões
ÿ
)
tentado[s se s não for
ÿ
nulo então faça
ÿ
result[s, a] ÿs adicione s à frente de ]
ÿ
se não unbacktracked[s ] está vazio então
ÿ
experimentado[s se ] está vazio então retorne parar
ÿ ÿ
não rastreado[s else a ÿ uma ação b tal que , b] = POP(sem retrocesso[s ])
ÿ
resulta[s else a ÿ POP(sem tentativas[s
])
ÿsÿs

devolver um

Figura 4.20 Um agente de pesquisa online que usa exploração em profundidade. O agente é aplicável
apenas em espaços de estado nos quais toda ação pode ser “desfeita” por alguma outra ação.

Devido ao seu método de retrocesso, ONLINE-DFS-AGENT funciona apenas em espaços de


estado onde as ações são reversíveis. Existem algoritmos um pouco mais complexos que funcionam em
espaços de estado gerais, mas nenhum desses algoritmos possui uma razão competitiva limitada.

4.5.3 Pesquisa local online

Assim como a busca em profundidade, a busca em subida tem a propriedade de localidade em suas
expansões de nós. Na verdade, por manter apenas um estado atual na memória, a busca por subida já
é um algoritmo de busca online! Infelizmente, não é muito útil em sua forma mais simples porque deixa
o agente sentado em máximos locais sem ter para onde ir. Além disso, reinícios aleatórios não podem
ser usados, porque o agente não pode se transportar para um novo estado.
CAMINHADA ALEATÓRIA Em vez de reinicializações aleatórias, pode-se considerar o uso de uma caminhada aleatória
para explorar o ambiente. Um passeio aleatório simplesmente seleciona aleatoriamente uma das ações
disponíveis do estado atual; pode-se dar preferência a ações que ainda não foram tentadas. É fácil
provar que um passeio aleatório acabará por encontrar um objetivo ou completar sua exploração, desde
que o espaço seja finito.13 Por outro lado, o processo pode ser muito lento. A Figura 4.21 mostra um
ambiente no qual um passeio aleatório levará muitos passos exponencialmente para encontrar o objetivo,
porque, a cada passo, o progresso para trás é duas vezes mais provável que o progresso para frente. O
exemplo é artificial, é claro, mas existem muitos espaços de estado do mundo real cuja topologia causa
esses tipos de “armadilhas” para caminhadas aleatórias.

13 Passeios aleatórios são completos em grades unidimensionais e bidimensionais infinitas. Em uma grade
tridimensional, a probabilidade de que a caminhada retorne ao ponto de partida é de apenas 0,3405 (Hughes, 1995).

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google

Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

Seção 4.5. Agentes de busca online e ambientes desconhecidos 153

S G

Figura 4.21 Um ambiente no qual um passeio aleatório levará exponencialmente muitos passos para encontrar o
objetivo.

Aumentar a escalada de colina com memória em vez de aleatoriedade acaba sendo uma abordagem mais eficaz. A
ideia básica é armazenar uma “melhor estimativa atual” H(s) do custo para atingir a meta de cada estado visitado. H(s)
começa sendo apenas a estimativa heurística h(s) e é atualizado conforme o agente ganha experiência no espaço de
estados. A Figura 4.22 mostra um exemplo simples em um espaço de estado unidimensional. Em (a), o agente parece estar
preso em um mínimo local plano no estado sombreado. Em vez de ficar onde está, o agente deve seguir o que parece ser o
melhor caminho para a meta com base nas estimativas de custo atuais para seus vizinhos. O custo estimado para atingir a
meta por meio de um vizinho s é o custo para chegar mais o custo estimado para chegar a uma meta a partir daí - ou seja,
ÿ
c(s, a, sÿ ) + H(s
ÿs ÿ
). No
exemplo, existem duas ações, com custos estimados 1 + 9 e 1 + 2, então parece melhor mover para a direita. Agora, está
claro que a estimativa de custo de 2 para o estado sombreado foi excessivamente otimista.
Como o melhor movimento custou 1 e levou a um estado que está a pelo menos 2 passos de um objetivo, o estado
sombreado deve estar a pelo menos 3 passos de um objetivo, então seu H deve ser atualizado de acordo, conforme
mostrado na Figura 4.22(b). . Continuando esse processo, o agente irá se mover para frente e para trás mais duas vezes,
atualizando H a cada vez e “achatando” o mínimo local até que ele escape para a direita.
LRTA* Um agente que implementa esse esquema, denominado aprendizado Aÿ em tempo real (LRTAÿ ), é mostrado na
Figura 4.23. Como o ONLINE-DFS-AGENT, ele constrói um mapa do ambiente usando a tabela de resultados . Ele atualiza
a estimativa de custo para o estado que acabou de sair e, em seguida, escolhe o movimento “aparentemente melhor” de
acordo com suas estimativas de custo atuais. Um detalhe importante é que as ações que ainda não foram tentadas em um
estado s são sempre assumidas como levando imediatamente ao objetivo com o menor custo possível, ou seja, h(s). Esse
OTIMISMO ABAIXO
INCERTEZA
otimismo sob incerteza encoraja o agente a explorar novos caminhos, possivelmente promissores.

Um agente LRTAÿ tem a garantia de encontrar um objetivo em qualquer ambiente finito e explorável com segurança.
Ao contrário de Aÿ , no entanto, não é completo para espaços de estados infinitos - há casos em que pode ser )etapas no
2
desencaminhou infinitamente. Ele pode explorar um ambiente de n estados em O(n , mas pior caso,
geralmente se sai muito melhor. O agente LRTAÿ é apenas um de uma grande família de agentes online que podem ser
definidos especificando a regra de seleção de ação e a regra de atualização de maneiras diferentes.
Discutiremos essa família, que foi desenvolvida originalmente para ambientes estocásticos, no Capítulo 21.

4.5.4 Aprendizagem na pesquisa online

A ignorância inicial dos agentes de busca online oferece várias oportunidades de aprendizado. Primeiro, os agentes
aprendem um “mapa” do ambiente – mais precisamente, o resultado de cada ação em cada estado – simplesmente
registrando cada uma de suas experiências. (Observe que a suposição de

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google

Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

154 Capítulo 4. Além da pesquisa clássica

1 1 1 1 1 1 1
(a) 8 9 2 2 4 3

1 1 1 1 1 1 1
(b) 8 9 3 2 4 3

1 1 1 1 1 1 1
(c) 8 9 3 4 4 3

1 1 1 1 1 1 1
(d) 8 9 5 4 4 3

1 1 1 1 1 1 1
(e) 8 9 5 5 4 3

Figura 4.22 Cinco iterações de LRTAÿ em um espaço de estado unidimensional. Cada estado é rotulado com
H(s), a estimativa de custo atual para atingir uma meta, e cada link é rotulado com seu custo de etapa. O estado
sombreado marca a localização do agente e as estimativas de custo atualizadas em cada iteração são circuladas.

ÿ
função LRTA*-AGENT(s entradas:) retorna uma ação
ÿ
, que identifica o estado atual persistente:
s uma percepção
resultado, uma tabela, indexada por estado e ação, inicialmente vazia
H , uma tabela de estimativas de custos indexadas por estado, inicialmente vazia
s, a, o estado anterior e ação, inicialmente nulo
ÿ
se GOAL-TEST(s ) então return stop é
se éÿ um novo estado (não em H ) então H [s ÿ
] ÿ h(s
ÿ
)
se s não for nulo
ÿ
result[s, a] ÿs
H [s] ÿ min LRTA*-COST(s, b, resultado[s, b],H ) bÿ
AÇÕES(s) a ÿ
ÿ ÿ ÿ
uma ação b em AÇÕES(s ) que minimiza LRTA*-COST(s , b, resultado[s, b],H )
ÿsÿs

devolver um

ÿ
a função LRTA*-COST(s, a, s é ,H ) retorna uma estimativa de custo
se ÿ indefinida então retorne h(s)
ÿ
s senão retornar c(s, a, sÿ ) + H[s ]

Figura 4.23 LRTA*-AGENT seleciona uma ação de acordo com os valores dos estados vizinhos, que são
atualizados à medida que o agente se move no espaço de estados.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

Seção 4.6. Resumo 155

ambientes determinísticos significam que uma experiência é suficiente para cada ação). para valores exatos
para cada estado, desde que o agente explore o espaço de estados da maneira correta. Uma vez que os
. decisões ótimas podem ser tomadas simplesmente movendo-se para o
valores exatos são conhecidos, as
sucessor de menor custo – ou seja, a escalada pura é então uma estratégia ótima.

Se você seguiu nossa sugestão de rastrear o comportamento do ONLINE-DFS-AGENT no ambiente


da Figura 4.18, deve ter notado que o agente não é muito brilhante. Por exemplo, depois de ver que a ação
Subir vai de (1,1) para (1,2), o agente ainda não sabe que a ação Descer volta para (1,1), ou que a ação
Subir também vai de (2,1) para (2,2), de (2,2) para (2,3), e assim por diante. Em geral, gostaríamos que o
agente aprendesse que Up aumenta a coordenada y, a menos que haja uma parede no caminho, que Down
a reduz e assim por diante.
Para que isso aconteça, precisamos de duas coisas. Primeiro, precisamos de uma representação formal e
explicitamente manipulável para esses tipos de regras gerais; até agora, escondemos as informações dentro
da caixa preta chamada função RESULT . A Parte III é dedicada a esta questão. Em segundo lugar,
precisamos de algoritmos que possam construir regras gerais adequadas a partir de observações específicas
feitas pelo agente. Estes são abordados no Capítulo 18.

4.6 RESUMO

Este capítulo examinou algoritmos de busca para problemas além do caso “clássico” de encontrar o caminho
mais curto para um objetivo em um ambiente observável, determinístico e discreto.
• Métodos de busca local , como subida de colina, operam em formulações de estado completo,
mantendo apenas um pequeno número de nós na memória. Vários algoritmos estocásticos foram
desenvolvidos, incluindo o recozimento simulado, que retorna soluções ótimas quando é fornecido
um cronograma de resfriamento apropriado.
• Muitos métodos de busca local também se aplicam a problemas em espaços contínuos. A
programação linear e os problemas de otimização convexa obedecem a certas restrições na forma
do espaço de estado e na natureza da função objetivo, e admitem algoritmos de tempo polinomial
que muitas vezes são extremamente eficientes na prática. • Um
algoritmo genético é uma busca estocástica em que uma grande população de estados é mantida.
Novos estados são gerados por mutação e por cruzamento, que combina pares de estados da
população.
• Em ambientes não determinísticos , os agentes podem aplicar a busca AND-OR para gerar planos
contingentes que alcancem a meta independentemente de quais resultados ocorram durante a
execução. • Quando o ambiente é parcialmente observável, o agente pode aplicar algoritmos de busca
no espaço de estados de crença ou conjuntos de estados possíveis em que o agente pode estar.
mais eficiente.

• Problemas sem sensores podem ser resolvidos aplicando métodos de busca padrão a uma formulação
de estado de crença do problema. O caso parcialmente observável mais geral pode ser

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

156 Capítulo 4. Além da pesquisa clássica

resolvido por pesquisa E-OU de estado de


crença . • Problemas de exploração surgem quando o agente não tem ideia sobre os estados e ações de
seu ambiente. Para ambientes exploráveis com segurança, os agentes de pesquisa on-line podem
construir um mapa e encontrar uma meta, se houver. A atualização de estimativas heurísticas a partir da
experiência fornece um método eficaz para escapar de mínimos locais.

NOTAS BIBLIOGRÁFICAS E HISTÓRICAS

As técnicas de busca local têm uma longa história em matemática e ciência da computação. De fato, o método
de Newton–Raphson (Newton, 1671; Raphson, 1690) pode ser visto como um método de busca local muito
eficiente para espaços contínuos nos quais a informação de gradiente está disponível.
Brent (1973) é uma referência clássica para algoritmos de otimização que não requerem tal formação. A busca
por feixe, que apresentamos como um algoritmo de busca local, originou-se como uma variante de programação
dinâmica de largura limitada para reconhecimento de fala no sistema HARPY (Lowerre, 1976). Um algoritmo
relacionado é analisado em profundidade por Pearl (1984, cap. 5).
O tópico da busca local foi revigorado no início dos anos 90 por resultados surpreendentemente bons
para grandes problemas de satisfação de restrições, como n-queens (Minton et al., 1992) e raciocínio lógico
(Selman et al., 1992) e pela incorporação de aleatoriedade, várias pesquisas simultâneas e outras melhorias.
Esse renascimento do que Christos Papadim itriou chamou de algoritmos da “Nova Era” também despertou
um interesse maior entre os cientistas teóricos da computação (Koutsoupias e Papadimitriou, 1992; Aldous e
Vazirani, 1994). No campo da pesquisa operacional, uma variante da escalada chamada busca tabu ganhou
PESQUISA TABU popularidade (Glover, 1989; Glover e Laguna, 1997). Com base em modelos de memória limitada de curto
prazo em humanos, esse algoritmo mantém uma lista tabu de k estados visitados anteriormente que não podem
ser revisitados; além de melhorar a eficiência na busca de grafos, isso pode permitir que o algoritmo escape de
alguns mínimos locais. Outra melhoria útil na escalada é o algoritmo STAGE (Boyan e Moore, 1998). A ideia é
usar os máximos locais encontrados pela subida de colina com reinício aleatório para ter uma ideia da forma
geral da paisagem. O algoritmo ajusta uma superfície lisa ao conjunto de máximos locais e então calcula o
máximo global dessa superfície analiticamente. Isso se torna o novo ponto de reinicialização. O algoritmo
demonstrou funcionar na prática em problemas difíceis. Gomes e cols. (1998) mostraram que as distribuições
de tempo de execução de algoritmos de retrocesso sistemático geralmente têm uma distribuição de cauda
pesada, o que significa que a probabilidade de um tempo de execução muito longo é maior do que seria previsto
CAUDA PESADA
DISTRIBUIÇÃO
se os tempos de execução fossem distribuídos exponencialmente. Isso fornece uma justificativa teórica para
reinicializações aleatórias.

O recozimento simulado foi descrito pela primeira vez por Kirkpatrick et al. (1983), que pegou emprestado
diretamente do algoritmo Metropolis (que é usado para simular sistemas complexos em física (Metropolis et
al., 1953) e foi supostamente inventado em um jantar em Los Alamos).
O recozimento simulado é agora um campo em si, com centenas de artigos publicados todos os anos.
Encontrar soluções ótimas em espaços contínuos é o assunto de vários campos, incluindo teoria de
otimização, teoria de controle ótimo e cálculo de variações. As técnicas básicas são bem explicadas por
Bishop (1995); Pressione e outros. (2007) cobrem uma ampla gama

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

Seção 4.6. Resumo 157

de algoritmos e fornecer software funcional.


A programação linear (PL) foi estudada sistematicamente pela primeira vez pelo matemático
russo Leonid Kantorovich (1939). Foi uma das primeiras aplicações dos computadores; o algoritmo
simple plex (Wood e Dantzig, 1949; Dantzig, 1949) ainda é usado, apesar da complexidade exponencial
do pior caso. O primeiro algoritmo de tempo polinomial - o pouco prático método el lipsoid - deve-se
a Khachiyan (1979). Karmarkar (1984) desenvolveu a família muito mais eficiente de métodos de
pontos interiores . A tratabilidade da família mais geral de problemas de otimização convexa foi notada
pela primeira vez por Nemirovski e Yudin (1983) e métodos de pontos interiores mostraram ter
complexidade polinomial para esta classe por Nesterov e Nemirovski (1994). Excelentes introduções à
otimização convexa são fornecidas por Ben-Tal e Nemirovski (2001) e Boyd e Vandenberghe (2004).

O trabalho de Sewall Wright (1931) sobre o conceito de paisagem de aptidão foi um importante
precursor do desenvolvimento de algoritmos genéticos. Na década de 1950, vários estatísticos,
incluindo Box (1957) e Friedman (1959), usaram técnicas evolutivas para problemas de otimização,
EVOLUÇÃO
ESTRATÉGIAS
mas não foi até Rechenberg (1965, 1973) introduzir estratégias de evolução para resolver problemas
de otimização para aerofólios que a abordagem ganhou força . popularidade. Nas décadas de 1960 e
1970, John Holland (1975) defendeu os algoritmos genéticos, tanto como uma ferramenta útil quanto
como um método para expandir nossa compreensão da adaptação, biológica ou não (Holland, 1995).
VIDA ARTIFICIAL O movimento da vida artificial (Langton, 1995) leva essa ideia um passo adiante, vendo os produtos
dos algoritmos genéticos como organismos em vez de soluções para problemas. O trabalho neste
campo por Hinton e Nowlan (1987) e Ackley e Littman (1991) fez muito para esclarecer as implicações
do efeito Baldwin. Para informações gerais sobre evolução, recomendamos fortemente Smith e Szathm
´ary (1999).
A maioria das comparações de algoritmos genéticos com outras abordagens (especialmente
escalada estocástica) descobriu que os algoritmos genéticos são mais lentos para convergir (O'Reilly
e Op Pacher, 1994; Mitchell et al., 1996; Juels e Wattenberg, 1996; Baluja , 1997 ). Tais descobertas
não são universalmente populares dentro da comunidade GA, mas tentativas recentes dentro dessa
comunidade de entender a busca baseada na população como uma forma aproximada de aprendizagem
bayesiana (ver Capítulo 20) podem ajudar a fechar a lacuna entre o campo e seus críticos (Pelikan e
outros, 1999). A teoria dos sistemas dinâmicos quadráticos também pode explicar o desempenho
dos AGs (Rabani et al., 1998). Ver Lohn et al. (2001) para um exemplo de AGs aplicados ao projeto de
antenas, e Larra˜naga et al. (1999) para uma aplicação ao problema do caixeiro viajante.
GENÉTICO
PROGRAMAÇÃO
O campo da programação genética está intimamente relacionado aos algoritmos genéticos. A
principal diferença é que as representações que são modificadas e combinadas são programas em vez
de sequências de bits. Os programas são representados na forma de árvores de expressão; as
expressões podem estar em uma linguagem padrão como Lisp ou podem ser especialmente projetadas
para representar circuitos, controladores de robôs e assim por diante. Crossover envolve unir
subárvores em vez de substrings. Essa forma de mutação garante que os descendentes sejam
expressões bem formadas, o que não seria o caso se os programas fossem manipulados como strings.
O interesse recente na programação genética foi estimulado pelo trabalho de John Koza (Koza,
1992, 1994), mas remonta pelo menos aos primeiros experimentos com código de máquina por
Friedberg (1958) e com autômatos de estado finito por Fogel et al . (1966). Tal como acontece com os
algoritmos genéticos, há um debate sobre a eficácia da técnica. Koza et ai. (1999) descrevem uma variedade de

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

158 Capítulo 4. Além da pesquisa clássica

experimentos sobre o projeto automatizado de dispositivos de circuito usando programação genética.


As revistas Evolutionary Computation e IEEE Transactions on Evolutionary Com putation cobrem
algoritmos genéticos e programação genética; artigos também são encontrados em Complex Systems, Adaptive
Behavior e Artificial Life. As principais conferências são a Conferência Internacional sobre Algoritmos Genéticos
e a Conferência sobre Programação Genética, recentemente fundidas para formar a Conferência de Computação
Genética e Evolutiva. Os textos de Melanie Mitchell (1996) e David Fogel (2000) fornecem boas visões gerais
do campo.
A imprevisibilidade e a observabilidade parcial de ambientes reais foram reconhecidas desde o início em
projetos de robótica que usavam técnicas de planejamento, incluindo Shakey (Fikes et al., 1972) e Freddy
(Michie, 1974). O problema recebeu mais atenção após a publicação do influente artigo de McDermott (1978a),
Planning and Acting.
O primeiro trabalho a fazer uso explícito de árvores AND-OR parece ter sido o programa SAINT de Slagle
para integração simbólica, mencionado no Capítulo 1. Amarel (1967) aplicou a ideia à prova de teoremas
proposicionais, um tópico discutido no Capítulo 7, e introduziu um algoritmo de busca semelhante a AND-OR-
GRAPH-SEARCH. O algoritmo foi desenvolvido e formalizado por Nilsson (1971), que também descreveu AOÿ
- que, como o próprio nome sugere, encontra soluções ótimas dadas uma heurística admissível. AOÿ foi
analisado e melhorado por Martelli e Montanari (1973, 1978). O interesse pela busca and-or ressurgiu nos
últimos anos, com novos algoritmos para encontrar soluções cíclicas (Jimenez e Torras, 2000; Hansen e
Zilberstein, 2001) e novas técnicas inspiradas na programação dinâmica (Bonet e Geffner, 2005).

A ideia de transformar problemas parcialmente observáveis em problemas de estado de crença originou-


se em Astrom (1965) para o caso muito mais complexo de incerteza probabilística (ver Capítulo 17). Erdmann e
Mason (1988) estudaram o problema da manipulação robótica sem sensores, usando uma forma contínua de
busca de estado de crença. Eles mostraram que era possível orientar uma peça em uma mesa a partir de uma
posição inicial arbitrária por meio de uma sequência bem projetada de ações de inclinação. Métodos mais
práticos, baseados em uma série de barreiras diagonais precisamente orientadas em uma correia transportadora,
usam os mesmos insights algorítmicos (Wiegley et al., 1996).
A abordagem do estado de crença foi reinventada no contexto de problemas de busca sem sensores e
parcialmente observáveis por Genesereth e Nourbakhsh (1993). Trabalho adicional foi feito em problemas sem
sensores na comunidade de planejamento baseado em lógica (Goldman e Boddy, 1996; Smith e Weld, 1998).
Este trabalho enfatizou representações concisas para estados de crença, conforme explicado no Capítulo 12.
Bonet e Geffner (2000) introduziram a primeira heurística efetiva para busca de estado de crença; estes foram
refinados por Bryce et al. (2006). A abordagem incremental para busca de estado de crença, na qual as soluções
são construídas incrementalmente para subconjuntos de estados dentro de cada estado de crença, foi estudada
na literatura de planejamento por Kurien e Nayak (2002); vários novos algoritmos incrementais foram introduzidos
para problemas não determinísticos parcialmente observáveis por Russell e Wolfe (2005). Referências
adicionais para planejamento em ambientes estocásticos e parcialmente observáveis aparecem no Capítulo 17.

Algoritmos para explorar espaços de estados desconhecidos têm sido de interesse por muitos séculos.
A busca em profundidade em um labirinto pode ser implementada mantendo a mão esquerda na parede; loops
podem ser evitados marcando cada junção. A busca em profundidade falha com ações irreversíveis; GRÁFICOS
EULERIANOS o problema mais geral de explorar grafos Eulerianos (ou seja, grafos em que cada nó tem

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

Seção 4.6. Resumo 159

números iguais de arestas de entrada e saída) foi resolvido por um algoritmo devido a Hierholzer (1873). O
primeiro estudo algorítmico completo do problema de exploração para grafos arbitrários foi realizado por Deng
e Papadimitriou (1990), que desenvolveram um algoritmo completamente geral, mas mostraram que nenhuma
razão competitiva limitada é possível para explorar um grafo geral. Papadimitriou e Yannakakis (1991)
examinaram a questão de encontrar caminhos para uma meta em ambientes de planejamento de caminhos
geométricos (onde todas as ações são reversíveis). Eles mostraram que uma pequena razão competitiva é
alcançável com obstáculos quadrados, mas com obstáculos retangulares gerais nenhuma razão limitada pode
ser alcançada. (Veja a Figura 4.19.)
O algoritmo LRTAÿ foi desenvolvido por Korf (1990) como parte de uma investigação sobre REAL-TIME
SEARCH busca em tempo real para ambientes nos quais o agente deve agir após procurar por apenas um período fixo de
tempo (uma situação comum em jogos de dois jogadores jogos). LRTAÿ é de fato um caso especial de
algoritmos de aprendizado por reforço para ambientes estocásticos (Barto et al., 1995). Sua política de
otimismo sob incerteza – sempre direcionar para o estado não visitado mais próximo – pode resultar em um
padrão de exploração que é menos eficiente no caso desinformado do que a simples busca em profundidade
(Koenig, 2000). Dasgupta et ai. (1994) mostram que a busca de aprofundamento iterativo online é otimamente
eficiente para encontrar um objetivo em uma árvore uniforme sem informação heurística. Várias variantes
informadas sobre o tema LRTAÿ foram desenvolvidas com diferentes métodos de busca e atualização dentro
da porção conhecida do grafo (Pemberton e Korf, 1992).
Até o momento, não há um bom entendimento de como encontrar metas com eficiência ótima ao usar
informações heurísticas.

EXERCÍCIOS

4.1 Dê o nome do algoritmo que resulta de cada um dos seguintes casos especiais:

a. Pesquisa de feixe local com k = 1.


b. Pesquisa de feixe local com um estado inicial e sem limite no número de estados retidos.

c. Recozimento simulado com T = 0 em todos os momentos (e omitindo o teste de terminação). d.


Recozimento simulado com T = ÿ em todos os momentos.
e. Algoritmo genético com tamanho de população N = 1.

4.2 O Exercício 3.14 considera o problema de construção de trilhos de trem assumindo que as peças se
encaixam exatamente sem folga. Agora considere o problema real, no qual as peças não se encaixam
exatamente, mas permitem até 10 graus de rotação para cada lado do alinhamento “adequado”. Explique
como formular o problema para que ele possa ser resolvido por um recozimento simulado.

4.3 O algoritmo AND-OR-GRAPH-SEARCH na Figura 4.11 verifica estados repetidos apenas no caminho da
raiz para o estado atual. Suponha que, além disso, o algoritmo armazene todos os estados visitados e verifique
essa lista. (Consulte BREADTH-FIRST-SEARCH na Figura 3.11 para obter um exemplo.) Determine as
informações que devem ser armazenadas e como o algoritmo deve usar essas informações quando um estado
repetido for encontrado. (Dica: você precisará

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

160 Capítulo 4. Além da pesquisa clássica

distinguir pelo menos entre estados para os quais um subplano bem-sucedido foi construído anteriormente
e estados para os quais nenhum subplano pode ser encontrado.) Explique como usar rótulos, conforme
definido na Seção 4.3.3, para evitar cópias múltiplas de subplanos.

4.4 Explique precisamente como modificar o algoritmo AND-OR-GRAPH-SEARCH para gerar um plano
cíclico se nenhum plano acíclico existir. Você precisará lidar com três questões: rotular as etapas do plano
para que um plano cíclico possa apontar para uma parte anterior do plano, modificar OR-SEARCH para que
continue procurando por planos acíclicos depois de encontrar um plano cíclico e aumentar a representação
do plano para indicar se um plano é cíclico. Mostre como seu algoritmo funciona (a) no mundo escorregadio
do vácuo e (b) no mundo escorregadio e errático do vácuo. Você pode querer usar uma implementação de
computador para verificar seus resultados.

4.5 Na Seção 4.4.1, introduzimos estados de crença para resolver problemas de busca sem sensores. Uma
sequência de ações resolve um problema sem sensoriamento se mapear cada estado físico no estado de
crença inicial b para um estado objetivo. Suponha que o agente conheça h ÿ (s), o verdadeiro custo ótimo
de resolver o estado físico s no problema totalmente observável, para cada estado s em b. Encontre uma
heurística admissível h(b) para o problema sensorless em termos desses custos e prove sua admissibilidade.
Comente a precisão dessa heurística no problema de vácuo sem sensor da Figura 4.14.
Qual é o desempenho de A* ?

4.6 Este exercício explora relações subconjunto-superconjunto entre estados de crença em ambientes sem
sensores ou parcialmente observáveis.

• Prove rigorosamente que se uma sequência de ações é uma solução para um estado de crença b, também é
uma solução para qualquer

subconjunto de b. • Explicar em detalhes como modificar a pesquisa de gráfico para problemas sem sensores para aproveitar
disto.

• Explicar em detalhes como modificar a busca AND-OR para problemas parcialmente observáveis para
aproveite isso.

4.7 Na página 142 assumiu-se que uma determinada ação teria o mesmo custo quando executada em
qualquer estado físico dentro de um determinado estado de crença. (Isso leva a um problema de busca de
estado de crença com custos de etapas bem definidos.) Agora, considere o que acontece quando a
suposição não é válida. A noção de otimização ainda faz sentido neste contexto ou requer modificação?
Considere também várias definições possíveis do “custo” de executar uma ação em um estado de crença;
por exemplo, poderíamos usar o mínimo dos custos físicos; ou o máximo; ou um intervalo de custo com o
limite inferior sendo o custo mínimo e o limite superior sendo o máximo; ou apenas mantenha o conjunto de
todos os custos possíveis para aquela ação. Para cada um deles, explore se Aÿ (com modificações, se
necessário) pode retornar soluções ótimas.

4.8 Considere a versão sem sensores do mundo do vácuo errático. Desenhe o espaço de estado de crença
alcançável a partir do estado de crença inicial {1, 2, 3, 4, 5, 6, 7, 8} e explique por que o problema é insolúvel.

4.9 Suponha que um agente esteja em um ambiente de labirinto 3 × 3 como o mostrado na Figura 4.18.
O agente sabe que sua localização inicial é (1,1), que o objetivo está em (3,3) e que os quatro

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

Seção 4.6. Resumo 161

as ações Cima, Baixo, Esquerda, Direita têm seus efeitos usuais, a menos que sejam bloqueadas por uma parede. O
agente não sabe onde estão as paredes internas. Em qualquer estado, o agente percebe o conjunto de ações legais; ele
também pode dizer se o estado é um que já visitou antes ou um novo estado.

a. Explique como esse problema de pesquisa online pode ser visto como uma pesquisa offline no espaço de estado
de crença, onde o estado de crença inicial inclui todas as configurações de ambiente possíveis.
Qual é o tamanho do estado de crença inicial? Qual é o tamanho do espaço de estados de crença?

b. Quantas percepções distintas são possíveis no estado inicial? c. Descreva as

primeiras ramificações de um plano de contingência para esse problema. Quão largo


(aproximadamente) é o plano completo?

Observe que este plano de contingência é uma solução para todos os ambientes possíveis que se encaixem na descrição
dada. Portanto, a intercalação de pesquisa e execução não é estritamente necessária, mesmo em ambientes desconhecidos.

4.10 Podemos transformar o problema de navegação do Exercício 3.27 em um ambiente como segue:

• A percepção será uma lista das posições, relativas ao agente, dos vértices visíveis.
A percepção não inclui a posição do robô! O robô deve aprender sua própria posição no mapa; por enquanto,
você pode presumir que cada local tem uma “visão” diferente. • Cada ação será um vetor descrevendo um caminho

em linha reta a seguir. Se o caminho estiver desobstruído, a ação é bem-sucedida; caso contrário, o robô para no
ponto em que seu caminho cruza pela primeira vez um obstáculo. Se o agente retornar um vetor de movimento
zero e estiver no objetivo (que é fixo e conhecido), o ambiente teleporta o agente para um local aleatório (não
dentro de um obstáculo).

• A medida de desempenho cobra do agente 1 ponto para cada unidade de distância percorrida
e concede 1000 pontos cada vez que a meta é atingida.

a. Implemente este ambiente e um agente de solução de problemas para ele. O agente precisará formular um novo
problema após cada teletransporte, que envolverá descobrir sua localização atual.

b. Documente o desempenho do seu agente (fazendo com que o agente gere comentários adequados à medida que
se move) e relate seu desempenho em 100 episódios.

c. Modifique o ambiente para que 30% das vezes o agente termine em um destino não intencional (escolhido
aleatoriamente entre os outros vértices visíveis, se houver, caso contrário, nenhum movimento). Este é um modelo
grosseiro dos erros de movimento de um robô real. Modifique o agente para que, ao detectar tal erro, ele descubra
onde está e então construa um plano para voltar para onde estava e retomar o plano antigo. Lembre-se de que, às
vezes, voltar para onde estava também pode falhar! Mostre um exemplo do agente superando com sucesso dois
erros de movimento sucessivos e ainda alcançando a meta.

d. Agora tente dois esquemas de recuperação diferentes após um erro: (1) Siga para o vértice mais próximo na rota
original; e (2) replaneje uma rota para a meta a partir do novo local. Compare o desempenho dos três esquemas
de recuperação. A inclusão dos custos de pesquisa afetaria a comparação?

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.
Machine Translated by Google
Capítulos 3 e 4 de Russell/Norvig, Inteligência Artificial, 3e, ISBN: 0136042597 ©2010

162 Capítulo 4. Além da pesquisa clássica

e. Agora suponha que existam locais a partir dos quais a visão é idêntica. (Por exemplo, suponha que o mundo
seja uma grade com obstáculos quadrados.) Que tipo de problema o agente enfrenta agora? Como são as
soluções?

4.11 Neste exercício, exploraremos o uso de métodos de busca local para resolver TSPs do tipo definido no Exercício
3.38.

a. Implemente e teste um método de escalada para resolver TSPs. Compare os resultados com as soluções ótimas
obtidas pelo algoritmo Aÿ com a heurística MST (Exercício 3.38). b. Repita a parte (a) usando um algoritmo

genético em vez de subir uma colina. Você pode querer consultar Larra˜naga et al. (1999) para algumas sugestões
de representações.

4.12 Gere um grande número de instâncias de 8 quebra-cabeças e 8 damas e resolva-as (quando possível) por subida
de colina (subida mais íngreme e variantes de primeira escolha), subida de colina com reinício aleatório e recozimento
simulado. Meça o custo de pesquisa e a porcentagem de problemas resolvidos e faça um gráfico desses em relação
ao custo da solução ideal. Comente seus resultados.

4.13 Neste exercício, examinaremos a escalada no contexto da navegação do robô, usando o ambiente da Figura 3.32
como exemplo.

a. Repita o Exercício 4.10 usando a escalada. Seu agente já ficou preso em um mínimo local? É possível que ele
fique preso em obstáculos convexos? b. Construa um ambiente poligonal não

convexo no qual o agente fica preso. c. Modifique o algoritmo de subida de encosta para que, em vez

de fazer uma busca em profundidade 1 para decidir para onde ir em seguida, ele faça uma busca em profundidade
k. Ele deve encontrar o melhor caminho de k-passos e dar um passo ao longo dele e, em seguida, repetir o
processo.

d. Existe algum k para o qual é garantido que o novo algoritmo escape dos mínimos locais? e. Explique como

LRTAÿ permite que o agente escape de mínimos locais neste caso.

4.14 Como o DFS, o DFS online é incompleto para espaços de estado reversíveis com caminhos infinitos. Por exemplo,
suponha que os estados sejam pontos na grade bidimensional infinita e as ações sejam vetores unitários (1, 0), (0, 1),
(ÿ1, 0), (0, ÿ1), tentados nessa ordem . Mostre que o DFS online começando em (0, 0) não alcançará (1, ÿ1). Suponha
que o agente possa observar, além de seu estado atual, todos os estados sucessores e as ações que levariam a eles.
Escreva um algoritmo que seja completo mesmo para espaços de estados bidirecionais com caminhos infinitos. Que
estados ele visita ao atingir (1, ÿ1)?

4.15 Relacione a complexidade de tempo de LRTAÿ com sua complexidade de espaço.

AIMA3e c 2008 por Russell e Norvig. RASCUNHO --- NÃO DISTRIBUIR

RASCUNHO - Apenas para fins de visualização. O conteúdo está sujeito a alterações antes da publicação
final. ©2010 Pearson Education, Inc. Upper Saddle River, NJ 07458. Todos os direitos reservados.

Você também pode gostar