Buscar

Projeto e Análise de Algoritmos - Tentativa e erro

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 60 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 60 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 60 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Projeto e Análise de 
Algoritmos
Tentativa e Erro
Professores:
Heitor Liberalino, Dr.
Lima Júnior, Dr.
Paradigmas de Projeto de Algoritmos
 O sucesso de um projeto de algoritmo depende de 
abordagens adequadas pois:
A forma como um algoritmo aborda o problema 
pode levar a um desempenho ineficiente.
 Em certo casos, o algoritmo pode não conseguir 
resolver o problema em tempo viável.
Paradigmas de Projeto de Algoritmos
 Não existe um paradigma que seja “o melhor” 
dentre todos.
Um problema pode ser resolvido de maneira mais 
eficiente adotando-se um paradigma do que outro.
Um paradigma pode levar a um algoritmo O(2n) e 
outro paradigma a um algoritmo O(n3), para a 
resolução de um mesmo problema.
Algoritmos de Tentativa e Erro
 Suponha que se deva tomar uma serie de decisões 
dentre varias possibilidades, onde:
 Não se tem informação suficiente para saber o que escolher;
 Cada decisão leva a um novo conjunto de escolhas;
 Alguma sequência de escolhas (possivelmente mais que uma) 
pode ser a solução para o problema.
 Tentativa e erro e um modo metódico de tentar varias 
sequência de decisões, ate encontrar uma que 
funcione.
Algoritmos de Tentativa e Erro
 É usado quando se quer achar soluções para 
problemas para os quais não se conhece uma regra 
fixa de computação.
 Passos:
 Escolher uma operação plausível;
 Executar a operação com os dados;
 Se a meta não foi alcançada, repetir o processo até que se 
atinja a meta ou se evidencie a insolubilidade do problema.
Recursividade X Tentativa e Erro
 Métodos recursivos podem ser utilizados para resolver 
problemas cuja solução é tentar todas as alternativas 
possíveis.
 Os algoritmos de tentativa e erro buscam decompor o 
processo de resolução em um número finito de subtarefas
parciais para serem exploradas exaustivamente.
Algoritmos de Tentativa e Erro
 A natureza do problema vai definir se uma ramificação 
da árvore não conduz a nenhuma solução:
 Em alguns problemas, o limite primal pode ser utilizado para 
efetuar as podas. Ex.: Caixeiro Viajante.
 Em outros, a violação de restrições pode inutilizar toda uma 
ramificação. Ex.: Coloração de mapas.
 Em outros, a violação de restrições em ramos internos da 
árvore não necessariamente condena todos os nós filhos da 
subárvores. Ex.: Pickup and Delivery Problem.
Algoritmos de Tentativa e Erro
 Muitas vezes, a pesquisa na árvore de soluções cresce 
rapidamente em uma grandeza polinomial.
 Em outras, o crescimento é exponencial.
 Nestes casos, é recomendado o uso de algoritmos aproximados ou 
heurísticas para resolver problemas de médio e grande porte.
 Formulações incorretas podem levar ao crescimento 
exponencial da árvore.
 Problema é simples, mas o algoritmo é complexo!
 Ou pode estar relacionada de fato com a natureza do problema.
Exemplos de Tentativa e Erro:
Problemas de tomada de decisão
Exemplos de Tentativa e Erro
 Exemplo 1: dado um labirinto, encontre um caminho da 
entrada a saída.
 Em cada interseção do labirinto, você tem que decidir se:
 Segue direto;
 Vira à esquerda;
 Vira à direita.
 Hipóteses:
 Você não tem informação suficiente para escolher corretamente;
 Cada escolha leva a outro conjunto de escolhas;
 Uma ou mais sequência de escolhas pode ser a solução.
Exemplos de Tentativa e Erro
 Exemplo 2: você deseja colorir um mapa 
com, no máximo, 4 cores: vermelho, verde, 
azul e branco. Países adjacentes devem ter 
cores diferentes.
 Em cada iteração, você deve decidir que 
