FuzBlock
Projeto de Compiladores
Bruno Edson
Pablo de Santana
FuzBlock - Roteiro








Introdução
Descrição
Modelando um Sistema Fuzzy
API Java
Análises
Geração de código
Exemplos
Conclusões
FuzBlock - Introdução

API para blocos fuzzy

O que é um bloco fuzzy?


Entradas, saídas, lógica fuzzy, grau de
pertinência
Motivação




Projeto de PLC
Lógica Fuzzy (SI)
JEOPS => API java
Compiladores
FuzBlock - Descrição


Linguagem descritiva para modelagem
de blocos fuzzy
Criação de uma API Java


fuzblock.*;
Modelagem de:

Funções de pertinência, conjuntos,
variáveis, operações, (de)fuzzificação e
inferência
FuzBlock - Descrição



Sintaxe própria e simples, semelhante
à Java
Compilador para java
Utilização:


Educacional – aprendizagem da Lógica
Fuzzy e IA
Sistemas de controle com IA, sensores, e
outras aplicações
Modelando um Sistema Fuzzy






Blocos
Pacotes
Variáveis (entrada, saída, restritas)
Tipos
Operações
Funções
Blocos
block Nega {
varin float entra;
varout float sai = - entra;
}
 Obs.: entrada e saída.
Pacotes


package
import
(único)
(vários)
Variáveis - Declarações

varin (acesso de entrada ao bloco)


var (acesso restrito ao bloco)


definida antes de var e varout
definida antes de varout, depois de varin
varout (acesso de saída ao bloco)

definida depois de var e varin
Tipos




integer
float
set
FuzzyBlock
10, 5
1.3, 0.45
ramp(t, 10, 20)
b.frio
Operações




not
or
and
xor
Funções

Valores




value () – retorna o seu valor considerado
defuz () – retorna o valor de defuzzificação *
decide () – retorna a variável de decisão ou a
decisão
Conjuntos (set):




ramp (e, v, v)
sine (e, v, v)
trap (e, v, v, v, v)
bell (e, v, v, v, v)
* não implementado
API java

Pacotes:

fuzblock (raiz)
 util (classes fuzzy)
 samples (exemplos)
 compiler (compilador)
 parser
 syntaxtree
 visitor
 util
API Java - interfaces





IFuzzy
IValue
ISet
IBlock
IFunction
API Java – classes de funções

SetFunction (abstract)








SineFunction
RampFunction
BellFunction
TrapFunction
NotFunction
AndFunction
OrFunction
XorFunction
API java – outras classes

Úteis:



FuzzyValue
FuzzyConstant
Abstratas


FuzzyBlock
FuzzyFunction
Exemplos

Favor


Estacao


Entrada do sistema (variável favorável)
Saída do sistema (estação)
TipoEstacao

Conjunto de ligação
Favor


Conjunto de entrada (ENOS, ZCIT)
Desfavorável, neutro e favorável
Favor
package fuzblock.samples;
block Favor {
varin integer entrada;
varout set desfavoravel = bell(entrada, -1, 25, 25,
51);
varout set neutro = bell(entrada, 24, 50, 50, 76);
varout set favoravel = bell(entrada, 49, 75, 75, 101);
}
Estacao


Conjunto de saída (defuzzificação)
MS, S, N, C, MC
Estacao - regras
Estacao
block Estacao {
varin Favor enos;
varin Favor zcit;
var float ms_value = value(enos.desfavoravel and zcit.desfavoravel);
var float s_value = value((enos.desfavoravel and zcit.neutro) or
(enos.neutro and zcit.desfavoravel));
var float n_value = value(((enos.desfavoravel and zcit.favoravel) or
(enos.neutro and zcit.neutro)) or
(enos.favoravel and zcit.desfavoravel));
var float c_value = value((zcit.favoravel and enos.neutro) or
(zcit.neutro and enos.favoravel));
var float mc_value = value(enos.favoravel and zcit.favoravel);
varout set ms = trap(20 - (10 * ms_value), -1, 0, 10, 20);
varout set s = trap(10 + (10 * s_value), 10, 20, 30, 40);
varout set n = trap(30 + (10 * n_value), 30, 40, 60, 70);
varout set c = trap(60 + (10 * c_value), 60, 70, 80, 90);
varout set mc = trap(80 + (10 * mc_value), 80, 90, 100, 101); }
TipoEstacao



Ligação entre os blocos
Entradas e saídas
Dois objetos Favor (enos e zcit)
ligados ao objeto Estacao
TipoEstacao
block TipoEstacao {
varin integer entradaEnos;
varin integer entradaZcit;
var Favor enosF;
var Favor zcitF;
enosF.entrada = entradaEnos;
zcitF.entrada = entradaZcit;
var Estacao estacao;
estacao.enos = enosF;
estacao.zcit = zcitF;
varout float percentual = defuz(estacao);
varout string tipo = decide(estacao);
varout float valor = value(estacao);
}
Análises

Sintática


Gramática, posições
Contextual

Escopo, tipos
Análises
+------------------------------------------------------------------------------------+
| Bruno Edson M. de Albuquerque Filho ([email protected])|
| Pablo de Santana Barbosa
([email protected])
|
+------------------------------------------------------------------------------------+
Fuzzy Parser Version 1.4: Lendo do arquivo exemplo1.fuz . . .
Fuzzy Parser Version 1.4:
Parser do programa exemplo1.fuz executado em 187 ms.
Inicio do parser em 47 ms.
Tempo do parser foi 140 ms.
Geração de código

Dificuldades



Tempo, projetos, disciplinas paralelas.
Estrutura básica
Código de acordo com o exemplo
Estrutura básica



Extends FuzzyBlock
Cria métodos de acesso aos dados
private (restritos) ou public (livres)
Implementa setRelationships() e
construtores
FuzzyBlock




String name, IFuzzy[] entries, results
Três construtores
get e set todos e específicos
decide, value, defuz *
Favor (setRelationships())
public void setRelationships() {
IFuzzy[] _opers1 = new IFuzzy[4];
_opers1[0] = new FuzzyConstant(-1);
_opers1[1] = new FuzzyConstant(25);
_opers1[2] = new FuzzyConstant(25);
_opers1[3] = new FuzzyConstant(51);
IFuzzy[] _opers2 = new IFuzzy[4];
_opers2[0] = new FuzzyConstant(24);
_opers2[1] = new FuzzyConstant(50);
_opers2[2] = new FuzzyConstant(50);
_opers2[3] = new FuzzyConstant(76);
IFuzzy[] _opers3 = new IFuzzy[4];
_opers3[0] = new FuzzyConstant(49);
_opers3[1] = new FuzzyConstant(75);
_opers3[2] = new FuzzyConstant(75);
_opers3[3] = new FuzzyConstant(101);
this.setDesfavoravel(new
BellFunction("desfavoravel", _opers1,
this.entrada()));
this.setNeutro(new BellFunction("neutro",
_opers2, this.entrada()));
this.setFavoravel(new
BellFunction("favoravel", _opers3,
this.entrada())); }
block Favor {
varin integer entrada;
varout set desfavoravel =
bell(entrada, -1, 25, 25,
51);
varout set neutro =
bell(entrada, 24, 50, 50,
76);
varout set favoravel =
bell(entrada, 49, 75, 75,
101);
}
Conclusões

Objetivos atingidos



Análise sintática e contextual
API java
Dificuldades



Geração de código (tempo)
Simulador (GUI)
defuzzificação
Download

block Favor