Anda di halaman 1dari 40

INTELIGNCIA ARTIFICIAL E SISTEMAS ESPECIALISTAS Mini Apostila 3 Sistemas Especialistas Difusos (Fuzzy Expert Systems) : FuzzyClips Enfoque: Motor

de Inferncia Regra Composicional de Inferncia

1. FuzzyClips: Um shell para construo de Sistemas Especialistas Difusos (Fuzzy Expert Systems)
1.1 Preparando o ambiente bsico para executar um programa em FuzzyClips

O software FuzzyClips pode ser obtido no site da NASA no seguinte endereo: http://www.iit.nrc.ca/IR_public/fuzzy/fuzzyClips/fuzzyCLIPSIndex.html Aps a instalao do FuzzyClips (verso 6.xxx) num subdiretrio de sua escolha (por exemplo, c:\FClips) execute o arquivo Clipswin.exe Abra a janela de fatos: Opo Window Facts Window Abra a janela da agenda: Opo Window Agenda Window

A janela Facts apresenta todos os fatos explcitos da base de conhecimento do SE e os fatos implcitos que surgem medida em que as regras do SE so disparadas. A janela Agenda armazena todas as regras do SE que casam com os fatos do SE e podem portanto ser disparadas.
2

1.2 Editando um programa em FuzzyClips

possvel editar um programa fonte usando qualquer editor de texto padro ASCII (NotePad, WordPad por exemplo) ou o prprio editor de texto embutido no FuzzyClips verso 6.04a. Para carregar este editor digite a opo File Editor.

2. Editando e executando o primeiro programa (sistema especialista) em FuzzyClips 2.1 A base de conhecimento do SE Para este exemplo de SE duas variveis lingusticas so utilizadas: temperatura e dosagem (de medicamento). So tambm apresentados os respectivos termos lingusticos das variveis:

A regra da base de conhecimento deste SE a seguinte: SE temperatura moderada ENTO dosagem (do medicamento) baixa O nico fato da base de conhecimento o seguinte: A temperatura est em torno de 37,5 C

Os termos difusos das variveis lingusticas e os fatos qualitativos so usualmente representados por figuras geomtricas (tringulos e trapezides) e em FuzzyClips representam-se estas figuras atravs de seus vrtices.

Vamos escrever o programa-fonte em FuzzyClips no arquivo PROG1.CLP utilizando o editor de texto do prprio FuzzyClips

2.1.1 Codificando as variveis lingusticas Temperatura e Dosagem Em FuzzyClips utiliza-se a clusula deftemplate para definir uma varivel lingustica bem como seu universo de discurso e os valores de seus termos lingusticos. Assim:

Um comentrio feito utilizando-se o ponto-e-vrgula na primeira posio da linha O nome escolhido pelo programador para a varivel lingustica temperatura foi vl_TEMPERATURA O universo de discurso considerado foi: valores numricos entre 32 e 40 Observe os vrtices dos trapezides dos termos lingusticos: o par (X,Y) um vrtice do trapezide onde X o valor numrico da temperatura e Y o grau de pertinncia deste valor em relao ao termo lingustico Abaixo apresentada a codificao para as variveis lingusticas de temperatura e dosagem. Codifique este trecho no inicio do arquivo.
6

;---------------------------------------------------; Sistema Especialista para dosagem de medicamento ;---------------------------------------------------;===================================== ; Definio das Variveis Lingusticas ;===================================== (deftemplate vl_TEMPERATURA 32 40 Celsius ( (MuitoBaixa (32 1) (33 1) (34.7 0)) (Baixa (33 0) (34.7 1) (35.3 1) (36 0)) (Moderada (35.3 0) (36 1) (36.6 1) (37.8 0)) (Alta (36.6 0) (37.8 1) (38.5 1) (39 0)) (MuitoAlta (38.5 0) (39 1) (40 1)) ) )

(deftemplate vl_DOSAGEM 0 25 ml ( (MuitoBaixa (0 1) (4 1) (7 0)) (Baixa (4 0) (7 1) (12 1) (17 0)) (Media (12 0) (17 1) (23 1) (25 0)) ) )

