You are on page 1of 11

TUTORIAL TOOLBOX FUZZY MATLAB

1 JANELA PRINCIPAL DO MATLAB

A janela de exibição do Matlab possui 3 grandes áreas: Workspace, Command


History e Command Window. O layout básico pode ser visto na Figura (1).

Figura 1 – Janela principal do Matlab.

Workspace – Lista de variáveis utilizadas no programa atual;

Command History – Histórico de comandos executados previamente;

Command Window – Janela onde o usuário digita as ações as serem


executadas;

2 TOOLBOX LÓGICA FUZZY

O primeiro passo é abrir a toolbox de lóg


lógica
ica Fuzzy no Matlab. Isso é feito na
Command Window:

>> fuzzy

Assim que digitado o comando, é aberta a janela inicial da toolbox de lógica


Fuzzy.

ARTHUR SCHULER DA IGREJA Página 1


Figura (2) – Janela principal da toolbox de lógica Fuzzy.

Nesta tela são exibidas as variáveis de entrada e saída do controlador Fuzzy, o


controlador Fuzzy em si e a parametrização de cada um dos elementos.

2.1 INICIANDO O PROJETO DE UM CONTROLADOR BÁSICO

Para a construção do controlador básico será utilizado o exemplo do consumo


de combustível em um automóvel.

Serão utilizadas 2 variáveis de entrada: Aceleração e Inclinação do terreno. A


saída do controlador será o consumo de combustível.

Primeiramente será parametrizada a variável de entrada ‘’Aceleração’’. Para


isso, o passo inicial é selecionar a variável ‘’input 1’’. Para trocar o nome da
variável, clica-se na caixa Name que está com o texto ‘’input 1’’ e escreve-se o
nome ‘’aceleracao’’. Feito isso, deve-se clicar 2 vezes no bloco de entrada
‘’aceleracao’’ para que seja feita a edição das funções de pertinência dessa
variável. A caixa de configuração aberta pode ser vista na Figura (3):

Figura (3) – Configuração da variável de entrada ‘’aceleracao’’.

ARTHUR SCHULER DA IGREJA Página 2


A primeira configuração a ser feita é a alteração do nome dos conjutos difusos
para a variável lingüística ‘’aceleracao’’ que inicialmente estão como ‘’mf1’’,
‘’mf2’’ e ‘’mf3’’. Para isso, basta clicar em cima do nome do nome do conjunto e
alterar seu nome no campo ‘’Name’’. Para a variável lingüística ‘’aceleracao’’
usaremos os conjuntos: baixa, média e alta.

A segunda configuração a ser feita é definir o range da variável, ou seja, o


intervalo do menor valor que a variável pode assumir até o maior valor que a
variável pode assumir. Para o exemplo, o valor da aceleração será expresso
em RPM do motor para tornar o exercício didático.

A terceira alteração é escolher a forma mais indicada para expressar cada um


dos conjuntos difusos. Para isso, seleciona-se o conjunto, e no campo ‘’Type’’ é
escolhida uma das formas mais comuns para conjuntos difusos. Recomenda-
se escolher a forma triangular, trapezoidal ou gaussiana para facilitar a
compreensão inicial. Na variável ‘’aceleracao’’ será utilizada uma forma
triangular para o conjunto ‘’baixa’’, uma forma trapezoidal para o conjunto
‘’media’’ e uma forma triangular para o conjunto ‘’alta’’.

Por fim, deve-se configurar os parâmetros de cada conjunto difuso através do


campo ‘’Params’’. Essa variável indica por exemplo para uma forma triangular,
o ponto de início do conjunto, o ponto de máximo do triângulo e o fim do
triângulo. O ajuste dos valores do conjunto também pode ser feita de forma
interativa usando o mouse e arrastando cada vértice da forma escolhida até
que a mesma atinja a forma desejada.

Figura (4) – Variável de entrada ‘’aceleracao’’ depois de configurada.

Fechando-se a janela de configuração da variável lingüística ‘’aceleracao’’ a


