Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouLuiz Gustavo Borja Lopes Alterado mais de 8 anos atrás
1
SISTEMAS DE INFORMAÇÃO Inteligência Artificial 2011/01 UNIPAC - FACAE Faculdade de Ciências Administrativas e Exatas Araguari - MG
2
Inteligência Artificial Programação Lógica Aula 10
3
Paradigma Lógico
4
Programação Lógica A linguagem Prolog está vastamente documentada na Internet. Um endereço da World-Wide-Web com diversos recursos interessantes - interpretadores Prolog e tutoriais sobre a linguagem - está disponível em: http://burks.bton.ac.uk/burks/language/prolog/ http://burks.bton.ac.uk/burks/language/prolog/
5
Paradigma Lógico Descreve, através de declarações, o problema e deixa que o interpretador gere a solução. As linguagens que utilizam o paradigma de programação lógico são classificados como linguagens DECLARATIVAS.
6
Paradigma Lógico Fatos: X é aluno da disciplina Y; W é aluno da disciplina Y; X estudou; T ministra a disciplina Y; Regras T é professor de X, se ministra alguma disciplina que X é aluno. Todo aluno que estuda tira boas notas.
7
Linguagens Declarativas Descrevem o problema e não a solução. Descrevem O QUE deve ser feito e não COMO deve ser feito. Uma declaração do mundo é feita, ou seja, uma descrição dele é fornecida. Define os fatos e as regras que regem este mundo, que define o que pode ser inferido. Não se define estruturas algorítmicas para permitir resolver os problemas.
8
Linguagens Declarativas Conceito de Mundo Fechado: Descreve o problema através de FATOS e REGRAS. Após, realiza-se CONSULTAS que são ser respondidas pelo interpretador avaliando-se os fatos e regras descritos. Tudo o que o interpretador não souber terá uma resposta negativa.
9
Programação Lógica A principal linguagem de programação que representa o paradigma de programação lógico é o PROLOG. Prolog, como segue o paradigma de programação lógico, é uma linguagem DECLARATIVA. Mostra O QUE deve ser feito e não COMO deve ser feito. Expresso declarativamente, através de FATOS, REGRAS E CONSULTAS.
10
Prolog Principal área de atuação: IA (Inteligência Artificial). Sistemas baseados em conhecimento. Sistema de consultas à bases de Dados. Sistemas especialistas. Hoje em dia, Prolog não é mais usado exclusivamente por Inteligência Artificial, mas também em várias áreas incluindo finanças, defesa, telecomunicações, medicina, direito, agricultura, engenharia e educação.
11
Conceito A Prolog é baseada em FATOS, REGRAS e CONSULTAS Fatos: Em Prolog, fatos são entendidos como relações entre objetos. Estas relações constituem-se de afirmações que são feitas a Prolog. São verdades nas quais a Prolog irá basear-se para responder as consultas solicitadas.
12
Conceito Ex.: Árvore Genealógica Fato: João é um dos progenitores de José progenitor(João, José).
13
Conceito Regras: Especificação de algo que pode ser verdadeiro se algumas condições forem satisfeitas. É composta de duas partes: Conclusão (esquerda) e condição (direita) Exemplo: Descobrir a relação Filho. filho(X,Y) :- progenitor(Y,X).
14
Conceito Consultas: questionamentos que serão respondidos avaliando-se os fatos e regras. João é filho de José? ? filho(João, José). Conceito de “Mundo Fechado”, tudo o que o interpretador não souber responder (não haver nem regras nem fatos relacionados) responderá: Não.
15
Exemplo: Vamos passar as informações (através de fatos e regras) à Prolog para após podermos realizar consultas. O primeiro passo a ser feito é submeter à Prolog a informação da árvore genealógica. Faremos isto através de 6 cláusulas (fatos). Cada cláusula denota um fato acerca da relação progenitor.
16
Exemplo: Fatos: Progenitor(Maria, José). Progenitor(João, José). Progenitor(João, Ana). Progenitor(José, Júlia). Progenitor(José, Iris). Progenitor(Iris, Jorge).
17
Exemplo: Consultas: José é progenitor de Íris? ?- progenitor(josé,íris). --> Yes. Ana é progenitor de Jorge? ?- progenitor(ana, jorge). --> No. Quem é o progenitor de Íris? ?- progenitor(X,íris). --> X = José. (X é uma variável). Quem são os filhos de João? ?-progenitor(joão,X) --> X = josé; X = ana. Quem é o progenitor de Maria? ?- progenitor(X,Maria) --> No. (Conceito de “Mundo Fechado”)
18
Exemplo: Consultas: Quem é progenitor de quem? ?- progenitor(X,Y). X = maria Y = josé; X = joão Y = josé; X = joão Y = ana; X = josé Y = júlia; X = josé Y = íris; X = íris Y = jorge.
19
Exemplo: Consultas: Quem são os avós de jorge? (Não possui uma relação direta). Quem é o progenitor de jorge? X. Quem é o progenitor de X? Y (Y é o avô de Jorge). ?- progenitor(X,jorge),progenitor(Y,X),write(Y). --> josé. Quem é o neto de João? Quem são os filhos de João? X Quem são os filhos dos filhos de João? Y (Y são os netos de João) ?- progenitor(joão,X), progenitor(X,Y), write(Y). --> júlia e íris. José e Ana possuem algum progenitor em comum? ?- progenitor(X,josé),progenitor(X,ana), write(X). --> joão.
20
Exemplo: Regras: Vamos agora melhorar a fonte de conhecimento da aplicação inserindo algumas regras: Em primeiro lugar vamos definir a relação “filho”. filho(X,Y) :- progenitor(Y,X). Com isto, podemos fazer as seguintes consultas: Ana é filha de João? ?-filho(ana,joão). --> Yes. Quem são os filhos de josé? ?-filho(X,josé). --> júlia e íris. De quem josé é filho? ?-filho(josé,X). -->Maria e João.
21
Exemplo: Novos Fatos: Podemos também definir a relação “pai” e “mãe”. Para isto precisamos adicionar a informação sobre o sexo das pessoas representadas na árvore. feminino(maria). feminino(ana). feminino(júlia). feminino(íris). masculino(joão). masculino(josé). masculino(jorge).
22
Exemplo: Novas Consultas: Quem são as mulheres? ?-feminino(X). --> X=maria; X = ana; X = júlia; X = íris. João é homem? ?-masculino(joão). --> Yes.
23
Exemplo: Novas Regras: Vamos definir agora a relação “mãe”. Para Todo X e Y X é mãe de Y se X é progenitor de Y e X é feminino. mae(X,Y) :- progenitor(X,Y), feminino(X). Utilizaremos a mesma lógica para definir a relação “pai”. Para Todo X e Y X é pai de Y se X é progenitor de Y e X é masculino. pai(X,Y) :- progenior(X,Y), masculino(X).
24
Exemplo: Novas Consultas: João é o pai de josé? ?- pai(joão,josé). --> Yes. Quem é a mãe de jorge? ?- mae(X,jorge). --> X = íris.
25
Exemplo: Outras Relações (Regras) avô avó irmão primo
26
Arquivo: base.pl progenitor(maria, jose). progenitor(joao, jose). progenitor(joao, ana). progenitor(jose, julia). progenitor(jose, iris). progenitor(iris, jorge). feminino(maria). feminino(ana). feminino(julia). feminino(iris).
27
Arquivo: base.pl masculino(joao). masculino(jose). masculino(jorge). filho(X,Y) :- progenitor(Y,X). mae(X,Y) :- progenitor(X,Y), feminino(X). pai(X,Y) :- progenitor(X,Y), masculino(X).
28
PROLOG (programming in logic)
33
Prolog apresenta-se com sintaxes distintas e suportando variadas facilidades, incluindo mecanismos extra-lógicos. Os exemplos e texto a seguir baseiam-se no Arity Prolog desenvolvido pela Universidade de Edimburgo.
34
Um programa Prolog é composto por sentenças denominadas cláusulas, construídas a partir de termos. Termos representam constantes, variáveis ou estruturas. Constantes são representadas em letras minusculas e variáveis são representadas por nomes que iniciam por uma letra maiúscula. Estruturas são usadas para representar as cláusulas e possuem a seguinte forma geral: funtor(lista de parâmetros). sendo funtor: predicado (identificador) lista de parâmetros: constantes, variáveis ou estruturas.
35
Sintaticamente, o texto de um programa Prolog é composto por fatos e regras não seqüencializados representados por uma lista de cláusulas, as quais podem ser de um dos seguintes tipos: A.- fato Exemplo: cidade(brasilia). A :- B1, B2,..., Bm.- regra Exemplo: capital(X,Y) :- pais(X), cidade(Y), capital_pais(X,Y). :- B1, B2,..., Bm.- consulta Exemplo: ? cidade(C).
36
Fatos podem ser agrupados em conjuntos, denominados de base de dados. do programa, como em: Fato 1: Brasilia, Curitiba, Porto Alegre, Santa Maria e Montevideo são cidades. cidade(portoalegre). cidade(brasilia). cidade(montevideo). cidade(curitiba). cidade(santamaria). Fato 2: Brasil e Uruguai são países. pais(brasil). pais(uruguai).
37
Fato 3: Rio Grande do Sul e Paraná são estados do Brasil, ou seja, existe um relacionamento entre um estado e seu país. estado(brasil, pr). estado(brasil, rgs). Fato 4: Porto Alegre é capital do Rio Grande do Sul e Curitiba é capital do Paraná, ou seja, existe um relacionamento entre uma cidade e seu estado. capital_estado(rgs, portoalegre). capital_estado( pr, curitiba).
38
Fato 5: Brasilia é capital do Brasil e Montevideo é a capital do Uruguai. capital_pais(brasil,brasilia). capital_pais(uruguai,montevideo). As regras estabelecem relações simples ou complexas entre objetos. Regra 1: Uma cidade pode ser a capital de um estado ou de um pais. capital(X,Y) :- capital_estado(X,Y) ; capital_pais(X,Y). Regra 2: Uma cidade Y é uma das capitais do pais X, se Y é capital do estado Z, Z é um estado do pais X. uma_capital(X,Y) :- capital_estado(Z,Y), estado(X,Z). Nas regras acima, as condições são separadas por vírgula, com o significado lógico 'and'; o significado lógico 'or' é representado pelo separador ponto-e-vírgula.
39
Executar um programa em lógica é sinônimo de provar um objetivo, formulado por consultas.Por exemplo, possíveis consultas ao programa acima podem ser: Objetivo 1 - Saber se Brasilia é uma cidade consulta: cidade(brasilia). resposta: yes. Objetivo 2: Saber os nomes das capitais do Brasil consulta: uma_capital(brasil,C). resposta: C= portoalegre; C= curitiba.
40
Uma consulta simples a este programa, como o objetivo 1, é resolvida por substituições diretas, buscando uma unificação, isto é, uma cláusula idêntica à consulta formulada..Já o objetivo 2 exige mais de uma unificacão e resolução, como detalhado abaixo: Unificação: substituição X por brasil, na regra 2 e Y por C. uma_capital(brasil,C) :- capital_estado(Z,C), estado(brasil,Z). Resolução: condição 1: capital_estado(Z, C). Unificação: capital_estado(rgs,portoalegre). Resolução: condição 2: estado(brasil, Z). Unificação: substituição Z=rgs. uma_capital(brasil,portoalegre) :- capital_estado(rgs,portoalegre), estado(brasil,rgs). Resolução: condição 2: estado(brasil,,rgs).
41
Na busca de uma resposta, a máquina de inferência pode percorrer um caminho de tentativas e erros, como pode ser visto no exemplo abaixo: Supondo a seguinte regra de determinação da capital de um país: capital(X,Y) :- pais(X), cidade(Y), capital_pais(X,Y). e a consulta: ? capital(brasil,C). Sendo a cláusula: cidade(portoalegre) a primeira da base de dados, resultaria uma unificacão como: cidade(brasil, portoalegre):-pais(brasil), cidade(portoalegre), capital_pais(brasil,portoalegre).
42
Na resolução da condição 'capital_pais(brasil,portoalegre)', haverá um insucesso no processo dedutivo. Neste caso, ocorre um retorno à substituição anterior (de C=portoalegre), e uma nova tentativa de dedução, com outra unificação (de C=brasilia). Este mecanismo é denominado de 'backtracking' e permitirá sucesso com a seguinte substituição: capital(brasil,brasilia) :-pais(brasil), cidade(brasilia), capital_pais(brasil,brasilia). O processo de execução de cada consulta pode ser representado por uma árvore de objetivos, onde a raiz é a consulta ou objetivo original, os nodos são objetivos intermediários derivados das resoluções e as folhas são ou cláusulas nulas ou insucessos. O insucesso determina o retorno ao ramo anterior.
43
Listas são estruturas compostas por constantes, variáveis ou quaisquer outros termos, incluindo outras listas. Exemplos de representação de listas: [ morango, nata, chocolate] lista com três elementos [ ]lista vazia [ X | Y ]lista com header X e tail Y [gosta( ana, pedro), gosta (pedro, ana)]lista de claúsulas
44
Uma lista pode ser criada através de uma cláusula representada por uma estrutura simples como: lista([10,20,30]). lista([[o, gato], bebeu, [o, leite]]). lista([canario,bentevi,periquito]). lista([uni]). lista([]). cores([azul,preto,branco,amarelo]). As cláusulas acima não criam diversas listas associadas ao mesmo nome 'lista'; são usadas para registrar dados na base de dados do programa. Uma possível consulta poderia ser: ? lista[ X ]./* quer-se a relação das listas existentes na base de dados do programa */
45
Para o tratamento de listas, algumas operações básicas devem ser definidas, tais como: adicionar e retirar elementos de uma lista, determinar se um elemento pertence a uma lista, somar elementos de uma lista, entre outras. Estas operações são definidas por cláusulas recursivas, uma vez que programas em lógica não incluem a determinação de estruturas de controle, como a repetição.
46
Recursividade Inciando com o exemplo clássico de recursividade, que é a implementação de fatorial, a seguir: fatorial (0, 1). fatorial (N, X) :- N1 is N -1, fatorial (N1, X1), X is N * X1. Pode-se observar que a cláusula 'fatorial(0,1)' é sempre verdadeira, pois está expressa como um fato. Esta cláusula é usada para determinar o final da recursão, iniciada pela cláusula seguinte. O predicado is é muito útil em programas que lidam com computações numéricas, mas esta conveniência tem seu preço: a propriedade de reversibilidade de programas lógicos deixa de existir. O predicado is espera como argumento à direita uma expressão para ser avaliada, isto é, que todas as variáveis já estejam amarradas.
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.