SlideShare uma empresa Scribd logo
1 de 22
Baixar para ler offline
PLR 
Programação em Lógica com Restrições 
Antonio Fonseca P Junior 
Pó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.
PLR 
Na PLR um problema é definido por: 
● um conjunto de variáveis; 
● seus respectivos domínios; 
● restrições; 
● função objetivo (opcional).
PLR 
Podemos 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ções 
Escalonamento 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 negativo 
Expr + Expr adição 
Expr * Expr multiplicação 
Expr - Expr subtração 
Expr ^ Expr exponencial 
Expr / Expr divisão truncada
Operações aritméticas 
Expr1 #>= Expr2 Expr1 maior igual a Expr2 
Expr1 #=< Expr2 Expr1 menor igual a Expr2 
Expr1 #= Expr2 Expr1 igual Expr2 
Expr1 #= Expr2 Expr1 diferente Expr2
Operações booleanas 
# Q True se Q é false 
P #/ Q True se P ou Q for true 
P #/ Q True se ambos forem true 
P #<==> Q True se P e Q são equivalentes 
P #==> Q True se P implica Q 
P #<== 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-Prolog 
Quais 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 
?

Mais conteúdo relacionado

Mais procurados

Paradigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostosParadigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostos
Adriano Teixeira de Souza
 
4 introdução ao paradigma funcional
4 introdução ao paradigma funcional4 introdução ao paradigma funcional
4 introdução ao paradigma funcional
Péricles Miranda
 
5 paradigma funcional usando haskell
5 paradigma funcional usando haskell5 paradigma funcional usando haskell
5 paradigma funcional usando haskell
Péricles Miranda
 
Paradigmas de Linguagens de Programação - Estruturas de Controle
Paradigmas de Linguagens de Programação - Estruturas de ControleParadigmas de Linguagens de Programação - Estruturas de Controle
Paradigmas de Linguagens de Programação - Estruturas de Controle
Adriano Teixeira de Souza
 
Lei de Demeter parte
Lei de Demeter parteLei de Demeter parte
Lei de Demeter parte
Jorge Oleques
 

Mais procurados (20)

Semana 3: Introdução à linguagem de programação Java
Semana  3: Introdução à linguagem de programação Java Semana  3: Introdução à linguagem de programação Java
Semana 3: Introdução à linguagem de programação Java
 
Paradigma funcional
Paradigma funcionalParadigma funcional
Paradigma funcional
 
Paradigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostosParadigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostos
 
4 introdução ao paradigma funcional
4 introdução ao paradigma funcional4 introdução ao paradigma funcional
4 introdução ao paradigma funcional
 
Minicurso Python
Minicurso PythonMinicurso Python
Minicurso Python
 
Aula 3 - Lógica de Programação
Aula 3 - Lógica de ProgramaçãoAula 3 - Lógica de Programação
Aula 3 - Lógica de Programação
 
5 paradigma funcional usando haskell
5 paradigma funcional usando haskell5 paradigma funcional usando haskell
5 paradigma funcional usando haskell
 
Trabalho sobre a linguagem Python
Trabalho sobre a linguagem PythonTrabalho sobre a linguagem Python
Trabalho sobre a linguagem Python
 
Gisele
GiseleGisele
Gisele
 
Paradigmas de linguagens de programacao - aula#10
Paradigmas de linguagens de programacao - aula#10Paradigmas de linguagens de programacao - aula#10
Paradigmas de linguagens de programacao - aula#10
 
TDC2018SP | Trilha Python - Nao e magia, e tecnologia
TDC2018SP | Trilha Python - Nao e magia, e tecnologiaTDC2018SP | Trilha Python - Nao e magia, e tecnologia
TDC2018SP | Trilha Python - Nao e magia, e tecnologia
 
Paradigmas de Linguagens de Programação - Estruturas de Controle
Paradigmas de Linguagens de Programação - Estruturas de ControleParadigmas de Linguagens de Programação - Estruturas de Controle
Paradigmas de Linguagens de Programação - Estruturas de Controle
 
Introdução ao paradigma imperativo
Introdução ao paradigma imperativoIntrodução ao paradigma imperativo
Introdução ao paradigma imperativo
 
[Ruby Summit Brasil 2020] Ruby 3 e Análise estática - O que esperar e o que s...
[Ruby Summit Brasil 2020] Ruby 3 e Análise estática - O que esperar e o que s...[Ruby Summit Brasil 2020] Ruby 3 e Análise estática - O que esperar e o que s...
[Ruby Summit Brasil 2020] Ruby 3 e Análise estática - O que esperar e o que s...
 
Lei de Demeter parte
Lei de Demeter parteLei de Demeter parte
Lei de Demeter parte
 
Maratona de Programação
Maratona de ProgramaçãoMaratona de Programação
Maratona de Programação
 
M2ti - Python Brasil
M2ti - Python BrasilM2ti - Python Brasil
M2ti - Python Brasil
 
Oficina de Lógica de Programação - Uso do Scratch e do GvR
Oficina de Lógica de Programação - Uso do Scratch e do GvROficina de Lógica de Programação - Uso do Scratch e do GvR
Oficina de Lógica de Programação - Uso do Scratch e do GvR
 
Quem testa os nossos testes? Medindo a qualidade de testes unitários
Quem testa os nossos testes? Medindo a qualidade de testes unitários Quem testa os nossos testes? Medindo a qualidade de testes unitários
Quem testa os nossos testes? Medindo a qualidade de testes unitários
 
