N Rainhas Descrição do Problema Satisfação de Restrições (CSP)

Slides:



Advertisements
Apresentações semelhantes
Problema das N-Rainhas
Advertisements

Pseudo-código: sintaxe
Inteligência Artificial
Fluxo em Redes Prof. Ricardo R. Santos.
Lógica e Estrutura de Dados Fundamentais Professor: Eduardo O. Teles
O TABULEIRO de xadrez na posição inicial
Tópicos de Lógica Proposicional
1 Domínios Finitos A eficiência das programas em domínios finitos (incluindo booleanos) podem ainda ser melhoradas pelo uso de Algoritmos de Propagação.
PLANILHA DE CALCULO.
Algoritmos BUSCA E INSERÇÃO
PERCEPTRON (CONTINUAÇÃO)
DI - UFPE 1 Constraint Satisfaction Problems (CSP) nConceitos básicos nBusca cega simples e refinada nBusca heurística nCSP iterativo.
FACENS – Engenharia da Computação Lógica Computacional II
Algoritmos Escher.
SISTEMAS LINEARES II Prof. Marlon.
Solução de problemas por meio de busca
Busca com informação e exploração
Análise Sintática Ascendente
ESTRUTURA DE COMUNICAÇÃO DE DADOS
Descreva por palavras suas o funcionamento de um algoritmo
Backtracking Katia Guimarães.
INF 1771 – Inteligência Artificial
Buscas em Grafos Prof. André Renato 1º Semestre/2012
T ÓPICOS DE I.A. Métodos de Busca Busca em Espaços de Estado Prof. Mário Dantas.
Programação Linear Universidade Federal de Itajubá – UNIFEI
Informática Teórica Engenharia da Computação
Aula prática 8 Ponteiros Monitoria de Introdução à Programação
1 Introdução aos Agentes Inteligentes Flávia Barros.
Aula prática 6 Vetores e Matrizes
Paradigma de Divisão e Conquista
Fundamentos da Arquitetura de Computadores
Comunicação Inclusiva Acessibilidade e Programação Web
Professora: Ana Cristina G. e Silva Natal-RN
Prova AA.
Linguagem de Programação II Parte V
XADREZ O JOGO DE XADREZ DESENVOLVE A IMAGINAÇÃO, A CONCENTRAÇÃO E CONTRIBUI PARA FORMAR O ESPÍRITO DE INVESTIGAÇÃO, ALÉM DE INSTIGAR A CRIATIVIDADE E DESENVOLVER.
Lógica Proposicional Caderno de Exercícios.
Busca com informação e exploração
Subset Sum Algoritmos e Estruturas de Dados – IF672
Sistema de equações lineares
Vetores Imagine que você tem que receber o nome e a nota de 50 alunos de uma escola, e depois listar o nome de cada um e a média final de cada aluno e.
ALGORITMOS E TECNICAS DE PROGRAMACAO II
Estruturas de Dados Aula 9: Listas (parte 1)
Algoritmos e Estruturas de Dados I – Recursão
Tópicos Avançados em Inteligência Artificial
SISTEMAS OPERACIONAIS I
Técnicas de Busca Heurística Problemas da IA complexos demais para serem solucionados por técnicas diretas: criam-se técnicas de busca aprorpiados; chamados.
SISTEMAS LINEARES Prof. Moacir.
Construção e Análise de Algoritmos
Resolução de Problemas
Busca Combinatorial e Métodos de Heurística
SISTEMAS DE JOGO DEFESA Pressão total, e a partir do seu próprio campo
Inteligência Artificial
Comandos de Condição Aula 1 1. Introdução Até agora, todos os algoritmos que fizemos têm um fluxo de execução único. As instruções executadas são sempre.
Introdução à complexidade de algoritmos Luiz Gonzaga da Silveira Junior.
Satisfação de problemas restritos (CSP)
Resolução de Problemas de Busca
1 Introdução aos Agentes Inteligentes Resolução de Problemas de Busca Flávia Barros.
Exercícios Análise de algoritmos & Ordenação
Frases de Horn Forma Normal Conjuntiva- para frases sem quantificadores conjunção de frases cada elemento da conjunção é disjunção de literais literal:
Busca Competitiva Disciplina: Inteligência Artificial
Busca em Espaço de Estados Parte2 Algoritmos de Busca Cega
FEAMIG – Faculdade de Engenharia de Minas Gerais
 O que são arrays:  estruturas de dados homogêneas  coleção de elementos do mesmo tipo referenciada por um nome comum  um array pode ser imaginado.
