adriano melo sistemas inteligentes ([email protected]) tutorial de jess

31
ADRIANO MELO SISTEMAS INTELIGENTES ([email protected]) Tutorial de Jess

Upload: internet

Post on 21-Apr-2015

113 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ADRIANO MELO SISTEMAS INTELIGENTES (ASTM@CIN.UFPE.BR) Tutorial de Jess

ADRIANO MELOSISTEMAS INTELIGENTES

([email protected])

Tutorial de Jess

Page 2: ADRIANO MELO SISTEMAS INTELIGENTES (ASTM@CIN.UFPE.BR) Tutorial de Jess

O que é o Jess?

Acrônimo para Java Expert System Shell

Ferramenta especializada no desenvolvimento de Sistemas Especialistas que usa um motor de inferência.

Page 3: ADRIANO MELO SISTEMAS INTELIGENTES (ASTM@CIN.UFPE.BR) Tutorial de Jess

Inferência no Jess

Para conseguir fazer inferências, o jess utiliza os seguintes elementos:

Lista de fatos (e lista de instâncias) Memória global para dados

Base de conhecimento Contem todas as regras

Motor de inferência Controla a execução das regras

Page 4: ADRIANO MELO SISTEMAS INTELIGENTES (ASTM@CIN.UFPE.BR) Tutorial de Jess

Há três formas de representar Conhecimento no jess

Regras Conhecimento heurístico baseado em experiências

Funções Conhecimento baseado em procedimentos

Programação orientada a objetos Classes, abstração, encapsulamento, herança,

polimorfismo, handlers de mensagens

Page 5: ADRIANO MELO SISTEMAS INTELIGENTES (ASTM@CIN.UFPE.BR) Tutorial de Jess

Começando...

Descompactar a versão trial do jess localizada em:

http://www.cin.ufpe.br/~astm/si/jess-trial.zip

Executar o arquivo “Jess71p2/bin/jess.bat”

Page 6: ADRIANO MELO SISTEMAS INTELIGENTES (ASTM@CIN.UFPE.BR) Tutorial de Jess

Comandos básicos

(assert (X)) – colocar dado na lista de fatos

(facts) – mostrar a lista de fatos

(clear) – remove todos os fatos e regras

(reset) – remove todos os fatos e adiciona um fato inicial

Page 7: ADRIANO MELO SISTEMAS INTELIGENTES (ASTM@CIN.UFPE.BR) Tutorial de Jess

FATOS ORDENADOS

FATOS DESORDENADOS

FATOS DEFINSTANCE

Fatos

Page 8: ADRIANO MELO SISTEMAS INTELIGENTES (ASTM@CIN.UFPE.BR) Tutorial de Jess

Fatos Ordenados

São simplesmente listas, onde o primeiro campo (head) funciona como uma categoria.

Exemplos:(lista-de-compras ovo leite pão)

(pessoa “Bob Marley" Masculino 34)

(pai-de joão biu)

No Jess: (assert (pai-de joão biu))

Page 9: ADRIANO MELO SISTEMAS INTELIGENTES (ASTM@CIN.UFPE.BR) Tutorial de Jess

Fatos Desordenados

Fatos ordenados são úteis, mas não são estruturados.

Em linguagens orientadas à objeto, os objetos têm atributos onde ficam os dados. Fatos desordenados permitem esse recurso. Obs: Atributos no jess são chamados de slots.

Exemplos:

(pessoa (nome "Bob Marley")(idade 34)(genero Masculino))(carro (fabricante Ford) (modelo Explorer) (ano 1999))

Page 10: ADRIANO MELO SISTEMAS INTELIGENTES (ASTM@CIN.UFPE.BR) Tutorial de Jess

Fatos Desordenados (deftemplate)

Para usar fatos desordenados, precisamos antes definir um deftemplate.

(deftemplate <deftemplate-name> [<doc-comment>] [extends <classname>] [(declare

(from-class java-class-name))][(slot | multislot <slot-name>

[(default)] )]*

)

Page 11: ADRIANO MELO SISTEMAS INTELIGENTES (ASTM@CIN.UFPE.BR) Tutorial de Jess

Fatos desordenados (exemplos)

;cria um template carro com os slots fabricante, modelo e ano

(deftemplate carro (slot fabricante) (slot modelo) (slot ano))

; cria um fato do modelo carro(assert (carro (fabricante ford) (ano 99) (modelo fusion)))

; herda os slots de carro e adiciona o slot origem(deftemplate carro-importado extends carro (slot

origem)); cria um fato do modelo carro-importado(assert (carro-importado (origem alabama) (ano 2000)))

Page 12: ADRIANO MELO SISTEMAS INTELIGENTES (ASTM@CIN.UFPE.BR) Tutorial de Jess

Fatos Desordenados (herdando de java)

//Classe em javaimport java.io.Serializable;public class Account implements Serializable {

private float balance;public float getBalance() { return balance; }public void setBalance(float balance) {

this.balance = balance;}// Other, more interesting methods

}

