Pustaka FuzzyLite untuk Kontrol Logika Fuzzy mengacu pada fuzzylite
(C++), pyfuzzylite
(Python), dan jfuzzylite
(Java).
Tujuan dari Perpustakaan FuzzyLite adalah untuk dengan mudah merancang dan mengoperasikan pengontrol logika fuzzy secara efisien mengikuti model pemrograman berorientasi objek dengan ketergantungan minimal pada perpustakaan eksternal.
fuzzylite
memiliki lisensi ganda di bawah GNU GPL 3.0 dan di bawah lisensi kepemilikan untuk tujuan komersial .
Anda sangat dianjurkan untuk mendukung pengembangan Perpustakaan FuzzyLite dengan membeli lisensi QtFuzzyLite
.
QtFuzzyLite
adalah antarmuka pengguna grafis terbaik yang tersedia untuk dengan mudah merancang dan mengoperasikan pengontrol logika fuzzy secara langsung secara real time. Tersedia untuk Windows, Mac, dan Linux, tujuannya adalah untuk mempercepat desain pengontrol logika fuzzy Anda secara signifikan, sekaligus menyediakan antarmuka pengguna yang sangat berguna , fungsional , dan indah . Silakan unduh dan periksa secara gratis di fuzzylite.com/downloads.
Kunjungi fuzzylite.com/documentation
(6) Pengendali : Mamdani, Takagi-Sugeno, Larsen, Tsukamoto, Inverse Tsukamoto, Hybrid
(25) Istilah Linguistik : (5) Dasar : Segitiga, Trapesium, Persegi Panjang, Diskrit, SemiEllipse. (8) Diperluas : Bell, Cosine, Gaussian, GaussianProduct, PiShape, SigmoidDifference, SigmoidProduct, Spike. (7) Tepi : Busur, Biner, Cekung, Ramp, Sigmoid, SShape, ZShape. (3) Fungsi : Konstanta, Linier, Fungsi. (2) Khusus : Gabungan, Diaktifkan.
(7) Metode aktivasi : Umum, Proporsional, Ambang Batas, Pertama, Terakhir, Terendah, Tertinggi.
(9) Konjungsi dan Implikasi (T-Norms) : Minimum, AlgebraicProduct, BoundedDifference, DrasticProduct, EinsteinProduct, HamacherProduct, NilpotentMinimum, LambdaNorm, FunctionNorm.
(11) Disjungsi dan Agregasi (S-Norms) : Maksimum, AlgebraicSum, BoundedSum, DrasticSum, EinsteinSum, HamacherSum, NilpotentMaximum, NormalizedSum, UnboundedSum, LambdaNorm, FunctionNorm.
(7) Defuzzifier : (5) Integral : Centroid, Bisector, SmallestOfMaximum, LargestOfMaximum, MeanOfMaximum. (2) Tertimbang : Rata-Rata Tertimbang, Jumlah Tertimbang.
(7) Lindung Nilai : Apa saja, Tidak, Sangat, Jarang, Agak, Sangat, Berfungsi.
(3) Importir : Bahasa FuzzyLite fll
, Sistem Inferensi Fuzzy fis
, Bahasa Kontrol Fuzzy fcl
.
(7) Eksportir : C++
, Java
, FuzzyLite Language fll
, FuzzyLite Dataset fld
, skrip R
, Fuzzy Inference System fis
, Fuzzy Control Language fcl
.
(30+) Contoh pengontrol Mamdani, Takagi-Sugeno, Tsukamoto, dan Hybrid dari fuzzylite
, Octave, dan Matlab, masing-masing disertakan dalam format berikut: C++
, Java
, fll
, fld
, R
, fis
, dan 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 ()));
}
Setelah Anda memiliki mesin yang ditulis dalam C++, Anda dapat mengkompilasinya untuk membuat file yang dapat dieksekusi yang tertaut ke perpustakaan fuzzylite
. Tautannya bisa statis atau dinamis. Pada dasarnya perbedaan antara tautan statis dan dinamis adalah sebagai berikut.
Penautan statis menyertakan pustaka fuzzylite
ke dalam file yang dapat dieksekusi, sehingga memperbesar ukurannya, namun file yang dapat dieksekusi tidak perlu lagi memiliki akses ke file pustaka fuzzylite
.
Penautan dinamis tidak menyertakan pustaka fuzzylite
ke dalam file yang dapat dieksekusi, sehingga mengurangi ukurannya, namun file yang dapat dieksekusi harus memiliki akses ke file pustaka bersama fuzzylite
. Saat menggunakan tautan dinamis, pastikan file pustaka bersama berada di direktori yang sama dengan file yang dapat dieksekusi, atau dapat dijangkau melalui variabel lingkungan:
rem Windows:
set PATH = " pathtofuzzylitereleasebin;%PATH% "
# Unix:
export LD_LIBRARY_PATH= " /path/to/fuzzylite/release/bin/: $LD_LIBRARY_PATH "
Perintah untuk mengkompilasi mesin Anda di Windows adalah sebagai berikut:
C++11 (bawaan)
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
Perintah untuk mengkompilasi mesin Anda di Unix adalah sebagai berikut:
C++11 (bawaan)
# 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
Alternatifnya, Anda dapat menggunakan CMake untuk membangun proyek Anda yang tertaut ke fuzzylite
. Silakan lihat contoh aplikasi yang tersedia di contoh/aplikasi.
Anda dapat membangun perpustakaan fuzzylite
dari sumber menggunakan CMake
(cmake.org).
Periksa .github/workflows
untuk detailnya.
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/
Opsi bangunan berikut tersedia:
-DFL_USE_FLOAT=ON
membuat binari menggunakan tipe data fl::scalar
sebagai float
bukan double
. Secara default, biner dibuat menggunakan -DFL_USE_FLOAT=OFF
. Jika fuzzylite
dibuat dengan -DFL_USE_FLOAT=ON
, maka aplikasi yang tertaut ke fuzzylite
juga perlu menentukan flag kompilasi ini.
-DFL_CPP98=ON
membuat binari menggunakan fitur C++98
bukan C++11
. Secara default, biner dibuat menggunakan -DFL_CPP98=OFF
. Jika Anda menggunakan C++98
, Anda tidak akan dapat mengukur kinerja mesin Anda menggunakan kelas Benchmark
, dan Anda tidak akan dapat menjalankan pengujian apa pun.
-DFL_BACKTRACE=OFF
menonaktifkan informasi lacak balik jika terjadi kesalahan. Secara default, biner dibuat menggunakan -DFL_BACKTRACE=ON
. Di Windows, informasi penelusuran balik memerlukan perpustakaan eksternal dbghelp
, yang umumnya tersedia di sistem Anda.
Kode sumber fuzzylite
didokumentasikan dengan sangat baik menggunakan format doxygen
, dan dokumentasinya tersedia di fuzzylite.com/documentation. Jika Anda ingin membuat dokumentasi secara lokal, Anda dapat membuat dokumentasi html
dari file Doxyfile menggunakan baris perintah: doxygen Doxyfile
. Dokumentasi akan dibuat di folder docs
.
Setelah membangun dari sumber, berikut adalah biner relevan yang akan dibuat dalam mode Release
. Dalam mode Debug
, nama file diakhiri dengan -debug
(misalnya fuzzylite-debug.exe
).
fuzzylite.exe
fuzzylite.dll
, fuzzylite.lib
fuzzylite-static.lib
fuzzylite
libfuzzylite.so
libfuzzylite-static.a
fuzzylite
libfuzzylite.dylib
libfuzzylite-static.a
Aplikasi konsol fuzzylite
memungkinkan Anda mengimpor dan mengekspor mesin Anda. Penggunaannya dapat diperoleh dengan mengeksekusi biner konsol. Selain itu, konsol dapat diatur dalam mode interaktif. FuzzyLite Interactive Console
memungkinkan Anda mengevaluasi pengontrol tertentu dengan memberikan nilai input secara manual. Konsol interaktif dipicu dengan menentukan file masukan dan format keluaran. Misalnya, untuk berinteraksi dengan pengontrol ObstacleAvoidance
, konsol interaktif diluncurkan sebagai berikut:
fuzzylite -i ObstacleAvoidance.fll -of fld
Semua kontribusi diterima, asalkan mengikuti pedoman berikut:
Jika Anda menggunakan Perpustakaan FuzzyLite, harap kutip referensi berikut di artikel Anda:
Juan Rada-Vilela. Perpustakaan FuzzyLite untuk Kontrol Logika Fuzzy, 2018. URL https://fuzzylite.com.
Atau menggunakan bibtex
:
@misc { fl::fuzzylite ,
author = { Juan Rada-Vilela } ,
title = { The FuzzyLite Libraries for Fuzzy Logic Control } ,
url = { https://fuzzylite.com } ,
year = { 2018 }
}
fuzzylite® adalah merek dagang terdaftar dari FuzzyLite Limited
jfuzzylite™ adalah merek dagang dari FuzzyLite Limited
pyfuzzylite™ adalah merek dagang dari FuzzyLite Limited
QtFuzzyLite™ adalah merek dagang dari FuzzyLite Limited