programação lógica com restrições

22
PLR Programação em Lógica com Restrições Antonio Fonseca P Junior Pós-Graduação em Informática - UNIRIO

Upload: antonio-junior

Post on 04-Jul-2015

81 views

Category:

Technology


2 download

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.

TRANSCRIPT

Page 1: Programação Lógica com Restrições

PLRProgramação em Lógica com Restrições

Antonio Fonseca P JuniorPós-Graduação em Informática - UNIRIO

Page 2: Programação Lógica com Restrições

Sumário● Introdução● Algoritmos de busca● Aplicações● Sintaxe● Limitações

Page 3: Programação Lógica com Restriçõ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.

Page 4: Programação Lógica com Restrições

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.

Page 5: Programação Lógica com Restrições

PLRNa PLR um problema é definido por:● um conjunto de variáveis;● seus respectivos domínios;● restrições;● função objetivo (opcional).

Page 6: Programação Lógica com Restrições

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).

Page 7: Programação Lógica com Restrições

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.

Page 8: Programação Lógica com Restrições

Algoritmos de busca● Generate and Test● Backtracking● Backjumping● Propagação de restrições

Page 9: Programação Lógica com Restrições

Backtracking

Page 10: Programação Lógica com Restrições

Backjumping

Page 11: Programação Lógica com Restrições

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]

Page 12: Programação Lógica com Restrições

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.

Page 13: Programação Lógica com Restrições

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)).

Page 14: Programação Lógica com Restrições

Operações aritméticas-Expr valor negativoExpr + Expr adiçãoExpr * Expr multiplicaçãoExpr - Expr subtraçãoExpr ^ Expr exponencialExpr / Expr divisão truncada

Page 15: Programação Lógica com Restrições

Operações aritméticasExpr1 #>= Expr2 Expr1 maior igual a Expr2Expr1 #=< Expr2 Expr1 menor igual a Expr2Expr1 #= Expr2 Expr1 igual Expr2Expr1 #\= Expr2 Expr1 diferente Expr2

Page 16: Programação Lógica com Restrições

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

Page 17: Programação Lógica com Restrições

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.

Page 18: Programação Lógica com Restrições

Exemplo SWI-PrologQuais os 4 números diferentes que quando elevados ao quadrado e somados dão N?

Page 19: Programação Lógica com Restrições

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).

Page 20: Programação Lógica com Restrições

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

Page 21: Programação Lógica com Restrições

Limitações● Difícil aprendizagem

● sensibilidade a mudança

Page 22: Programação Lógica com Restrições

Obrigado

?