tela inicial do controlador é exibida novamente. Deve-se agora adicionar mais

ARTHUR SCHULER DA IGREJA Página 3


uma variável de entrada para o controlador, para que isso seja feito deve-se
entrar no menu ‘’Edit’’, opção ‘’Add variable’’ e selecionar a opção ‘’Input’’.
Desta forma surge uma nova variável de entrada chamada temporariamente de
‘’input 2’’. Essa variável será a variável lingüística ‘’terreno’’ que irá representar
o grau de inclinação do terreno onde o veículo está transitando. Esta variável
deve ser configurada da mesma forma que foi configurada a variável
‘’aceleracao’’, com range de [-30 30] para representar a inclinação de -30º até
30º e nome dos conjuntos difusos: ‘’declive’’, ‘’plano’’ e ‘’aclive’’. Para editar o
nome de uma nova variável adicionada, deve clicar no menu ‘’Edit’’, opção ‘’FIS
properties’’ e realizar as mudanças necessárias.

Figura (5) – Variável de entrada ‘’terreno’’ depois de configurada.

Deve-se agora configurar a variável de saída, mudando seu nome para


‘’consumo’’ e atribuindo um range de [1 10] que representará quantos litros são
gastos para percorrer a distância de 10 km. A configuração da variável de
saída segue o procedimento adotado para as variáveis de entrada.

Figura (6) – Variável de saída ‘’consumo’’ depois de configurada.

ARTHUR SCHULER DA IGREJA Página 4


Por fim, as regras do controlador devem ser ajustadas. As regras determinarão
o comportamento básico do controlador difuso e devem ser parametrizadas por
um especialista no processo. Para realizar a configuração, seleciona-se o
menu ‘’Edit’’, opção ‘’Rules...’’.

Neste menu são exibidas as variáveis de entrada e a variável de saída. A


relação é feita selecionando um conjunto da variável lingüística ‘’aceleracao’’
como ‘’baixa’’ por exemplo, um conjunto da variável ‘’terreno’’ como ‘’declive’’
por exemplo e selecionando o conjunto desejado para a saída ‘’consumo’’ com
esta combinação. Para o exemplo foi selecionada o conjunto ‘’baixo’’. Isso
representa a seguinte afirmação:

SE aceleração é BAIXA E terreno é DECLIVE, ENTÃO consumo é BAIXO

Para que a regra seja adicionada, clica-se na opção ‘’Add rule’’. Caso algum
erro tenha sido cometido, pode-se configurar novamente a regra e selecionar a
opção ‘’Change rule’’ e caso a regra deva ser excluída, seleciona-se a opção
‘’Delete rule’’.

Figura (7) – Regras para o controlador depois de configuradas.

Fechando o menu de configuração de regras a tela inicial volta a ser exibida.


Selecionando-se o menu ‘’View’’, opção ‘’Surface’’ é exibida a superfície
formada pela relação entre as regras do controlador difuso. Essa superfície
representa a relação entre as regras e a saída do controlador.

ARTHUR SCHULER DA IGREJA Página 5


Figura (8) – Superfície formada pelas regras do controlador difuso.

Na tela inicial, selecionando-se o menu ‘’View’’, opção ‘’Rules’’ pode-se simular


o funcionamento do controlador difuso.

Figura (9) – Simulador do funcionamento do controlador difuso.

Nesta tela, caso o usuário mova o mouse para a direita ou esquerda com a
barra vermelha de cada variável de entrada, é possível visualizar o
comportamento da saída do controlador. Cada linha representa o
funcionamento de uma das regras atribuídas ao controlador. Caso o conjunto
esteja amarelo, significa que na condição configurada para as variáveis de
entrada, aquela regra está produzindo uma saída. Caso o conjunto esteja

ARTHUR SCHULER DA IGREJA Página 6