Aps esta digitao possvel compilarmos o programa para ver se as definies esto corretas. 2.1.2 Sequncia para carregar e compilar um programa FuzzyClips A seguir apresentada uma sequncia de passos que no seria necessria na primeira vez em que se compila um programa FuzzyClips. Contudo, esta sequncia de (re)inicilizao recomendvel quando se estiver editando, compilando e executando um programa repetidas vezes.

1) Na janela principal do programa (Clips 6.0) escolha a opo Execution Clear Clips para limpar o ambiente FuzzyClips apagando da memria diversas estruturas (entre as quais as variveis lingusticas) 2) Apenas por questes de esttica e destaque na visualizao na nova sequncia de processamento, interessante limpar as janelas do ambiente de programao. Utilize a opo Window Clear Dialog Window. 3) Carregue o arquivo com o programa-fonte em FuzzyClips (no exemplo o arquivo PROG1.CLP) atravs da opo File Load Constructs.

No exemplo do programa PROG1.CLP, se foram digitadas corretamente as definies para as variveis lingusticas temperatura e dosagem, o programa informa TRUE, que significa que o cdigo do programa no contm erros.

Observe na figura acima que o programa conseguiu criar as variveis lingusticas vl_TEMPERATURA e vl_DOSAGEM corretamente (Defining deftemplate funcionou OK !!) Se no cdigo anterior fosse esquecido, por exemplo, o ltimo fecha parntese na definio do termo lingustico Baixa da varivel lingustica vl_DOSAGEM, aps a sequncia 1), 2) e 3) o programa acusaria tal erro:
8

2.1.3 Codificando a(s) regra(s) da Base de Conhecimento Veja abaixo a codificao da nica regra do Sistema Especialista exemplo. A regra escrita no arquivo do programa-fonte, logo aps a definio das variveis lingusticas. utilizada a clusula defrule para definir uma regra cujo(s) antecedente(s) (so) escrito(s) antes dos marcadores =>. A(s) consequncia(s) da regra (so) escrita(s) depois destes marcadores ;------------------------------; Regras da Base de Conhecimento ;-------------------------------

(defrule r-TEMP-MODERADA-DOSAGEM-BAIXA (declare (salience 30)) (vl_TEMPERATURA Moderada) => (assert (vl_DOSAGEM Baixa)) )

Note que toda regra recebe um nome. No caso o nome escolhido foi r-TEMP-MODERADA-DOSAGEM-BAIXA, porm a regra poderia ter o nome regra01 ou r01, etc. A salincia da regra indica a sua prioridade de disparo quando todas as regras do SE so confrontadas com os fatos para tentativa de disparo. Assim as regras com maior valor de salincia tm maior prioridade de disparo. No exemplo acima a salincia da regra vale 30. Aps a digitao desta regra na base de conhecimento, efetue a compilao do programa para verificar possveis erros de sintaxe: Efetue a sequncia 1), 2) e 3) apresentada anteriormente para carregar e compilar o programa FuzzyClips. Se tudo estiver OK, o programa indicar TRUE na ltima linha de compilao

2.1.4 Codificando o(s) fato(s) da Base de Conhecimento Veja abaixo a codificao do nico fato do Sistema Especialista exemplo. O fato escrito no arquivo do programa-fonte, logo aps a definio das regras. utilizada a clusula deffacts para definir fato(s) explcitamente. ;------------------------------; Fatos da Base de Conhecimento ;------------------------------;====> A temperatura est em torno de 37,5 C (deffacts F1 (vl_TEMPERATURA (37.3 0) (37.5 1) (37.7 0)) )
10

Toda clusula deffacts recebe um nome. No exemplo acima deffacts recebeu o nome F1 e contm apenas um fato declarado. Poderia contudo ter mais fatos declarados. Aps a digitao deste fato na base de conhecimento, efetue a compilao do programa para verificar possveis erros de sintaxe (sequncia de passos 1), 2) e 3) ).

