fuzblock paradigmas de linguagens computacionais bruno edson flavio gondim marcelo rodrigues pablo...
TRANSCRIPT
FuzBlockParadigmas de Linguagens
Computacionais
Bruno EdsonFlavio Gondim
Marcelo RodriguesPablo 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
• java.fuzzy.* ¹ Modelagem de:
• 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
Blocosblock Nega {
varin double entra;varout double sai = - entra;
}Block = [[ Package Imports "block"
Identifier "{" Declaration "}" ]].
Pacotes e Importaçõespackage (ú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 "." "*" ";" ]].
TiposTipos Primitivos: boolean true, false int 10, 5 double 1.3, 0.45
Semelhantes aos tipos correspondentes em outras linguagens de programação
TiposTipos Compostos: set ramp(t, 10, 20) Block b.frio
Sets representam conjuntos difusos.
TiposType = [[ "int" ]] | [[ "double" ]] | [[ “boolean”
]] | [[ "set" ]] | [[ Identifier ]].
Declarações (variáveis)(entrada, saída e restritas)Declaration = [[ Single-Declaration ]] | [[ Declaration Single-
Declaration ]].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õesExpression = [[ "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 LexicalNumeral = 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:
• value, defuz Conjuntos:
• 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ãoFunction = [[ "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 ]].
Exemplopackage 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 Externospackage dados;import meteorologia;block Frio{ varin int temp; var Temp blocoTemp; blocoTemp.temp = temp; varout double frio = blocoTemp.ehFrio;}
Conclusões Facilidade de Modelagem
• Visualização• Utilização
Integração com Java (API), sintaxe Conceitos PLC, associado à SI.
Referências BibliográficasMOSSES, 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.