Inteligência Artificial



Documentos relacionados
ORGANIZAÇÃO DE COMPUTADORES MÓDULO 1

Departamento de Informática

Implementando uma Classe e Criando Objetos a partir dela

UNIVERSIDADE FEDERAL DE SANTA MARIA CENTRO DE TECNOLOGIA AULA 14 PROFª BRUNO CALEGARO

Computador E/S, Memória, Barramento do sistema e CPU Onde a CPU Registradores, ULA, Interconexão interna da CPU e Unidade de controle.

Sistemas Operacionais. Prof. André Y. Kusumoto

Sistemas de Representação e Raciocínio

1 INTRODUÇÃO 1.1 CONCEITO DE PARADIGMAS DE LINGUAGEM DE PROGRAMAÇÃO PARADIGMAS DE LINGUAGEM DE PROGRAMAÇÃO

c. Técnica de Estrutura de Controle Teste do Caminho Básico

Carga horária : 4 aulas semanais (laboratório) Professores: Custódio, Daniel, Julio foco: introdução a uma linguagem de programação Linguagem Java

Solução de problemas por meio de busca (com Python) Luis Martí DEE/PUC-Rio

Gestão do Risco e da Qualidade no Desenvolvimento de Software

Especificação Operacional.

Paradigmas de Linguagens de Programação

Observações. Referência Título / Campo de Aplicação Emissor Data de adoção

Departamento de Informática

4.1. UML Diagramas de casos de uso

Introdução. A Informação e sua Representação (Parte II) Universidade Federal de Campina Grande. Unidade Acadêmica de Sistemas e Computação

INF1621 Linguagens de Programação I

As decisões intermédias na jurisprudência constitucional portuguesa

natureza do projeto e da aplicação métodos e ferramentas a serem usados controles e produtos que precisam ser entregues

Linguagem de Programação

Programação Funcional. Capítulo 1. Introdução. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2015.

Planificação de. Aplicações Informáticas B

Introdução. Capítulo Breve sinopse

Trabalho de Implementação Jogo Reversi

MODELAGEM E SIMULAÇÃO

Processamento de Linguagem Natural (PLN)

Introdução à Programação B Licenciatura em Engenharia Informática. Enunciado do trabalho prático. Quem quer ser milionário? 20 de Dezembro de 2007

INF 1771 Inteligência Artificial

Especificação do Trabalho Prático

Programação de Computadores. Turma CI-180-B. Josiney de Souza.

Introdução a Banco de Dados Aula 03. Prof. Silvestri

POLÍTICA DE SEGURANÇA DA RCTS

5 Instrução e integração

DEPARTAMENTO DE ENGENHARIA INFORMÁTICA FACULDADE DE CIÊNCIAS E TECNOLOGIA DA UNIVERSIDADE DE COIMBRA

A importância do Software Livre no mundo de hoje

Figura 5.1.Modelo não linear de um neurônio j da camada k+1. Fonte: HAYKIN, 2001

9 Comandos condicionais

Introdução a Programação Funcional

VIII. VARIÁVEIS. Tabela I ARQUITETURA DA MEMÓRIA. 0x0000 0x34 0x0001 0xB0 0x0002 0x23. 0xFFFF 0x00

Qualidades. Atributos de Qualidade. Atributos de Qualidade. Categorias de Qualidades. Arquitecturas de Software

Ética no exercício da Profissão

Observações. Referência Título / Campo de Aplicação Emissor Data de adoção

Curso de Eng. Informática Linguagens de Programação. C Sharp University Data Processing. (C Sharp Universidade de Processamento de Dados) Docente:

Nesta aula... Analisamos na ultima aula a evolução e caraterísticas de computadores e linguagens de programação. Nesta aula iremos ver:

Invenções Implementadas por Computador (IIC) Patentes

Introdução ao Paradigma Orientado a Objetos. Principais conceitos

Prof. Me. Marcos Echevarria

Montagem e Manutenção. Luís Guilherme A. Pontes

Algoritmos DCC 119. Introdução e Conceitos Básicos

Linguagens de. Aula 01. Profa Cristiane Koehler

Análise e Projeto Orientados por Objetos

Consumidor e produtor devem estar

AULAS 03 E 04 A linguagem dos projetos