branco, significa que a regra não está produzindo resultado na saída. Para o
exemplo acima as regras ativas são: 1,2,3,4,5 e 6. O resultado de cada uma
das regras pode ser visto na última coluna em azul, e o resultado final do
controlador é dado pelo valor da variável ‘’consumo’’, no caso o valor 4.92.

Resumindo: Caso o carro esteja com 1890 RPM e em um terreno com -9º de
inclinação, seu consumo será de 4.92 litros de combustível para cada 10 km
rodados.

2.2 SALVANDO O CONTROLADOR DIFUSO

Para que o controlador seja salvo e possa ser utilizado através da


Command Window do Matlab, deve-se entrar no menu ‘’File’’, opção ‘’Export’’,
‘’To File...’’ e atribuir um nome para o arquivo, para o exemplo foi atribuído o
nome ‘’CONSUMO.fis’’. Esse arquivo será salvo na pasta padrão do Matlab e
contém toda a configuração realizada para o controlador proposto.

3 UTILIZANDO O CONTROLADOR DIFUSO FORA DA TOOLBOX

Para que o controlador criado seja utilizado, deve-se importar as


configurações presentes no arquivo ‘’CONSUMO.fis’’ para o Workspace do
Matlab. Isso é feito com o comando:

>> CONSUMO = readfis('CONSUMO');

Dessa forma foi criada uma estrutura presente no Workspace com todas as
características do controlador ‘’CONSUMO.fis’’.

Para simular o funcionamento do controlador, basta atribuir valores para as


variáveis lingüísticas de entrada e o resultado é calculado:

>> evalfis([1890 -9],CONSUMO)

ans =

4.9106

Para o exemplo, foram atribuídos os valores 1890 para a variável lingüística 1


(aceleracao) e -9 para a variável linguística 2 (terreno) e o resultado obtido é
4.9106, ou seja, o mesmo valor obtido durante os testes na toolbox. Essa
abordagem é especialmente útil visto que possibilita que o usuário faça o
projeto de um controlador difuso e o utilize da mesma forma que qualquer outro
controlador.

3.1 ESTRUTURA DO CONTROLADOR DIFUSO NO MATLAB

Uma vez importado o controlador difuso para o Workspace do Matlab, é


possível ter acesso a toda a sua estrutura e alterá-la caso necessário.

ARTHUR SCHULER DA IGREJA Página 7


A estrutura básica do controlador pode ser vista na Figura (10).

Figura (10) – Estrutura do controlador difuso no Matlab.

Pode-se observar como o controlador difuso foi importado clicando-se 2 vezes


na estrutura de nome ‘’CONSUMO’’ na área do Workspace. A janela Array
Editor deve aparecer com as informações referentes ao controlador conforme
visto na Figura (11).

Figura (11) – Array Editor do controlador difuso.

A estrutura tem subdivisões chamadas de campos. Cada campo


corresponde a uma propriedade do controlador, como por exemplo: a
propriedade ‘’name’’ (nome) contém a informação ‘’CONSUMO’’. Já o campo
‘’type’’ contém a informação ‘’mamdani’’ que é a forma de inferência escolhida
para o controlador.

ARTHUR SCHULER DA IGREJA Página 8


3.2 ACESSANDO CAMPOS DO CONTROLADOR DIFUSO
DIFU

Para que um campo de uma estrutura seja acessado, deve deve-se


primeiramente digitar no Command Window o nome da estrutura, seguido de
ponto e logo após o nome do campo desejado. Por exemplo, para acessar o
campo ‘’defuzzMethod’’:

>> CONSUMO.defuzzMethod
Method

Com este comando aparecerá na tela a informação ‘’centroid’’ que é a


forma escolhida para fazer a defuzzificação do controlador.

Conforme visto na Figura (10), dentro da estrutura básica do controlador


(FIS), existem outras estruturas, cada uma responsável por uma função
específica do controlador. Resumindo, dentro da estrutura
estrutura ‘’CONSUMO’’,
existem campos que por sua vez são outras estruturas.

3.3 ACESSANDO E ALTERANDO PARÂMETROS DO CONTROLADOR

