• Nenhum resultado encontrado

Resolução de problemas por meio de busca

3.2 EXEMPLOS DE PROBLEMAS

3.2.1 Problemas de mundo simplificado

O primeiro exemplo que examinaremos é o mundo do aspirador de pó introduzido inicialmente no Capítulo 2 (veja a Figura 2.2.). Ele pode ser formulado como um problema da seguinte forma:

• Estados: O estado é determinado tanto pela posição do agente como da sujeira. O agente está em uma entre duas posições, cada uma das quais pode conter sujeira ou não. Desse modo, há 2 × 22

= 8 estados do mundo possíveis. Um ambiente mais amplo com n posições tem n · 2n estados.

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

• Ações: Nesse ambiente simples, cada estado tem apenas três ações: Esquerda, Direita e

Aspirar. Ambientes mais amplos podem também incluir Em Cima e Embaixo.

• Modelo de transição: As ações têm seus efeitos esperados, a não ser as ações: mover para a

Esquerda no quadrado mais à esquerda, mover para a Direita, no quadrado mais à direita, e Aspirar, no quadrado limpo, que não tem nenhum efeito. O espaço de estados completo é

mostrado na Figura 3.3.

• Teste de objetivo: Verifica se todos os quadrados estão limpos.

• Custo de caminho: Cada passo custa 1 e, assim, o custo do caminho é o número de passos do caminho.

Comparado com o mundo real, esse problema de mundo simplificado tem posições discretas, sujeira discreta, limpeza confiável e nunca se torna sujo depois de limpo. No Capítulo 4 relaxaremos algumas dessas suposições.

Figura 3.3 O espaço de estados para o mundo do aspirador de pó. Os arcos denotam ações: E =

O quebra-cabeça de oito peças (veja um exemplo na Figura 3.4), consiste de um tabuleiro 3 × 3 com oito peças numeradas e um quadrado vazio. Uma peça adjacente ao quadrado vazio pode deslizar para esse quadrado. O objetivo é alcançar um estado objetivo especificado, como o do lado direito da figura. A formulação-padrão é dada por:

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

• Estados: Uma descrição de estado especifica a posição de cada uma das oito peças e do quadrado vazio em um dos nove quadrados.

• Estado inicial: Qualquer estado pode ser designado como o estado inicial. Observe que qualquer objetivo específico pode ser alcançado a partir de exatamente metade dos estados iniciais possíveis (Exercício 3.4).

• Ações: A formulação mais simples define as ações como movimentos do quadrado vazio

Esquerda, Direita, Para Cima ou Para Baixo. Pode haver subconjuntos diferentes desses,

dependendo de onde estiver o quadrado vazio.

• Modelo de transição: Dado um estado e ação, ele devolve o estado resultante; por exemplo, se aplicarmos Esquerda para o estado inicial na Figura 3.4, o estado resultante terá comutado o 5 e o branco.

• Teste de objetivo: Verifica se o estado corresponde à configuração de estado objetivo mostrada na Figura 3.4 (são possíveis outras configurações de objetivos).

• Custo de caminho: Cada passo custa 1 e,assim, o custo do caminho é o número de passos do caminho.

Que abstrações incluímos aqui? As ações são reduzidas a seus estados iniciais e finais, ignorando- se as posições intermediárias por onde uma peça está deslizando. Abstraímos ações como sacudir o tabuleiro quando as peças ficam presas e descartar a extração das peças com uma faca e colocá-las de volta no tabuleiro. Ficamos com uma descrição das regras do quebra-cabeça, evitando todos os detalhes de manipulações físicas.