Andréa Iabrudi 1 Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Programação de Computadores I.
Algoritmo de Transportes Objecto de Aprendizagem Manuel Pina MarquesDEIG
UCSal – Bacharelado em Informática
Usando Excel Prof. Rosemberg Trindade. Parte 1 Representação tabular de distribuição com variáveis discretas e contínuas.
INE5408 Estruturas de Dados Listas Encadeadas Simples.
Profª Juliana Schivani
Transcrição da apresentação:

N Rainhas Descrição do Problema Satisfação de Restrições (CSP) N-Rainhas visto como um CSP Solução Testes de Eficiência Conclusão

Descrição do Problema Colocar um número N de rainhas em um tabuleiro NxN (tipo xadrez) de forma que elas não se ataquem. Por ataque entendemos que quaisquer duas rainhas não podem compartilhar a mesma linha, coluna ou diagonal.

Descrição do Problema O problema é facilmente resolvido para N=1, por definição existirá 1 rainha ocupando a única linha, coluna e diagonal. Para N=2 e N=3 não existe solução pois é impossível que as rainhas não compartilhem a mesma Diagonal. Para N >3 pode existir mais de uma solução.

Satisfação de Restrição Um problema de satisfação de restrições é um tipo de problema que impõe propriedades estruturais adicionadas a solução. Basicamente consiste em: Um conjunto de variáveis que podem assumir valores de um dado domínio. Um conjunto de restrições que especificam propriedades da solução. Para encontrar a solução devemos especificar valores para todas as variáveis tal forma que as restrições sejam atendidas.  

N-Rainhas visto como um CSP Variáveis Localidade de cada uma das N rainhas. Vi especifica a coluna ocupada pela rainha já que cada rainha pode ocupar apenas uma linha. Domínio Valores possíveis para as variáveis (posições do tabuleiro).  Restrições Conjunto de valores permitidos para as variáveis de forma que as rainhas não se ataquem.

N-Rainhas visto como um CSP Vamos acompanhar a solução para 4 rainhas. Variáveis → V1, V2, V3, V4 Domínio → {1,2,3,4} Restrições → Qi ‡ Qj e |Qi – Qj| ‡ |i-j| Inicialmente todas as variáveis possuem os valores do domínio, já que as restrições ainda não foram aplicadas. As variáveis se apresentam a seguir:

N-Rainhas visto como um CSP Vamos selecionar um valor para a variável V1, ou seja, a coluna que a rainha da primeira linha irá ocupar.

N-Rainhas visto como um CSP Fazemos V1 = 1 Aplicamos as restrições temos que:  V2 = {3,4} V2 ‡ V1 e V2 ‡ V1 + 1 V3 = {2,4} V3 ‡ V1 e V3 ‡ V1 + 2 V4 = {2,3} V4 ‡ V1 e V4 ‡ V1 + 3  Agora que temos um possível valor para V1 escolhemos um valor para a próxima variável, neste caso V2 Fazemos V2 = 3

N-Rainhas visto como um CSP Aplicamos as restrições temos que:  V3 = {} V3 ‡ V2 e V3 ‡ V2 + 1 V3 ‡ V2 - 1  Não existem mais valores possíveis para a variável V3, isto significa que não existe solução para V1 = 1 e V2 = 3. Sendo assim devemos procurar um outro valor para V2.  Fazemos V2 = 4 Aplicamos as restrições temos que:

