tutorial toolbox fuzzy matlab

11
ARTHUR SCHULER DA IGREJA TUTOR 1 JANELA PRINCIPA A janela de exibição do Ma History e Command Window Figu Workspace Lista de variá Command History Histó Command Window Ja executadas; 2 TOOLBOX LÓGICA O primeiro passo é abrir a Command Window: >> fuzzy Assim que digitado o com Fuzzy. RIAL TOOLBOX FUZZY MATLAB AL DO MATLAB atlab possui 3 grandes áreas: Workspace, C w. O layout básico pode ser visto na Figura ura 1 – Janela principal do Matlab. áveis utilizadas no programa atual; órico de comandos executados previamente anela onde o usuário digita as ações a A FUZZY a toolbox de lógica Fuzzy no Matlab. Isso mando, é aberta a janela inicial da toolbox Página 1 Command a (1). e; as serem é feito na de lógica

Upload: arnaldo-araujo

Post on 23-Jun-2015

1.936 views

Category:

Documents


0 download

DESCRIPTION

Tutorial sobre o desenvolvimento de sistemas fuzzy por meio do Matlab

TRANSCRIPT

Page 1: Tutorial Toolbox Fuzzy Matlab

ARTHUR SCHULER DA IGREJA

TUTORIAL TOOLBOX FUZZY

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

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ógCommand Window:

>> fuzzy

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

TUTORIAL TOOLBOX FUZZY MATLAB

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.

Lista de variáveis utilizadas no programa atual;

Histórico de comandos executados previamente;

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

TOOLBOX LÓGICA FUZZY

O primeiro passo é abrir a toolbox de lógica Fuzzy no Matlab. Isso é feito na

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

Página 1

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).

Histórico de comandos executados previamente;

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

ica Fuzzy no Matlab. Isso é feito na

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

Page 2: Tutorial Toolbox Fuzzy Matlab

ARTHUR SCHULER DA IGREJA Página 2

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’’.

Page 3: Tutorial Toolbox Fuzzy Matlab

ARTHUR SCHULER DA IGREJA Página 3

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

Page 4: Tutorial Toolbox Fuzzy Matlab

ARTHUR SCHULER DA IGREJA Página 4

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.

Page 5: Tutorial Toolbox Fuzzy Matlab

ARTHUR SCHULER DA IGREJA Página 5

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.

Page 6: Tutorial Toolbox Fuzzy Matlab

ARTHUR SCHULER DA IGREJA Página 6

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

Page 7: Tutorial Toolbox Fuzzy Matlab

ARTHUR SCHULER DA IGREJA Página 7

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.

Page 8: Tutorial Toolbox Fuzzy Matlab

ARTHUR SCHULER DA IGREJA Página 8

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.

Page 9: Tutorial Toolbox Fuzzy Matlab

ARTHUR SCHULER DA IGREJA

3.2 ACESSANDO CAMPOS DO CONTROLADOR DIFU

Para que um campo de uma estrutura seja acessado, deveprimeiramente 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

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 específica do controlador. Resumindo, dentro da estruexistem 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‘’baixa’’ da entrada ‘’aceleracao’’. Inicialmente o valor encontraconforme visto na Figura (12).

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

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

3.2 ACESSANDO CAMPOS DO CONTROLADOR DIFUSO

Para que um campo de uma estrutura seja acessado, deveprimeiramente 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

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 ‘’CONSUMO’’, existem campos que por sua vez são outras estruturas.

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 em 2800 conforme visto na Figura (12).

Limite superior da função de pertinência ‘’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, deveatribuir o índice 1 para linha e 1 para coluna:

Página 9

Para que um campo de uma estrutura seja acessado, 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

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

Conforme visto na Figura (10), dentro da estrutura básica do controlador responsável por uma função

tura ‘’CONSUMO’’,

E ALTERANDO PARÂMETROS DO CONTROLADOR

superior do conjunto se em 2800

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, deve-se

Page 10: Tutorial Toolbox Fuzzy Matlab

ARTHUR SCHULER DA IGREJA Página 10

>> 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;

Page 11: Tutorial Toolbox Fuzzy Matlab

ARTHUR SCHULER DA IGREJA

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, importaWorkspace para a Toolbox.

O exemplo 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 a toolbox de lógica Fuzzy novamente com o comando:

>> fuzzy

Em seguida, abre-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

Nesta janela deve ser especificado qual controlador desejavisto que vários controladores podem estar sendo editados ao mesmo tempo no Workspace. No campo devecontrolador CONSUMO então é importado, e abrindocom duplo clique no ícone amarelo do canto superiopossível verificar que a alteração feita pelo Workspace foi efetivada.

Figura (14) –

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 um controlador difuso do

a Toolbox.

o 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

se a toolbox de lógica Fuzzy novamente com o

se o menu ‘’File’’, opção ‘’Import’’, opção ‘’From Workspace...’’. Surge a seguinte janela:

Janela de seleção do controlador difuso a ser importado

Nesta janela deve ser especificado qual controlador deseja-se importar, vários controladores podem estar sendo editados ao mesmo tempo

no Workspace. No campo deve-se digitar ‘’CONSUMO’’ por exemplo.controlador CONSUMO então é importado, e abrindo-se a entrada ‘’aceleracao’’ com duplo clique no ícone amarelo do canto superior esquerdo da tela é possível verificar que a alteração feita pelo Workspace foi efetivada.

Controlador difuso importado com alteração.

Página 11

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

se um controlador difuso do

o 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

se a toolbox de lógica Fuzzy novamente com o

se o menu ‘’File’’, opção ‘’Import’’, opção ‘’From

Janela de seleção do controlador difuso a ser importado.

se importar, vários controladores podem estar sendo editados ao mesmo tempo

se digitar ‘’CONSUMO’’ por exemplo. O se a entrada ‘’aceleracao’’

r esquerdo da tela é