Die FuzzyLite-Bibliotheken für Fuzzy Logic Control beziehen sich auf fuzzylite
(C++), pyfuzzylite
(Python) und jfuzzylite
(Java).
Das Ziel der FuzzyLite-Bibliotheken besteht darin, Fuzzy-Logic-Controller nach einem objektorientierten Programmiermodell mit minimaler Abhängigkeit von externen Bibliotheken einfach zu entwerfen und effizient zu betreiben.
fuzzylite
ist unter der GNU GPL 3.0 und unter einer proprietären Lizenz für kommerzielle Zwecke doppelt lizenziert.
Wir empfehlen Ihnen dringend , die Entwicklung der FuzzyLite-Bibliotheken durch den Kauf einer Lizenz von QtFuzzyLite
zu unterstützen.
QtFuzzyLite
ist die beste verfügbare grafische Benutzeroberfläche zum einfachen Entwerfen und direkten Bedienen von Fuzzy-Logic-Controllern in Echtzeit. Verfügbar für Windows, Mac und Linux. Ziel ist es, die Entwicklung Ihrer Fuzzy-Logic-Controller erheblich zu beschleunigen und gleichzeitig eine sehr nützliche , funktionale und schöne Benutzeroberfläche bereitzustellen. Bitte laden Sie es herunter und testen Sie es kostenlos unter fuzzylite.com/downloads.
Besuchen Sie fuzzylite.com/documentation
(6) Controller : Mamdani, Takagi-Sugeno, Larsen, Tsukamoto, Inverse Tsukamoto, Hybrid
(25) Sprachliche Begriffe : (5) Grundbegriffe : Dreieck, Trapez, Rechteck, Diskret, Halbellipse. (8) Erweitert : Bell, Cosinus, Gaußian, GaussianProduct, PiShape, SigmoidDifference, SigmoidProduct, Spike. (7) Kanten : Bogen, Binär, Konkav, Rampe, Sigmoid, SShape, ZShape. (3) Funktionen : Konstante, Linear, Funktion. (2) Speziell : Aggregiert, aktiviert.
(7) Aktivierungsmethoden : Allgemein, Proportional, Schwellenwert, Erster, Letzter, Niedrigster, Höchster.
(9) Konjunktion und Implikation (T-Normen) : Minimum, AlgebraicProduct, BoundedDifference, DrasticProduct, EinsteinProduct, HamacherProduct, NilpotentMinimum, LambdaNorm, FunctionNorm.
(11) Disjunktion und Aggregation (S-Normen) : Maximum, AlgebraicSum, BoundedSum, DrasticSum, EinsteinSum, HamacherSum, NilpotentMaximum, NormalizedSum, UnboundedSum, LambdaNorm, FunctionNorm.
(7) Defuzzifikatoren : (5) Integral : Schwerpunkt, Winkelhalbierende, SmallestOfMaximum, LargestOfMaximum, MeanOfMaximum. (2) Gewichtet : WeightedAverage, WeightedSum.
(7) Hecken : Beliebig, Nicht, Extrem, Selten, Etwas, Sehr, Funktion.
(3) Importeure : FuzzyLite Language fll
, Fuzzy Inference System fis
, Fuzzy Control Language fcl
.
(7) Exporteure : C++
, Java
, FuzzyLite Language fll
, FuzzyLite Dataset fld
, R
Skript, Fuzzy Inference System fis
, Fuzzy Control Language fcl
.
(30+) Beispiele für Mamdani-, Takagi-Sugeno-, Tsukamoto- und Hybrid-Controller von fuzzylite
, Octave und Matlab, jeweils in den folgenden Formaten enthalten: C++
, Java
, fll
, fld
, R
, fis
und 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 ()));
}
Sobald Sie eine Engine in C++ geschrieben haben, können Sie sie kompilieren, um eine ausführbare Datei zu erstellen, die mit der fuzzylite
-Bibliothek verknüpft ist. Die Verknüpfung kann entweder statisch oder dynamisch sein. Grundsätzlich gibt es folgende Unterschiede zwischen statischer und dynamischer Verknüpfung.
Durch die statische Verknüpfung wird die fuzzylite
-Bibliothek in Ihre ausführbare Datei eingebunden, wodurch deren Größe zunimmt, die ausführbare Datei muss jedoch keinen Zugriff mehr auf die fuzzylite
-Bibliotheksdateien haben.
Bei der dynamischen Verknüpfung wird die fuzzylite
-Bibliothek nicht in Ihre ausführbare Datei eingebunden, wodurch deren Größe reduziert wird. Die ausführbare Datei muss jedoch Zugriff auf die gemeinsam genutzte fuzzylite
-Bibliotheksdatei haben. Stellen Sie bei Verwendung der dynamischen Verknüpfung sicher, dass sich die gemeinsam genutzten Bibliotheksdateien entweder im selben Verzeichnis wie die ausführbare Datei befinden oder über Umgebungsvariablen erreichbar sind:
rem Windows:
set PATH = " pathtofuzzylitereleasebin;%PATH% "
# Unix:
export LD_LIBRARY_PATH= " /path/to/fuzzylite/release/bin/: $LD_LIBRARY_PATH "
Die Befehle zum Kompilieren Ihrer Engine in Windows sind die folgenden:
C++11 (Standard)
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
Die Befehle zum Kompilieren Ihrer Engine unter Unix sind die folgenden:
C++11 (Standard)
# 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
Alternativ können Sie CMake verwenden, um Ihr Projekt zu erstellen und es mit fuzzylite
zu verknüpfen. Bitte beachten Sie die Beispielanwendung unter Beispiele/Anwendung.
Sie können die fuzzylite
-Bibliothek mit CMake
(cmake.org) aus dem Quellcode erstellen.
Weitere Informationen finden Sie unter .github/workflows
.
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/
Folgende Baumöglichkeiten stehen zur Verfügung:
-DFL_USE_FLOAT=ON
erstellt die Binärdateien unter Verwendung des Datentyps fl::scalar
als float
anstelle von double
. Standardmäßig werden die Binärdateien mit -DFL_USE_FLOAT=OFF
erstellt. Wenn fuzzylite
mit -DFL_USE_FLOAT=ON
erstellt wird, müssen die mit fuzzylite
verknüpften Anwendungen auch dieses Kompilierungsflag angeben.
-DFL_CPP98=ON
erstellt Binärdateien mit C++98
-Funktionen anstelle von C++11
. Standardmäßig werden die Binärdateien mit -DFL_CPP98=OFF
erstellt. Wenn Sie C++98
verwenden, können Sie die Leistung Ihrer Engine nicht mithilfe der Benchmark
-Klasse messen und keinen der Tests ausführen.
-DFL_BACKTRACE=OFF
deaktiviert die Backtrace-Informationen im Fehlerfall. Standardmäßig werden die Binärdateien mit -DFL_BACKTRACE=ON
erstellt. Unter Windows ist für die Backtrace-Informationen die externe Bibliothek dbghelp
erforderlich, die in Ihrem System allgemein verfügbar ist.
Der Quellcode von fuzzylite
ist mithilfe doxygen
-Formatierung sehr gut dokumentiert und die Dokumentation ist unter fuzzylite.com/documentation verfügbar. Wenn Sie die Dokumentation lokal generieren möchten, können Sie die html
Dokumentation aus der Datei Doxyfile über die Befehlszeile erstellen: doxygen Doxyfile
. Die Dokumentation wird im Ordner docs
erstellt.
Nach dem Erstellen aus dem Quellcode sind die folgenden relevanten Binärdateien aufgeführt, die im Release
-Modus erstellt werden. Im Debug
Modus enden die Dateinamen mit -debug
(z. B. fuzzylite-debug.exe
).
fuzzylite.exe
fuzzylite.dll
, fuzzylite.lib
fuzzylite-static.lib
fuzzylite
libfuzzylite.so
libfuzzylite-static.a
fuzzylite
libfuzzylite.dylib
libfuzzylite-static.a
Mit der Konsolenanwendung von fuzzylite
können Sie Ihre Engines importieren und exportieren. Seine Verwendung kann durch Ausführen der Konsolenbinärdatei ermittelt werden. Darüber hinaus kann die Konsole in den interaktiven Modus versetzt werden. Mit der FuzzyLite Interactive Console
können Sie einen bestimmten Controller bewerten, indem Sie die Eingabewerte manuell bereitstellen. Die interaktive Konsole wird durch die Angabe einer Eingabedatei und eines Ausgabeformats ausgelöst. Um beispielsweise mit dem ObstacleAvoidance
-Controller zu interagieren, wird die interaktive Konsole wie folgt gestartet:
fuzzylite -i ObstacleAvoidance.fll -of fld
Alle Beiträge sind willkommen, sofern sie den folgenden Richtlinien folgen:
Wenn Sie die FuzzyLite-Bibliotheken verwenden, geben Sie bitte in Ihrem Artikel die folgende Referenz an:
Juan Rada-Vilela. Die FuzzyLite-Bibliotheken für Fuzzy Logic Control, 2018. URL https://fuzzylite.com.
Oder mit bibtex
:
@misc { fl::fuzzylite ,
author = { Juan Rada-Vilela } ,
title = { The FuzzyLite Libraries for Fuzzy Logic Control } ,
url = { https://fuzzylite.com } ,
year = { 2018 }
}
fuzzylite® ist eine eingetragene Marke von FuzzyLite Limited
jfuzzylite™ ist eine Marke von FuzzyLite Limited
pyfuzzylite™ ist eine Marke von FuzzyLite Limited
QtFuzzyLite™ ist eine Marke von FuzzyLite Limited