N-Rainhas visto como um CSP V3 = {2} V3 ‡ V2 e V3 ‡ V2 + 1 V3 ‡ V2 – 1 V4 = {3} V4 ‡ V2 e V4 ‡ V2 + 2 V4 ‡ V2 – 2  Fazemos V3 = 2 Aplicamos as restrições temos que:  V4 = {} V4 ‡ V3 e V4 ‡ V3 + 1 V4 ‡ V3 – 1 Não existem mais valores possíveis para a variável V4, não existe solução para V1 = 1 e V2 = 4 e V3 = 2. Chegamos a um ponto em que é necessário reinicializamos o processo e escolhemos o próximo valor para a variável V1.

N-Rainhas visto como um CSP Reinicialização das variáveis. V1 = {1,2,3,4} V2 = {1,2,3,4} V3 = {1,2,3,4} V4 = {1,2,3,4}  Vamos selecionar um outro valor para a variável V1.  Fazemos V1 = 2 Aplicamos as restrições temos que:

N-Rainhas visto como um CSP V2 = {4} V2 ‡ V1 e V2 ‡ V1 + 1 V2 ‡ V1 - 1 V3 = {1,3} V3 ‡ V1 e V3 ‡ V1 + 2 V3 ‡ V1 - 2 V4 = {1,3,4} V4 ‡ V1 e V4 ‡ V1 + 3 V4 ‡ V1 -3  Fazemos V2 = 4 Aplicamos as restrições temos que: V3 = {1 } V3 ‡ V2 e V3 ‡ V2 + 1 V3 ‡ V2 - 1 V4 = {3} V4 ‡ V1 e V4 ‡ V1 + 3 V4 ‡ V1 -3

N-Rainhas visto como um CSP Fazemos V3 = 1 Aplicamos as restrições temos que:   V4 = {3} V4 ‡ V3 e V4 ‡ V3 + 1 V4 ‡ V3 -1 Fazemos V4 = 3 Alcançamos a solução.

N-Rainhas visto como um CSP A solução é ilustrada a seguir

Solução O programa encontra uma solução começando com uma rainha no canto superior esquerdo do tabuleiro. Em seguida coloca-se uma rainha na segunda linha procurando a primeira coluna de forma que as rainhas não se ataquem. Repete-se o processo para a terceira rainha achando uma posição onde ela não seja atacada por outra rainha da primeira ou da segunda linha. Este processo continua com o restante das linhas, até que a solução seja encontrada ou que o programa retorne falha.

Solução Se em algum momento não existir lugar para uma rainha na linha em analise , o programa volta para a linha precedente (Backtraking) e procura uma outra posição para a rainha nesta linha. Achando a posição ele continua o processo para as outras linhas, se não encontrar uma posição valida retorna para linha antecedente e assim por diante. O programa para quando a ultima linha for preenchida com uma rainha.

Solução se (linha < Dimensão(posicaoRainhas)) { se (posicionaRainha(linha, coluna)){ se (solucao(linha + 1, 0)) retorna verdadeiro; senao retorna solucao(linha, retiraRainha(linha) + 1); } senao retorna falso;  } senão Se (totalRainhas == Dimensão (posicaoRainhas)) senao retorna falso;   Verifica se todas as linhas já foram analisadas Verifica se é possível posicionar uma rainha Chama o procedimento recursivamente para a próxima linha. Se não conseguir posicionar rainha então retira a rainha e procura a próxima posição valida. Não foi possível posicionar rainha retorna falso Verifica se todas as rainhas foram colocadas no tabuleiro.

Testes de Eficiência Foram realizados alguns teste medindo tempo e memória para averiguar a eficiência do algoritmo.

Conclusão Encontrar uma solução para o problema das N-rainhas com uma complexidade de tempo e espaço dentro de um limite aceitável não é uma tarefa muito fácil, já que o mecanismo de backtraking por si só já gasta bastante memória por ser um algoritmo sistemático. Tentamos-se reduzir ao máximo a utilização da memória, para armazenamento dos dados. Utilizamos poucos vetores de dimensão N ao invés de uma matriz NxN.