FuzBlock
Paradigmas de Linguagens
Computacionais
Bruno Edson
Flavio Gondim
Marcelo Rodrigues
Pablo de Santana
Conteúdo






Apresentação
Características da Linguagem
Descrição Informal / Sintaxe Abstrata /
Semântica
Funções Padrão
Exemplos (Forma Gráfica)
Conclusões
FuzBlock

Linguagem descritiva para modelagem
de blocos fuzzy
Criação de uma API Java

Modelagem de:

• java.fuzzy.* ¹
• Funções de pertinência, conjuntos, variáveis,
operações, qualificadores¹, (de)fuzzificação,
inferência e BC (regras e variáveis
lingüísticas¹)
1 - futuramente
FuzBlock
FuzBlock




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
Geração de relatórios gráficos ¹
Características Básicas de
FuzBlock







Tipos (primitivos, conjuntos e blocos)
Memória (bloco – atribuição dinâmica)
Associações (Bindings)
Abstrações (funções)
Encapsulamento (blocos, pacotes)
Valores (primitivos, variáveis fuzzy)
Escopo (monolítico, global)
Modelando um Sistema Fuzzy







Blocos
Pacotes e Importações
Tipos
Declarações
Comandos de Atribuição
Expressões
Funções Padrão
Blocos
block Nega {
varin double entra;
varout double sai = - entra;
}
Block = [[ Package Imports "block"
Identifier "{" Declaration "}" ]].
Pacotes e Importações
package
(único)
import
(vários)
Part-Identifier = [[ Identifier ]] | [[ Part-Identifier "."
Identifier ]].
Package = [[ "package" Part-Identifier ";" ]] | [[ ]].
Imports = [[ Import ]] | [[ Imports Import ]] | [[ ]].
Import = [[ "import" Part-Identifier ";" ]] | [[ "import"
Part-Identifier "." "*" ";" ]].
Tipos
Tipos Primitivos:
 boolean
true, false
 int
10, 5
 double
1.3, 0.45
Semelhantes aos tipos correspondentes
em outras linguagens de programação
Tipos
Tipos Compostos:
 set
ramp(t, 10, 20)
 Block
b.frio
Sets representam conjuntos difusos.
Tipos
Type = [[ "int" ]] | [[ "double" ]] | [[ “boolean”
]] | [[ "set" ]] | [[ Identifier ]].
Declarações (variáveis)
(entrada, saída e restritas)
Declaration = [[ Single-Declaration ]] | [[ Declaration SingleDeclaration ]].
Single-Declaration = [[ In-Declaration ]] | [[ Out-Declaration ]] | [[
Var-Declaration ]] | [[ Attribution-Command ]].
In-Declaration = [[ "varin" Type Identifier ";" ]].
Out-Declaration = [[ "varout" Type Identifier Attribution-Auxiliar ";" ]].
Var-Declaration = [[ "var" Type Identifier Attribution-Auxiliar ";" ]].
Attribution-Auxiliar = [[ "=" Expression ]] | [[ ]].
Comandos de Atribuição


Attribution-Command = [[ Part-Identifier
"=" Expression ";" ]].
blocoTemp.temp = temp;
Expressões
Expression = [[ "true" ]] | [[ "false" ]]
| [[ Numeral ]] | [[ Decimal ]]
| [[ Identifier ]] | [[ Part-Identifier ]]
| [[ "(" Expression ")" ]]
| [[ Expression Binary-Operator Expression ]]
| [[ Unary-Operator Expression ]]
| [[ Function ]].
Binary-Operator = [[ "+" ]] | [[ "-" ]] | [[ "*" ]] | [[ "xor" ]]
| [[ "and" ]] | [[ "or" ]] | [[ "==" ]].
Unary-Operator = [[ "not" ]] | [[ "-" ]].
Operadores




not
or
and
xor




+
*
==
Operações sobre Conjuntos
Difusos [1/2]

or , and , xor , not
Seja μd (x) = função de pertinência de x no conjunto difuso.
• set d1 or set d2 = µd1(x) U µd2(x) = max [ μd1(x), μd2(x) ]
• set d1 and set d2 = µd1(x) ∩ µd2(x) = min [ μd1(x), μd2(x) ]
• set d1 xor set d2 = abs [ μd1(x) - μd2(x) ]
• set not set d = abs [ 1 – μd(x) ]
Operações sobre Conjuntos
Difusos [2/2]
Aritmética Difusa

- , +, *
Sejam A e B números difusos, tal que a avaliação seja.
Para toda expressão Exp e set A = f(Exp, ...) e set B =
f(Exp, ...)
• value(A - B ) = max [0, value(A) – value (B)]
• value(A + B) = min[1, value(A) – value(B)]
• value(A * B) = value(A) * value(B)
Sintaxe Lexical
Numeral = digit | Numeral digit.
Decimal = Numeral | Numeral point |
Numeral point aux | point aux .
aux = digit | digit aux .
point = ".".
digit = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 .
Funções Padrão

Valores:

Conjuntos:
• value, defuz
• ramp, sine (1ª ordem)
• trap, bell (2ª ordem)
trap(E, V1, V2, V3, V4) = ramp(E, V1, V2) and ramp(E, V4, V3);
bell(E, V1, V2, V3, V4) = sine(E, V1, V2) and sine(E, V4, V3);
Funções Padrão
Function = [[ "value" "(" Expression ")" ]]
| [[ "defuz" "(" Expression ")" ]]
| [[ "ramp" "(" Expression "," Value "," Value ")" ]]
| [[ "sine" "(" Expression "," Value "," Value ")" ]]
| [[ "trap" "(" Expression "," Value "," Value "," Value ","
Value ")" ]]
| [[ "bell" "(" Expression "," Value "," Value "," Value ","
Value ")" ]].
Value = [[ Numeral ]] | [[ Decimal ]].
Exemplo
package meteorologia;
block Temp{
varin int temp;
var set frio = ramp(temp, 10, 0);
var set quente = ramp(temp, 30, 40);
var set normal = not (frio or quente);
varout double ehFrio = value(frio);
varout double ehQuente = value(quente);
varout double ehNormal = value(normal);
}
Forma Gráfica
Forma Gráfica
Interconexão – Blocos Internos
e Externos
package dados;
import meteorologia;
block Frio{
varin int temp;
var Temp blocoTemp;
blocoTemp.temp = temp;
varout double frio = blocoTemp.ehFrio;
}
Conclusões

Facilidade de Modelagem

Integração com Java (API), sintaxe
Conceitos PLC, associado à SI.

• Visualização
• Utilização
Referências Bibliográficas
MOSSES, Peter D. Action Semantics.
Cambridge Tracts in Theoretical,
Computer Science 26. Press Syndicate
of the University of Cambridge. New
York – United States of America, 1992.
MOURA, Hermano P. Action Semantics of
Specimen. Department of Informatics,
Federal University of Pernambuco.
Recife - Brasil, 1996.
Download

FuzBlock