Jess> (deftemplate Account (declare (from-class Account)))

Page 13: ADRIANO MELO SISTEMAS INTELIGENTES (ASTM@CIN.UFPE.BR) Tutorial de Jess

VARIÁVEIS

USO DO PONTO

VARIÁVEIS GLOBAIS

comandos e sintaxe

Page 14: ADRIANO MELO SISTEMAS INTELIGENTES (ASTM@CIN.UFPE.BR) Tutorial de Jess

Variáveis

Identificadas por iniciar com “?”Pode-se atribuir valores usando a função (bind)

Exemplos: (bind ?a 123)

(deftemplate box (slot location) (multislot contents))(bind ?id (assert (box (location kitchen)(contents spatula sponge frying-pan))))

Page 15: ADRIANO MELO SISTEMAS INTELIGENTES (ASTM@CIN.UFPE.BR) Tutorial de Jess

Variáveis com ponto

Variáveis com um ponto como em ?x.y o jess interpreta como sendo o slot y da variável x.

(deftemplate box (slot location) (multislot contents))

(bind ?id (assert (box (location kitchen)(contents spatula sponge frying-pan))))

?id.location?id.contents

Page 16: ADRIANO MELO SISTEMAS INTELIGENTES (ASTM@CIN.UFPE.BR) Tutorial de Jess

Variáveis Globais

Variáveis globais são aquelas que não são apagadas depois de um (reset)

Sintaxe: (defglobal [?<global-name> = <value>]+)

Exemplo:(defglobal ?*x* = 3)(bind ?*x* 4)(reset)

Page 17: ADRIANO MELO SISTEMAS INTELIGENTES (ASTM@CIN.UFPE.BR) Tutorial de Jess

LOOP (WHILE)

DECISÃO (IF)

Controle de Fluxo

Page 18: ADRIANO MELO SISTEMAS INTELIGENTES (ASTM@CIN.UFPE.BR) Tutorial de Jess

Loop Simples

; atribuindo um valor à variável ?i(bind ?i 3)

; loop executado enquanto ?i é maior que zero(while (> ?i 0)

(printout t ?i crlf)(-- ?i)

)

; obs: existe ainda for e foreach

Page 19: ADRIANO MELO SISTEMAS INTELIGENTES (ASTM@CIN.UFPE.BR) Tutorial de Jess

Decisão (if)

(bind ?x 1) ; atribui o valor 1 à variável ?x

(if (> ?x 100) then ; caso ?x seja maior que 100

(printout t "X is big" crlf)elif (> ?x 50) then ; caso ?x seja maior que 50

(printout t "X is medium" crlf)else ; caso seja menor ou igual a 50

(printout t "X is small" crlf))

Page 20: ADRIANO MELO SISTEMAS INTELIGENTES (ASTM@CIN.UFPE.BR) Tutorial de Jess

DEFFUNCTIONS

Definindo funções

Page 21: ADRIANO MELO SISTEMAS INTELIGENTES (ASTM@CIN.UFPE.BR) Tutorial de Jess

deffunctions

Sintaxe:(deffunction <function-name>

[<doc-comment>] (<parameter>*)<expr>* [<return-specifier>]

)Cada <parameter> deve ser uma variávelPode ter um número arbitrário de <expr> <return-specifier> dá o valor de retorno da

função

Page 22: ADRIANO MELO SISTEMAS INTELIGENTES (ASTM@CIN.UFPE.BR) Tutorial de Jess

deffunctions (exemplos)

