Escolar Documentos
Profissional Documentos
Cultura Documentos
Francisco Ribacionka
Dissertao
de
Mestrado
apresentada
a
Universidade
Mackenzie como requisito parcial
para a obteno do ttulo de Mestre
em Engenharia Eltrica na rea da
Engenharia da Computao.
So Paulo
1999
R112
Ribacionka, Francisco
Sistemas Computacionais baseados em Lgica Fuzzy /
Francisco Ribacionka So Paulo, 1999
115 f.: il; 30 cm
Dissertao (Mestrado em Engenharia Eltrica rea de
Concentrao: Engenharia da Computao)
Universidade Mackenzie, 1999
Bibliografia: f. 115.
1. Lgica Fuzzy 2. Conjuntos Fuzzy 3. Engenharia da
Computao I. Ttulo
CDD 511.322
Ao meu pai
Certa noite, em uma de suas aulas no mestrado, o professor Vilmar nos contou a
seguinte estria:
Estava o coelho digitando a sua tese de mestrado, em sua toca, quando passa rasteira
uma guia, que comenta: : - O que ser que o meu almoo estar fazendo?. Pousa
na entrada da toca e pergunta: - Oi amigo coelho. O que voc est fazendo?. Estou
digitando
minha
dissertao
de
mestrado!.
- Mas do que trada a sua pesquisa?. - Trata em como transformar uma guia em
almoo
de
coelho!.
Ora!
Podes
me
mostrar
seu
trabalho?.
- Claro, responde o coelho. Entre na minha toca que eu mostro. E foi pena para
todo lado. Aps alguns minutos, palitando os dentes, o coelho comenta:
-Realmente, o tema do meu trabalho muito bom.. E, com um tapinha em suas
costas, o leo completa: - Sim, o tema importante. Mas o orientador muito
mais!
INTRODUO
A teoria de conjuntos fuzzy foi introduzida por Lotfi Asker Zadeh em 1965 (Zadeh
(1965)), como uma teoria matemtica aplicada a conceitos vagos. Desde ento a
pesquisa e aplicao desta teoria em sistemas de informtica tem crescido. Uma rea de
aplicao da teoria fuzzy a chamada raciocnio aproximado, conforme Zadeh (1975),
onde um tipo de raciocnio no totalmente certo nem totalmente errado. Este tipo de
raciocnio se aproxima da forma do raciocnio humano. Neste caso, variveis
lingsticas so representadas por conjuntos fuzzy, interpretando uma varivel
lingstica como uma varivel cujos valores so palavras ou sentenas em uma
linguagem natural. Conjuntos fuzzy proporcionam, aos mtodos de desenvolvimento de
sistemas computacionais, uma forma de programao mais prxima da linguagem e do
raciocnio humano.
Atualmente, Lotfi Zadeh diretor do BISC1 - Berkeley Initiative in Soft Computing
- na Universidade da Califrnia, em Berkeley. O seu grupo tem como objetivo a
divulgao e pesquisa das aplicaes da "computao Soft", que uma derivao da
computao tradicional. Zadeh chama a computao tradicional de "Computao Hard"
e a principal diferena entre elas o fato da computao Soft ter uma tolerncia em
relao impreciso, incerteza ou verdade parcial, tendo como modelo a mente
humana, conforme Zadeh (1997).
A computao Soft baseada na Lgica Fuzzy, Teoria de Redes Neurais,
Raciocnio Probabilstico, Algortimos Genticos, Teoria do Caos e Teoria do
O
endereo
na
Internet
deste
grupo
de
pesquisa
para a proposta p3 e 0.2 para a proposta p4. Deste conjunto F a deciso tomada
levando-se em conta o elemento com o valor mais prximo de 1. Neste caso a melhor
proposta de emprego a proposta p2.
O prximo item tambm envolve tomada de deciso, onde o sistema deve escolher
um entre vrios padres no processamento de imagens.
Exemplo 2
Por exemplo, para diagnosticar a cirrose o mdico faz exames de sangue para
identificar se:
"Total de protenas est diminuindo, -globulina est freqentemente diminuindo,
e -globulina est aumentando".
Os termos diminuindo, freqentemente, e aumentando so valores vagos. Assim,
para representar estes termos de forma manipulvel, a teoria fuzzy uma opo.
1.5 ECOLOGIA
Barros (1992, 1997), tem aplicado a teoria fuzzy em dinmica de populao
distinguindo basicamente duas situaes. A primeira quando acredita-se que o ambiente
(clima, higiene, cidade, floresta, etc.) onde vivem os indivduos, interfere fortemente na
dinmica de suas relaes; a outra trata de questes de competio ou predao entre
espcies onde tanto o conceito de presa como o de predador so cotados de maneira
subjetiva.
Um ser, como o tubaro, pode ser considerado como predador, porm seu grau de
predao certamente no o mesmo durante toda a sua vida, podendo at sair da
condio de predador para presa quando muito jovem ou velho.
1.7 NEUROFUZZY
A combinao com a teoria de redes neurais fornece uma capacidade de
aprendizado para fazer com que os controladores fuzzy se adaptem a uma variada gama
de condies, como descrito em Altrock (1997), e em Altrock (1995). O objetivo das
redes neurais o de imitar a mente humana, a fim de processar informaes atravs de
algoritmos que capacitem um aprendizado de um determinado comportamento. O
benefcio da teoria fuzzy o de capacitar a tomada de decises, onde a teoria de redes
neurais permitem um aprendizado, a partir de um conjunto de dados, enquanto a teoria
fuzzy proporciona uma forma de se obter resultados sobre este aprendizado.
Altrock (1997), tambm mostra como esta teoria tem sido utilizada em aplicaes
industriais, aplicaes na rea financeira e de negcios.
Blinder (1994), apresenta a implementao da lgica fuzzy em redes neurais
artificiais aplicados na biologia. Mostra que a representao de problemas biolgicos
tem um grande grau de incerteza e impreciso lingsticas e que, atravs da teoria fuzzy,
aliada a teoria de redes neurais, obtm-se uma ferramenta com grande poder de sntese.
Mrcia
1
0
0
1
0
0
0
1
0
0
Cristina
1
0
1
0
0
1
0
1
0
0
Nanci
1
1
0
1
1
1
0
1
0
0
Neusa
1
1
0
1
1
1
0
1
0
0
Terezinha
1
1
1
1
1
1
0
1
1
1
Grau de estudo
0.3
0.7
0.8
0.9
A = A( x ) / x
Uma outra forma de se representar um conjunto fuzzy feita graficamente.
A representao grfica a mais usada na literatura fuzzy por ter uma interpretao
mais intuitiva. No caso de se fazer a representao em duas dimenses, o eixo vertical
representa a funo grau de pertinncia no intervalo [0,1], e o eixo horizontal contm a
informao a ser modelada.
A seguir tem-se trs exemplos de representao grfica de conjuntos fuzzy. No
exemplo 5, tem-se uma curva que inicia em 1 (no eixo vertical) e se aproxima do eixo
horizontal, ou seja, toma forma de uma curva decrescente. No exemplo 6 tem-se uma
curva que cresce e depois decresce, na forma de sino. No exemplo 7, tem-se uma curva
que inicia prxima ao eixo horizontal e vai crescendo at o limite de 1.
Exemplo 5
Um conjunto fuzzy J compatvel com o conceito de jovem deve, no mnimo, indicar
que, quanto menos idade um indivduo tiver, mais jovem ser. Sua funo grau de
pertinncia J(x) pode ser representada como na figura 1.
x 5
A( x) = 7 x
0
Se 5 x 6
Se 6 x 7
caso contrrio
(1)
(2)
A=Presso Alta
0.6
1.0
0.2
...
1.0
B=Febre
0.7
1.0
0.8
...
1.0
AB
0.7
1.0
0.8
...
1.0
Os valores desta tabela so os graus com que cada paciente pertence ao conjunto
fuzzy A, B, e AB.
(3)
(4)
Exemplo 10
Como exemplo, seja A o conjunto de rios que so longos, B o conjunto de rios
navegveis. A interseo AB dada por rios que so longos e navegveis, conforme
ilustrado na tabela 5:
Tabela 5 - Ilustrao da Interseo de conjuntos fuzzy para o exemplo 10
Rio
Amazonas
Nilo
Danbio
Mississipi
A=Rio Longo
1.0
0.9
0.5
0.8
B=Navegvel
0.7
0.6
0.8
0.5
AB
0.7
0.6
0.5
0.5
Neste exemplo tem-se que o rio Amazonas tem um grau 0.7 na escala [0,1] como
sendo navegvel e longo enquanto que o rio Mississipi possui grau 0.5, de acordo com a
ltima coluna da tabela.
As particularidades do complemento de um conjunto fuzzy so descritas a seguir.
Definio 2.4
Na teoria tradicional de conjuntos, o complemento de um conjunto A denotado por
A' e composto por todos os elementos do conjunto universo X que no pertencem a A .
Mais precisamente:
A' = { x | x X e x A}
(5)
Os elementos x de A' podem ser caracterizados pela funo indicadora de A' dada
por:
I A' ( x) =
0
Se x A'
Se x A'
(6)
Para todo x X.
Exemplo 11
Para ilustrar o complemento de um conjunto fuzzy, toma-se o exemplo 7 dos alunos
com experincia acadmica. De acordo com a definio para complemento de conjuntos
fuzzy, as funes grau de pertinncia de A e de seu complemento A' (dos alunos sem
experincia acadmica) esto representadas na figura 5
experincia com grau 0.2, como indicado na figura 6 onde no eixo das abscissas so
colocadas as horas de crditos. Esta uma diferena fundamental entre a teoria clssica
e a teoria de conjuntos fuzzy. Na teoria clssica, um elemento ou pertence ao conjunto
ou a seu complementar.
Nesta seo discutiu-se as operaes entre conjuntos fuzzy. Na prxima ser
discutida o conceito de relaes fuzzy.
nome de relao fuzzy. Identificando a relao fuzzy R com sua funo grau de
pertinncia, o valor R(x1, x2, ..., xn ) [0,1] indica o grau de associao entre os
elementos x1, x2, ..., xn .
A relao fuzzy assim como no caso clssico, chamada de binria quando tem-se
apenas dois conjuntos X1 x X2 compondo o produto cartesiano.
Uma relao fuzzy binria uma generalizao da relao binria tradicional no
sentido que a funo grau de pertinncia generaliza a funo indicadora.
Na teoria tradicional, a relao R:X x X{0,1} dita:
1.
2.
3.
4.
2.
3.
4.
Exemplo 12
Para exemplificar, considere a relao binria fuzzy R em um conjunto D de
documentos e um conjunto C de termos chaves usados na recuperao em um sistema
de informao de um determinado banco de dados:
D = {d1, d2, ..., dn}
C = {c1, c2, ..., cn}
Onde D pode ser um banco de dados bibliogrficos e C a lista de nomes dos autores
das informaes armazenadas.
Sua funo grau de pertinncia definida no produto cartesiano DxC. Para cada
documento d no conjunto D e para cada elemento chave c no conjunto C, o grau de
pertinncia R(d,c) pode ser interpretado neste caso como o grau de pertinncia do
documento d para o termo c.
Este grau pertence ao intervalo [0, 1], sendo que o grau igual a 1 significa que a
chave de busca fornecida permite recuperar a informao exata procurada, e um valor
igual a 0 significa que no h nenhum documento correspondente a ela no banco de
dados. Ou seja, se a chave fornecida for um nome completo e houver um documento
correspondente a ele no banco de dados, esta chave ter valor 1 para este documento. Se
no houver um documento referente a este autor, ento ela ter valor 0.
Caso seja fornecido um nome parcial, possvel que vrios documentos
correspondam a esta chave, recebendo ela um valor parcial para cada documento
fornecido. Uma chave com o contedo Francisco Ribacionka ter um valor 1 caso se
encontre algum registro correspondente a esta chave de busca. Uma chave com
contedo Francisco ter um valor menor, pois recuperar todos os registros que
contenham esta palavra.
Esta caracterizao do relacionamento entre documentos e termos chave altamente
expressiva, pois a informao buscada. Qualquer relao clssica definida no mesmo
produto cartesiano menos expressiva: requer que cada documento seja declarado como
relevante ou no para cada termo chave.
Em comparao com as relaes clssicas, relaes fuzzy substancialmente
aumentam a capacidade de expressar os conceitos de relacionamento em uma
linguagem natural.
Para um melhor entendimento destas relaes, h a sua representao grfica. Na
teoria clssica de conjuntos, as principais formas de se representar graficamente uma
relao entre conjuntos so a representao por coordenadas e representao matricial.
O mesmo ocorre na teoria de conjuntos fuzzy.
um terceiro eixo para indicar o grau. A figura abaixo ilustra este exemplo.
y1
r11
r21
...
rn1
y2
r12
r22
...
rn2
...
...
...
...
...
ym
r1m
r2m
...
rnm
Exemplo 15
Como exemplo, considere o conjunto X com a relao de trs grandes cidades:
X={So Paulo, Curitiba, Porto Alegre}
e R a relao fuzzy em X representando a relao muito longe de, com valores
aceitos no intervalo [0,1]. Um valor prximo de 0 significa perto, e um valor prximo
S
C
P
S
0
0.4
1
C
0.4
0
0.6
P
1
0.6
0
Vaca
0
1
0
Cabra
0
1
0
Galinha
1
0
0
xa
1
A( x) =
s
0
Se a - s x a + s
caso contrrio
1
A( x ) =
d x
d c
Se a x < b
Se b x c
Se c < x d
caso contrrio
(xa )
b
A( x) = e
0
se (a-s) x (a+s)
caso contrrio
(7)
(8)
Para nmeros fuzzy triangulares, o exemplo a seguir mostra como fcil obter suas
soma e subtrao.
Exemplo 16
Os nmeros fuzzy representados na Figura 11 indicam o conceito de
aproximadamente 2 e 4, respectivamente.
negao
Conjuno
Disjuno
Implicao
Equivalncia
0
1
0
1
1
1
0
1
0
0
0
1
0
1
1
0
Exemplo 17
Suponha que t1(a)=0, t1(b)=1 e t1(c)=1, ento:
t2(((a b) c) (b c))
= (( 0 1) 1) (1 1)
= (1 1) (0 1)
=11
=1
O conector lgico tem por objetivo modelar proposies condicionais na forma
Se ... ento ..:. e o conector modelar as expressas na forma Se e somente se. A
tabela 11 mostra os valores verdade para estes conectores.
Tabela 11 Conectores lgicos (implica) e (equivalente)
a
0
0
1
1
b
0
1
0
1
1
1
0
1
a
0
0
1
1
b
0
1
0
1
1
0
0
1
p q
Fato:
Concluso:
estas duas alternativas. Atravs da histria da lgica ocidental, ocorreu uma expanso da
rgida teoria da lgica com dois valores com a permisso do uso de variveis, onde seus
valores podem ser parcialmente verdade ou parcialmente falso.
Por exemplo, Aristteles argumentou que as proposies sobre fatos futuros no
podem ser nem verdadeiros nem falsos, mas que valores futuros so potencialmente
verdadeiros ou potencialmente falsos.
Este problema ocorre no somente em eventos futuros, mas tambm em aplicaes
de mecnica quntica, onde valores verdadeiros, de certas proposies, so
indeterminados, devido a limitaes de mtricas aplicadas ao fenmeno subatmico.
Uma alternativa para esta situao a lgica multivaluada.
Nas lgicas multivaluadas, incluem-se valores adicionais entre os extremos da
lgica tradicional e os valores verdadeiro ou falso, chamados de valores indeterminados.
No caso da lgica de trs valores, h exatamente um valor indeterminado. Em todas as
lgicas com trs valores, define-se os valores 0, 1 e para verdadeiro, falso e
indeterminado.
A introduo deste valor intermedirio naturalmente afeta a tabela-verdade definida
na lgica clssica. A tabela verdade para negao definida na tabela 13:
Tabela 13 - Negao para lgica de trs valores
p
0
p
1
0
Onde p a negao de p.
para os valores 0 e 1. Entretanto, o novo valor faz com que tenha uma conseqncia
importante: no vale a lei do terceiro excluido (p p = 1) nem a lei da contradio (p
p = 0) e algumas outras tautologias, conforme Klir (1997).
Tabela 14 - Tabela verdade definida por Lukasiewicz
a
0
0
0
1
1
1
1
0
1
0
0
0
0
0
1
1
1
1
1
1
1
1
1
0
Mais geralmente, para qualquer valor n, os valores verdade para esta lgica de n
valores so usualmente nomeados por nmeros racionais no intervalo [0,1]. Isto define o
conjunto de valores verdade T definido por:
1
2
n 2 n 1
1
2
n2
0
Tn =
,
,
,...,
,
,
,...,
,1
= 0,
n 1 n 1 n 1 n 1
n 1
n 1 n 1 n 1
Logo, em uma lgica para 5 valores, os valores verdade so 0, , , e 1.
Os valores verdade para as frmulas envolvendo os conectivos , , e podem
ser obtidos por:
p' = 1-p
(9)
p q = min(p, q)
(10)
p q = max(p, q)
(11)
p q = min(1, 1 - p+ q)
(12)
p q = 1 - p - q
(13)
p: Se X A ento Y B
(14)
pessoa, podendo assumir os valores 0 para estado normal e 1 para indicar um estado
febril;
Normal.
Neste exemplo, os valores possveis para A so Baixa ou Alta, e os valores
possveis para Y so Normal ou Febril. Duas proposies possveis so:
Se a temperatura baixa, ento o estado normal
Se a temperatura alta, ento o estado febril
Atribuindo-se o valor 38 para X ento o conjunto fuzzy A alta atingido. Como
(15)
(14)
a b = min(a, b)
(15)
a b = max(a, b)
(16)
a b = min(1, 1 - a+ b)
(17)
a b = 1 - a - b
(18)
Deve ser notado que cada uma das frmulas acima generalizam de fato os
conectivos do caso clssico como o caso da implicao:
0 0 = min(1,1-0+0) = 1
0 1 = min(1,1-0+1) = 1
1 0 = min(1,1-1+0) = 0
1 1 = min(1,1-1+1) = 1
A lgica fuzzy permite a construo de modelos matemticos baseados em
informaes imprecisas, onde se aplica a teoria de raciocnio aproximado para se obter
concluses a partir de premissas imprecisas. Este tpico tratado a seguir.
pq
: Se x A ento y B
p : x A
q : y B
p q uma proposio fuzzy condicional, que modelada por um subconjunto
fuzzy R de UxV, atravs da funo grau de pertinncia:
R(x,y) = A(x) B(y) = min(1,1 - A(x) + B(y))
R( x, y ) =
0 se ( x, y ) R
de modo que
1 se y B
sup[ R( x, y ) A( x )] =
x U
0 se y B
ou seja
B ( y ) = sup[ R ( x, y ) A( x )]
x U
ou
B= Ro A
Esta igualdade pode ser interpretada assim:
Se R uma relao que representa a condicional
Se x A ento y B
B*
B * ( y ) = sup{R ( x, y ) A * ( x)}
x U
Construir a base de dados com as regras que definem como estas variveis se
relacionam;
Interpretar a sada.
Na definio das variveis de entrada e sada feita a anlise do sistema nos moldes
tradicionais de entrada, processamento, sada e a definio do modelo em partes
funcionais, localizando, no sistema global, onde pode-se aplicar a teoria fuzzy.
A primeira tarefa definir quais informaes fluem pelo sistema, quais
transformaes so executadas nestas informaes e quais so as informaes
fornecidas pelo sistema.
A segunda etapa do projeto de desenvolvimento de um sistema fuzzy, consiste na
definio e construo dos conjuntos fuzzy para cada varivel que compe o sistema. O
especialista responsvel pelo modelamento, deve particionar cada varivel que
compem o sistema em subconjuntos fuzzy, tambm chamados de faixas, com seus
respectivos domnios. Estas faixas so utilizadas na definio das proposies fuzzy que
formam a base de regras.
e varivel_de_entrada2 =
ento, varivel_de_sada
=
A quantidade de regras total que formar a base de regras vai depender de quantos
conjuntos fuzzy compem cada varivel de entrada. Por exemplo, caso a
varivel_de_entrada1 e a varivel_de_entrada2 sejam compostas por trs nmeros fuzzy,
o total de regras que vai compor o referido banco ser nove.
O valor parcial da varivel de sada ou ao fuzzy, para cada proposio, decidido
pelo especialista do sistema modelado. Ao conjunto de regras atingidas aplica-se um
mtodo de inferncia para a resoluo deste conjunto de proposies.
O mtodo de inferncia utilizado neste trabalho, para o clculo da varivel de sada,
o mtodo de Mamdani. Este mtodo apresenta um processo baseado na agregao das
variveis fuzzy de entrada para obter como resultado, um conjunto fuzzy na sada. A
seguir descreve-se este mtodo.
onde v1, v2, ...e vn so valores lingsticos associados varivel v e definidos como
subconjuntos fuzzy do universo de discurso X1; d1, d2, ...e dn so valores lingsticos
associados varivel d e definidos como subconjuntos fuzzy do universo de discurso X2
e p1, p2, ...e pn so valores lingsticos associados varivel p e definidos como
subconjuntos fuzzy do universo de discurso Y. Com estes subconjuntos pode-se montar
uma matriz, como na tabela abaixo:
Tabela 16 Variveis v, d, p
v
v1
v2
...
p1
p2
...
d1
p1
p2
...
d2
...
...
...
...
...
...
...
dn
vn
...
...
...
pn
Os valores p1, p2, ...e pn so definidos pelo engenheiro de sistemas em conjunto com
o especialista do sistema a ser modelado. Portanto, possvel que um valor pn seja
utilizado como resultado em mais de uma regra. Conforme os valores fornecidos para as
variveis v e d, uma ou mais proposies da tabela 15 so atingidas (ou valoradas).
(19)
F = Fi
(20)
i =1
P=
x A( x )
i =0
n
(21)
A( x )
i =0
P=
xA( x)dx
A( x)dx
(22)
(23)
caractersticas imprecisas que elas representam, devem ser tratadas pela teoria fuzzy.
Por exemplo, ao avistar o sinal, o motorista no sabe com exatido qual a sua
velocidade nem a que distncia ele se encontra do mesmo; ele sabe, por exemplo, que
est muito prximo ou prximo do mesmo e seu carro est devagar ou um pouco rpido.
Estes termos lingsticos sero representados por conjuntos fuzzy, que retratam
conceitos vagos e imprecisos de uma forma natural.
O prximo passo a definio dos valores lingsticos para cada varivel. Atribuise aqui quatro faixas de valores para velocidade: Parado, devagar, pouco
rpido e muito rpido. A varivel distncia ser definida em cinco faixas: No
sinal, muito prximo, prximo, pouco longe e muito longe. Para a varivel
presso sobre o freio tem-se as faixas nenhuma, leve, mdia e forte. As
definies destas faixas esto na tabela 17.
A figura 17 tem a representao de cada conjunto fuzzy da tabela 17.
Assume-se que para cada valor p da presso o controlador lida com as quatro faixas
lingsticas definidas para a varivel presso. Baseando-se em algum conhecimento ou
mesmo no bom senso, relativamente fcil construir proposies fuzzy condicionais da
forma:
Se V ___ e D ___ ento P ___
De
0
2
10
40
A
5
20
50
80
Sigla
PA
DE
PO
MR
De
0
1
6
18
30
A
2
12
30
37
50
Sigla
NS
MP
PR
PL
ML
De
0%
1%
25%
65%
A
1%
30%
75%
100%
Sigla
NE
LE
ME
FO
resulta em vinte proposies condicionais fuzzy com o formato dos seguintes exemplos:
Se V PA e D NS ento P LE
Se V PO e D PL ento P ME
Em cada regra, os estados de V e D so chamados antecedentes e os estados de P de
conseqentes.
A tabela 18 apresenta uma "matriz" com todas as combinaes onde os "elementos"
dessa matriz so os vinte estados resultantes das combinaes de V e D que so as
classificaes para a varivel P, de acordo com o engenheiro de sistemas.
Tabela 18 - Combinao Velocidade X Distncia
Velocidade
Distncia
NS
MP
PR
PL
ML
PA
NE
NE
NE
NE
NE
DE
ME
LE
LE
NE
NE
PO
FO
FO
FO
ME
LE
MR
FO
FO
FO
ME
LE
Proposio 1:Se o veculo est devagar e muito prximo do sinal ento a presso
sobre o freio leve
Proposio 2: Se o veculo est devagar e prximo do sinal ento a presso sobre
o freio leve
Proposio 3: Se o veculo est um pouco rpido e muito prximo do sinal ento a
presso sobre o freio forte
Proposio 4: Se o veculo est um pouco rpido e prximo do sinal ento a
presso sobre o freio forte
Tabela 19 - Regras atingidas estando o veculo a cerca de 10 km/h e em torno de 7.5
metros do sinal de pare
Distncia
NS
MP
PR
PL
ML
Velocidade
PA
DE
NE
ME
NE
LE
NE
LE
NE
NE
NE
NE
PO
FO
FO
FO
ME
LE
MR
FO
FO
FO
ME
LE
F=
Recebe variveis
de entrada
Verifica quais
regras so
atingidas
Verifica a 1
varivel de
entrada
Defuzifica
Verifica 2
varivel de
entrada
L o arquivo
fuzzy.dat
Mostra
resultado
final
Monta as
tabelas
Mostra as
tabelas
Verifica as
faixas de
sada
float de;
float para;
char sigla[3];
};
ou seja, o nome de cada faixa pode ter at vinte caracteres. O limite inferior de cada
subconjunto fica na varivel de e o limite superior fica na varivel para. A varivel
sigla recebe um nome curto que utilizado para substituir o nome completo, ao nvel
de simplificao.
A base de regras definida pelo especialista, e a quantidade de regras definida
pela quantidade de subconjuntos de cada varivel de entrada. Neste programa o vetor
i[3], armazena a quantidade de subconjuntos de cada varivel e o vetor regras[9][9][3],
armazena a tabela com os resultados possveis para cada proposio fuzzy.
A fuzificao feita durante o processo de leitura do arquivo fuzzy.dat. Este
arquivo contm os valores de cada domnio fuzzy para cada varivel de entrada e sada,
e deve ser preparado antes da execuo do programa. Ele pode ser criado atravs de um
editor de textos e deve ser armazenado como arquivo do tipo texto e tem o formato da
tabela 20.
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
/* -----------------------------------------------------Dados globais
------------------------------------------------------ */
void le_dados();
float recebe_dados(int);
void ver_regras(float,float);
struct est_faixa {
char faixa[20];
float de;
float para;
char sigla[3];
};
struct est_variaveis {
char nome_variavel[20];
struct est_faixa faixa[9];
};
struct est_variaveis variaveis[3];
int subconjuntos[3];
int var1_atg[9],var2_atg[9];
float ax1[9],ax2[9];
char regras[9][9][3];
int pilha;
float maior[9];
char valor_fuzzy[9][3];
float menorCG,maiorCG,flagCG; /* CG = Centro de Gravidade */
/* --------------------------------------------------------Rotina principal
--------------------------------------------------------- */
void main() {
float var1, var2,topo,valor_final;
int i;
char faixa[3];
for(i=0;i<9;i++) {
var1_atg[i]=0;
var2_atg[i]=0;
ax1[i]=0.0;
ax2[i]=0.0;
}
pilha = 0;
topo = 0;
flagCG = 0.0;
le_dados();
var1=recebe_dados(0);
var2=recebe_dados(1);
ver_regras(var1,var2);
for(i=0;i<pilha;i++) {
if(topo < maior[i]) {
topo = maior[i];
strcpy(faixa,valor_fuzzy[i]);
}
}
valor_final = defuzifica(topo,faixa);
void le_dados() {
int j,m,n;
FILE *fp;
/* testa se tudo ok com o arquivo */
if((fp = fopen("fuzzy.dat","r")) == 0 ) {
printf("\n Nao e possivel abrir o arquivo para leitura.");
}
/* a primeira linha do arquivo contem quantos subconjuntos tem
cada conjunto fuzzy. Cada variavel e' um conjunto fuzzy, dividido
em subconjuntos. &subconjuntos[0] armazena o valor correspondente a
primeira variavel de entrada, &[1] para a segunda variavel de entrada e
e &subconjuntos[2] armazena quantos subconjuntos tem a variavel de saida. */
fscanf(fp,"%5d%5d%5d",&subconjuntos[0],&subconjuntos[1],&subconjuntos[2]);
for(j=0;j<=2;j++) {
fscanf(fp,"%s",variaveis[j].nome_variavel);
for(m=0;m<subconjuntos[j];m++) {
fscanf(fp,"%20s%f%f%3s",variaveis[j].faixa[m].faixa,
&variaveis[j].faixa[m].de,
&variaveis[j].faixa[m].para,
variaveis[j].faixa[m].sigla);
}
}
for(m=0;m<subconjuntos[1];m++) {
for(n=0;n<subconjuntos[0];n++) {
fscanf(fp, "%3s",regras[m][n]);
}
for(j=0;j<=2;j++) {
printf("%s\n",variaveis[j].nome_variavel);
for(m=0;m<subconjuntos[j];m++) {
printf("%20s%6.1f%6.1f%3s\n",variaveis[j].faixa[m].faixa,
variaveis[j].faixa[m].de,
variaveis[j].faixa[m].para,
variaveis[j].faixa[m].sigla);
}
}
fclose(fp);
return ;
}
{
/* Esta rotina verifica quais as faixas atingidas e calcula A(x)
var1 percorre variaveis[0], e var2 percorre variaveis[1]. */
int m,n,j;
float a,s;
}
}
printf("\n\nVariavel %s:",variaveis[1].nome_variavel);
a = ((variaveis[1].faixa[m].para - variaveis[1].faixa[m].de)/2 +
variaveis[1].faixa[m].de);
s = (variaveis[1].faixa[m].para - variaveis[1].faixa[m].de)/2;
if(var1 >= a)
ax2[m] = 1 - (var2 - a) / s;
else
ax2[m] = 1 - (a - var2) / s;
printf(" A(x) = %f ",ax2[m]);
}
}
for(m=0;m<subconjuntos[1];m++) {
for(n=0;n<subconjuntos[0];n++) {
if(var2_atg[m] == 1 && var1_atg[n] == 1) {
else
maior[pilha] = ax2[m];
strcpy(valor_fuzzy[pilha],regras[m][n]);
pilha ++ ;
for(j=0;j<subconjuntos[2];j++) {
if(strcmp(regras[m][n],variaveis[2].faixa[j].sigla) == 0) {
if(flagCG == 0.0) { /* e' a primeira resolucao fuzzy */
menorCG = variaveis[2].faixa[j].de;
maiorCG = variaveis[2].faixa[j].para;
flagCG = 1.0;
}
else {
if(variaveis[2].faixa[j].de < menorCG)
menorCG = variaveis[2].faixa[j].de;
if(variaveis[2].faixa[j].para > maiorCG)
maiorCG = variaveis[2].faixa[j].para;
}
}
}
}
}
}
printf("\n");
return ;
}
if(strcmp(faixa,variaveis[2].faixa[j].sigla) == 0) {
de = variaveis[2].faixa[j].de ;
para = variaveis[2].faixa[j].para;
}
}
/* A(x) = 1-|x-a|/s se a-s <= x <= a+s */
a = (para - de)/2 + de;
s = (para - de)/2;
/* Defuzificacao pela media do maximo */
for(var = de;var <= para; var = var + 0.1) {
if(var >= a) {
ax = 1 - (var - a) / s;
}
else {
ax = 1 - (a - var) / s;
}
}
/*
return var1;
}
float centro_gravidade()
{
int i,j;
float a,s,ax,var,x1,x2,x3,valor_final,topo;
float cg_de[9],cg_para[9];
x1 = 0.0;
x2 = 0.0;
x3 = 0.0;
ax = 0.0;
for(i=0;i<pilha;i++) {
for(j=0;j<subconjuntos[2];j++) {
if(strcmp(valor_fuzzy[i],variaveis[2].faixa[j].sigla) == 0) {
cg_de[i] = variaveis[2].faixa[j].de ;
cg_para[i] = variaveis[2].faixa[j].para;
}
}
}
for(var = menorCG;var <= maiorCG; var = var + 0.001) {
for(i=0;i<pilha;i++){
topo = maior[i];
/* A(x) = 1-|x-a|/s se a-s <= x <= a+s */
a = (cg_para[i] - cg_de[i])/2 + cg_de[i];
s = (cg_para[i] - cg_de[i])/2;
x1 = ax;
}
x2 = x2 + var * x1;
x3 = x3 + x1;
x1 = 0.0;
}
if(x3 == 0) x3 = 1;
valor_final = x2 / x3;
return valor_final;
}Ao executar o programa, o usurio recebe na tela do computador as tabelas com as
definies das variveis de entrada e sada. O programa solicita a digitao das duas
variveis de entrada, informando os limites inferior e superior de cada uma. Como
resultado, o programa exibe os domnios a que pertencem cada varivel com seus graus
de pertinncia a estes conjuntos. Uma sada padro do programa como segue (em
itlico, os valores digitados pelo operador do programa):
Velocidade
Parado 0.0 5.0 PA
Devagar 2.0 20.0 DE
Pouco_rapido 10.0 50.0 PO
muito_rapido 40.0 80.0 MR
Distancia
No_sinal 0.0 2.0 NS
Muito_proximo 1.0 12.0 MP
Proximo 6.0 30.0 PR
Pouco_longe 18.0 37.0 PL
Muito_longe 30.0 50.0 ML
Pressao
Nenhuma 0.0 1.0 NE
Leve 1.0 30.0 LE
Media 25.0 75.0 ME
Forte 65.0 100.0 FO
Variavel Distancia:
No_sinal A(x) = 0.000000
Muito_proximo A(x) = 0.181818
Faixa para defuzificacao: LE, em 0.181818
Valor final defuzificado: 15.550034
Valor defuzificado pelo centro de gravidade: 15.502049
Velocidade 5.0
Distncia
2.0
Velocidade 20.0
Distncia
10.0
Velocidade 10.0
Distncia
7.5
Velocidade 79.0
Distncia
49.0
Velocidade 70.0
Distncia
5.0
Faixa atingida
A(x)
P(x)
Parado
No_Sinal
Devagar
Pouco_rapido
Muito_proximo
Proximo
Devagar
Pouco_rapido
Muito_proximo
Proximo
Muito_rapido
Muito_longe
Muito_rapido
Muito_prximo
0,0000
Leve
0.1818
Forte
0.5000
0.0000
0.5000
0.3636
0.3333
0.8889
0.0000
0.8181
0.1250
0.0050
0.0100
0.500
0.7272
Mdia dos
mximos
15.550034
Centro de
Gravidade
15.502049
82.549728
82.499977
Leve
0.1818
15.550023
15.500784
Leve
0.005
Forte
0.5000
15.550037
15.500149
82.549728
82.500015
Observando-se a tabela 21, verifica-se que se o veculo est muito rpido e muito
prximo, deve-se acionar os freios forte em 82,5497%. Intuitivamente este valor
parece aproximar-se da realidade, pois estando-se em uma situao real o que se faria,
tentar diminuir bruscamente a velocidade do veculo estando muito rpido e muito
prximo do sinal de pare em um cruzamento. Caso esteja muito rpido, em cerca de
79.0 km por hora mas a uma distncia considerada muito longe em torno de 49.0
metros deve-se acionar os freios levemente em torno de 15.5%.
possvel que estes valores, que foram definidos pelo especialista do sistema
modelado, sofram alteraes aps uma anlise dos resultados da execuo do programa.
uma fase de refinamento dos dados, para se obter um resultado mais aproximado do
objetivo a ser atingido.
5.2 CONCLUSO
No incio deste trabalho de pesquisa, notou-se a falta de um mtodo mais detalhado
com as orientaes de como se deve proceder para programar um computador
utilizando-se estes novos conceitos lgicos, diferentes daqueles da lgica tradicional.
Devido a importncia das reas de programao e lgica, o interesse foi imediato por
teoria fuzzy. Aliar a pesquisa de uma nova teoria lgica e programao foi o grande
agente motivador deste trabalho.
Este um trabalho inicial. Para prosseguir, tem-se como sugesto melhoramentos
na elaborao deste software embrio que se iniciou com este trabalho. Aplicar
orientao a objetos neste programa a primeira idia. Ou seja, converter este programa
para C++. A utilizao dos recursos de encapsulamento, herana, polimorfismo e outros
recursos desta linguagem tornar este programa mais eficiente e reutilizvel.
Aperfeioar o programa para aceitar mais de duas variveis de entrada gerando
como resultado uma ou mais variveis de sada e aprimorar os mtodos de defuzifao
tambm so propostas para a continuidade da pesquisa.
Muitos problemas computacionais envolvem termos vagos e imprecisos, e a teoria
fuzzy mostrou-se muito eficiente para o modelamento destes casos. Apesar da
dificuldade encontrada na implementao da lgica fuzzy nas linguagens de
programao, particularmente a linguagem de programao C, foi mostrado ser possvel
a sua implementao em um programa de computador.
As possibilidades de aplicao desta teoria so muitas, pois em todas as reas
encontram-se a incerteza e a impreciso lingsticas na representao de seus
problemas.
BIBLIOGRAFIA
Altrock, Constantin Von (1997), Fuzzy Logic & NeuroFuzzy Applications in
Business & Finance, Prentice Hall
Altrock, Constantin Von (1995), Fuzzy Logic & NeuroFuzzy Applications
Explainded, Prentice Hall
Arbex, Roberto Taiar (1996), Ambiente para Desenvolvimento de Controladores
Fuzzy, Dissertao de Mestrado, Escola Politcnica, USP
Barros, Lacio Carvalho de (1992), Modelos Determinsticos com Parmetros
Subjetivos, Dissertao de Mestrado, Instituto de Matemtica, Estatstica e
Cincia da Computao da UNICAMP
Barros, Lacio Carvalho de (1997), Sobre Sistemas Dinmicos Fuzzy Teoria e
Aplicaes, Dissertao de Doutorado, Instituto de Matemtica, Estatstica e
Cincia da Computao da UNICAMP
Blinder, Paulo Bernardo (1994), Implementao da Lgica Fuzzy em Redes Neurais
Artificiais e Aplicaes em Biologia, Dissertao de Mestrado, Instituto de
Matemtica , Estatstica e Cincia da Computao da UNICAMP
Buckles, B.P. - F. E. Petry (1983), Information-Theoretical Characterization of
fuzzy relational databases, IEEE Transactions On systems, Man, and
Cybernetics 13(1), pg. 74-77.
Cox, Earl (1998), The Fuzzy Systems Handbook, AP Professional
Cox, Earl (1995), Fuzzy Logic for Business and Industry, Charles River Media, Inc.
Gomide, Fernando & Witold Pedrycz (1998), An Introduction to Fuzzy Sets
Analysis and Design, Masachusets Institute of Technology
Kandel, Abraham - Yan-Qing Zhang (1998), On use of fuzzy logic technology in
operating systems, Fuzzy Sets and Systems 99,(1998) 241-251.
Klir, George J. - Ute H. St. Clair - Bo Yuan (1997), Fuzzy Set Theory - Foundations
and Applications, Prentice-Hall
Klir, George J. - Bo Yuan (1995), Fuzzy Sets and Fuzzy Logic - Theory and
applications, Prentice Hall
Korth, Henry F. - Abraham Silberschatz (1994), Sistema de Bancos de Dados, makron
Books.
Lee, Chuen Chien (1990), Fuzzy Logic in Control Systems: Fuzzy Logic Controller,
IEEE Transactions on systems, Man, and Cybernetics, Vol. 20, no. 2, 404-435
Maruyama, Newton (1991), Projeto e Anlise de Controladores Fuzzy, Dissertao
REFERNCIAS BIBLIOGRFICAS
Abe, Jair Minoro (1992), Fundamentos da Lgica Anotada, Dissertao de
Doutorado, FFLCH, USP
Alencar Filho, Edgard de (1985), Teoria Elementar dos Conjuntos, NOBEL
Cubero, J.C. & J. M. Medina, O. Pons, M. A. Vila, Fuzzy loss less decompositions in
databases, Fuzzy Sets and Systems 97 (1998), 145-167
Deitel, H. M., P. J. Deitel (1994), How To Program C++, Prentice Hall
Dubois, Didier & Henri Prade (1980), Fuzzy Sets And Systems Theory and
Applications, AP Academic Press
Jang, J. S. Roger, Ned Gulley (1997), MATLAB Fuzzy Logic Toolbox User's Guide,
MathWorks
Keller, James M. (1997), Fuzzy Set Theory in Computer Vision: A prospectus,
Fuzzy Sets and Systems 90 177-182
Kickert, Walter J. M.(1978), Fuzzy Theories on Decision Making, Frontiers in
Systems Research, Vol. 3, Eindhoven University of Technology
Kochen, Koche (1975), Applications of Fuzzy Sets in Psychology, in Fuzzy Sets and
Their Applications to Cognitive and Decision Processes, Academic Press, INC
Kundu, Sukhamay & Jianhua Chen, Fuzzy Logic or Lukasiewicz logic: A
clarification, Fuzzy Sets and Systems 95 (1998), 369-379
Montevechi, Jos Arnaldo Barra (1995), Contribuio para Identificao de
Similaridades entre peas: Abordagem baseada na lgica Fuzzy em
Sistemas de Apoio Computadorizados, Dissertao de Doutorado, Escola
Politcnica, USP
Munakata, Toshinori (1998), Notes on implementing fuzzy sets in Prolog, Fuzzy Sets
and Systems, Volume 98, Issue 3, 311-317
Pedrycz, Witold (1997), Fuzzy Sets in Pattern Recognition: Accomplishments and
Challenges, Fuzzy Sets and Systems 90 171-176
Pedrycz, Witold (1998), Technological Developments, Fuzzy Sets and Systems,
Volume 96, Issue 1, 125-128
Pedrycz, Witold, Fuzzy set technology in knowledge discovery, Fuzzy Sets and
Systems 98 (1998), 279-290
Rao, Valluru B & Hayagriva V. (1995), Neural Networks & Fuzzy Logic, MIS Press.
Siarry, Patrick & Franois Guely, A genetic algorithm for optimizing Takagi-Sugeno
fuzzy rule bases, Fuzzy Sets and Systems 99 (1998), 37-47
Votre, Vilmar P. (1997), C++ Explicado e Aplicado, ZeroErro Engenharia de
Software.