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.