(deffunction max (?a ?b)(if (> ?a ?b) then

(return ?a)else

(return ?b)))(deffunction distancia(?

x1 ?y1 ?x2 ?y2)(sqrt (+ (** (- ?x2 ?x1) 2)(** (- ?y2 ?y1) 2))))

(deffunction varrer-lista ($?b)(if (> (length$ ?b) 0) then

(printout t "elemento: " (first$ ?b) crlf )

(varrer-lista (rest$ ?b)))

)

Page 23: ADRIANO MELO SISTEMAS INTELIGENTES (ASTM@CIN.UFPE.BR) Tutorial de Jess

Comandos...

(retract <Fact-X>) – remove o fato de índice X

(defrule nome-da-regra ...

=>...

) – define uma regra. Vindo primeiro o padrão de listas e depois do =>, as

ações

Page 24: ADRIANO MELO SISTEMAS INTELIGENTES (ASTM@CIN.UFPE.BR) Tutorial de Jess

Regras (casamento de padrão)

(defrule nome-da-regra(a ?y)

=>... ; pega todos os fatos que têm “a” como o primeiro elemento da lista

) (defrule nome-da-regra

(b c d ?x) =>

... ; todos os fatos que têm 4 elementos, e os três primeiros são “b c d”

)

Page 25: ADRIANO MELO SISTEMAS INTELIGENTES (ASTM@CIN.UFPE.BR) Tutorial de Jess

Exemplo

Page 26: ADRIANO MELO SISTEMAS INTELIGENTES (ASTM@CIN.UFPE.BR) Tutorial de Jess

Exemplo sala...

(assert (tempo segunda sol))(assert (tempo terça nublado))(assert (tempo quarta chuva))(defrule clima-semana

(tempo ?dia ?condicao)=>

(printout t ?dia “ a condição climática estava assim: “ ?condicao crlf))

(run)

Page 27: ADRIANO MELO SISTEMAS INTELIGENTES (ASTM@CIN.UFPE.BR) Tutorial de Jess

Complicando exemplo anterior...

; Saber a variação climática da semana...

(defrule clima-semana(tempo segunda ?condicao-seg)(tempo terça ?condicao-ter)(tempo quarta ?condicao-quar)

=>(assert (tempo-semana ?condicao-seg ?

condicao-ter ?condicao-quar)))(run)

Page 28: ADRIANO MELO SISTEMAS INTELIGENTES (ASTM@CIN.UFPE.BR) Tutorial de Jess

Removendo fatos (exemplo)...

Jess> (assert (solteiro joao "25 anos"))<Fact-0>

Jess> (assert (solteira maria "23 anos"))<Fact-1>

Jess> (defrule get-married?homem <- (solteiro joao ?idade)?mulher <- (solteira maria ?idade2)

=>(printout t "joao se casou com maria..." crlf)(retract ?homem)(retract ?mulher)(assert (casados joao maria "25 anos" "23 anos"))

)TRUEJess> (run)joao se casou com maria...1Jess> (facts)f-2 (MAIN::casados joao maria "25 anos" "23 anos")For a total of 1 facts in module MAIN.

Page 29: ADRIANO MELO SISTEMAS INTELIGENTES (ASTM@CIN.UFPE.BR) Tutorial de Jess

Comandos

(deffacts)– define um corpo de fatos que são freqüentemente utilizados. São restaurados depois de um reset. (deffacts <nome > [(fato valor)]* )

(batch) – carrega um script com comandos do jess (batch “url/para/o/arquivo.clp")

(printout) – imprime no console do jess (printout t "Hello, World" crlf)

Comentários - ; para uma linha /* para várias */

Page 30: ADRIANO MELO SISTEMAS INTELIGENTES (ASTM@CIN.UFPE.BR) Tutorial de Jess

Trabalhando com listas...

(nome-campo $?a ?nome $?b )

Page 31: ADRIANO MELO SISTEMAS INTELIGENTES (ASTM@CIN.UFPE.BR) Tutorial de Jess

Referências

Jess® The Rule Engine for the Java™ Platform http://www.cin.ufpe.br/~astm/si/Jess71p2.pdf

Jess Tutorial http://www.cin.ufpe.br/~astm/si/jess-tutorial.pdf