O exemplo a seguir demonstra como alterar o limite superior do conjunto


‘’baixa’’ da entrada ‘’aceleracao’’. Inicialmente o valor encontra-se
encontra se em 2800
conforme visto na Figura (12).

Figura (12) – Limite superior da função de pertinência ‘’baixa’’.


‘’baixa’’

Dentro da estrutura principal, existe o campo ‘’input’’ que também é uma


estrutura. Dentro do campo ‘’input’’, existem 2 posições, representando as 2
entradas disponíveis no controlador. Para acessar a primeira entrada, devedeve-se
atribuir o índice 1 para linha e 1 para coluna:

ARTHUR SCHULER DA IGREJA Página 9


>> CONSUMO.input(1,1)

O resultado obtido na tela é:

name: 'aceleracao'

range: [0 7000]

mf: [1x3 struct]

Onde: ‘’name’’ é o nome da entrada, ‘’range’’ é o vetor que especifica o


menor e o maior valor possível para esta entrada e ‘’mf’’ é uma estrutura com 3
posições, onde estão especificados os limites de cada função de pertinência da
entrada ‘’aceleracao’’.

Para acessar o conjunto ‘’baixa’’, deve-se especificar o índice 1 para


linha e 1 para coluna:

>> CONSUMO.input(1,1).mf(1,1)

O resultado obtido é:

name: 'baixa'

type: 'trimf'

params: [-2800 0 2800]

Onde: ‘’name’’ é o nome do primeiro conjunto da entrada ‘’aceleracao’’,


‘’type’’ é o formato escolhido para este conjunto, para este exemplo o formato
especificado é um triângulo e por fim existe o vetor ‘’params’’ que especifica os
limites do conjunto.

Para acessar o limite superior deve-se acessar a estrutura ‘’params’’ e


dentro da estrutura ‘’params’’ especificar o índice 1 para linha e 3 para coluna:

>> CONSUMO.input(1,1).mf(1,1).params(1,3)

O resultado obtido é:

2800

Este valor representa o limite superior do triângulo da função de


pertinência do conjunto ‘’baixa’’ da entrada ‘’aceleracao’’ do controlador difuso
‘’CONSUMO’’.

Para alterar este valor basta atribuir um valor qualquer utilizando-se o


sinal de igualdade, por exemplo:

>> CONSUMO.input(1,1).mf(1,1).params(1,3)=2500;

ARTHUR SCHULER DA IGREJA Página 10


3.4 IMPORTANDO CONTROLADORES DIFUSOS NA TOOLBOX

Esta técnica representa o caminho inverso do proposto até o momento,


ou seja, ao invés de construir o controlador difuso na toolbox e acessar suas
propriedades no Workspace do Matlab, importa-se
importa se um controlador difuso do
Workspace para a Toolbox.

O exemploo será feito com a própria alteração realizada no limite superior


da função de pertinência ‘’baixa’’. Conforme visto o valor foi alterado de 2800
para 2500.

Inicialmente abre-se
se a toolbox de lógica Fuzzy novamente com o
comando:

>> fuzzy

Em seguida, abre-se se o menu ‘’File’’, opção ‘’Import’’, opção ‘’From


Workspace...’’. Surge a seguinte janela:

Figura (13) – Janela de seleção do controlador difuso a ser importado


importado.

Nesta janela deve ser especificado qual controlador deseja-se


deseja se importar,
visto que vários controladores podem estar sendo editados ao mesmo tempo
no Workspace. No campo deve-se deve se digitar ‘’CONSUMO’’ por exemplo. O
controlador CONSUMO então é importado, e abrindo-se
abrindo se a entrada ‘’aceleracao’’
com duplo clique no ícone amarelo do canto superio superiorr esquerdo da tela é
possível verificar que a alteração feita pelo Workspace foi efetivada.

Figura (14) – Controlador difuso importado com alteração.

ARTHUR SCHULER DA IGREJA Página 11