Skip to content

INE5416-04208 (20132) - Paradigmas de Programação

Notifications You must be signed in to change notification settings

tonussi/se-prolog

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

42 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Estudante: Lucas Pagotto Tonussi

Disciplina: Paradigmas da Programção INE5416-04208 (20132)

Professor: Ricardo Azambuja Silveira

Definição de sistema especialista (SE)

Um sistema especialista é um sistema computacional com uma estratégia de resolução de problemas.

Sistemas Especialistas

Linguagens Pesquisadas

Seguem as linguagens que pesquisamos para interface com o usuário. Todas são ótimas e trabalham bem a abordagem de se fazer ponte entre uma base de conhecimentos em Prolog.

Perl

Linguagem Perl

  • functional
  • imperative
  • object-oriented (class-based)
  • reflective
  • procedural
  • data-driven
  • generic

Ruby

Linguagem Ruby

  • object-oriented
  • imperative
  • functional
  • reflective

C

Linguagem C

  • Imperative (procedural)
  • Structured

Python

Linguagem Python

A linguagem escolhida é Python e estou usando pyswip.

  • object-oriented
  • imperative
  • functional
  • procedural
  • reflective

Java

Linguagem Java

  • object-oriented
  • structured
  • imperative
  • generic
  • reflective

C++

Linguagem C++

  • procedural
  • functional
  • object-oriented
  • generic

Arquitetura (Software architecture)

Base de Conhecimentos

É basicamente uma série de regras e calculos que serão feitas em prolog para resolver problemas que são encontrados por sistemas mais sofísticados mas que não tem tanta firmeza de decisão. E prolog é considerado uma línguagem forte para decisões. Por isso ela é usada para sistemas especialistas e bastante interfaceada para varias linguagens de programação.

IF   | <algo acontecer> ; Antecendente
THEN | <faça isso>      ; Consequencia

As regras precisam associar a evidência sobre o problema. Sob considerações a fim de o sistema especialista tirar conclusões para a linguagem de mais alto nível. Exemplos:

Verifica se o valor da temperatura está regulado corretamente.

%%%%%%%%%%%%
% Limiares %
%%%%%%%%%%%%

cota(CotaSuperior, CotaInferior, X, Result) :-
        X > CotaSuperior,
        Result is CotaSuperior, !.
cota(CotaSuperior, CotaInferior, X, Result) :-
        X < CotaInferior,
        Result is CotaInferior, !.
cota(CotaSuperior, CotaInferior, X, Result) :-
        X =< CotaSuperior,
        X >= CotaInferior,
        Result is X, !.

%%%%%%%%%%%
% Decisor %
%%%%%%%%%%%

decisao_tambiente(TemperaturaExterior, TemperaturaMedia, CotaSuperior, CotaInferior, Ajuste, Rendimento, Write) :-

        TemperaturaMedia > CotaSuperior,
        TemperaturaExterior > CotaSuperior,
        cota(CotaSuperior, CotaInferior, TemperaturaMedia, Rendimento),
        append("Sistem (Erro): Temperatura exterior muito alta.", "MuitoQuenteException", Write), !.

decisao_tambiente(TemperaturaExterior, TemperaturaMedia, CotaSuperior, CotaInferior, Ajuste, Rendimento, Write) :-

        % forca rendimento ficar entre as cotas superior e inferior pelo ajuste em %
        TemperaturaMedia < CotaInferior,
        TemperaturaExterior < CotaInferior,
        cota(CotaSuperior, CotaInferior, TemperaturaMedia, Rendimento),
        append("Sistema (Erro): Temperatura exterior muito baixa.","MuitoFrioException", Write), !.

decisao_tambiente(TemperaturaExterior, TemperaturaMedia, CotaSuperior, CotaInferior, Ajuste, Rendimento, Write) :-

        % caso contrario procura por um bom rendimento
        ajuste(TemperaturaExterior, TemperaturaMedia, Ajuste, Unbounded),
        cota(CotaSuperior, CotaInferior, Unbounded, Rendimento),
        \+ Unbounded == Rendimento,
        append("Sistem (Erro): Ajuste fora dos limites.", "", Write), !.

