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

Post on 07-Apr-2016

216 views 2 download

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

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.