cor pinta um pais, dadas as cores já 
atribuídas aos vizinhos
 Você não tem informação suficiente para 
escolher as cores;
 Cada escolha leva a outro conjunto de 
escolhas;
 Uma ou mais sequência de passos pode ser 
a solução.
Exemplos de Tentativa e 
Erro
 Exemplo 3: Passeio do Cavalo 
no Xadrez
 Tabuleiro com n x n posições: 
cavalo se movimenta segundo 
regras do xadrez.
 Problema: partindo da posição 
(x0; y0), encontrar, se existir, um 
passeio do cavalo que visita todos 
os pontos do tabuleiro uma única 
vez.
Exemplo de Tentativa e Erro:
Problemas de Satisfação de 
Restrições (PSR)
Algoritmos de Tentativa e Erro
 Existe um framework (uma generalização) para resolução de 
problemas quaisquer com restrições. 
 A classe se chama: Problemas de Satisfação de Restrições
(PSR)
 Um PSR é definido por:
 um conjunto de variáveis de decisão {x1, x2, x3, ..., xn};
 um conjunto de restrições {c1, c2, c3, ..., cm};
 um domínio não vazio de valores possíveis Di, para cada variável, 
com i =1, ..., n; 
 Cada variável pode assumir pelo menos um valor.
Algoritmos de Tentativa e Erro
 Um estado do problema é definido por uma atribuição de valores 
a no mínimo uma variável de decisão.
 Exemplosde estados:
 x1 = 3, x2 = ?, x3 = 6, x4 = 10;
 x1 = ?, x2 = ?, x3 = ?, x4 = 15;
 x1 = 3, x2 = 58, x3 = 6, x4 = 10.
 Uma atribuição que não viola nenhuma restrição é chamada 
consistente.
 Temos uma solução ao PSR quando todas as variáveis possuem 
valores dentro de seus domínios e nenhuma restrição é violada.
 Alguns PSR exigem que a solução maximize ou minimize 
uma função objetivo.
 Problemas de otimização.
 Em outros, é necessário apenas que encontremos uma 
atribuição completa que não viole restrições.
 Geralmente problemas mais restritos;
 Também podem ser modelados como problemas de otimização.
 A técnica mais utilizada é a de penalização da f.o. quando restrições são 
violadas.
Algoritmos de Tentativa e Erro
Exemplo de PSR:
Coloração de mapas
Problema de Colorir um Mapa
 Variáveis : AO, TN, Q, NGS, V, AM e T 
 Domínio : Di = {Vermelho, Verde, Azul}
 Restrição : regiões adjacentes deverão receber cores diferentes
Australia 
Ocidental
Territorio 
do Norte
Australia 
Meridional
Nova Gales 
do Sul
Problema de Colorir um Mapa
 Restrições : regiões vizinhas devem ter cores distintas
 AO ≠ AM, TN ≠ AM, Q ≠ AM, NGS ≠ AM, V ≠ AM, AO ≠ TN, TN ≠ Q, Q ≠ 
NGS, NGS ≠ V
 Exemplo : combinações permissíveis para AO e TN
 {(vermelho, verde), (vermelho, azul), (verde, vermelho), (verde, 
azul), (azul, vermelho), (azul, verde)}
 Ou simplesmente AO ≠ TN
Grafo de Restrições de um PSR
 Obs.: Tasmânia é um subproblema independente;
 Como identificar que existem problemas independentes?
 Componentes fortemente conectados...
Australia 
Ocidental
Territorio 
do Norte
Australia 
Meridional
Nova Gales do 
Sul
Variável
Restrição
Problema de Colorir um Mapa
As soluções são completas e constituídas de atribuições válidas
Ex.: AO = Vermelho, TN = Verde, Q = Vermelho, NGS = Verde, 
V = Vermelho, AM = Azul, T = Verde
Exemplo de Árvore de Busca do 
problema de coloração de mapas
Variáveis de PSRs
 Variáveis Discretas.