2.1.5 Executando o programa FuzzyClips passo a passo Agora que o programa FuzzyClips possui: (A) variveis lingusticas definidas, (B) regra(s) da Base de Conhecimento definida(s) e (C) fato(s) da Base de Conhecimento definido(s), possvel executar o programa (executar o SE). Vamos executar o SE passo a passo para entender cada evento do processo Para acompanhar a execuo passo a passo necessrio marcar as opes Facts e Rules da janela Watch Options: Utilize a opo Execution Watch... e marque Facts e Rules

11

Em seguida vamos carregar e compilar o programa PROG1.CLP: 1) Execution Clear Clips 2) Window Clear Dialog Window. 3) File Load Constructs. Se no houver erros de compilao a resposta ser TRUE:

12

Agora necessrio resetar (inicializar) a Base de Conhecimento do SE. Assim: 4) Execution Reset

Como foi solicitado ao programa para mostrar passo a passo suas aes, na janela CLIPS6.0, podemos ver, logo aps o (reset) que dois fatos entraram para a base de fatos: o fato f-0 (initial-fact) um fato de controle do FuzzyClips. J o fato f-1 insere na base de conhecimento o fato temperatura em torno de 37,5 C Observe na janela CLIPS6.0 :

= = > f-1 indica a entrada de um fato na base de conhecimento (vl_TEMPERATURA ???) : as interrogaes indicam apenas que este fato difuso no possui um nome especfico. Ou seja, o tringulo (37.3 0) (37.5 1) (37.7 0) no tem nenhum nome distinto, como tem os trapezides MuitoBaixa, Baixa, Moderada, Alta e MuitoAlta. CF 1.00 indica fator de certeza 100% (Certainty Factor CF). Nos exemplos apresentados, toda informao ser processada com CF = 1.
13

Observe que a janela FACTS (MAIN) mostra os fatos f-0 e f-1 incorporados na base de conhecimento

Observe tambm que a janela AGENDA (MAIN) apresenta a indicao de que a regra r-TEMP-MODERADA-DOSAGEM-BAIXA consegue casar com o fato f-1. Indica ainda a prioridade de disparo da regra (ou salincia da regra) com o valor 30. Esta regra da agenda est pronta para ser disparada. No foi disparada ainda porqu a execuo do programa est ocorrendo passo a passo.

Como o programa est sendo executado passo a passo preciso instru-lo para executar o prximo passo. Para executar o prximo passo execute a opo Execution Step.

14

A regra r-TEMP-MODERADA-DOSAGEM-BAIXA disparada (FIRE) pois consegue casar, ainda que parcialmente com o fato f-1. Como consequncia desse disparo, um fato que estava implcito entra na base de conhecimento. O fato que entra na base de conhecimento o fato f-2 e refere-se dosagem de medicamento (pois o consequente da regra).

possvel perceber que a dosagem resultante (o valor da varivel lingustica vl_DOSAGEM) apresenta a figura de um trapzio com vrtices (4 0) (5.071 0.3571) (15.21 0.3571) (17 0). Como foi obtido este resultado? O antecedente da regra (varivel lingustica temperatura) casou parcialmente com o fato f-1 (temperatura em torno de 37,5 C). A potncia de disparo da regra foi calculada em 0.3571.

15

E o consequente desta regra uma dosagem baixa com um corte de 0.3571.

Em seguida o sistema especialista encerra a execuo totalmente, pois na sua agenda, no existe mais nenhuma regra que case com algum fato da base de fatos.

16

A soluo do SE indicou como resposta a varivel lingustica vl_DOSAGEM = (4 0) (5.071 0.3571) (15.21 0.3571) (17 0). Contudo, para o usurio do SE interessante ter a resposta como um valor numrico que represente este conjunto difuso. Vamos ento incluir uma regra de defuzificao no sistema especialista. Esta regra deve ser a ltima regra a ser disparada pela agenda. 2.1.6 Incluindo a regra de defuzificao no SE Para incluirmos a regra de defuzificao para a dosagem de medicamento a ser ministrada, vamos inicialmente criar duas variveis globais para o sistema. Variveis globais so criadas, no FuzzyClips, na clusula defglobal, escrita no incio do SE e, portanto, antes das clusulas deftemplate. Utilize o editor de texto para codificar o trecho abaixo em PROG1.CLP: ;-----------------------------------------; Definio de variveis globais do sistema ;-----------------------------------------(defglobal ?*g_RESULTADO1* = 0 ?*g_RESULTADO2* = 0 ) Obs.: Toda varivel global deve ter seu nome escrito entre dois asteriscos.

