Upload
antonio-junior
View
82
Download
2
Embed Size (px)
DESCRIPTION
Programação Lógica com Restrições Apresentação realizada para a turma da disciplina de Lógica de 2014 no mestrado informática da UNIRIO.
Citation preview
PLRProgramação em Lógica com Restrições
Antonio Fonseca P JuniorPós-Graduação em Informática - UNIRIO
Sumário● Introdução● Algoritmos de busca● Aplicações● Sintaxe● Limitações
Introdução● É uma extensão da PL bem sucedida.● une o formato declarativo da PL com a
Programação com Restrições.● o código é um modelo do problema
expresso através de sentenças (V ou F).● diferente do paradigma imperativo, onde o
programa é um passo a passo.
Restrições● Fazem parte do nosso dia a dia.● Muitas atividades estão condicionadas a
alguma restrição.● É uma condição que restringe o universo
das possibilidades.● "Eu só posso estudar de noite”.● X^2 = Y, onde X > 0.
PLRNa PLR um problema é definido por:● um conjunto de variáveis;● seus respectivos domínios;● restrições;● função objetivo (opcional).
PLRPodemos esperar 3 tipos de resultados:● uma solução qualquer dentre as possíveis;● todas as soluções possíveis;● uma solução ótima (atende função objetivo).
Algoritmos de busca● Restrições sozinhas são incapazes de inferir
uma solução para o problema.● Os algorítimos de busca substituem o
algorítimo da unificação.● são executados sobre o espaço das
possibilidades restringido pelas restrições.
Algoritmos de busca● Generate and Test● Backtracking● Backjumping● Propagação de restrições
Backtracking
Backjumping
Propagação de restrições● Aplica as restrições progressivamente● Diminui o domínio das variáveis● Descobre rapidamente problemas intratáveis
X = [7,11,13,17],Y = [9,11,15,16,17],X = Y.
X = [11, 17]Y = [11, 17]
AplicaçõesEscalonamento e Combinação.● Geração de Horários;● Gestão da Produção;● Sequenciação de Tarefas;● Colocação de itens em caixas;● estacionamento de aviões em aeroportos.
SWI-Prolog● Suporte adicionado a partir de 2004.● Os modulos são extensões da linguagem.● Modulos existentes: clpfd, clpq, clpr.
:- use_module(library(clpfd)).
Operações aritméticas-Expr valor negativoExpr + Expr adiçãoExpr * Expr multiplicaçãoExpr - Expr subtraçãoExpr ^ Expr exponencialExpr / Expr divisão truncada
Operações aritméticasExpr1 #>= Expr2 Expr1 maior igual a Expr2Expr1 #=< Expr2 Expr1 menor igual a Expr2Expr1 #= Expr2 Expr1 igual Expr2Expr1 #\= Expr2 Expr1 diferente Expr2
Operações booleanas#\ Q True se Q é falseP #\/ Q True se P ou Q for trueP #/\ Q True se ambos forem trueP #<==> Q True se P e Q são equivalentesP #==> Q True se P implica QP #<== Q True se Q implica P
Outras funções+Vars ins +Domain - domínio das variáveis.labeling - Atribui valores válidos.element(?N, +Vs, ?V) - Busca o enésimo. all_different - todos os valores são diferentes.all_distinct - propagação de restrições.
Exemplo SWI-PrologQuais os 4 números diferentes que quando elevados ao quadrado e somados dão N?
Exemplo SWI-Prolog:- use_module(library(clpfd)).resolve(N, L) :-
L = [A,B,C,D], L ins 1..sup, N #= A*A + B*B + C*C + D*D, labeling([],L), all_distinct(L).
Exemplo SWI-Prolog?- resolve(30, L).L = [1, 2, 3, 4] ; L = [1, 2, 4, 3] ;L = [1, 3, 2, 4] ;L = [1, 3, 4, 2] ;(...)
1 + 4 + 9 + 16 = 30
Limitações● Difícil aprendizagem
● sensibilidade a mudança
Obrigado
?