Domínios Finitos:
Ex.: PSRs Booleanos.
 inclusive Satisfabilidade Booleana (SAT).
 Problema NP-Completo.
Domínios Infinitos:
Ex.: Que envolvem Inteiros, strings, etc.
Variáveis de PSRs
 Variáveis Contínuas.
 Ex.: Que envolvem reais.
 Exemplo de problema:
 Resolve restrições lineares em tempo polinomial por métodos 
de Programação Linear (simplex, pontos interiores).
Tipos de Restrições
 Unária
 Ex.: MG ≠ verde
 Binária
 Ex.: MG ≠ SP
 Ordem Maior (três ou mais variáveis)
 Preferenciais (Problemas de Otimização)
 Ex.: Vermelho é melhor do que verde, isto é, há uma função de 
custo nas atribuições (função objetivo).
Exemplos de PSRs do Mundo Real
 Problemas de Alocação
 Ex.: Qual será a sala de PAA no semestre que vem?
 Problemas de Oferta de Disciplinas
 Ex.:Que matéria será oferecida no PPgCC?
 Configurações de Hardware
 Layout;
 Agendamento para entregas
 Um motoboy vai fazer entregas pela cidade:
 Qual é a ordem para a entrega que minimiza a distância total percorrida?
Relacionado ao Framework do PSR
 Estado Inicial:
 Atribuição vazia (raiz da árvore de busca): { }
 Função Sucessor:
 Atribui um valor a uma variável não atribuída, desde que ela 
não entre em conflito com atribuições já realizadas.
 Teste de Meta:
 Atingiu a atribuição completa;
 Depende da natureza do problema.
Pilha de Execução
 Toda solução deve ser uma atribuição completa.
 Logo, a busca está na profundidade n se existem n variáveis.
 Não há problemas com o crescimento da pilha de 
execução, se for utilizado uma adaptação da busca 
em profundidade para resolver os PSRs.
 A não ser que haja uma quantidade exponencial de variáveis 
de decisão;
 Neste caso, o problema se torna intratável por 
computadores atuais.
Pilha de Execução
Um ponto importante é:
o caminho pelo qual a solução é alcançada é 
irrelevante.
Percebe-se isso na implementação do caixeiro 
viajante:
através da poda “inteligente” que exige a 
ocorrência do consumidor x antes do y, por 
exemplo.
Busca com Retrocesso para PSRs
 Algoritmo de Tentativa e Erro:
 Backtracking (busca com retrocesso).
 Refinamento da busca por força bruta;
 Existem frameworks que trabalham com qualquer problema de satisfação de 
restrições (PSR).
 PSR:
 Não se pode explorar informações específicas do domínio;
 Diferentemente do backtracking padrão;
 Escolha para exploração:
 Variável mais restrita;
 É uma heurística que tenta privilegiar caminhos mais promissores, escolhendo as 
variáveis com o menor número de valores legais.
Busca com Retrocesso para PSRs
 Algo terrível pode acontecer ao gerar a árvore de busca 
de PSRs:
 Suponhamos n variáveis de decisão;
 E d valores que podem ser atribuídos a cada variável (domínio);
 O fator de ramificação na raiz é n.d, pois qualquer valor de d pode 
ser atribuído a qualquer uma das n variáveis;
 No próximo nível, o fator de ramificação é (n-1).d;
 Assim, geramos uma árvore com n!.dn folhas, embora existam 
“apenas” dn atribuições completas possíveis;
Busca com Retrocesso para PSRs
 A formulação de problema está correta, mas é ingênua... 
 Por quê?
Busca com Retrocesso para PSRs
 Porque...
 ...ela ignora a propriedade comum a todos os PSRs: a 
comutatividade.
 Um problema é comutativo se a ordem de aplicação nas atribuições 
não possui nenhum efeito sobre o resultado;
 Com esta consideração, nosso número de atribuições passa a ser dn.
 Apesar de representar um número astronômico para alguns 
problemas, a complexidade foi reduzida bruscamente.
Busca com Retrocesso para PSRs
 A expressão Busca com Retrocesso é utilizada para 
