FuzBlock Paradigmas de Linguagens Computacionais Bruno Edson Flavio Gondim Marcelo Rodrigues Pablo...

27
FuzBlock Paradigmas de Linguagens Computacionais Bruno Edson Flavio Gondim Marcelo Rodrigues Pablo de Santana

Transcript of FuzBlock Paradigmas de Linguagens Computacionais Bruno Edson Flavio Gondim Marcelo Rodrigues Pablo...

Page 1: FuzBlock Paradigmas de Linguagens Computacionais Bruno Edson Flavio Gondim Marcelo Rodrigues Pablo de Santana.

FuzBlockParadigmas de Linguagens

Computacionais

Bruno EdsonFlavio Gondim

Marcelo RodriguesPablo de Santana

Page 2: 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

Page 3: FuzBlock Paradigmas de Linguagens Computacionais Bruno Edson Flavio Gondim Marcelo Rodrigues Pablo de Santana.

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

Page 4: FuzBlock Paradigmas de Linguagens Computacionais Bruno Edson Flavio Gondim Marcelo Rodrigues Pablo de Santana.

FuzBlock

Page 5: FuzBlock Paradigmas de Linguagens Computacionais Bruno Edson Flavio Gondim Marcelo Rodrigues Pablo de Santana.

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 ¹

Page 6: FuzBlock Paradigmas de Linguagens Computacionais Bruno Edson Flavio Gondim Marcelo Rodrigues Pablo de Santana.

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)

Page 7: FuzBlock Paradigmas de Linguagens Computacionais Bruno Edson Flavio Gondim Marcelo Rodrigues Pablo de Santana.

Modelando um Sistema Fuzzy Blocos Pacotes e Importações Tipos Declarações Comandos de Atribuição Expressões Funções Padrão

Page 8: FuzBlock Paradigmas de Linguagens Computacionais Bruno Edson Flavio Gondim Marcelo Rodrigues Pablo de Santana.

Blocosblock Nega {

varin double entra;varout double sai = - entra;

}Block = [[ Package Imports "block"

Identifier "{" Declaration "}" ]].

Page 9: FuzBlock Paradigmas de Linguagens Computacionais Bruno Edson Flavio Gondim Marcelo Rodrigues Pablo de Santana.

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 "." "*" ";" ]].

Page 10: FuzBlock Paradigmas de Linguagens Computacionais Bruno Edson Flavio Gondim Marcelo Rodrigues Pablo de Santana.

TiposTipos Primitivos: boolean true, false int 10, 5 double 1.3, 0.45

Semelhantes aos tipos correspondentes em outras linguagens de programação

Page 11: FuzBlock Paradigmas de Linguagens Computacionais Bruno Edson Flavio Gondim Marcelo Rodrigues Pablo de Santana.

TiposTipos Compostos: set ramp(t, 10, 20) Block b.frio

Sets representam conjuntos difusos.

Page 12: FuzBlock Paradigmas de Linguagens Computacionais Bruno Edson Flavio Gondim Marcelo Rodrigues Pablo de Santana.

TiposType = [[ "int" ]] | [[ "double" ]] | [[ “boolean”

]] | [[ "set" ]] | [[ Identifier ]].

Page 13: FuzBlock Paradigmas de Linguagens Computacionais Bruno Edson Flavio Gondim Marcelo Rodrigues Pablo de Santana.

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 ]] | [[ ]].

Page 14: FuzBlock Paradigmas de Linguagens Computacionais Bruno Edson Flavio Gondim Marcelo Rodrigues Pablo de Santana.

Comandos de Atribuição Attribution-Command = [[ Part-Identifier

"=" Expression ";" ]]. blocoTemp.temp = temp;

Page 15: FuzBlock Paradigmas de Linguagens Computacionais Bruno Edson Flavio Gondim Marcelo Rodrigues Pablo de Santana.

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" ]] | [[ "-" ]].

Page 16: FuzBlock Paradigmas de Linguagens Computacionais Bruno Edson Flavio Gondim Marcelo Rodrigues Pablo de Santana.

Operadores not or and xor

- + * ==

Page 17: FuzBlock Paradigmas de Linguagens Computacionais Bruno Edson Flavio Gondim Marcelo Rodrigues Pablo de Santana.

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) ]

Page 18: FuzBlock Paradigmas de Linguagens Computacionais Bruno Edson Flavio Gondim Marcelo Rodrigues Pablo de Santana.

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)

Page 19: FuzBlock Paradigmas de Linguagens Computacionais Bruno Edson Flavio Gondim Marcelo Rodrigues Pablo de Santana.

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 .

Page 20: FuzBlock Paradigmas de Linguagens Computacionais Bruno Edson Flavio Gondim Marcelo Rodrigues Pablo de Santana.

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);

Page 21: FuzBlock Paradigmas de Linguagens Computacionais Bruno Edson Flavio Gondim Marcelo Rodrigues Pablo de Santana.

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 ]].

Page 22: FuzBlock Paradigmas de Linguagens Computacionais Bruno Edson Flavio Gondim Marcelo Rodrigues Pablo de Santana.

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);}

Page 23: FuzBlock Paradigmas de Linguagens Computacionais Bruno Edson Flavio Gondim Marcelo Rodrigues Pablo de Santana.

Forma Gráfica

Page 24: FuzBlock Paradigmas de Linguagens Computacionais Bruno Edson Flavio Gondim Marcelo Rodrigues Pablo de Santana.

Forma Gráfica

Page 25: FuzBlock Paradigmas de Linguagens Computacionais Bruno Edson Flavio Gondim Marcelo Rodrigues Pablo de Santana.

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;}

Page 26: FuzBlock Paradigmas de Linguagens Computacionais Bruno Edson Flavio Gondim Marcelo Rodrigues Pablo de Santana.

Conclusões Facilidade de Modelagem

• Visualização• Utilização

Integração com Java (API), sintaxe Conceitos PLC, associado à SI.

Page 27: FuzBlock Paradigmas de Linguagens Computacionais Bruno Edson Flavio Gondim Marcelo Rodrigues Pablo de Santana.

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.