Chaves. Chaves. O modelo relacional implementa dois conhecidos conceitos de chaves, como veremos a seguir:

Curso de Especialização em Tecnologia da Informação. Engenharia de Software

Testando e Comparando Valores

O ENSINO DE CÁLCULO NUMÉRICO: UMA EXPERIÊNCIA COM ALUNOS DO CURSO DE CIÊNCIA DA COMPUTAÇÃO

Banco de Dados I Módulo V: Indexação em Banco de Dados. (Aulas 4) Clodis Boscarioli

Banco de Dados Orientado a Objetos

Departamento de Engenharia de Electrónica e Telecomunicações e de Computadores Licenciatura em Engenharia Informática e de Computadores

De Arte a Ciência: Regras para o Desenho de Software

ESTUDO DE VIABILIDADE. Santander, Victor - Unioeste Aula de Luiz Eduardo Guarino de Vasconcelos


Markes Roberto Vaccaro

Itens estruturais/caso de uso. Itens estruturais/classe ativa. Itens estruturais/componente. Itens estruturais/artefatos. Itens comportamentais

As respostas devem ser assinadalas na Folha de Resposta, a qual deverá ser entregue ao Fiscal de Sala Itapetininga, 04 de Dezembro de 2015

Simulado de Algoritmos - Respostas

FAZEMOS MONOGRAFIA PARA TODO BRASIL, QUALQUER TEMA! ENTRE EM CONTATO CONOSCO!

Norma Interpretativa 2 Uso de Técnicas de Valor Presente para mensurar o Valor de Uso

ISO/IEC Avaliação da conformidade Declaração de conformidade do fornecedor Parte 1: Requisitos gerais

o(a) engenheiro(a) Projeto é a essência da engenharia 07/02/ v8 dá vazão

Computador Digital Circuitos de um computador (Hardware)

Construção, desconstrução e reconstrução do ídolo: discurso, imaginário e mídia

Lógica para a Programação - 1º semestre AULA 01 Prof. André Moraes

Sistemas Operacionais

CEDERJ - CENTRO DE EDUCAÇÃO SUPERIOR A DISTÂNCIA DO ESTADO DO RIO DE JANEIRO

Critérios Gerais de Avaliação

Implementadas por Computador

Na medida em que se cria um produto, o sistema de software, que será usado e mantido, nos aproximamos da engenharia.

Representação de Algoritmos - Linguagens de Programação

Introdução à Programação Aula 2 Introdução à linguagem Python

REPRESENTAÇÃO DE DADOS EM SISTEMAS DE COMPUTAÇÃO AULA 03 Arquitetura de Computadores Gil Eduardo de Andrade

Certificação e Acreditação Auditorias. Normalização Processos de certificação Processos de acreditação Auditorias dos sistemas de gestão da qualidade

Regras Métodos Identificadores Variáveis Constantes Tipos de dados Comandos de atribuição Operadores aritméticos, relacionais e lógicos

O princípio multiplicativo

AULA 1: PARADIGMAS DE PROGRAMAÇÃO

PROGRAMAÇÃO DE UM MICROPROCESSADOR

TÍTULO: COMPARAÇÃO ENTRE OS MÉTODOS DE BUSCA EM ESPAÇOS DE ESTADOS E O ALGORITMO DE DIJKSTRA

CAPÍTULO I INTRODUÇÃO

Transcrição:

Inteligência Artificial Apontamentos para as aulas Luís Miguel Botelho Departamento de Ciências e Tecnologias da Informação Instituto Superior de Ciências do Trabalho e da Empresa Julho de 2015 1

Programação em Lógica para Representar Conhecimento Declarativo Índice 1 O PARADIGMA DA PROGRAMAÇÃO EM LÓGICA 3 2 REPRESENTAÇÃO DE CONHECIMENTO EM PROLOG 5 2.1 APRESENTAÇÃO INICIAL DA LINGUAGEM PROLOG 5 2.2 EXEMPLOS DE REPRESENTAÇÃO 6 2.3 INTERPRETADORES PROLOG 7 2.4 EXEMPLOS DE SISTEMAS 7 Pen USB e documentos 8 Sistema de avaliação de candidatos 8 3 REFERÊNCIAS 10 2