1. Computador; Línguas naturais; Linguagens de Programação; Algoritmo e progr...
1. Computador; Línguas naturais; Linguagens de Programação; Algoritmo e progr...1. Computador; Línguas naturais; Linguagens de Programação; Algoritmo e progr...
1. Computador; Línguas naturais; Linguagens de Programação; Algoritmo e progr...
 

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

Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Sérgio Souza Costa
 

Semelhante a Programação Lógica com Restrições (20)

01-Paradigmas.pdf
01-Paradigmas.pdf01-Paradigmas.pdf
01-Paradigmas.pdf
 
Linguagem Python
Linguagem PythonLinguagem Python
Linguagem Python
 
Clean code part 2
Clean code   part 2Clean code   part 2
Clean code part 2
 
Desenvolvimento Dirigido por Testes com Junit
Desenvolvimento Dirigido por Testes com JunitDesenvolvimento Dirigido por Testes com Junit
Desenvolvimento Dirigido por Testes com Junit
 
Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#
 
Programação Funcional usando F#
Programação Funcional usando F#Programação Funcional usando F#
Programação Funcional usando F#
 
[TDC2016] Apache SparkMLlib: Machine Learning na Prática
[TDC2016] Apache SparkMLlib:  Machine Learning na Prática[TDC2016] Apache SparkMLlib:  Machine Learning na Prática
[TDC2016] Apache SparkMLlib: Machine Learning na Prática
 
Logica Programação. ...
Logica Programação. ...Logica Programação. ...
Logica Programação. ...
 
TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutos
TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutosTDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutos
TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutos
 
Programação funcional - o que é? Como aplicar? Quais os benefícios?
Programação funcional - o que é? Como aplicar? Quais os benefícios?Programação funcional - o que é? Como aplicar? Quais os benefícios?
Programação funcional - o que é? Como aplicar? Quais os benefícios?
 
TDC2016SP - SparkMLlib Machine Learning na Prática
TDC2016SP -  SparkMLlib Machine Learning na PráticaTDC2016SP -  SparkMLlib Machine Learning na Prática
TDC2016SP - SparkMLlib Machine Learning na Prática
 
FC-Logic
FC-LogicFC-Logic
FC-Logic
 
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
 
Template method pattern
Template method patternTemplate method pattern
Template method pattern
 
TDC2018SP | Trilha .Net - Programacao Funcional com C#
TDC2018SP | Trilha .Net - Programacao Funcional com C#TDC2018SP | Trilha .Net - Programacao Funcional com C#
TDC2018SP | Trilha .Net - Programacao Funcional com C#
 
Programação Funcional usando C#
Programação Funcional usando C#Programação Funcional usando C#
Programação Funcional usando C#
 
Abordagem Funcional para Gerenciamento de Erros em .NET
Abordagem Funcional para Gerenciamento de Erros em .NETAbordagem Funcional para Gerenciamento de Erros em .NET
Abordagem Funcional para Gerenciamento de Erros em .NET
 
Cross testing mobile com ruby, cucumber e appium
Cross testing mobile com ruby, cucumber e appiumCross testing mobile com ruby, cucumber e appium
Cross testing mobile com ruby, cucumber e appium
 
Automatizando seus testes com robot framework
Automatizando seus testes com robot frameworkAutomatizando seus testes com robot framework
Automatizando seus testes com robot framework
 
Apresentação análise e simulação de um "Job Shop"
Apresentação análise e simulação de um "Job Shop"Apresentação análise e simulação de um "Job Shop"
Apresentação análise e simulação de um "Job Shop"
 

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

  • 1. PLR Programação em Lógica com Restrições Antonio Fonseca P Junior Pós-Graduação em Informática - UNIRIO
  • 2. Sumário ● Introdução ● Algoritmos de busca ● Aplicações ● Sintaxe ● Limitações
  • 3. 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.
  • 4. 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.
  • 5. PLR Na PLR um problema é definido por: ● um conjunto de variáveis; ● seus respectivos domínios; ● restrições; ● função objetivo (opcional).
  • 6. PLR Podemos 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).
  • 7. 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.
  • 8. Algoritmos de busca ● Generate and Test ● Backtracking ● Backjumping ● Propagação de restrições
  • 11. 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]
  • 12. Aplicações Escalonamento 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.
  • 13. 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)).
  • 14. Operações aritméticas -Expr valor negativo Expr + Expr adição Expr * Expr multiplicação Expr - Expr subtração Expr ^ Expr exponencial Expr / Expr divisão truncada
  • 15. Operações aritméticas Expr1 #>= Expr2 Expr1 maior igual a Expr2 Expr1 #=< Expr2 Expr1 menor igual a Expr2 Expr1 #= Expr2 Expr1 igual Expr2 Expr1 #= Expr2 Expr1 diferente Expr2
  • 16. Operações booleanas # Q True se Q é false P #/ Q True se P ou Q for true P #/ Q True se ambos forem true P #<==> Q True se P e Q são equivalentes P #==> Q True se P implica Q P #<== Q True se Q implica P
  • 17. 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.
  • 18. Exemplo SWI-Prolog Quais os 4 números diferentes que quando elevados ao quadrado e somados dão N?
  • 19. 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).
  • 20. 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
  • 21. Limitações ● Difícil aprendizagem ● sensibilidade a mudança