17

Vamos escrever a regra de defuzificao. Ela deve ser escrita junto com as demais regras da base de conhecimento, em qualquer lugar. Contudo, para melhor apresentao escreva-a aps a ltima regra escrita. No exemplo, escreva-a aps a regra r-TEMP-MODERADA-DOSAGEM-BAIXA. Codifique o trecho abaixo: (defrule regra-DEFUZZIFICAR (declare (salience 0)) ?v_DOSAGEM <- (vl_DOSAGEM ?) => (bind ?*g_RESULTADO1* (moment-defuzzify ?v_DOSAGEM)) (bind ?*g_RESULTADO2* (maximum-defuzzify ?v_DOSAGEM)) (retract ?v_DOSAGEM) (printout t " Dosagem Total") (printout t crlf " 1) Por COG = ") (printout t ?*g_RESULTADO1* " ml") (printout t crlf " 2) Por MOM = ") (printout t ?*g_RESULTADO2* " ml") (printout t crlf " >>> Termino OK <<< " crlf) ) Observe que a regra regra-DEFUZZIFICAR tem salincia = 0. Isto significa que ela tem menos prioridade para execuo pela agenda em relao regra r-TEMP-MODERADA-DOSAGEM-BAIXA que tem salincia = 30. E o objetivo justamente deixar a regra de defuzificao como ltima regra processada pela agenda. Foi criada uma varivel comum denominada v_DOSE para receber qualquer valor difuso de vl_DOSAGEM (lembre-se que este valor usualmente um trapezide ou um polgono) Foi atribudo para a varivel global *g_RESULTADO1* o valor da defuzificao de vl_DOSAGEM (agora em v_DOSE) pelo mtodo do centride (COG)

18

Foi atribudo para a varivel global *g_RESULTADO2* o valor da defuzificao de vl_DOSAGEM (agora em v_DOSE) pelo mtodo da mdia dos mximos (MOM) Depois de calculado o valor defuzificados pelos dois mtodos mais tradicionais, a varivel v_DOSE no mais necessria e ento eliminada do sistema via comando retract. Para apresentar os resultados utiliza-se o comando printout de vrias formas como apresentado acima. 2.1.7 (Re)executando o programa com a regra de defuzificao Vamos reexecutar o programa, agora com a regra de defuzificao escrita no cdigo do programa: 1) Execution Clear Clips 2) Window Clear Dialog Window. 3) File Load Constructs. Se o programa for compilado corretamente obteremos a tela abaixo:

19

Ao resetarmos o ambiente obteremos a tela abaixo (certifique-se antes de ter habilitado Facts e Rules em Execution Watch...): 4) Execution Reset

Na agenda est registrado que r-TEMP-MODERADA-DOSAGEMBAIXA consegue casar, ainda que parcialmente com o fato f-1

Para executar o programa passo a passo e entender a prxima operao do FuzzyClips execute a opo Execution Step.

20

Ao executar apenas o prximo passo (com Execution Step) obtemos o seguinte resultado:

Agora, com a entrada do fato novo (que estava implcito) sobre dosagem para a base de fatos, a agenda apresentar registrada a possibilidade de disparo da regra regra-DEFUZZIFICAR, pois seu antecedente unifica naturalmente com este novo fato f-2.

A agenda est pronta para disparar mais uma regra (a ltima regra !!)

21

Para executarmos passo a passo o SE basta clicarmos em Execution Step e obteremos o resultado abaixo:

A regra de defuzificao basicamente calcula o valor da defuzificao e imprime na tela os resultados. Note contudo que foi retirada da base de fatos o fato f-2. Porqu ? Porqu no consequente da regra regra-DEFUZZIFICAR foi acionado o comando (retract v_DOSE) que mata vl_DOSAGEM da base. Dependendo do caso pode ser necessrio manter o fato.