Programação em Lógica para Representar Conhecimento Declarativo A linguagem de programação mais disseminada que representa o paradigma da programação em lógica é o Prolog ( Programming in Logic ). O Prolog é uma linguagem baseada na lógica de predicados de primeira ordem (FOL, First Order Logic, ou FOPC, First Order Predicate Calculus ). A ideia mais importante subjacente ao Prolog é a chamada programação declarativa, isto é, uma forma de programar em que se representam relações entre entidades em vez de se representar os processos que permitem criar e transformar entidades. Há várias abordagens à programação declarativa, incluindo a programação em lógica de que o Prolog é exemplo e a programação por regras. Apesar de ter sido criada como uma linguagem essencialmente declarativa, o Prolog também possui mecanismos de controlo semelhantes aos das outras linguagens (e.g., JAVA e C++), incluindo mecanismos de repetição e outros. De momento, estes apontamentos não incluem a explicação da linguagem Prolog, a qual deve ser procurada em livros aconselhados para o efeito, por exemplo, Programming in Prolog: Using the ISO Standard (Fifth Edition) de William Clocksin e Christopher Mellish [Clocksin e Mellish 2003] e Prolog Programming for Artificial Intelligence de Ivan Bratko [Bratko 2000]. Neste ponto do programa, será apresentada apenas uma porção simples (sem recursividade) da parte declarativa da linguagem Prolog. Mais adiante, no programa, será apresentado o resto da parte declarativa do Prolog (essencialmente, recursividade). Depois serão ainda apresentados os mecanismos de controlo e os mecanismos de input/output da linguagem. 1 O Paradigma da Programação em Lógica Apenas a título introdutório, seguem-se algumas noções de representação explícita de conhecimento declarativo em Prolog, como exemplo de linguagem de programação em lógica. A Programação em Lógica é método de representação de conhecimento baseado na lógica matemática. A linguagem mais representativa da Programação em Lógica é o Prolog (Programming in Logic), criada em 1972 na Universidade de Marselha com base em teoria desenvolvida na Universidade de Edimburgo. Antes de passar à representação de conhecimento através da Programação em Lógica, usando Prolog, apresenta-se um breve enquadramento da Programação em Lógica no panorama dos paradigmas de programação. Há vários critérios para classificar linguagens e paradigmas de programação. Sem discutir o interesse de cada um dos critérios e das classificações que origina, pode dizerse que é comum falar dos seguintes tipos de programação: Programação imperativa; Programação centrada em objetos; e 3

