TUTORIAL TOOLBOX FUZZY MATLAB 1
JANELA PRINCIPAL DO MATLAB
A janela de exibição do M tlab possui 3 grandes áreas: Workspace, ommand History e Command Windo . 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 – J nela onde o usuário digita as ações
s serem
executadas;
2
TOOLBOX LÓGICA FUZZY
O primeiro passo é abrir a toolbox de lógica 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 torna r 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. Recomendase escolher a forma triangular, trapezoidal ou gaussiana para facilitar a compreensão inicial. Na variável ‘’aceleracao’’ será 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 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.
‘’t erreno’’ depois de configurada. Figura (5) – Variável de entrada ‘’terreno’’
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 resultad o é 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 pod e 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 Para que um ca po de uma estrutura seja acessado, deve-se primeiramente digitar no Command Window o nome da estrutura, s guido 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 c ntrolador (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 s a vez são outras estruturas.
3.3 ACESSANDO E ALTE ANDO PARÂMETROS DO CONTROLA OR O exemplo a seguir emonstra como alterar o limite superior d conjunto ‘’baixa’’ da entrada ‘’aceleracao’’. Inicialmente o valor encontra-se em 2800 conforme visto na Figura (12).
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, represent ndo as 2 entradas disponíveis no controlador. Para acessar a primeira entrad , deve-se atribuir o índice 1 para linh 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 CONT OLADORES DIFUSOS NA TOOLBOX Esta técnica repres nta o caminho inverso do proposto até o momento, ou seja, ao invés de cons ruir o controlador difuso na toolbox e acessar suas propriedades no Workspa e do Matlab, importa-se um controlador difuso do Workspace para a Toolbox. O exemplo será feit com a própria alteração realizada no limit superior da função de pertinência ‘’baixa’’. Conforme visto o valor foi alterad de 2800 para 2500. Inicialmente abre-s comando:
a toolbox de lógica Fuzzy novamente com o
>> fuzzy Em seguida, abre- e o menu ‘’File’’, opção ‘’Import’’, opç o ‘’From Workspace...’’. Surge a se uinte janela:
Figura (13) – J nela de seleção do controlador difuso a ser importa do. Nesta janela deve ser especificado qual controlador deseja-se importar, visto que vários controlad res podem estar sendo editados ao mes o tempo no Workspace. No campo deve-se digitar ‘’CONSUMO’’ por exemplo. O controlador CONSUMO en ão é importado, e abrindo-se a entrada ‘’a eleracao’’ com duplo clique no ícone amarelo do canto superior 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