Programação Lógica com Restrições

Preview:

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

?

Recommended