• Nenhum resultado encontrado

4.3 Implementação da base de conhecimento

4.3.3 Sistema de inferência difusa

Para realizar o tratamento de incertezas foi desenvolvido para este protótipo um sistema de inferência difusa baseado no que foi apresentado na seção 3.2.3. Esta seção descreve este sistema.

O desenvolvimento feito na seção 3.2.3 tem como proposição atômica uma variável difusa, que foi definida como a pertinência de um determinado elemento do universo de discurso a um conjunto difuso específico. Também foi definido que no lado direito de uma regra só pode- riam existir proposições atômicas. Esta característica foi utilizada nesta implementação para criar uma sintaxe intuitiva para o acesso às proposições. Neste sistema, uma proposição tem a seguinte forma:

<Proposição> ::= <Predicado> <termo> [<termo>]* [contexto <contexto>]

onde ::= significa definição, os termos que não estão entre “<>” devem ser tomados literal- mente, os termos que estão entre “[]” podem aparecer uma ou nenhuma vez, e o termo que precede “*” pode aparecer quantas vezes for necessário.

4.3 Implementação da base de conhecimento 86

A proposição é composta por um predicado, que se aplica a um ou mais termos. O pre- dicado funciona como um conjunto difuso, normalmente discreto, e retorna o valor de per- tinência da tupla formada pelos vários <termo>. Por exemplo, a proposição Alto 2, é equi- valente ao grau de pertinência do número 2 ao conjunto Alto. Do mesmo modo, a propo- sição Proximo-fundo-escala sensor FT-001 tempo 10 é equivalente a pertinência da tupla

(sensor,FT-001,tempo,10)ao conjunto difusoProximo-fundo-escala.

O <contexto> serve para diferenciar entre predicados com o mesmo nome, mas que se aplicam a contextos diferentes. Por exemplo, no contexto de filtros de detecção de vazamentos, o predicado Alto pode ter um significado diferente que o predicado Alto em se tratando de posição geográfica. Um filtro do PMS com valor 4 é considerado alto, mas, em um contexto de análise de dados altimétricos de estações, Alto pode ser definido como acima de 800 m de altitude, por exemplo. Na prática, o contexto e o predicado determinam univocamente um conjunto difuso. Em termos de implementação, a base de conhecimento é composta por uma série de objetos representando os diferentes contextos. Cada objeto representando um contexto é um vetor associativo, que associa o nome do predicado a um objeto descrevendo aquele conjunto difuso.

Do ponto de vista do usuário do sistema, existem duas atividades que se pode fazer em uma base de conhecimento difusa. A primeira é fazer uma consulta, que retorna o valor verdade de uma determinada proposição. Para esta consulta, utiliza-se a seguinte função:

(p <Proposição>)

Para fazer uma asserção, quer dizer, estabelecer o valor de pertinência de um determinado predicado, utiliza-se a função:

(assert-p <Proposição> <pertinência>)

Esta função, que tem uma sintaxe semelhante a função (p), associa um valor-verdade

<pertinência>à proposição <Proposição>. Existem duas opções possíveis para esse valor- verdade: ele pode ser um número de ponto flutuante entre 0 e 1, ou pode ser um objeto repre- sentando um conjunto contínuo, caso em que não podem ser utilizados os[<termo>]*. Assim se permite, utilizando a mesma interface, representar uma gama muito ampla de proposições diferentes.

Como foi tratado na seção 3.2.3, é comum ocorrer mais de uma asserção sobre a mesma proposição, como no exemplo a seguir.

4.3 Implementação da base de conhecimento 87

(assert-p Com-problema sensor FT-001 contexto sensores 0.9) (assert-p Com-problema sensor FT-001 contexto sensores 0.45)

Neste caso, é preciso agregar os dois valores de pertinência de algum modo significa- tivo. Neste sistema, essa agregação pode ser controlada globalmente redefinindo a função

(agregacao). Portanto, alterando a definição dessa função, pode-se alterar globalmente o modo como é feita a combinação de valores-verdade.

Para aumentar a expressividade do sistema também foram considerados, de forma simplifi- cada, dois tipos de asserções propostas em (DUBOIS; PRADE, 1996). O objetivo dessas asserções é definir a veracidade mínima e/ou máxima de uma determinada proposição. Para isso, existem duas funções:

(assert-p-min <Proposição> <pertinência>) (assert-p-max <Proposição> <pertinência>)

Estas funções se aplicam somente a proposições implementadas como conjuntos discretos. Elas definem, respectivamente, o valor verdade mínimo e máximo da proposição, independente do valor retornado pela função de agregação. Assim, por exemplo, a seqüência de comandos:

(assert-p-min Vazamento Situacao-0 0.5) (assert-p Vazamento Situacao-0 0.3)

estabelece que(p Vazamento Situacao-0)deve retornar 0,5 como pertinência, e não 0,3. As funções apresentadas anteriormente definem o funcionamento do sistema de proposi- ções. Para utilizá-las convenientemente, é preciso determinar o funcionamento das regras de produção do sistema. Como definido anteriormente, uma regra é da forma:

Rk: Se h e k(a e 1,...,a e n) então b e 1,...,b e

m com grau de certeza rk

onde k é o número da regra, a e 1, . . ., a e ne b e 1, . . ., b e

msão proposições como definidas anteriormente

e rk é a confiança na regra. A função h

e

k é uma função difusa qualquer, composta de funções

difusas mais simples.

Para implementar estas regras difusas no sistema especialista, cada uma foi inserida dentro de uma regra de produção padrão do CLIPS. O encadeamento de regras, para que cada regra só dispare após todas as regras que alteram as proposições em seu antecedente tenham sido disparadas, foi implementado de forma semi-automática. Cada regra está associada a um nível de inferência, e o sistema garante que todas as regras de um determinado nível disparem antes de qualquer regra do nível seguinte. Isto é realizado utilizando-se fatos de controle.

4.3 Implementação da base de conhecimento 88

Figura 4.12: Diagrama das classes utilizadas no sistema de inferência difusa.

O sistema de proposições foi implementado utilizando a estrutura de classes mostradas na Figura 4.12. Esta arquitetura tem alguma semelhança com a descrita em (ŠENDELJ; DEVEDŽI ´C, 2004). Como se utiliza o sistema de produção para representar as regras, não foi necessário criar classes para representar os vários componentes de uma regra. Assim, a estrutura mostrada na figura representa apenas as proposições e os conjuntos difusos associados.

A classe CONTEXTO_DIFUSOfornece os serviços necessários para implementar a funciona- lidade de contextos explicada anteriormente. Ela é composta basicamente por um vetor asso- ciativo que mapeia a cada nome de contexto um objeto do tipoPREDICADO_DIFUSO. A classe

PREDICADO_DIFUSOé utilizada para representar um predicado. Esta classe delega praticamente toda a implementação para uma classe do tipoCONJUNTO_DIFUSO.

A classeCONJUNTO_DIFUSOtem duas implementações possíveis: a classeCJ_DISCRETOim- plementa a funcionalidade para associar valores de pertinência a tuplas e realizar a agregação quando são feitas várias asserções sobre a mesma tupla. A classeCJ_CONTINUOé bem mais sim- ples e implementa um conjunto difuso contínuo. A função de pertinência do conjunto é definida por um objeto do tipoPERTINENCIA_CONTINUA. Objetos desse tipo nada mais são que funções definidas sobre o intervalo dos reais que retornam valores entre 0 e 1. No protótipo que foi im- plementado o único tipo de função que foi utilizado foi uma função gaussiana, implementada pela classePERTINENCIA_GAUSSIANA.