22

O programa terminou de executar. Podemos afirmar isto porque na janela agenda no existe mais nenhum par regra-fato para ser disparado

23

3. Editando e executando o segundo programa (sistema especialista) em FuzzyClips O segundo programa a ser implementado em FuzzyClips uma ligeira variao do programa desenvolvido no item 2. As variveis lingisticas so as mesmas. A regra e o fato definidos so os mesmos. Vamos apenas acrescentar mais uma regra no SE abaixo citada:

SE temperatura alta ENTO dosagem (do medicamento) mdia


O SE apresentar um nico fato e duas regras (alm da regra de defuzificao), onde, por propsitos didticos ambas as regras casaro com o nico fato. Base de Conhecimento A) Regras SE temperatura moderada ENTO dosagem (do medicamento) baixa SE temperatura alta ENTO dosagem (do medicamento) mdia B) Fato A temperatura est em torno de 37,5 C

24

3.1 Codificao do programa-fonte Como o programa praticamente idntico ao programa PROG1.CLP, vamos abrir no editor de textos do FuzzyClips o programa PROG1.CLP e salv-lo como PROG2.CLP. Agora vamos codificar a segunda regra (abaixo apresentada j em formato FuzzyClips) logo aps a regra r-TEMP-MODERADADOSAGEM-BAIXA.

Proceda a compilao do programa PROG2.clp e tire os erros de sintaxe porventura existentes. 1) Execution Clear Clips 2) Window Clear Dialog Window. 3) File Load Constructs.

25

Executando passo a passo o programa com Execution Reset obtemos:

Devemos notar que a agenda apresenta as duas regras que casam com o fato f-1 da base de conhecimento, ambas com salincia 30 e esto prontas para serem disparadas. A regra regra-DEFUZZIFICAR ainda no est na agenda porqu no existe, at o momento, nenhum fato referindo-se varivel lingustica vl_DOSAGEM, que citada no antecedente da regra. Em outras palavras, o antecedente da regra regra-DEFUZZIFICAR precisa de uma fato sobre vl_DOSAGEM para poder casar com o mesmo e a regra ir para a agenda.

26

Executando passo a passo o SE basta clicarmos em Execution Step e obteremos o resultado abaixo:

A primeira regra da agenda foi disparada, e agora, o fato f-2 referente varivel lingustica vl_DOSAGEM entra para a base de fatos. Como esta VL casa com o antecedente da regra regra-DEFUZZIFICAR, este regra colocada pelo FuzzyClips em sua agenda. Mas sua salincia menor que a salincia da regra r-TEMP-ALTA-DOSAGEM-MEDIA e, por isso, regra-DEFUZZIFICAR fica sendo a ltima regra do SE a ser disparada pela agenda.

27

Vale a pena observar que o disparo da regra r-TEMP-MODERADADOSAGEM-BAIXA com o fato f-1 apresentou um corte 0.3571 e, por isso, foi obtido o trapezide vl_DOSAGEM = (4 0) (5.071 0.3571) (15.21 0.3571) (17 0). Quer dizer, at o momento vl_DOSAGEM = (4 0) (5.071 0.3571) (15.21 0.3571) (17 0). Mas o que vai acontecer quando a prxima regra rTEMP-ALTA-DOSAGEM-MEDIA que casa com f-1 for disparada ? Executando mais uma vez passo a passo o SE basta clicarmos em Execution Step e obteremos o resultado abaixo:

28

FuzzyClips executa o disparo de r-TEMP-ALTA-DOSAGEM-MEDIA que casa com f-1 onde determinada uma potncia de disparo 0.7857. (Obs.: a janela do FuzzyClips no mostra esta sistuao !!!)

A consequncia deste disparo de regra equivale a uma dosagem de medicamento

29

