Você está na página 1de 29
sages Introd Légjca Fuzzy com Java © devmenia www devmedia.com.br [versae pare impressao] Link original: http://www devmedia.com br/articles/viewcomp.asp?comp=32444 Introdug4o a Logica Fuzzy com Java Aprenda a utilizar esta importante técnica de Inteligéncia Computacional em sistemas Java ‘Autores: Diogo da Silva Magalhies Gomes e Max de Castro Rodrigues (© que fazer quando um processo de decisdo Inerentemente humano deve ser automatizado? Como modelar ceimplementar uma aplicacSo de forma que ela responds a estimulos de natureza imprecisa? Que ferramentas e técnicas podemos utilizar para simular computacionalmente o comportamento de um motorista de carro, ou mesme de um operador ce bolsa de valores? Para responder a estas perguntas, 0 presente artigo apresenta os conceitos, madelagem e aplicacées priticas da lgica fuzzy, técnica wtizada para que processos a smatizados se apropriem de particularades do raciocinie humane, come e processo decisdrio multidisciplinar e a ponderagSe imprecisa Diariamente, precisamos ldar com informacSes que, por sua natureza, no pedem ser representadas por valores numéricos precisos ¢, apesar disso, precisemos ter a habidade de analisé-las para tomarmos nossas decisdes, Sio informagies que, embora possam ser mensuradas, envolvem certo grau de incerteza € interpretacdo subjetiva, sujeltas a conclusdes divergentes se apuradas por diferentes Indviduos. Por exemplo, quando precisamos nos deslocar Ge um ponto pare outro no pensamos no nimero de passos {ue teremos de caminhar para decidir se tomaremos um Gribus ou se remos a pé, analisamos somente se 0 destino & perto ou longe. Neste contexto, os termos perto e longe esto, portant ligados & medida de dstincia, mas de uma forma subjetiva e Imprecisa. O que para um individuo é considerade perte, para outro pode ser lenge. ‘A maneira como interpretamos e anallsamos estes conceltos ocorre de forma subjetiva, uma caracterstica do raciocinio humano, Esta abstracio e a imprecisio nela envolvida nos permitem, porém, evantar um interessante questionamento: 2 partir de qual nimero de passos um determinade destino deixa de ser considerado perto e passa a ser considerade longe? Para llstrar melhor esse cenéri, Imagine que uma pessoa esteja dentro de sua casa, Em um dado momento, ela comeca 2 caminhare se afasta de casa, um ‘nico passo de cada vez. A cada passo, ela analisa se a dst8ncia para retorar pare casa & considerads come perto ou longe, Em que momento especifica @ distancia percorrida deixa de ser considerada perto © passa ser considerada longe? Um nico passo percorrdo entre um instante © outro poderé fazer diferenca ‘em sua avaacdo, ou Sea, um destino considerado perto, com um passo @ mais, poderd passer a ser considerado fonge? ipilvw devmedia,com brlariclesviewcomp forprin.aspeemp=32644 129 sages Introd Légjca Fuzzy com Java Este mesmo raciocini fol empragado no século IV a.C pole fildsofo Eubulides de Milt, na proposi¢o que ficou conhecida como Paradoxo Sortes. Ele questiona: "quando um monte de areia delxa de ser um monte de arela, caso retiremos um gro ce cada vez?". Em sua proposiclo, ele define que se n gros de areia s30 ‘um monte, também o serlam (nt) 980s, Ou seje, um Unleo 9:80 de rela ndo deverle fazer elferenga nesta classficagde, © mosmo se diz do censrio opesto: um gro de arcia no faz um monte, ¢ adicionande mais um tnico gro, também née fara élferenca. Mas isso significa, por IncusSo, que nunca teremos um monte de {arela, por mals que juntemos 0s gros um a um. Outro exemplo que demonstra como a imprecisdo ests inerentemente presente em problemas no mundo real se rofere a0 cléssico condrio de classiicacSo de um copo come chele ou vazio (Figura 1). Considere ‘que um copo estejaincialmente vazio e gradativamente vai send preanchide com agua, uma Gnica gota ‘Sendo adicionada a cada vez, Até que momento poderlamas clzer que o copo esté vazle? A partir de que momento espectic este cope poderia ser considerado cheio? I | Figura 1..Em que momento o cope deixa de ser considerado vaz'0, @ passa 2 ser considerado chelo? De fato, 0 que corre & que, assim come um nico grdo de arela ndo poderé afetar de imediato a classficagSo no cenério lustrado pelo Paradoxo Sontes, também no poderé faz8-lo apés uma nica gota ser adicionada ao copo, ou apés um Gnico passo percorrido, no exemplo anterior. No mundo real, & Imprecisio est inerentemente presente nestas situagGes. Nestes cendires, tanto 0 cope quanto @ monte de arela no podem ser considerades, de Imediato, como transitads de um conjunto (vazie) para o outro (chelo), apés aeicionar uma Unica unldade. Na realidade, @ cade unidade adicionade, esta classiicagao gradativamente vai deixando de pertencer a umm conjunto (ou eategora), © aumentando sus participacdo (ou pertinéncia) no conjunte adjacente. Ou seja, a cada gota adicionada, 0 cope gradativamente val deixando de ser considerado vazio, @ aumentance a sua correspondéncla com o que se define como sende considerado chet, ipilvw devmedia,com brlariclesviewcomp forprin.aspeemp=32644 sages Introd Légjca Fuzzy com Java Na roa de computacio, porém, & comum buscarmos representacées precisas para modelar este tipe de cenério, desenvelvende algortmos que tentam quantiiar estes fatores utlzando valores precisos. Nestes casos, multas vezes é especficado um valor lmitrofe, a partir éo qual a classiicacio para o cenério musa de um conjunte para o outro, ignorance sua natureza invariavelmente imprecise, podendo ocasionar peréa de informagées importantes que deixaram de ser consideradas. Por exemple, um processo tracicional de classificagSo poderé arbitrar come longe a distncia entre dois pontos 2 partir ce um valar pré-estabelecido, no permitinds ponderacées subjetivas. ‘A Lgica fuzzy, também conhecida como t5gica nebulosa ou difusa, & uma técnica da Srea de inteligéncia ccomputacional que nos permite representar modelos que contenham certo grau de Incerteza ou imprecise, caractersticas de situagdes do mundo real. Estas tenicas nos permitem codificar softwares que representem algoritmas mals préximes ¢a forma como funciona @ racocinie humane, obtendo resulkados fatérios uma vex que valores limitrofes e incertezas do modelo no so ignorados, Na légica fuzzy, dliferentemente da lgica clissica, um elemento pode pertencer parcialmente a um conjunt. © surgimento do conceito de conjuntos fuzzy é atribuido & Lotfi Zadeh, da Universidade da Calfémia, que, ‘em 1965, langou 0 artigo “Fuzzy Sets", itroduzinda o assunto na meio académico [1]. Os precursores no uso prético cesta técnica em projetas sBo 0s Japaneses, construindo um dos primeiros sistemas de controle fuzzy de uso entice na estrada de ferro de Sendai, no Jap, no ano de 1987, controtande aceleragio, frenagem ¢ parada das composigées nas estagées metrovirias. Sistemas baseados em léglea fuzzy podem ser utlizades em praticamente todas as dreas de conhecimento, ‘como engenharia, matematica, biologie, medicina, ete, Como exemplos de sua utilza¢ao prética, podem ser citados 08 seguintes tipos de sistemas: de controle embarcado, de apoto & deciséo, de reconhecimento de faces ou de padrées, de dlagnéstice médico, de previsio de tempo, de célcule © geranciamento de risco, de controle ce tréfego, de condugio de veiculos auténomos e de diversas outras fnalidades [2]. 0 universo dos sistemas de controle embarcados é um caso especial, pois os exemplas s8o faciimente encontrados em nosso ola-a-dia, Diversos equipementos domésticos e urbanos possuem modelos que contemplam a igica fuzzy em suas diretrizes internas [2], tals como: méquinas de lavar, aspradores de pé, televisores, caixas reolstradoras, sistemas de alarme, copladoras, micro-ondas, faco automatico em cémeras fotografcas, ete. Uma das éreas de aplicacdo em que técnicas de légica fuzzy so fortemente empregadas é a de desenvolvimento de Jogos de computador, em fungi de sua caracterstca de tentarreproduzir em um ambiente virtual particularidades do mundo real, Inclusive suas imprecisbes e aleatoriadades, Sistemas que utilizam I6gica nebulosa podem ter suas instruses em software e utlizar processadores de uso geral,optanco par um custo mals baixo; ou ter suas instrugBes presentes em hardware em Circultas Integrados de Aplicacdo Especiica (Application Specine Integrated Circuits), que acerreta em custos mals levads, porém obtém um processamento mais répido, est artigo apresenta os principals conceltos sobre lésica fuzzy @ sistemas ¢e Inferéncia fuzzy, Ldemonstrando como utilizar estas técnicas em sistemas Java com o componente JFurzyLagic. Para lustrar ‘estes conceltos S80 apresentados dols casos hipotéticos: @ modelagem de um sistema de apoo 2 decisso da Srea de RH de ume empresa; e um simulador baseado em um sistema de inferdncias fuzzy, que utliza uma base de regras para representar o algoritme de condugo de um velculo em direcio a uma vaga de Logica Fuzzy x Logica Classica ipilvw devmedia,com brlariclesviewcomp forprin.aspeemp=32644 sages Introd Légjca Fuzzy com Java Tradicionalmente, uma proposicSe ligica cléssica possul deis extremos: ou a premissa é completamente falsa, ou é completamente verdadeira. Sé existe um resultado possivel. Portanto, na matematica clissica, a fungdo que define se um elemento pertence ou ppertence 2 um determinade conjunte somente poderé _assumir 0s valores 0 (falso), ov 1 (verdadelro), conforme a Figura 2, S,2) 1 see somente sex c A x 4 0 see somente sex¢ A Figura 2. Func de pertingncia de um conjunto cléssico; Entretanto, na légiea fuzzy, 0 resultado desta propasicdo poders variar em graus de verdade, em que poderemes consideré-lo como parelalmente verdadeiro, ou parcialmente fals. Isto &, um elemento pode pertencer parcialmente @ um conjunto. Desta forma, @ fungSo ce pertingncla p(x) de um elemento 8 um Conjunto fuzzy pode assumirinfnitos valores no intervalo [0,1], entre o totalmente flso e o totalmente verdadeiro, conforme descrite na Figura 3. H,(x):X > [0,1] Figura 3. Funclo de pertinéncia de um conjunto fuzzy. Pertante, cada elemento do conjunto fuzzy tem um grau de pertinéncla, também chamado de grau de incluséo, definido no intervalo [0,1], que descreve a possibildade do elemento pertencer a este conjunto. {Quanto maior 0 valor, mais compativel o elemento seré ern relagSo a0 conjunto que o descreve, ‘como 0 elemento pade pertencer parcialmente a um conjunto, & possivel haver uma transicio gradual da classiticagSo de um elemento entre um conjunto € outro, Ou seja, entre 0 falso 0 verdadeiro que definem ‘50 um elemento partence a um conjunto na mateméticacléssica, infites valores podem ser assumidos utlizando a légica fuzzy (Figura 4) LOGICA CLASSICA LOGICA NEBULOSA Figura 4. lustraco com representapio conceitual ds pertingncla entre conjuntos cléssicos e as ifiitas possiblidades tratades pela légice nebulose ipilvw devmedia,com brlariclesviewcomp forprin.aspeemp=32644 sages Introd Légjca Fuzzy com Java Retornando ao exemple apresentado pelo Paradoxo Sorites, a cada gro de arcia adiclonado, o censrio dgradativamente aumenta sua participaco no conjunte que © descreve como um monte de areia, ‘aumentando 0 valor do seu grau de incluso neste conjunto. Podemos observar cenérios desta natureza em diversas situacSes cotidlanas como, por exer, quando precisamos classiicar um determinaée ineividuo por sua faixa etéria, Para ilustrar, tomemos come base 8 classificagdo ofcialmante utllzaéa pelo Instituto Nacional do Semiérido (INSA), em que a populace brasile@ & classficada conforme o seguinte ritéro, llustrado na Figura 5. Semisrido 4722340 3.244.189 12077570 2608219 -22.598.318, Nordeste 10949635, 7346833 © 29.329300 «5.456177 ——53.081.950 ‘Sudeste 13477441 9.263.339 48096276 9527.354 890.368.4109, Centro-oeste 2.684884 1.774.688 8360388 «1.238134 ——«14.058.094 Norte 3.909.162, 2.382.548 Basi279 1081459 «1S. 864.454 su 4.502.472 3.266.335 «6.230.618 «3.287.465 ——27.385.891 Brasil 35673594 24,033.75. 110507861 «70590599 ——190.755.799 Asfanas otras definidas para criancas, adolescente e dose so as precorzadas pelo Estatuo da Crianca edo Adolescente (tein® 8059 e 13 do tho de 1990) «pele Eeatto de oro [Ll n® 10.741 de 01 de eutubre de 2003), respectvarnonte Figura 5. Tabela de classificagdo etéria da populagio, confarme o INSA. Fonte: tp //wwuinsa.gov.br/censosab/incex.php?eption=com_contenttview=artcle6id=1018item) 00 Este exemplo demonstra claramente um madelo em que so dafinides valoras limitrofes entre os conjuntos, cde maneira que a classificacdo de um individuo em cada faixa etéria sofreré transigdes abruptas & medida {que sua idade avanca, Segundo a tabela, uma pessoa com 11 anos, 11 meses e 30 dias & considerada como uma erianca. Mas, no dla seguinte, ao completar doze anos, esta mesma pessoa sers diretamente reclassficada como adolescente, mesmo que ndo tenham ocorride mudancas bioldgicas ou psicometoras em su constitugSo neste curte perlodo de um dla transcorriéa (um Unico ard de arela, ne enalogia co Paradoxo Sorites). De fato, assim como ocorre com os gros de area, a pessoa, a cada dia que passa, val ‘gradativamente mudando sua participacdo (grau de inclusio) de um conjunto para o outro ‘Na matemsética classica, esta classificacdo poderia ser cescrita pelo ciagrama exposto na Figura 6. ipilvw devmedia,com brlariclesviewcomp forprin.aspeemp=32644 sages Introd Légjca Fuzzy com Java 2 a scrianga, Adolescente wadkite Grau detnclusso & 2 & 5 9 0 0 dade Figura 6. Grafica ustrando conjuntes cléssicos para classificagdo etéra da populegao Ulizando 3 notagdo de conjuntos fuzzy, este mesmo cenério paderte ser representado pelo dlagrama ‘tustrago na Figura 7, a 75 "Griange Adolescente Adulto oro. Geww detnclusio 035 ° » 2 4 wR Sh mH MO Hdade Figura 7. Diagrama iustrando a classficacdo etéria 6a populagso utilzando conjuntos fuzzy. Destaca-se que as fronteiras entre 0s conjuntes no sii nitidamente definidas, havendo inclusive certa Intersecdo entre elas e, por isso, ocorre uma transicée gradativa das graus de pertinéncla entre os Conjuntos & medida que @ ldade do individuo avange. Podemos observar que © conjunto adolescente _assumiu um formato trapezoidal, iniciando-se @ partir dos 10 anos, com um grau de pertingncia zero, aumentando gradativamente até chegar a um pico 20s 14 anos (onde um individuo seré claramente define come adolescente) com grau de pertingncia igual a um, © depois diminuindo & medida que sua classificacéo transita para o conjunto seguinte, chegando novamente ao valor zero 40s 21 anos ipilvw devmedia,com brlariclesviewcomp forprin.aspeemp=32644 sages Introd Légjca Fuzzy com Java Portanto, podemes defnir que, neste exemplo, uma pessca de treze anos partence aos conjuntos 'Crianca’ e “Adolescente” em diferentes graus de Inclusdo, mas no pertence aos conjuntos “Adulto’e ‘dos’, pols nestes dois Gitimos cases o grau de pertinéncia & zero. Este individuo com treze anos pertence predominantemente ao conjunto adolescente, mas ndo deixando de ser, pordm, cassificada também como ceranca em um menor grau ée pertinéncia. Este modelo de representacdo aproxima-se da forma como o entendimento humane naturalmente compreende as imprecisdes inerentemente presentes nas situaces catidianes, pois ndo ha frontelras nitidamente definidas entre os conjuntos,¢ facta 8 maneira como podemos representé-las ao traduzi-las ‘em algoritmas mateméticos. Sistemas de Inferéncia Fuzzy Uma vez apresentado come os conjuntos fuzzy podem ser utllzades para representar as incertezas © imprecisBes de um modelo, & necessério compreender como se daré a modelagem de um algoritma que irs utiizé-los em um sistema real Sistemas de inferéncia fuzzy, ou Fuzzy Inference Systems (FIS), buscam representar a modelagem do racocinia humano em forma de regras, ao invés ce um algoritmo expliitamente restita a modelos CComumente, quando procuramos expressar nosso raciocinio, naturalmente desenvolvemas uma descricéo no formato de um conjunto de implicagSes ligicas, do tipo se (antecedente) entBo (consequente). medida que a descrigéo se desenvalve, combinamos diversas sentencas através da utilzacio de operadores légicos "e" e "au", come na sentensa a seguir: se (antecedente!) e (antecedente2) entlo (consequente) Para exemplifcar, consideremos um cenéro hipotético de um sistema de controle de velocidade de um Veleulo, que analisa sua velocidade atual e se existe algum obstécule 8 sua frente (como outro velcule), para entdo decidir a aceleracdo final ou frenagem a ser empregada, conforme o caso. Naturaimente, se howver algum obsticula, ovelculo devers fear, senio devers acelerar, até atingir uma velacidade de cruzeieo satsfaténa Neste cendro, poderfamos formar @ seguinte proposi¢do, considerando como entrada as variévels velocidade e distincia do obstdculo: se (velocidad & alta) e (obstéculo & perto) ents (aceleracso & {rear), Neste caso, analisando as entradas, o sistema decidrd que o velculo deve acionar a frenagem (aceleragao negativa) caso haja um obstaculo& sua frente e sua velocidace seja consicerada ata, Observe ue as regres foram descritas sem utilzar valores precisos como entrada, mas apenas os conjuntos (ou partigdes) fuzzy que descrever 0 intervale légico a ser considerado em cada proposigio. Na légica tradicional, esta regra provavelmente seria descrita como: *se (velocidade > 100km\h) e (obstéculo E ENTAO . A conclisSo indica @ qual conjunto @ varidvel de saida pertence. As regras para a problema de valoragie de gratificacio, definidas pelo especialsta, sfo as seguintes: ipilvw devmedia,com brlariclesviewcomp forprin.aspeemp=32644 109 sages Introd Légjca Fuzzy com Java SE capacitaglo & "Fraca” E experiéncia & “Pouca” ENTAO gratificario & "Muito-Baixa SE capacitacdo & *Fraca” E experiéncia & "Mésia” ENTAO gratficacso & "Bala" SE capacitagéo & *Fraca” E experiencia & "Multa" ENTAO gratiicagéo é "Média" SE capacitago & “Média” E experiéncia & “Pouca” ENTAO gratifcacso 6 “Baixa” 1 2 3 4 5. SE capacitacdo & "Média" E experiéncia & "Média" ENTAO gratificacao & "Mécia” 6. SE capacitacso é "Méaia” € experiéncia é "muita" ENTKO gratincaczo & "Alta" 7. SE capacitagéo & "Forte" € experiéncia & "Pouca” ENTAO gratificagao & *Méda® 8. SE capacitagio é Forte” E experiéncia é "Média" ENTAO gratificacso & Alta” 9. SE capacitagdo & "Forte" E experiéncia & *Multa” ENTAO gratincacdo & *Multo-Alta” Uma vez definidos os conjuntos de pertingncia ¢ as regras,o sistema usando ligica fuzzy J6 pode ser Implementaco uttizando ume tinguagem qualquer e uma API especialsta que seré responsével pele fuzziteagdo e defuzzificacSo. A API receberé as regras ¢ 0s conjuntos fuzzy como pardimetros ald das varigvels de entrada, de forma que gere 2 varidvel de caida gratficaglo. Existem diversas APIs disponivels, para executar a tarefa, senda a JFuzzyLogic a indicada aqui Uma visio segmentaca do processo ce fuzzfcacso ¢ defuzzificagée pode ser observada no clagrama da Figura 12, onde avaliado o caso de um profissional com 10 anos de capacitagio # 20 anos de experiéncla © proceso usa a capacitacio « a experiéncia informada para rastrear as regras que foram ativadas & conclu que 0 profissional é merecedor de uma gratificacdo de R$600,00. Observance as regrasj6 definidas © 0 diagrama da Figur Impostas. Por exemplo, a regra 5 fol avada porque atendeu as duas condigées necessénas: a capacitacso 4 °Médla e 2 experiéncia & "Média, levando a variével de sada gratfcacio a ter um valor proporcional a0 12, nota-se que as regras 5, 6, 8 9 foram ativades por atencerem as concicBes frau de incluséo ¢as duas concigSes atendidas. O grau de inclusdo obtido no conjunto de salda em cada reor9, representade pela rea em negrito dos ridngules da varvel gratficagio, & definido por um céleulo matemstico de responsabilicade da API. Com os graus de incluso dos conjuntos fuzzy de gratiticacdo j8 pordaradas pela API (tercera coluna na direta do diagrama), a defuzzificagéo & efetuada, gerando a saida dnica, que é 0 valor de gratficagse esperado coma resultado final de proceso de decisfo nebuloso, ipilvw devmedia,com brlariclesviewcomp forprin.aspeemp=32644 sages Introd Légjca Fuzzy com Java png 0a presse erste tse by pyr iE ea | }! Figura 12. Processo de fuzzificagae e defurzinicacso. Neste exemplo, 0 métoco de defuzzicacso utilzado para obter 0 valor final, descrito no iltime grafic, fle Centro de Gravidade, Existem diversos métodos possivels de serem utlizados nos processos de fuzziNcaco dofuzzificasdo executados pela API, de mansira que cada método efetua sua formulacse matemética prépra. O que corre no interior da API, como é esperade, fica totalmente transparente para o projetista © seu detalhamento nao faz parte do escopo deste trabalho. Caso 0 letor deseje saber mais, é preciso um. ‘estudo mais aprofundade por parte do mesmo em iterature especiolizada (1), (© exemple 6a determinacSo do valor de graticagSo, apviado pela l6gia fuzzy, esclarece o processo de ‘modelagem de uma sclucSo oriantada a regras de negéc, encontrada no dla-a-dia de muitos sistemas corporativas, No préximo exemple, mals extenso, o enfogue seré dada @ um sistema de controle, onde @ ‘modelagem, a formulago matemstica ¢ a codificagdo s8o bem detathadas, © Simulador de Estacionamento de um Vefculo Para demonstrar na pratica a construgio de um sistema fuzzy, seré apresentada a implementagSo em Jave de um controlador baseade no clissico problema de estacionamento de um veicule, amplamente referenciado ne literatura técnica académica [5]. Este controlador uilza um sistema de Inferéncias baseado fem regras para conduzir um veiculo euténomo em direcio a um local predeterminado, representado por uma vvaga de estacionamento, Ini devmedia,com beariclesviewcomp forprin.esp?eomp=32444 9 sages Introd Légjca Fuzzy com Java 0 simulador serd desenvolvido em dois passes: o primeire corresponde & implementacio do controlador fuzzy, que 0 nicleo de inferéncias, que efetivamente processe as entracas e a saida em cada passo, @ 60 responsével por calcular a trajetia do velcvlo. 0 segundo passo & 0 simulador gréfco,utllzeco para testar « validar © comportamento do controlador fuzzy, permitinds ao usuaro visualzar a trajetéia percorida & efetuar ajust sna modelagem dos pardmetros do controlador, caso necessério. © objetivo do simulador é estabelecer um algoritmo inteligente capaz de guiar um veicula, ecalzado em uma determinaca posigSe do pétlo, em diregio a uma vaga de estacionamento previamente demarcada, O velculo pode estar em uma determinada posicSo x em relacdo ao eixe horzontal, e rotacionado em um ngulo @ em relagio a este eixo, O sistema de inferéncias fuzzy iré atuar como se fosse 0 motarista do velcula, especifiando © angulo em que a roda deve ser lrada para que o veiculo seja guiado em dlrecéo a0 local defnido, A condicio de parada & que 0 veiculo esteja localzado na posigio central em relac8o ao ebxo horizontal @alinhado perpencicularmente a este eixo, na drea demarcada como sendo a vaga de como anteriormente apresentado, os sistemas de inferincia fuzzy sia madelados & semelhanga do raciocinlo de um especialsta humane. Neste caso, o especialista que poderé descrever como um veiculo deve ser estacionado seria um motorsta, Para descrever os passos necesséris, basicamente ele explicaria que: "se 0 veiculo estélacalizado 8 direte do panto ce de 19, © volante deve ser grado para a esquerca; se 0 veiculo esté 8 dreta, 0 volante deve ser grado para a esquerda”. Se o veiculo, porém, estiveralinhade ‘com a vaga de estacionamento, o volante deve ser mantido na posicéo central, para o velculo seguir em frente, As regras devem considerar ainda o Bngulo do velculo em relacdo ao ponto de destino, que deve ser retacionado para que fque alinhado verticalmente na vaga de estaclonamento. Dito isso, inicialmente iremos identfcar as particBes fuzzy para caca variével de entrada e estabelecer 0 Conjunto de regras para representar o conhecimento do matarsta ne forma de um sistema de inferBncias fuzzy Neste cendro, consideraremes duas veriévels de entrada: a posigie x (distancia no elxo horzental), © @ (Angulo do veiculo em relagio 20 eixo horizontal), © sistema de inferéncias ir ealeularo valor da variével de salda @ (Sngule da roda éo veiculo), que corresponde & direcio em que o veicule deve ser encaminhado enquanto se desloca a cade passo. A condicdo de parade & de que ele deve estar posicionado dentro da area demarcade (posigo central no eixe horizontal), em um Sngulo de aproximadamente $02 (Angulo vertical). Para simplifcagio do problema, a posi¢do y do veicule no seré considerada no célculo da inferdncia. A Figura 13 representa as vaniiveis de entrada e saida consideradas pela simulador. ipilvw devmedia,com brlariclesviewcomp forprin.aspeemp=32644 1329 sages Introd Légjca Fuzzy com Java Figura 13. Esquema das variéveis de entrada e salda consideradas pelo controlador *uzzy ‘Ao iniiar 2 simulagdo, 0 veiculo deve ser automaticamente direcionado por uma trajetéria que o conduza para a posigao final determinada pela vaga no estacionamento. O deslocamento do velculo & slmulado pelo sistema em uma sequéncia de passos, de forma que 2 cada passo 0 sistema de inferncias receba como entrada a posigio x e 0 Sngule @, © calcul 9 Angulo @ para a roda. A nova posigiio x’ e nove &ngulo da velculo @’ serdo, portanto, atualizades em funcdo do valor @ retornaco pelo controlador. A variével w é a Constante que representa a dst3ncla fia em que 0 velculo ¢ deslocado & caa passe [A Figura 14 descreve as fungdes que determinam como o velculo seré movimentado a cada pass Estas ‘equagées de deslocamento serdo utilzadas pelo simulader grfco para movimentar o veicule em sua trajeténa calcula pelo controlador. Ccabe destacar que no passo seguinte da iteracéo as variéveis x e atualizadas serdo navamente submetidas como entradas para o controlador, e um novo valor de saida @ seré calculado em cada passo Este laco de repeticdo seré executado até que a condiglo de parada seje atendide: a posigo x deve ester préxima ao ponto central, e 0 Angulo @ préximo 2 90°, ipilvw devmedia,com brlariclesviewcomp forprin.aspeemp=32644 we9 sages Introd Légjca Fuzzy com Java = pt+@ x= x+weos(¢") "=y + wsin(g') Figura 14, Equacées que descrever as fungdes de movimento do vefculo a cada passo. A interface proposta para o simulador de estacionamento © processo de construcdo e madelagem de um sistema de inferéncias fuzzy ocorre de meneira Rerativa Neste cenéiro, o sistema deve ser submetido a civersos testes @ ajustes em seus pardmetros de modelagem, até que os resultados obtidos sejam satlfatérios Uma vez construe 0 controlador fuzzy, utilza-se um ambiente de simulage que fernece uma interface para visualizar graficamente a resposta do controlador em funcio dos valores de entrada, permitinde uma melhor interpretagio dos resultades para provicenciar os ajustes nacessérios. A interface grfica para 0 amblente de simulagSo objetva reproduair todos os requistos que foram especiicados na construcso do controlador fuzzy, simulando um ambiente préximo ao real para a execugdo dos testes. Obtendo-se resultados satisfatéries, o controlador poder ent8o ser implantado definitvamente no dispositive ou software para © qual fol projetado, [A Figura 15 ilustra a interface grica proposta para o simulader, demonstrando a imagem estiizada da velcul a ser movimentado, os botées para permit incio/pausa da simulacdo, 0 botSo para rotacao do veiculo em ambas as diregSes © 2 opgéo para habiltar 0 recurso de rast de trajetdria, O botSo de rastro possibilta visualizar as diferentes trajetéras percoridas pelo velculo em sucessivas simulagées. Ademals, 0 vvelculo pode ser arrastado com © mouse para qualquer posiglo da tela, e ratacionada a partic dos botes de rotagio, para determinar a configuracSo inicial da simulacao. Esta Interface & construlda com Suing e util2a recursos simples de J8va20 para posicionamento € rotagso do veiculo No canto superior direito, um quadro apresenta a situagSo atual das variéveis envolvidas na simulagdo: a posigio do veiculo, seu Sngule de rotacdo e © Angulo da roda tpilwwwdevmedia,com brlariclesviewcomp forpriasp?eemp=32444 1529 sages Introd Légjca Fuzzy com Java Simulador Estacionamente Tie oe Figura 15, Interface gréfica para 0 slmulador de estacionamento, Construgao do Controlador Fuzzy © Controlador Fuzzy corresponde ao nécleo de inferdncias responsével por calcula 0 valor apropriade para & aida, a partir dos valores fomecidos como entrada, considerando os parimetros definides em uma base de cconhecimento fuzzy. Neste caso, 0 controlador ird determinar o angulo de roda @ em fungio da osigla xe do angulo de rotagio @ do veicul. Este ncleo de processamento deve ser independente de interface gréfcs, Ou seja, objetive-se que 0 controlador possa ser desenvolvdo, testad e ajustado de maneira a ser posterformente implantado em um sistema especico, seja ele um sistema embarcado (em um velculo auténomo), um carrinho de brinquedo ‘0u um jogo de computador, por exemplo. Se 0s citérios utllzados na modelagem permanecerem valdos, 0 controlador deveré responder da mesmes forma em quaisquer desses ambientes, Identificagao das partigdes Fuzzy © primeiro passo pera a construgao do sistema de Inferéncias & determinar as partigBes nebulosas (ou Conjunto) em que cada varidvel de entrada pode ser dvidida. Cada particdo representa um intervalo de dados em que o universe de ciscurso poderé ser aivicido, e possul um terme linguistco @ ela associada. Recorrendo ao exemplo anterior da classificagdo etéria da populacso, a variévelidace fol divicida em quatro particdes nebulosas, definidas pelos termos linguistics: erianca, adolescente, adulto @ idoso. Cada particbo possul um intervalo de cados vélide para cada faixa etéria, ipilvw devmedia,com brlariclesviewcomp forprin.aspeemp=32644 1809 sages Introd Légjca Fuzzy com Java be forma semelhante, & necessério dividir as variéveis de entrada em partigdes que representem 2 localizagaa € a rotacio do velculo, assim como o &ngulo da roda a ser calculado como saida. Esta divisao & forta de forme a representar a maneira como o entendimente humano interpreta o universo de possibiidades para cada variivel,e & determinada pelo especialista que esté analisanco o problema, Portanto, em relacdo & pasigio do velculo (posicle x), definiu-se que ele se desloca ao longo de um exo horizontal, ocende ocupar diferentes regides neste ebxo, Analisando subjetivamente o intervalo de dados, poderiamos estabelecer, @ principio, que o velculo pode estar localizado ern uma posicSo central neste eixo, (ou estar lecalzado 8 esquerda, ou 8 direita. Especficando um pouce melhor as possibiidades, podemos Inserir mals duas regises (ou particBes) @ este cendro: a posicdo centro-esquerda @ a posiclo centro- diretta, localizadas respectivamente entre as posigées central e esquerda, e central edirelta, © universe ce discurse referente & posiclo x pode ser entdo subdividido em cinco particées nebulosas: 3 ‘esquerde (LE), centro-esquerda (LC), centro (CE), centro-direita (RC) ¢ clrete (RI), Cada partico ‘representa um intervalo em que @ veiculo pode ser posicionado. Neste exemplo, assumiremos que 0 eixo horizontal possul 100 pontes no total (universo ¢e discurso) e os Intervalos para cade particdo nebulosa poderiam ser especificados conforme a Figura 16, onde a posigdo central concentra-se no entorno do pont 250. Funes de Inclusio - Posizio X on me = oe -e ore “a ; A 0 0 1% m % 0 4 SH Sw OS TS oY a 0 OD Figura 16, Pertigdes fuzzy para a varlével de entrada posicéo do velco. Observe no grifico (Figura 16) que as ungBes de pertinéncia fuzzy possuem formates triangulares ou trapezoidas, que definem o intervalo vslide para cada conjunte. O conjunto CE, por exemplo, comeca ne onto x=45 com grau de Inclusso zero, chega 3 um Spice no ponto x=50, que possul grau de incluso igual 3 um, € por fim, ne ponte x=55, retorna ao grau de Inclsio zero, Esta funo triangular, portanto, & éefinida pelos pontos (45, 50, 55). ‘Seguindo @ mesma linha de raciocinio, deve-se estabelecer as particSes para a variével Angulo do veicule {@), considerando que 0 veiculo pode estar rotacionado em um &ngulo qualquer dentro do universe de discurso de 3608, Para que o veiculo seja corretamente estacionado, ele deve estar alinhade com @ vaga de ‘estacionamento, de maneira perpendicular a0 eixo horizontal e, partante, em um &ngulo de 90°. Desta forma, 2 primeira regigo faciimente icentificavel a que representa 0 éngulo vertical do veiculo (VE), situada no entoma de 90°. A partir dela, pademos especificar as demas particdes, 8 medida que o veicvlo cestiver rotacionado um pouco mais para 2 direita ou para a esquerda. Neste caso, optou-se por considerar 0 universe de discurso no intervalo entre -90 e 270°, tatalizando 360°, para que @ conjunto vertical, corespondendo ao angulo de 902, possa ser representado no centro das demas particSes.A Figura 17 ‘usta graficamente como estas parties est8o clspostas ao longo do universo de discurso, tomando por ipilvw devmedia,com brlariclesviewcomp forprin.aspeemp=32644 m9 sages Introd Légjca Fuzzy com Java base a posigéo vertical como referénca inca, alinhaca & vage de estacionamento, Observa-se que entre as particdes as tronteiras nfo so claramente definicas, ou sea, existe uma gradacdo na transigdo entre as particbes, Vaga | I I Rotacao do veiculo (p) Figura 17. Representacéo gréfica das particées pare a variivelrotacio do veiculo (@). Desta forma, as seguintes possibildades poderiam ser consideradas para as partigbes nebulosas ¢a variével >: inferior-srelto (RB), superlor-direito (RU), vertical dielta (RV), vertical (VE), vertical 8 esquerda (LV), superior & esquerda (LU) e inferior & esquerda (LB), Os intervalos de dados esto deseritos conforme: liustrado pola Figura 18. ipilvw devmedia,com brlariclesviewcomp forprin.aspeemp=32644 1329 sages Introd Légjca Fuzzy com Java Fungées de nclisdo - Angals do Veeuto Ri wy Figura 18. ParticSes fuzzy para a varidvel de entrada ngulo do veleulo Para a variével de satda 8, que corresponde 20 Sngulo de roda, optou-se por criar sete partigdes para subdividir 0 universo de discurso, que se situa no ntervalo entre =30° 2 4309, Em termas gerais, esta varidvel define o quanto a roda deve ser girada para a direita, pare escuerda, ou mantida allnhada a0 centro, para direcionar 0 veicuo ao local desejado, A oda alinhada ao centro, no entomno do Sngulo de rotacho de 0°, & representada pela part8o Zero (ZE), As demas particbes foram definidas tomando esta por referéncia, caso a rada seja girada em maior ou menor &ngulo, postive (para a esquerds) au negative (pare a direlta) Portanto, as seguintes particBes foram especifcadas para esta variével (Figura 19): negative grande (NB), negative médio (NM), negative pequeno (NS), zero (ZE), positive pequeno (PS), positive médio (PM) e positive grande (PB). Fungoes ck Inco - Angulo da Roda a = =a Figura 19. Partigdes fuzzy para a variével de saida dngulo da rods. [A Tabela 2 resume como foram determinadas as parties nebulosas pare cada varidvel de entrada © para 2 varidvel de saida, o os respectives intervalos para as suas funcBes de pertingncia, Os valoras de cada Intervalo serdo utlizados posteriormente, no tépico que apresenta a implementago do controlador, para definir os pardmetros necessérios aos céleulos da inferéncla rtigdes Nebulosas e Rétulos ipilvw devmedia,com brlariclesviewcomp forprin.aspeemp=32644 1929 sages Introd Légjca Fuzzy com Java {cer 0,0, 10,35) | negauve ag (20, [30 -15) | Lor Contr (30, 40, 50) | nogatve Mo (28, i lass) Fe vores 67 39) eater, 5,58) ms [negative Sa 1-19, -5, 0) Right Center (80, 69, 70) Veracal (75, 99, 105) en Vertis (30, 112,135) Right (65, 80,100, 100) ort Upper (120, 150,195) [pose cs, [onan Tebow 5 295,379) ‘Tabela 1, Partigées fuz2y © intervalos wtilizados pelo sistema de inferéncias, Construgao da base de regras ‘Uma ver definides todos os conjuntos fuzzy para as varidvels de entrada e de sald, o préxime passo é definir © conjunto de regras do sistems de Inferénclas fuzzy, que correlaciona as lmpllcacdes ligias entre os Conjuntos de entrada (condigées) e 0 conjunto de saida (consequéncia) Estas regras so construidas & semelhanca de como seria © raciocnio de um condutor humano nesta situagio, Ou seja: se o veicuo estiver & esquerda da vaga, a rods deveré ser girada pare a cireita. Se 0 velculo estiveralinhado com o centro da vaga, 0 &ngulo da roda deve ser mantido, Depo, algumas regras dever ser combinadas para conclulr a léglce de Inferéncla: se 0 veiculo estiver localizado na posicSo central, mas estiver rotacionade um pouce& direita (Bngula menor que 909), entéo ro¢a deve ser glrada um pouco & esquerda (em um angulo positive), para redirecionar @ veleslo Estas regras so entdo transcritas na forma de sentencas légleas que correlacionam as partisSes definidas para as variévels de entrada com sue correspondente consequéncie logica da variével de saida Uclizando as definicdes anteriormente descritas para as particées fuzzy, 0 exemplo acima seria transcrito como: "se 0 veiculo estiverlocalizado na posicSo central (CE) e estiver rotacionado um pouco & direita, em Jngulo menor que 90° (RV), entio a rada deve ser girada um pouco em um Sngulo positive (05), para redirecianar 0 veieula™ Isto &, a regra para o controlador fuzzy sera interaretada camo: “se (posicio x é CE) € (4ngule do veiculo & RV) ento (Engule da roda ¢ 05)", ATTabela 2 cescreve uma configuracdo completa ullizada pare esta base de regras, que determina 0 comportamento do algoritme do veiculo. Observe que o ntmero de regras & resultado da combinacdo direta ‘entre 0 nimero de conjuntos fuzzy disponivels nas variéveis de entrada. Portanto, uma ver que a variével posig8o x possul cinco conjuntos, ¢ @ variével angulo do velculo w possul sete conjuntos, teremos um total de 35 regras descritas para definir cobertura de regras completa para todas as situaces possiveis. A ‘Tabela 2 deve ser lida da sequinte manera + Se (LE) © (@ é RB) entio (0 6 PS); + Se (6 LC) © (@ 6 VE) entlo (0.6 NM) ipilvw devmedia,com brlariclesviewcomp forprin.aspeemp=32644 sages Introd Légjca Fuzzy com Java Tabela 2, Base de regras para o sistema de inferéncias, combinanco as entradas para determinar 0 valor de Ccabe destacar que no modelo do simulador ocorre um retro-processamento, Ou seja, a cade iteragéo, 0 sistema de inferéncias avalia as regras descritas para a posigSo atual das variévels de entrada © ratorna um valor de saide. As variévels de entrada (posicao &ngulo do veiculo) s8o atualizadas em func do angulo da roda caleulado pelo controlador, « no passo seguinte so novamente submetidas para processamento pelo sistema de inferéncias, Por isso, durante o trajeto do veleulo, diferentes regides e regras serso ativadas, até que a condicde de parada do veleulo seja atendida [Abase de regras éinilalmente construlda 2 partir da representacéo do raciocino de um especialista, @ ceve Ser ajustada em sucessivas iteragées até que os resuttados sejam satisfatéros, Portanto, em sistemas fuzzy, & fundamental que sejam executados diversos ciclos de testes @ ajustes nos pardmelros de configuracie para cue se possa obter os resultados desejados. Observado os resultados dos testes, deve-se avalar se a base de regras esté correta © oportunamente promover ajustes no formato ou no intervalo das particdes nebulosas para as varidves de entrada e saida, Implementag&o do controlador com JFuzzyLogic © processamento dos cdlculos da inferéncia envolve dversos célculos mateméticos, que ficam a carga do 3FuzzyLogic [6], um componente open source Inteiramente escrito em Java e que implementa um Fuzzy Logie Controller (F.C) completo, baseado na especificagdo TEC 61131-7, Sua utlizagdo objetiva evitar reescrever todo um canjunta de algoritmos e modelos mateméticos complexos necessérias 20 processamente das informacSes fuzzy, adotando uma ferramenta robusta e amplamente utizada, concentrando-se apenas no assunto principal do artigo. AS cetinigdes dos parémetros do controlador fuzzy sie realizadas através de um arquivo texto no formato FG, que seré utiizado pelo 3FuzzyLogic, O arquivo FLC define as varidve's e partigBes fuzzy, além de base de regras, sendo composto pelos seguintes blocos: + Um bloco para declaracéo das varidvels de entrada e saida; + Interface fuzzification, que tradur os valores numéricos das entradas em representacées fuzzy; + Interface defuzzitication, que traduz os valores fuzzy em uma saiéa com valor numérico. | Listagem 1 apresenta o formato geral de um arquivo do tipo FLC, Cade bloco de defines do arquive FLC ser descrito nos tépleos a seguir Listagem 1. Formato geral de um arquivo FLC [roverto sioce simulator 17 Inicio do bioco de dettnictes ipilvw devmedia,com brlariclesviewcomp forprin.aspeemp=32644 2109 sages Introd Légjca Fuzzy com Java va aseur 1) botsnicSo 43s varlsvess de entracs rene_vardavel entrada: REAL; van outrst 11 oetinicio 43s varkaveis de saisa FURRTFY none_varsaved_eneraca 1) detinicio das particbes fuzzy e seus intervaos para TERN PARTZCAD_X :> (8.8, 8) (38.8, 2) (28.8, 0) DEFUZZErY none_varsavel_saica 11 detsniche das particBes fuzzy e seus intervalos para cada varksvel de sada TeaM PARTEOHD_Y == (8.8, 8) (58.8, 2) (200.8, 8) + Neriao + cag; // Retado de defunzi¢seacie (Raznto & 0 Centra de Gravidece) DEFAULT s= @; // Valor default caso nenhuna negra sea ueivace 11 Detinicao Go conjunto de regres para 0 controlador Fuzzy. Este Bloco iré descrever 11 35 convelagdes entre as partigBes da varkivel de entrade con una particSo do varssvel 1 ae e380 190 + MIN; // Mérade MIN wtilizado no processarento do operador 1sgico MNO ACT SHIN; 17 Método de ativacse ACCU: WK ff métado de aeamulagse U1 tnScto da desericho de cade vege {11 RULE 1+ 3F vorsavel_ontradan TS PARTICOL AMD variavel_entradal IS particaod THEN varsavel_saids| Definigdes do arquivo FLC (© primeira bloco co arquivo FLC éeclara as varavels de entrada (VAR_INPUT) e de saida (VAR_ OUTPUT) ue serio consideradas pelo controlador, atnbuindo-thes um nome que seré utilzado nos demais blocos do arquivo e também no cédiga Java para a passager de par&metros durante o célculo da inferBncia, No caso do simulador de estacionamento, as varidveis de entrada s8o posicao_x e angulo_veiculo @ a variével de aida é angulo_roda (Listagem 2). Lstagem 2. Declaracéo das vanévels de entrada ¢ saida no arquva FLC. Jam INPUT [1 Derive varsivets de entrade Posicaa x: REAL; angule vetcuto: REAL; VAROUIPUT {1 Define variSvess de safde argule rode: REALS ipilvw devmedia,com brlariclesviewcomp forprin.aspeemp=32644 sages Introd Légjca Fuzzy com Java (© segundo blaco (FU2ZIFY) define quais pardmetros sera consiceracos na etapa de furricacdo para cada artigo, ou seja, come 05 valores de entrada serdo trensformados em representacées fuzzy. Esta declaragio & realizada a partir das definigBes dos intervalos para os conjuntos fuzzy de cada variivel, cconforme an apresentado, Por exemplo, a variével de entrads posicae_x & composta por cinco Conjuntos fuzzy: & escuerda (LE), centro-esquerda (LC), centro (CE), centro-direita (RC) e direta (RI). Cada Conjunto possul uma fung8o de pertingncla que define seu grau de Inclusdo dentro de um Intervalo vali, Pode-se observar na Figura 11 que a funcSo de pertinéncla para © conjunte CE iniia com um valor zero no ponto x=45, chega ao dpice (com valor 1) na ponto x=50, e retoma ao valor zero no panto x=55, Portanto, 2 fungao de pertingncla triangular para este conjunto & definida pelos pontos em que a fungi possulo valor de minimo inicial, mdximo e minime final: (45; 50; 55). No arquivo FLC, © conjunto seré descrto pela Seguinte representacdo: TERM CE := (45.0, 0) (50.0, 1) (55:0, 0) [As definigdes dos conjuntos fuzzy para as variévels de entrada posicao_x e angulo_veiculo est8o descritas na Tabela 1, ¢ sua correspondente declaracéo no arqulva FLC seré realizada conforme @ Listagem 3. Listagem 3. Descricio dos intervalos para cada conjunto fuzzy considerade pelas varivels de entrada, TEAK LE 5= (2-8, 8) (2.9, 2) (8.8, 2) (5.8, 8) 5 TERN LC 29 (38.8, 0) (48.8, 1) 8.8, 8) 3 RH CE so (45.8, @) (38.8, 1) (8.8, @) TERN AC |= (50.8, 8) (68.8, 1) (78.8, 9) 5 RH AL 25 (65.8, 6) (90.8, 2) (208.0, 3) (200.2, @) TEAM WW 28 (88.8, 8) (45.8, 2) (5.8, &) 8) (28.0, 3) (62.8, 0) 5 TEAM AY 3= (65.0, 8) (67.8, 1) 08.8, 8) 5 1 (5.8, 6) (98.8, 1) (285.0, 0) 5 TEN LV := (09.8, @) (12.8, 1) (35.0, ©) TEAM UW 25 (428.0, 0) (252.8, 1) (95.8, 2) 3 8) (225.8, 1) (278.8, 8) 5 © préximo bloco (DEFUZZIFY) corresponde 5 defnigdes que sero utilzadas na etapa de defuzzificacéo, ou ‘seJa, como as informacées processadas pelo controlado rem fornecicas coma saida, Este bloco é descrito da mesma maneira como o anterior, especifcando as zy serdo traduzidas em ndmmeros precisos a represantagbes do intervalo de cada conjunto fuzzy utllzado na variével ée saida (Tabela 1), conforme a Listagem 4, Este bloco também define qual método de defurrficagSo seré utilzada para poncerar 0 valor final da inferéncia a partir das regras ativadas, Neste exemple, izamos 0 método Centro de Gravidade (C06 ~ Center of Gravity), que melhor atende a maioria das casos. Para necessidades mais especiicas, a API do IFuzzyLogic oferece outros métodes clsponivels, que podem ser consultados em sua documentagée. Listagem 4. Descrfa dos conjuntos e intervalos considerados pare a variivel de salda RH ME So (538.8) 8) (38.8) 3) (28.0, @) 5 TEIN WE = (25.8, 8) (15.8, 1) (5.8, 8) EAH NS = (28.0, 0) (5.8, 3) (0.8, 0) 5 TERN ZE $= (5.8, 8) (8.8) 1) (5.8, 0) 5 1m PS 26 (€.8, 8) (5.0, 3) (28.8, 8); G28, 8) 5.6, 1) 25.8, 8) 5 (25.8, & (28.8, 1) 8.6, 1) ¢ NneTHDD + cos; // Método de defusziticarto. Utilizande Center of Gravity DEFAULT := @; /f Valor a ser utilizago caso nenhuna regra seja ativade ipilvw devmedia,com brlariclesviewcomp forprin.aspeemp=32644 sages Introd Légjca Fuzzy com Java ‘Acquarta e tlkima etapa corresponde & definiclo das regras que representam as implicacées lgicas entre os Conjuntos fuzzy das varlévels de entrada e da varidvel de saida. Esta base de rearas representa 0 comportamenta do algoritme do controlador, e séo descritas a partir da composico epresentade pele Tabela 2. A sintaxe de declaracdo da regra segue o formato if-than: if posicae_x is LE and angule_veiculo is [RB then angulo_roda is OS. A Listagem 5 apresenta as 35 regras que complem a base de conhecimento ‘para as Inferéncias do controlador fuzzy. ‘0 utizar operadores l5gicos AND e OR, & necessério espeeiticar © método que seré utiizade para processamente das regras. # comum utlizar © método MIN para e operador AND, e o método MAX para ‘operader OR. Devem-se definir também os métodos de ativacso e de acumulacso, onde na maloria dos «2805 05 valores default que vérm disponiblizados no template do arqulvo FLC podem ser utlizados, ou seja, MIN para ativacio e MAX para acumulacio, O método de ativagio define como as partigées de entrada de uma regra ativada afetarSo 2 saida correspondente. © método de acumulagéo determina o fator de ponderacdo a ser aplicado quando multiplas regras so ativadas. Além destes, outros métodos também s80 disponiblizados pelo 2FuzzyLogic em sua documentacdo, e podem ser utlizados em necessidades mais, cespacificas de customizaczo, Listagem 5. Declaracio do mapeamento das regras para o controlador fuzzy. ND + FIN; // Méado MN utLiLzade ne pracessonento do aperador 2épico AND ACT | RIN 1 Rétade de ativacso ACCU WK; // pode de acawlacse RULE 4 + BF Poshcao_x 15 LE AIO Angulo_veLculo IS RO THEN Angulo Rods 15 95; RULE 3 5 TF Postcao_x TS (= AND Angulo_veicvlo TS AY THEN Angulo_Roda 15.14; RULE 4 + IF Posieaadx IS LE A Argule_veleulo IS VE THEN Angulo Redo 15 RULE 5 + TF Poskeao_x TS (= MO Angule_vetculo IS Lv THEN Angulo_Rogs 15 NB; RULE 6 5 IF Posteao_x 1S LE MMO Argule_velculo IS LU THEN Angulo Redo 15 NB; RULE B + IF Postcao_x 15 LC AMD Angulo_veicvlo 15 8 THEN Angulo Roda 1S PM; RULE 18 + IF Posicao_x 15 LC AND Angulo_veicvlo TS RV THEN Angulo Roda TS NS; RULE 32 + IF Posieao™x 1S LC AND Angule_veicule 1S VE THM Angulo Roda IS RULE 32 + TF Posteaoax JS (C AND Angulo_veiculo 1S LY THEN Angule-Roda 1S RULE 13 + IF Posieao_x 15 LC AND Angule_vetcule IS LU THEN Angulo Roda IS ULE 15 1 IF Postcao_x 15 CE AND Angulo_vetculo IS RB THEN Angulo Roda IS RULE 17 | TF Posicao_x 15 CE AND Angulo_veiculo IS RY. THEN Angulo Roda IS RULE 19 5 TF Posicao_x 15 CE AND Angulo.veicvlo TS LY THEN Angulo Roda TS RULE 20 + IF Posieao_x 25 CE AND Angulo_vetcule IS LU THEM Angulo Roda IS RULE 22 1 TF Posteao_x 15 RC AND Angulo_vetculo TS RO THEN Angulo Roda IS RULE 26 1 TF Posicao_x 15 RC AND Angulo_veicvlo TS RV THEN Angulo Roda TS RULE 25 + IF Posieao™x 1S RC AND Angule_veicule 1S VE TAN Angulo Roda 15 RULE 25 1 IF Posieao_x 35 Re AND Angulo_veicule 1S LY THEN Angulo Roda 1S RULE 27 + IF Posteao™x 15 RC AND Angule_vetcule 15 LU TAM Angulo Roda IS FILE 28 5 IF Posicao_x 35 AC AND Angulo_veiculo 15 AB THEN Angulo Roda 15; ULE 29 1 IF Posicao_x 15 AE AND Angulo_vescule IS RE THEN Angulo Roda IS PH: RULE 31 1 TF Posicao_x 75 AI AND Angulo_vescvlo TS RV THEN Angulo Roda TS 8; RULE 33 5 TF Postcao_x 15 AI AND Angulo_veteulo 15 WY RULE 34 5 IF Posieao™x 15 AE AND Angule_vetcule IS LU THEN Angle Reda IS P5: ipilvw devmedia,com brlariclesviewcomp forprin.aspeemp=32644 sages Introd Légjca Fuzzy com Java Para facltar a descricdo do arquivo FLC, 0 JFuzzyLogic oferece também um plugin para o Eclipse, com ‘alguns recursos muito itels 20 desenvolvedor, come: autocomplete, cédigo com sintaxe colorida, visualizaco gréfica das partigoes das variéves, etc, As instrucbes para instalacSo ¢ uso do plugin Go Eclipse isponivel no manual do 3FuzzyLogic (7) Implementag&o do controlador em Java Uma vez concluidas as definigdes descritas no arquva FLC, 2 implementacéo da classe Java para o controlador fuzzy torna-se multo simples. O primeito passo & carregar 0 arquivo FLC ¢ odter ume insténcia da classe FIS, que representa o controlador fuzzy. Esta mesma instBncia serS utlizada durante toda & simulacSo. Para ist utliza-se o métode load), especificand o local do arquivo FLC: IS Fis © #15.2ose("estacionanonto, is Opcionalmente,@ insténcia de FIS também pode ser carregada dinamicamente, a pertir do conteude com as definigdes do arquive FLC, permitinée maior Nexibilidade, uma vez que ele pode ser gerade dinamicamente pela aplicacao: Fite arquivotis = new File(Sinuladortstacionaento.class.getResource“estactonanento fis") String conteudorulveris = neu String(FtLes.readanbytes(arguivorss.t0Path())): fis = Fis.crentefrenstring(conteudosnasivorss, true)s Em cada iteraglo da simulagdo, os dados referentes 8 posicdo e angulo atuais do velculo S30 passadis para © controlador utilzanco o métado setVariable() da classe FIS. O prmeiro pardmetro do método coresponde a0 nome da variével, como declarado no arquivo FLC, € 0 Segundo ¢ 0 valor de entrada pare varidvel. Apés definir os pardmetros de entrada, deve-se chamer o método evaluate() da instncia FIS do controlador, que iré processar 0s célculos para a inferéncia, de acordo com a base de conhecimento definida no arquivo FLC. O valor calculado para a sala, correspondente ao Sngulo da roda, é obtide através do método getvariable("“Sngulo_roda”).getvalue(). ‘A passagem dos parémetros para a classe FIS e a légica pare o céleulo de inferEncia em cada passo estfo ‘encapsuladas pelo método cateulatnferencia(), da classe Controlador. Este método recebe como parimetros a posiglo e 0 Angulo atuais do velcuo, e retoma o valor do &ngulo da roca caleulado pelo controlador (Listagem 6) © cédigo completo da classe Controlader, responsével por instanciar a classe FIS e calcular a inferéncla & presentado Listagem 7. Listagem 6. Passagem de pardmetros e chamada 20 célcula de inferéncia pelo controlador FIS. ‘this. fis. setvariable("Posieas x", postea0xd: thls. (le-setVarkable( “Angulo vetcule”, angulaveteue) thts. Fisevaluate(): double anguloRoda ~ this. ¢is.getvariable( "Angulo, Rods")-eetvalee(); ipilvw devmedia,com brlariclesviewcomp forprin.aspeemp=32644 sages Introd Légjca Fuzzy com Java I> Ustagem 7. classe responsive pelo Controlador. package be.nebula.veteure: ingot java-to-Fite: Anport jova-nio.#iTe.Fites; Sngort java.util Logging Levels Anport java ut8TToggingLog8er Inport net sourceforge. 3Fuzzy Logie. #18; public class controlador ( public Controtador() { ‘snictateferenciat)s > private void Snkctatnferenctat) ( wy Fite arquiveris = new Fite(simutadortstacionaento. class. getResource“estactonanento. tis” ‘String conteusotrquvoris = now String(Fstes.resdkl2bytes(arqulvarss.toPath())); His = FIS.createfronstring(conteuiotrqulvoris, true); Systen.out.printin("Inetaness de Snterencia cannegada con sucesso") eaten (Gtception ex) ¢ Logger. getLogger(Sinulsdortstacionanants.class.gecNane())-log(Level SEVERE, "Erco 26 abrir © arqui > » public double esleslatnferencia(doble posicaok, double anguloveiculo){ ‘thie. fie. cotvardable("Posieae x", pastcaoX); this. #is.setvardable("Anguls velculo*, angulovercuiod; this. fse-evaluate()s couble angulofoda = this. fis. getvariable( Angulo Rode"). getLatestbefurzifiedvalue(): Para realizar a movimentag80 do veicuo, 6 valor do &ngule da roda retornado pelo controlador deve ser utilzado para calcular 0 nova Sngulo de rotesdo e a nova pasigo do veicule, que seré deslocado em uma distancia fixa em caéa iteracdo. Este cdlculo é realizado conforme descrito pela equacéo apresentada na Figura 14.4 Listagem 8 apresenta 0 cécigo em Java do simulador, respensvel por reposicionar rotacionar 0 veicule em func do valor retomado pela inferénca a cada passe. Listagem 8, Movimentagdo do velculo, a partir do valor retornade pelo sistema de inferéncias, srgulotoea = controlador. calculainterencia(tnis.vetculo. getPost() thts vetculo-getangtlo())s sot gaits = 20; // constante que indica a etstincts fia deslocade a cada pares this veiculo.setdngulot this.veiculo.getangulo() + angulotode); double angulo.rad = (batn.PI * this.vetculo.getangulo()) / 186; 1/ obtendo angule en radtsnos 11 ealeulando nove posicae x e y, deslocance 0 vefcuto ra distancia delta double posicank = this.vetculo.getPosx() + (delta * Math.cos(angulo_rad)); aouble posscaoy = this. vesculo.gateosv() = (delta + Math sin(angul0_r#8)); this.veleato.setPoskv(posicacx , pastes ); his, velculo.rotate(anguloveiculo); ipilvw devmedia,com brlariclesviewcomp forprin.aspeemp=32644 sages Introd Légjca Fuzzy com Java Este simples algoritme, Implementado com o componente JFuzzyLoaic,é sufciente pare que o velculo se desloque em sua trajetéria em diego a0 local pré-ceterminado, Cabe observar que toda a modelagem do algoritmo inteligente foi definida no arquivo FLC, restando ao eécigo Java apenas a passager dos pardmetros ¢ as atualizacdes ¢a Interface em funcSo cos valores calculados pelo controlador fuzzy ‘Com o controlador fuzzy implementado, pedemos utilzar a interface gréfica do simulador para executar algumas rodadas de simulago, considerando diferentes posicSes e Bnguls inciais para o velcul, Habiitanco o recurso de rastro, podemos observar que as trajetérias descritas durante as simulagbes foram satisfatoriamente encaminhacas pare a posicéo final sinalizada pelo local de estacionamento, conforme ‘lustrado na Figura 20. Simulador Estacionamente Sacetom on Figura 20. Interface grficallustrando as trajetérias do velculo em simulacées utlizando diferentes configuragdes incials. ‘Apés uma bateria de experimentos para testar o controlador através do simulader, © controlador esta pronto para se tomar parte de um sistema de controle embarcado ‘Uma interessante aplicagio future seria implementar este simulador em um modelo isco, utilzande uma placa Arduino come integrador de hardware e sensores de pesicionamento para determinar as varidvels de entrada. As mesmas definigdes para o controlagor fuzzy paderiam ser reutizadas neste caso. © exemple 6o sistema autdnome de controle Ge direglo, apolade por ldgice fuzzy, tenta elucidar o proceso de modelagem e codificago de uma solugio de avtomagée simplificeda, Solugdes similares siio mute ‘encontradas em plantas industrials, onde um controlador & projetade e um simulador & construide para testar a eficéncia ¢o controlador ainda em ambiente computacional. Uma vez homelogado © controlador em promovida para os experimentos em ambiente real, Apds @ processo de hhomologagio, ele é incorporade a um software au hardware para uso na linha de produséo. amblente simutado, ele ipilvw devmedia,com brlariclesviewcomp forprin.aspeemp=32644 m9 sages Introd Légjca Fuzzy com Java [Alguns processos de decisio so préprios do raclocinlo humano, normalmente entendldos pela maloria das pessoas como impossivels de serem absorvidos por um proceso automético, No¢8o valida, porém supereda, pois hd algum tempo a légica fuzzy j6 existe para contrariar este entendimento, Assim, alguns processos de decisio bascados em incerteza podem, através da légica fuzzy, ser modelacas e aplicados a software e hardware de modo a serem automatzados. A automacdo desejada, seja ela pars um sistema corporativo, seja ela para um sistema de controle de utomacdo industrial, deve ser elaborada por um projetista (desenvolveder) de forma a guiar o especialsts na cefinigfo dos conjuntos fuzzy e das regras. Uma ver munido destes insumes, o projetista pode implementar a légica em uma linguagem come Java utilzando ume biblloteca como a 2FuzzyLogte. {A partir dos exemplos praticos apresentados aqui, pode-se observar que é possivel construlrsolucdes com I6aice nebulosa mesmo com pouco conhecimente matemético nesta area, Inimeras necessidades podem ser solucionadas desta forma, basta que o projetista compreenda que algurmas cecisdes humanas S80 suscetiveis de serem automatizadas, Além disso, técricas de inteligéncia computacional baseadas em légice fuzzy podem ser utlizadas em diversas situagdes na érea de computacdo, especialmente em modelos que possuam alto grau de incerteza e impreciséo. Refergncias [1] Livro Fuzzy fagie: @ practical approach, MN, F.M., & Thro, €. (2014) Fuzzy logic: 2 practical approach. Academic Press. [2] Exemplos de sistemas embarcados extraides do Livro Fuzzy logic for embedded systems applications. brahim, A, (2003),Fuzzy log for embedded systems applications, Newnes, Links [2) Artigo Real-Life Applications of Fuzzy Logie. http://wow.hindawi.com/journals/afs/2013/581879/ [4] Capitulo do livro com o exemple ce sistema de Ri hetp://ptgmedia.pearsoncmg.com/Images/0135705991/samplechapter 10135705991,pat [5] Artigo sobre ligica fuzzy, que menciona 9 cléssice problema éo estacionamento de um veicul, http://www2.ica.ele,pue-ro.br/Downloads/41/LN-Sistemas%20FuZzy. pat {6} Pégina do componente 3FuzzyLogic. http://fuzzylogic sourceforge.net/htmi/ingex. html [7] Manual 6o componente JFuzzyLogie, com instrugBes sobre 0 plugin para Eclipse, http://tuzzylogie.sourceforge.net/htmi/manual.htmlplugin & ipilvw devmedia,com brlariclesviewcomp forprin.aspeemp=32644 sages Introd Légjca Fuzzy com Java ipilvw devmedia,com brlariclesviewcomp forprin.aspeemp=32644

Você também pode gostar