O quebra-cabeça de oito peças pertence à família de quebra-cabeças de blocos deslizantes, usados com frequência como problemas de teste para novos algoritmos de busca em IA. Essa família é conhecida como NP-completa; assim, ninguém espera encontrar métodos significativamente melhores no pior caso que os algoritmos de busca descritos neste capítulo e no próximo. O quebra- cabeça de oito peças tem 9!/2 = 181.440 estados acessíveis e é resolvido com facilidade. O quebra- cabeça de 15 peças (em um tabuleiro 4 × 4) tem aproximadamente 1,3 trilhão de estados, e instâncias aleatórias podem ser resolvidas de forma ótima em alguns milissegundos pelos melhores algoritmos de busca. O quebra-cabeça de 24 peças (em um tabuleiro 5 × 5) tem cerca de 1025 estados, e

instâncias aleatórias demandam muitas horas para resolver de forma ótima.

O objetivo do problema de oito rainhas é posicionar oito rainhas em um tabuleiro de xadrez de tal forma que nenhuma rainha ataque qualquer outra (uma rainha ataca qualquer peça situada na mesma linha, coluna ou diagonal). A Figura 3.5 mostra uma tentativa de solução que falhou: a rainha na coluna mais à direita é atacada pela rainha do canto superior esquerdo.

Figura 3.5 Uma quase solução para o problema das oito rainhas (a solução fica como exercício).

Embora existam algoritmos de propósito específico eficientes para esse problema e para toda a família de n rainhas, ele continua a ser um problema interessante de teste para algoritmos de busca. Há dois tipos principais de formulações. Uma formulação incremental envolve operadores que

ampliam a descrição dos estados, iniciando com um estado vazio. Para o problema de oito rainhas,

isso significa que cada ação acrescenta uma rainha ao estado. Uma formulação de estados

completos começa com todas as oito rainhas e as desloca pelo tabuleiro. Em qualquer caso, o custo

de caminho não tem nenhum interesse porque apenas o estado final é importante. A primeira formulação incremental que se poderia experimentar é:

• Estados: Qualquer disposição de 0-8 rainhas no tabuleiro é um estado. • Estado inicial: Nenhuma rainha no tabuleiro.

• Ações: Colocar uma rainha em qualquer quadrado vazio.

• Modelo de transição: Devolver uma rainha adicionada em qualquer quadrado específico no tabuleiro.

• Teste de objetivo: Oito rainhas estão no tabuleiro e nenhuma é atacada.

Nessa 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 quadrado que já estiver sob ataque:

• Estados: Todas as possíveis disposições de n rainhas (0 ≤ n ≤ 8), uma por coluna nas n colunas mais à esquerda, sem que nenhuma rainha ataque outra.

que ela não seja atacada por qualquer outra rainha.

Essa formulação reduz o espaço de estados de oito 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 formulação inicial tem aproximadamente 10400 estados, enquanto a formulação melhorada tem cerca de 1052 estados

(Exercício 3.5) — uma grande melhoria, mas não o suficiente para tornar o problema tratável. A Seção 4.1 descreve a formulação de estados completos, e o Capítulo 6 apresenta um algoritmo simples que resolve com facilidade até mesmo o problema de um milhão de rainhas.

Nosso problema de mundo simplificado final foi inventado por Donald Knuth (1964) e ilustra como podem surgir espaços de estados infinitos. Knuth conjecturou que, começando com o número 4, uma sequência de fatoriais, raiz quadrada e operações de arredondamento para baixo é possível chegar a qualquer inteiro positivo desejado. Por exemplo, podemos chegar a 5 de 4 da seguinte forma:

A definição do problema é muito simples: • Estados: Números positivos.

• Estado inicial: 4.

• Ações: Aplicar fatorial, raiz quadrada ou operação arredondamento para baixo (somente fatorial de números inteiros).

• Modelo de transição: Como dado pelas definições matemáticas das operações. • Teste de objetivo: Estado é o inteiro positivo desejado.

Do que sabemos, não há limite do quão grande é um número que pode ser construído no processo de alcançar determinado objetivo, por exemplo, o número 620.448.401.733.239.439.360.000 é gerado na expressão para 5, de modo que o espaço de estados para esse problema é infinito. Tal espaço de estados surge com frequência em tarefas que envolvem a geração de expressões matemáticas, circuitos, provas, programas e outros objetos definidos de forma recursiva.