A questo que o FuzzyClips j tem em seus fatos o fato f-2 com um valor para a varivel lingustica vl_DOSAGEM onde vl_DOSAGEM = (4 0) (5.071 0.3571) (15.21 0.3571) (17 0). Neste caso, usualmente os sistemas especialistas difusos implementam a operao de unio entre conjuntos difusos. Ou seja: f-2 ser somado ao valor de vl_DOSAGEM recm calculado pelo disparo de r-TEMP-ALTADOSAGEM-MEDIA que casa com f-1. FuzzyClips no mostra esta unio. Podemos ver na janela que o fato f-2 sai da base de fatos (veja na janela o sinal < = = f-2 ... indicando retirada de f-2 da base)

Internamente o FuzzyClips soma f-2 que saiu com o novo valor de vl_DOSAGEM. Mais uma vez a janela no mostra esta soma (que a operao de unio) Podemos ver contudo o resultado final da unio: o fato f-3 que entra na base (veja o sinal = = > f-3 ...) a varivel vl_DOSAGEM com seu novo valor

30

Finalmente falta ser executada a ltima regra da agenda, que a regra de defuzificao que unifica com o fato f-3 (Obs.: o FuzzyClips se encarrega de substituir f-2 por f-3).

Para executar procedemos: Execution Step e obteremos o seguinte resultado:

31

32

4. Editando e executando o terceiro programa (sistema especialista) em FuzzyClips Os exemplos anteriores envolveram regras com apenas um nico antecedente. Vamos ver agora um SE com regras que tenham dois (ou mais) antecedentes e como o FuzzyClips trata estes casos. O terceiro programa utilizar as variveis lingusticas temperatura e dosagem definidas para o primeiro programa bem como o fato A temperatura est em torno de 37,5 C Ser definida uma nova varivel lingustica: idade Ser definida uma nica regra com dois antecedentes Ser definido mais um fato de natureza qualitativa referente varivel lingustica idade. 4.1 Varivel lingustica idade

33

O fato relativo idade que estar na base de conhecimento: A idade est na faixa dos 20 e poucos anos

4.2 Regra do SE SE temperatura alta E idade meia-idade ENTO dosagem (do medicamento) baixa 4.3 O Sistema Especialista Base de Conhecimento A) Regra SE temperatura alta E idade meia-idade ENTO dosagem (do medicamento) baixa B) Fatos A temperatura est em torno de 37,5 C A idade est na faixa dos 20 e poucos anos

34

4.4 O Cdigo em FuzzyClips das Variveis lingisticas

35

4.5 O Cdigo em FuzzyClips para a Regra da Base de Conhecimento

4.6 O Cdigo em FuzzyClips para os Fatos da Base de Conhecimento

36

4.7 O Cdigo em FuzzyClips para a Defuzificao 1) Definir variveis globais para o clculo do valor defuzificado pelo Mtodo do Centride e pelo Mtodo da Mdia dos Mximos (Escrever o trecho antes da definio das variveis lingusticas)

2) Escrever a regra de defuzificao logo aps a(s) regra(s) do sistema especialista.

37

4.8 A execuo do programa Procedendo-se a compilao, preparao para executar passo a passo e execuo passo a passo obteremos o seguinte resultado:

interessante notar que neste caso, a regra r-TEMP-ALTA-IDADEMEIA-DOSAGEM-BAIXA casa com dois fatos simultaneamente (f-1 e f-2, referentes a temperatura e idade respectivamente). Como o corre o clculo da consequncia desta regra ?

38

O FuzzyClips processa a regra como se fossem duas subregras distintas uma da outra , cada uma com um nico antecedente. O nmero de subregras equivale ao nmero de itens no antecedente da regra. Assim, a primeira subregra seria : (vl_TEMPERATURA Alta) = > (vl_DOSAGEM Baixa) Assim, a segunda subregra seria : (vl_IDADE MeiaIdade) = > (vl_DOSAGEM Baixa) O FuzzyClips no mostra o resultado individual para cada subregra processada. Ele j apresenta o resultado final que obtido pela interseo dos resultados parciais, calculado pelo operador MIN.

39

Primeira subregra: (vl_TEMPERATURA Alta) = > (vl_DOSAGEM Baixa)

Segunda subregra: (vl_IDADE MeiaIdade) = > (vl_DOSAGEM Baixa)

Consequente: interseo (operador MIN)

40

Anda mungkin juga menyukai