indicar uma busca em profundidade que:
 escolhe valores para uma variável de cada vez e que;
 efetua um retrocesso quando uma variável não tem 
valores válidos restantes para serem atribuídos.
 Quando resolvemos o Caixeiro Viajante com 
Tentativa e erro, temos informações específicas do 
domínio.
Busca com Retrocesso para PSRs
A proposta para o PSRs é em sentido 
oposto:
Resolver qualquer PSRs sem utilizar 
NENHUMA informação útil do domínio;
Está relacionado com o uso de ferramentas 
específicas ou gerais.
Busca com Retrocesso para PSRs
 Métodos de propósito geral podem obter ganhos em 
velocidade através dos seguintes questionamentos:
 Que variável deve ser atribuída em seguida, e em que 
ordem seus valores devem ser experimentados?
 Quais são as implicações das atribuições atuais para as 
outras variáveis ainda não atribuídas?
 Quando um caminho falha, a busca pode evitar a 
repetição da falha em caminhos subsequentes?
Que variável será atribuída a seguir?
 A variável mais restringida (unária)
 Escolha a variável com o menor número de valores legais 
(Minimum Remaining Values)
Em que ordem seus valores serão 
experimentados?
 O valor com menos restrições
 Escolha o valor que provoque o menor número de restrições 
possíveis nas variáveis restantes.
Pergunta-se:
 É possível eliminar subárvores que já possuem 
ramificações sem nenhuma atribuição legal para 
alguma variável ainda não atribuída?
 É possível prever falhas futuras?
Verificação Prévia
(Forward-Checking)
Especialização do Backtracking
 Forward-checking (Verificação Prévia)
 Em um PSR, uma maneira de utilizar melhor as restrições 
durante a busca é a chamada verificação prévia (forward-
checking);
 Sempre que uma variável X é atribuída, este processo 
examina cada variável não atribuída Y que está conectada a 
X por uma restrição;
 A partir daí, é excluído do domínio de Y, qualquer valor que 
esteja inconsistente com o valor escolhido para X.
Especialização do Backtracking
adição do forward-checking
As variáveis não possuem nenhuma atribuição. Todas possuem no domínio Verde, 
Vermelho e Azul como possibilidades
AO TN Q NGS V AM T
AO
AO TN Q NGS V AM T
A heurística da variável menos 
restringida não possui escolha no 
início da busca, pois todas as 
variáveis possuem 3 opções de 
cores.
Supõe-se que AO recebe a cor 
vermelha a princípio no 
backtraking.
Especialização do Backtracking
adição do forward-checking
Especialização do Backtracking
adição do forward-checking
AO assumindo a cor vermelha, a 
política Forward-checking já anula 
possíveis conflitos com as variáveis 
vizinhas (lembrando que a 
vizinhança é definida pela 
restrição binária).
AO
AO TN Q NGS V AM T
Especialização do Backtracking
adição do forward-checking
Assume-se que a próxima variável a ser 
fixada no backtracking é o Estado Q.
Neste instante, o sistema já elimina do 
domínio das variáveis vizinhas a cor 
Verde: de NGS, AM e TN.
AO
Q
AO TN Q NGS V AM T
Especialização do Backtracking
adição do forward-checking
Supõe-se que na próxima escolha do 
backtracking seja fixada a variável 
V com a cor azul.
Neste ponto, já será removida a cor 
azul do domínio de NGS e de AM.
AO
Q
V
AO TN Q NGS V AM T
Especialização do Backtracking
adição do forward-checking
AM não possui mais valores 
possíveis no domínio.
No backtracking padrão este 
problema apenas seria 
identificado quando a busca 
selecionasse AM para atribuição e 
para todas, aconteceria choque de 
valores com seus vizinhos.
AO
Q
V
AO TN Q NGS V AM T
Especialização do Backtracking
adição do forward-checking
A checagem para frente (forward-
checking) também age neste 
instante, eliminando o ramo de 
busca, já que este é inviável por 
enumeração implícita. O 
backtracking pode desempilhar e 
continuar sua força bruta.
AO
Q
V
AO TN Q NGS V AM T
Propagação de Restrições
(Constraint propagation)
Propagação de Restrições (Constraint
propagation)
 Embora detecte muitas 
