As bibliotecas FuzzyLite para controle de lógica difusa referem-se a fuzzylite
(C++), pyfuzzylite
(Python) e jfuzzylite
(Java).
O objetivo das Bibliotecas FuzzyLite é projetar facilmente e operar com eficiência controladores lógicos fuzzy seguindo um modelo de programação orientado a objetos com dependência mínima de bibliotecas externas.
fuzzylite
tem licença dupla sob a GNU GPL 3.0 e sob uma licença proprietária para fins comerciais .
Você é fortemente encorajado a apoiar o desenvolvimento das Bibliotecas FuzzyLite adquirindo uma licença do QtFuzzyLite
.
QtFuzzyLite
é a melhor interface gráfica de usuário disponível para projetar e operar facilmente controladores lógicos fuzzy em tempo real. Disponível para Windows, Mac e Linux, seu objetivo é acelerar significativamente o design de seus controladores lógicos difusos, ao mesmo tempo que fornece uma interface de usuário muito útil , funcional e bonita . Por favor, baixe e confira gratuitamente em fuzzylite.com/downloads.
Visite fuzzylite.com/documentation
(6) Controladores : Mamdani, Takagi-Sugeno, Larsen, Tsukamoto, Tsukamoto Inverso, Híbrido
(25) Termos linguísticos : (5) Básico : Triângulo, Trapézio, Retângulo, Discreto, SemiElipse. (8) Estendido : Bell, Cosseno, Gaussiano, GaussianProduct, PiShape, SigmoidDifference, SigmoidProduct, Spike. (7) Arestas : Arco, Binário, Côncavo, Rampa, Sigmóide, SShape, ZShape. (3) Funções : Constante, Linear, Função. (2) Especial : Agregado, Ativado.
(7) Métodos de ativação : Geral, Proporcional, Limite, Primeiro, Último, Mais Baixo, Mais Alto.
(9) Conjunção e Implicação (Normas T) : Mínimo, AlgebraicProduct, BoundedDifference, DrasticProduct, EinsteinProduct, HamacherProduct, NilpotentMinimum, LambdaNorm, FunctionNorm.
(11) Disjunção e agregação (normas S) : Máximo, AlgebraicSum, BoundedSum, DrasticSum, EinsteinSum, HamacherSum, NilpotentMaximum, NormalizedSum, UnboundedSum, LambdaNorm, FunctionNorm.
(7) Defuzzificadores : (5) Integral : Centróide, Bissetriz, SmallestOfMaximum, LargestOfMaximum, MeanOfMaximum. (2) Ponderado : WeightedAverage, WeightedSum.
(7) Hedges : Qualquer, Não, Extremamente, Raramente, Um pouco, Muito, Função.
(3) Importadores : Linguagem FuzzyLite fll
, Sistema de Inferência Fuzzy fis
, Linguagem de Controle Fuzzy fcl
.
(7) Exportadores : C++
, Java
, FuzzyLite Language fll
, FuzzyLite Dataset fld
, script R
, Fuzzy Inference System fis
, Fuzzy Control Language fcl
.
(30+) Exemplos de controladores Mamdani, Takagi-Sugeno, Tsukamoto e Hybrid de fuzzylite
, Octave e Matlab, cada um incluído nos seguintes formatos: C++
, Java
, fll
, fld
, R
, fis
e fcl
.
# File: ObstacleAvoidance.fll
Engine : ObstacleAvoidance
InputVariable : obstacle
enabled : true
range : 0.000 1.000
lock-range : false
term : left Ramp 1.000 0.000
term : right Ramp 0.000 1.000
OutputVariable : mSteer
enabled : true
range : 0.000 1.000
lock-range : false
aggregation : Maximum
defuzzifier : Centroid 100
default : nan
lock-previous : false
term : left Ramp 1.000 0.000
term : right Ramp 0.000 1.000
RuleBlock : mamdani
enabled : true
conjunction : none
disjunction : none
implication : AlgebraicProduct
activation : General
rule : if obstacle is left then mSteer is right
rule : if obstacle is right then mSteer is left
// File: ObstacleAvoidance.cpp
# include < fl/Headers.h >
fl::Engine* engine = fl::FllImporter().fromFile( " ObstacleAvoidance.fll " );
// File: ObstacleAvoidance.cpp
# include < fl/Headers.h >
using namespace fuzzylite ;
Engine* engine = new Engine;
engine-> setName ( " ObstacleAvoidance " );
engine-> setDescription ( " " );
InputVariable* obstacle = new InputVariable;
obstacle-> setName ( " obstacle " );
obstacle-> setDescription ( " " );
obstacle-> setEnabled ( true );
obstacle-> setRange ( 0.000 , 1.000 );
obstacle-> setLockValueInRange ( false );
obstacle-> addTerm ( new Ramp( " left " , 1.000 , 0.000 ));
obstacle-> addTerm ( new Ramp( " right " , 0.000 , 1.000 ));
engine-> addInputVariable (obstacle);
OutputVariable* mSteer = new OutputVariable;
mSteer -> setName ( " mSteer " );
mSteer -> setDescription ( " " );
mSteer -> setEnabled ( true );
mSteer -> setRange ( 0.000 , 1.000 );
mSteer -> setLockValueInRange ( false );
mSteer -> setAggregation ( new Maximum);
mSteer -> setDefuzzifier ( new Centroid( 100 ));
mSteer -> setDefaultValue (fl::nan);
mSteer -> setLockPreviousValue ( false );
mSteer -> addTerm ( new Ramp( " left " , 1.000 , 0.000 ));
mSteer -> addTerm ( new Ramp( " right " , 0.000 , 1.000 ));
engine-> addOutputVariable ( mSteer );
RuleBlock* mamdani = new RuleBlock;
mamdani-> setName ( " mamdani " );
mamdani-> setDescription ( " " );
mamdani-> setEnabled ( true );
mamdani-> setConjunction (fl::null);
mamdani-> setDisjunction (fl::null);
mamdani-> setImplication ( new AlgebraicProduct);
mamdani-> setActivation ( new General);
mamdani-> addRule (Rule::parse( " if obstacle is left then mSteer is right " , engine));
mamdani-> addRule (Rule::parse( " if obstacle is right then mSteer is left " , engine));
engine-> addRuleBlock (mamdani);
using namespace fuzzylite ;
std::string status;
if ( not engine-> isReady (&status))
throw Exception( " [engine error] engine is not ready: n " + status, FL_AT);
InputVariable* obstacle = engine-> getInputVariable ( " obstacle " );
OutputVariable* steer = engine-> getOutputVariable ( " steer " );
for ( int i = 0 ; i <= 50 ; ++i){
scalar location = obstacle-> getMinimum () + i * (obstacle-> range () / 50 );
obstacle-> setValue (location);
engine-> process ();
FL_LOG ( " obstacle.input = " << Op::str (location) <<
" => " << " steer.output = " << Op::str (steer-> getValue ()));
}
Depois de ter um mecanismo escrito em C++, você pode compilá-lo para criar um arquivo executável vinculado à biblioteca fuzzylite
. A vinculação pode ser estática ou dinâmica. Basicamente, as diferenças entre vinculação estática e dinâmica são as seguintes.
A vinculação estática inclui a biblioteca fuzzylite
em seu arquivo executável, aumentando assim seu tamanho, mas o executável não precisa mais ter acesso aos arquivos da biblioteca fuzzylite
.
A vinculação dinâmica não inclui a biblioteca fuzzylite
em seu arquivo executável, reduzindo assim seu tamanho, mas o executável precisa ter acesso ao arquivo da biblioteca compartilhada fuzzylite
. Ao usar a vinculação dinâmica, certifique-se de que os arquivos da biblioteca compartilhada estejam no mesmo diretório do executável ou sejam acessíveis por meio de variáveis ambientais:
rem Windows:
set PATH = " pathtofuzzylitereleasebin;%PATH% "
# Unix:
export LD_LIBRARY_PATH= " /path/to/fuzzylite/release/bin/: $LD_LIBRARY_PATH "
Os comandos para compilar seu motor no Windows são os seguintes:
C++11 (padrão)
rem static linking:
cl.exe ObstacleAvoidance.cpp fuzzylite - static .lib / Ipath / to / fuzzylite / EHsc / MD
rem dynamic linking:
cl.exe ObstacleAvoidance.cpp fuzzylite.lib / Ipath / to / fuzzylite / DFL_IMPORT_LIBRARY / EHsc / MD
C++98
rem static linking:
cl.exe ObstacleAvoidance.cpp fuzzylite - static .lib / Ipath / to / fuzzylite / DFL_CPP98 = ON / EHsc / MD
rem dynamic linking:
cl.exe ObstacleAvoidance.cpp fuzzylite.lib / Ipath / to / fuzzylite / DFL_IMPORT_LIBRARY / DFL_CPP98 = ON / EHsc / MD
Os comandos para compilar seu motor em Unix são os seguintes:
C++11 (padrão)
# static linking
g++ ObstacleAvoidance.cpp -o ObstacleAvoidance -I/path/to/fuzzylite -L/path/to/fuzzylite/release/bin -lfuzzylite-static --std=c++11
# dynamic linking
g++ ObstacleAvoidance.cpp -o ObstacleAvoidance -I/path/to/fuzzylite -L/path/to/fuzzylite/release/bin -lfuzzylite
C++98
# static linking
g++ ObstacleAvoidance.cpp -o ObstacleAvoidance -I/path/to/fuzzylite -L/path/to/fuzzylite/release/bin -lfuzzylite-static -DFL_CPP98=ON
# dynamic linking
g++ ObstacleAvoidance.cpp -o ObstacleAvoidance -I/path/to/fuzzylite -L/path/to/fuzzylite/release/bin -lfuzzylite -DFL_CPP98=ON
Alternativamente, você pode usar o CMake para construir seu projeto vinculando ao fuzzylite
. Por favor, consulte o exemplo de aplicação disponível em exemplos/aplicação.
Você pode construir a biblioteca fuzzylite
a partir do código-fonte usando CMake
(cmake.org).
Verifique .github/workflows
para obter detalhes.
cmake -B build/ -G " Unix Makefiles " .
cmake --build build/ --parallel
ctest --test-dir build/
cmake -B build/ -G " NMake Makefiles " .
cmake --build build/
ctest --test-dir build/
As seguintes opções de construção disponíveis:
-DFL_USE_FLOAT=ON
cria os binários usando o tipo de dados fl::scalar
como float
em vez de double
. Por padrão, os binários são construídos usando -DFL_USE_FLOAT=OFF
. Se fuzzylite
for construído com -DFL_USE_FLOAT=ON
, então os aplicativos vinculados ao fuzzylite
também precisarão especificar esse sinalizador de compilação.
-DFL_CPP98=ON
cria binários usando recursos C++98
em vez de C++11
. Por padrão, os binários são construídos usando -DFL_CPP98=OFF
. Se você usar C++98
, não poderá avaliar o desempenho do seu mecanismo usando a classe Benchmark
e não poderá executar nenhum dos testes.
-DFL_BACKTRACE=OFF
desativa as informações de backtrace em caso de erros. Por padrão, os binários são construídos usando -DFL_BACKTRACE=ON
. No Windows, as informações de backtrace requerem a biblioteca externa dbghelp
, que geralmente está disponível em seu sistema.
O código-fonte do fuzzylite
está muito bem documentado usando a formatação doxygen
, e a documentação está disponível em fuzzylite.com/documentation. Se quiser gerar a documentação localmente, você pode produzir a documentação html
a partir do arquivo Doxyfile usando a linha de comando: doxygen Doxyfile
. A documentação será criada na pasta docs
.
Após compilar a partir do código-fonte, a seguir estão os binários relevantes que serão criados no modo Release
. No modo Debug
, os nomes dos arquivos terminam com -debug
(por exemplo, fuzzylite-debug.exe
).
fuzzylite.exe
fuzzylite.dll
, fuzzylite.lib
fuzzylite-static.lib
fuzzylite
libfuzzylite.so
libfuzzylite-static.a
fuzzylite
libfuzzylite.dylib
libfuzzylite-static.a
O aplicativo de console do fuzzylite
permite importar e exportar seus motores. Seu uso pode ser obtido executando o binário do console. Além disso, o console pode ser configurado no modo interativo. O FuzzyLite Interactive Console
permite avaliar um determinado controlador fornecendo manualmente os valores de entrada. O console interativo é acionado especificando um arquivo de entrada e um formato de saída. Por exemplo, para interagir com o controlador ObstacleAvoidance
, o console interativo é iniciado da seguinte forma:
fuzzylite -i ObstacleAvoidance.fll -of fld
Todas as contribuições são bem-vindas, desde que sigam as seguintes diretrizes:
Se você estiver usando as Bibliotecas FuzzyLite, cite a seguinte referência em seu artigo:
Juan Rada-Vilela. As bibliotecas FuzzyLite para controle de lógica fuzzy, 2018. URL https://fuzzylite.com.
Ou usando bibtex
:
@misc { fl::fuzzylite ,
author = { Juan Rada-Vilela } ,
title = { The FuzzyLite Libraries for Fuzzy Logic Control } ,
url = { https://fuzzylite.com } ,
year = { 2018 }
}
fuzzylite® é uma marca registrada da FuzzyLite Limited
jfuzzylite™ é uma marca registrada da FuzzyLite Limited
pyfuzzylite™ é uma marca registrada da FuzzyLite Limited
QtFuzzyLite™ é uma marca registrada da FuzzyLite Limited