decisao_tambiente(TemperaturaExterior, TemperaturaMedia, CotaSuperior, CotaInferior, Ajuste, Rendimento, Write) :-
        ajuste(TemperaturaExterior, TemperaturaMedia, Ajuste, Unbounded),
        cota(CotaSuperior, CotaInferior, Unbounded, Rendimento),
        append("Sistem (Decidido): Temperatura ajustada.", "", Write), !.


%%%%%%%%%%%%%%
% Calculador %
%%%%%%%%%%%%%%

ajuste(TemperaturaExterior, TemperaturaMedia, Ajuste, Rendimento) :-
        \+ TemperaturaMedia == TemperaturaExterior,
        TemperaturaExterior > TemperaturaMedia,
        abs(TemperaturaExterior-TemperaturaMedia, TaxaVariacao),
        abs(TemperaturaExterior - (TaxaVariacao * (1 - (Ajuste / 100))), Rendimento).

ajuste(TemperaturaExterior, TemperaturaMedia, Ajuste, Rendimento) :-
        \+ TemperaturaMedia == TemperaturaExterior,
        TemperaturaExterior < TemperaturaMedia,
        abs(TemperaturaExterior-TemperaturaMedia, TaxaVariacao),
        abs(TemperaturaExterior + (TaxaVariacao * (1 - (Ajuste / 100))), Rendimento).

ajuste(TemperaturaExterior, TemperaturaExterior, Ajuste, Rendimento) :-
        TemperaturaMedia == TemperaturaExterior,
        Rendimento is TemperaturaExterior.

A máquina de inferências é um programa de computador desenhado para produzir um dicernimento sobre regras. Existem muitos tipos de abordagens lógicas, via lógica proposicional, predicados de ordem >= 1, lógica epistêmica, lógica modal, lógica temporal, lógica fuzzy, lógica probabilistica (implementada por Redes de Bayesianas), dentre outras. A proposicional é mais usada, por ser natural nos seres humanos, e é expressada com silogismos. O sistema especialista que usa tal lógica é também chamado de ordem zero-ésima. Com lógica, o programa é capaz de gerar novas informações vindas do conhecimento na base de regras e informações.

  • Base de Conhecimento: Regras IF-THEN-ELSE + Matemática.
  • Base de Dados: Dados específicos para o problema.
  • Mecânismo de Inferência: O núcleo pensante.
  • Interface de Usuário: Faz o diálogo.

Dentro do diretório bindings existe um simples software em python, que trata a temperatura de um quarto de hotel (prédio, casa) imaginando que existem sensores espalhados e o controlador desse sistema consegue ler as informações dos sensores e jogar no computador (software) para que ele resolva, na verdade, ajude a resolver. É um problema simples. Mas do jeito que está construído basta reusar e adicionar mais sensores (mais variaveis problematicas). Aí no caso de mais adicões é preciso ir em intel.pro e adicionar mais calculos para sensores diferentes. Quando o operador por exemplo alguem responsável no hotel cadastra hóspedes eles dizem a temperatura que eles gostariam que fosse o quarto de hóspedes dele. A cadastrante aciona o software e preenche a temperatura que está sendo lida pelos sensores em graus celcius, e depois preenche o ajuste, o ajuste é o quanto pode variar a temperatura em relação a temperatura externa e interna do quarto (pode ser quarto, recipiente, qualquer coisa, depende do contexto). Conforme hospedes são adicionados intel.pro vai sendo requisitado para que seja resolvido por ele o problema da temperatura externa, e interna, porém a interna é baseado numa média das temperaturas que os hóspedes pediram. É bastante simples.

Para usar o software, você precisa:

  • Python 2.7.2+
  • PySWIP 0.2.2+
  • Prolog (Swipl) 5+
python bindings/main.py

Aos Dependentes de Windows:

  • Copia e cola swipl.dll e renomeia a duplicata para libpl.dll
  • Adiciona \pl\bin ao PATH das configurações Windows.

Modelo

Referências

Expert System at Wiki

Language Binding at Wiki

Sistemas Especialistas

IRQ Expert System

Building Expert Systems in Prolog

Interfacing Arduino Python

Python Unit Test Framework

About

INE5416-04208 (20132) - Paradigmas de Programação

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published