SNTool Fuzzy System Demo
Descrição do Exemplo
Para demonstrar a capacidade das redes semeionicas como ferramenta de desenvolvimento
de sistemas inteligentes, foi desenvolvido uma rede de demonstração
de uma implementação de um sistema nebuloso. Um sistema nebuloso
consiste basicamente de 4 etapas: nebulização, inferência
das regras, agregação das ativações das regras
e desnebulização. Todas estas etapas podem ser observadas no
exemplo desenvolvido.
Sistema controlado
O sistema a ser controlado é bastante simples. Trata-se de um tanque
de água, que pode receber água de duas fontes diferentes controladas
por válvulas. Uma fonte fornece água quente a 60 graus e a outra
água fria a 10 graus, e cada uma pode fornecer até 25 litros
por iteração. O tanque deve permanecer no nivel de 60 litros
com temperatura de 35 graus. As equações que descrevem a dinâmica
do tanque foram extremamente simplificadas, uma vez que o objeto de estudo
é o controlador nebuloso e não o sistema controlado. Desta forma
admite-se que a água quente e a água fria que chegam ao tanque
se misturam instantaneamente com a água existente no tanque, também
não existe atraso na abertura das válvulas portanto o fluxo
de entrada é considerado instantâneo. A cada iteração
sai do tanque uma quantidade fixa de 5 litros mais uma quantidade aleatória
de 0 a 5 litros, e lém disso a água existente no tanque pode
resfriar-se de 0 até 2 graus aleatoriamente. As condições
iniciais do tanque foram ajustadas para o nível de 50 litros e temperatura
de 50 graus, com condições de referência desejadas de
nível de 60 litros e temperatura de 35 graus.
WaterTankVolume (t+1) = Water Tank volume(t) + flowInHotWater(t+1)
+ flowInColdWater(t+1) - flowOutUsedWater(t+1)
WaterTankTemperature(t+1) = [ WaterTankVolume(t+1) * ( WaterTankTemperature(t)
- WaterTankCoolling(t+1) ) + HotWaterTemperature(t+1) * flowInHotWater(t+1)
+ ColdWaterTemperature(t+1) * flowInColdWater(t+1) ] / ( flowInHotWater(t+1)
+ flowInColdWater(t+1) + WaterTankVolume(t+1) )

Figura 1: Rede Semeionica do Sistema de Controle de um Tanque de Água

Figura 2: Rede Semeionica do Controlador Nebuloso
Controlador Nebuloso
O controlador nebuloso tem como entradas o volume e a temperatura atuais
do tanque de água, e como saídas a quantidade de água
quente e de água fria a serem colocados no tanque de água.
As variáveis nebulosas utilizadas estão descritas a seguir:
Volume
|
 |
Temperatura
|
 |
Fluxo de Água Quente
|
 |
Fluxo de Água Fria
|
 |
Foi utilizada a inferência de Mamdani, agregação por
união tipo Max, defuzzificação por Momento, e as seguintes
regras nebulosas:
Volume
|
Temperature
|
HotFlow
|
ColdFlow
|
H
|
H
|
Z
|
L
|
H
|
OK
|
Z
|
Z
|
H
|
L
|
L
|
Z
|
OK
|
H
|
Z
|
M
|
OK
|
OK
|
Z
|
Z
|
OK
|
L
|
M
|
Z
|
L
|
H
|
L
|
B
|
L
|
OK
|
M
|
M
|
L
|
L
|
B
|
L
|
Execução do Exemplo
Configuração
O exemplo utiliza a biblioteca NRC FuzzyJ Toolkit (c) by "NATIONAL RESEARCH
COUNCIL OF CANADA"'s Institute for Information Technology (http://www.iit.nrc.ca/). Para executar
o exemplo desenvolvido será necessário obter uma cópia
da biblioteca e incluí-la no CLASSPATH de usuário no
arquivo de inicialização do SNTool.
Além disso é necessário incluir também no CLASSPATH
o package com classes de holders específicos para este exemplo,
disponível aqui.
Visualização
A tela seguinte dá uma idéia de visualização
do exemplo utilizando Viewers do SNTool:

Figure 3: Visualizando o exemplo na tela do debugger do SNTool..
Além disso pode-se ver o disparo das regras e sua agregação
na tela de console do SNTool:
Figura 4: Visualizando o disparo e agregação das regras na
tela de console.
Exemplo implementado por Angelo Conrado Loula
(angelocl@dca.fee.unicamp.br)