Programação declarativa. Apesar de bastante comum, esta classificação pode não ser considerada exaustiva e pode mesmo ser considerada errada. Há quem defenda que existem outros tipos de programação, por exemplo, a programação centrada em eventos. Há ainda quem ache que a programação centrada em objetos é um caso particular da programação imperativa. Na programação imperativa, um programa é uma sequência de comandos, de ordens ao computador: faz isto, faz aquilo, se isto for verdade faz assim, se não for, faz assado. Os conceitos fundamentais aqui são sequência e comandos, i.e., ordens. Um programa, numa linguagem imperativa (por exemplo em C, mas não em C++ nem em C#), depois de traduzida em linguagem máquina, é diretamente executado pelo computador. Na programação declarativa, um programa é um conjunto de declarações: isto definese desta forma, isto é verdade, isto é falso, isto satisfaz esta restrição, etc. O conceito fundamental é a declaração; a sequência não faz sentido. De facto, uma afirmação, uma definição, ou o enunciado de uma restrição não contém em geral a noção de sequência. Também é bastante comum dizer-se que programação declarativa se distinguee da programação imperativa no sentido em que apenas especifica o quê em vez de especificar como. Na programação centrada em objetos, um programa é uma coleção de objetos que se relacionam de alguma forma, nem que seja através da sua ação. Cada objeto define-se pelos seus atributos ou propriedades, e pelos seus comportamentos. Quando se define um objeto, indicando e caracterizando os seus atributos ou propriedades, está a usar-se um tipo de abordagem declarativa à programação. Quando se diz que um dado objeto ou uma dada classe de objetos tem um conjunto comportamentos, também se está no âmbito da definição e não no âmbito das sequências de comandos. No entanto, a definição dos processos computacionais que implementam esses comportamentos é, em várias linguagens (e.g., C++, C#, Java), feita recorrendo a uma sequência de ordens / comandos, i.e., recorrendo a uma abordagem imperativa; e é, noutras linguagens (e.g., CLOS, Common Lisp Object System), feita através de uma abordagem declarativa. Na programação centrada em eventos, pode dizer-se que um programa especifica os processos computacionais que devem ser desencadeados quando ocorrem determinados eventos: se ocorrer o evento x, desencadeias o processo computacional p, quando ocorrer o evento y, desencadeias o processo computacional q. Neste tipo de especificação, a noção de sequência não é importante. No entanto, há ordens que se dão ( desencadeias o processo p ). A especificação de cada um dos processos computacionais a serem desencadeados quando determinado evento ocorre recorre frequentemente a< um tipo de programação imperativa, embora haja também abordagens diferentes. Com o intuito de nos aproximarmos da Programação em Lógica, diremos que se trata de um dos tipos de programação declarativa. A figura seguinte mostra a organização habitualmente apresentada da programação declarativa. 4

Na programação funcional pura, um programa é constituído apenas por um conjunto de definições de funções. Cada função é definida sempre à custa de outras funções. O Lisp (LISt Processing) é a linguagem funcional mais disseminada. Na programação em lógica, um programa é um conjunto de afirmações sobre as entidades do domínio da aplicação. Em geral, cada conceito é definido por um subconjunto dessas afirmações. Por exemplo, uma mãe é uma mulher que tem pelo menos um filho, o Rui é um homem, e um descendente de uma pessoa é um filho dessa pessoa, ou é um descendente de um filho. O Prolog (PROgramming in LOGic) é a linguagem mais representativa e conhecida de programação em lógica. O Prolog baseia-se num subconjunto da forma clausal da lógica de predicados de primeira ordem. As cláusulas do Prolog chamam-se cláusulas de Horn (cláusulas com, no máximo, um literal positivo). Na programação por restrições, um programa é um conjunto de restrições aplicáveis às várias entidades do domínio da aplicação. A programação por restrições não é tão divulgada como as programações funcional e em lógica. O Prolog III é uma das linguagens de uma variedade de Programação por Restrições chamada Programação em Lógica com Restrições (Constraint Logic Programming). Depois desta breve contextualização, passamos á apresentação da representação de conhecimento através da programação em lógica, usando Prolog. 2 Representação de conhecimento em Prolog 2.1 Apresentação inicial da linguagem Prolog Base de conhecimentos Uma base de conhecimentos é um conjunto de cláusulas Cláusulas: factos e regras Execução Objetivos ("goals", perguntas) Exemplo 5

No ficheiro homem(joao). homem(antonio). homem(luis). filho(ana, joao). mulher(ana). mulher(maria). mulher(rita). filho(ana, maria). % X é pai se X for um homem e existir pelo menos um filho de X pai(x):- homem(x), filho(y, X). No interpretador...?- homem(joao) yes?- homem(x). X = joao; X = antonio; X = luis; no?- filho(x, joao). X = ana yes?- pai(x). X = joao yes 2.2 Exemplos de representação Procura-se que os alunos percebam o funcionamento do Prolog, em especial os conceitos de backward chaining e de backtracking, através destes exemplos. A capital de um pais é uma cidade x, p Pais(p) Capital(p) = x Cidade(x) Em Prolog não há funções... cidade(x):- pais(p), capital(x, P). pais(portugal). pais(franca). pais(etiopia). capital(portugal, lisboa). capital(franca, paris). capital(etiopia, adis_abeba).?- cidade(x). Maior de dois números 6

x,y Numero(x) Numero(y) x y Maior(x, y) = x x, y Numero(x) Numero(y) x y Maior(x, y) = y O Prolog não tem funções; e há predicados que não geram soluções; apenas verificam se algo é verdade. % maior(x, Y, Z) Z é o maior dos dois números X e Y. % number(x) Predicado pré-construído no Prolog que verifica se X é um número; não gera números. maior(x, Y, X):- number(x), number(y), X >= Y. maior(x, Y, Y):- number(x), number(y), X < Y.?- maior(7, 2, X). X = 7?- maior(2, 7.5, X). X = 7.5?- maior(x, Y, Z). no Mas... termo(1). termo(7). termo(a). termo([10, 30, 4]). termo(5).?- termo(x), termo(y), maior(x, Y, Z). 2.3 Interpretadores Prolog Existem vários interpretadores / compiladores Prolog. Por seguir o standard ISSO Prolog e por ser Open Source, o SWI Prolog é atualmente o interpretador usado nas aulas de Inteligência Artificial e de Tecnologias para Sistemas Inteligentes. Existe SWI Prolog para ambientes Windows, Mac OS X, e Linux. No entanto há muitos outros interpretadores pagos e gratuitos da linguagem Prolog. 2.4 Exemplos de sistemas Pretende mostrar-se a aplicação da Programação em Lógica a problemas que poderiam ser bem resolvidos pela utilização de Sistemas Baseados em Conhecimento. 7

Pen USB e documentos % cabe(doc, Pen) Doc cabe na Pen cabe(doc, Pen):- penusb(pen, ELivre), ficheiro(ficheiro, Tamanho), ELivre >= Tamanho. penusb(pen1, 2000). % 2000 MBytes (2 GBytes) penusb(pen2, 3). % 3 MBytes ficheiro(doc1, 0.5). % 5.5 MBytes (500 KBytes) ficheiro(doc2, 3.5). ficheiro(doc3, 0.25).?- cabe(doc, Pen). Podemos tornar este sistema mais realista se o predicado penusb/2 computar o espaço livre na pen, com base nos tamanhos dos ficheiros armazenados. Os seguintes factos ilustram o que se pretende armazenado(doc1, pen1). armazenado(doc4, pen1). armazenado(imagem1, pen1).... A solução do problema passaria por criar um sistema que computasse o espaço ocupado por todos os ficheiros armazenados, mas isso não pode ser feito hoje porque não foi dada a matéria suficiente. Sistema de avaliação de candidatos Numa empresa, pretende desenvolver-se um sistema para ajudar a identificar os trabalhadores mais adequados para determinadas tarefas. Esse sistema é constituído por várias partes. Aqui, analisa-se uma parte do sistema que apenas identifica trabalhadores para a tarefa, mas não os ordena. % Regras para selecionar candidatos candidato(a, T) :- trabalhador(a), tarefa(t), disponivel(a, T), capacidade(a, T), interesse(a, T). disponivel(a, T) :- tempo_disp(a, T), % Tempo disponivel permitido(a, T). % A pode efectuar T 8

tempo_disp(a, T) :- horas_contratuais(a, N), horas_atribuidas(a, M), Disponivel is N M, nhoras(t, HorasTarefa), Disponivel >= HorasTarefa. % Factos % Tarefas tarefa(testp) % Teste sistemático de programas de computador tarefa(intrd) % Introdução de dados num sistema de documentação tarefa(secr) % Secretariado % Horas necessárias para as tarefas nhoras(testp, 20). nhoras(intrd, 25). nhoras(secr, 15). % Empregados: Alves, Matos % Alves trabalhador(alves). horas_contratuais(alves, 40). horas_atribuidas(alves, 20). permitido(alves, testp). capacidade(alves, testp). interesse(alves, testp). % Matos trabalhador(matos). horas_contratuais(matos, 40). horas_atribuidas(matos, 15). permitido(matos, secr). capacidade(matos, secr). interesse(matos, secr). Este sistema constitui una simplificação significativa da realidade. De acordo com o conhecimento explicitamente representado, um trabalhador tem disponibilidade para a tarefa se tem tempo disponível e se for permitido. A permissão é, nesta simplificação, representada por factos. Num sistema mais realista, seria necessário confrontar a tarefa e as atividades que ela envolve com o contrato de trabalho e eventualmente com a lei geral. A capacidade de um candidato para uma tarefa é também um facto. Talvez um sistema mais realista tivesse de confrontar os requisitos da tarefa com as aptidões e características do candidato. 9

3 Referências [Bratko 2000] Bratko, I. 2000. Prolog Programming for Artificial Intelligence. Third Edition. Pearson Addison Wesley [Clocksin e Mellish 2003] Clocksin, W.F.; e Mellish, C.S. 2003. Programming in Prolog: Using the ISO Standard (Fifth Edition). Springer 10