inconsistências, o forward-
checking não detecta todas elas.
 Por exemplo:
 Quando AO for VERMELHO e Q for 
VERDE, tanto TN como AM serão 
forçados a serem AZUIS;
 Mas NT e AM são adjacentes. Então, 
como ambos podem ser azuis?
Propagação de restrições
 Foi o que aconteceu na 
segunda atribuição do 
exemplo anterior.
 O ramo já estava condenado.
 Apenas com forward-checking
ele não poderia ser eliminado, 
pois todas as variáveis ainda 
possuíam valores legais.
AO
Q
AO TN Q NGS V AM T
Propagação de restrições
 O forward-checking
não detecta este 
fato como uma 
inconsistência, 
porquenão realiza 
o exame a uma 
distância 
suficientemente 
longa à frente.
AO
Q
AO TN Q NGS V AM T
Propagação de restrições
 É necessário propagar esta informação a 
partir de AO e Q sobre TN e AM.
 Como foi feito no forward-checking.
 Em seguida sobre a restrição entre TN e AM 
para detectar a inconsistência.
AO
Q
Propagação de restrições
Mas devemos fazer de modo 
rápido.
 É inútil reduzir a quantidade 
de busca se é gasto mais 
tempo propagando restrições 
do que fazendo uma busca 
simples.
Ai entra a pergunta: até 
quando propagar?
AO
Q
Propagação de restrições
 A ideia de consistência de 
arco fornece uma noção 
substancialmente mais 
forte do que o forward-
checking.
 Aqui o termo arco se 
refere a um arco 
orientado no grafo de 
restrições.
 Como o arco de AM para 
NGS
AO
Q
AO TN Q NGS V AM T
Propagação de restrições
 Analisando o arco (AM, 
NGS):
 O arco é consistente, se para 
TODO valor x de AM, existe 
um valor y de NGS 
consistente com x;
 AM = AZUL, existe pelo menos 
uma atribuição de NGS 
válida: NGS=VERMELHO;
 Portanto, o arco é 
consistente.
AO
Q
AO TN Q NGS V AM T
Propagação de restrições
 Analisando o arco em sentido 
contrário: (NGS, AM):
 O arco é inconsistente;
 Quando NGS=AZUL, não existe 
atribuição válida para AM;
 Para tornar o arco consistente, 
basta eliminar a cor AZUL do 
domínio de NGS.
AO
Q
AO TN Q NGS V AM T
Propagação de restrições
 Em um processo semelhante, 
podemos propagar a restrição do 
arco (TN, AM):
 Domínio(TN)= {AZUL}
 Domínio(AM) = {AZUL}
 Logo, AZUL deve ser eliminado do 
domínio de TN, o que deixa o 
domínio vazio.
 Desde modo, a aplicação da 
propagação de restrições via 
consistência de arcos detectou 
uma inconsistência que não é 
detectada pelo forward-checking.
AO
Q
AO TN Q NGS V AM T
Propagação de restrições
 A verificação de consistência de arco pode ser 
aplicada como uma etapa de propagação.
O processo deve ser aplicado repetidamente até 
não restar mais nenhuma inconsistência.
 Isso porque, sempre que um valor é excluído do 
domínio de alguma variável, para remover uma 
inconsistência de arco, pode surgir uma nova 
inconsistência de arco em arcos que apontam para 
esta variável.
Propagação de restrições
 Embora o processo seja bastante dispendioso 
(se comparado ao forward-checking), em 
geral o custo extra é compensador.
 Fica a pergunta:
o que vai determinar se é ou não é 
interessante efetuar a propagação de 
restrições via consistência de arcos?

Outros materiais

Materiais relacionados

Perguntas relacionadas

Materiais recentes

Perguntas Recentes