ファジーロジック制御用の FuzzyLite ライブラリは、 fuzzylite
(C++)、 pyfuzzylite
(Python)、およびjfuzzylite
(Java) を指します。
FuzzyLite ライブラリの目標は、外部ライブラリへの依存を最小限に抑えながら、オブジェクト指向プログラミング モデルに従ってファジー ロジック コントローラーを簡単に設計し、効率的に操作することです。
fuzzylite
、 GNU GPL 3.0に基づくライセンスと、商用目的の独自ライセンスに基づく二重ライセンスを受けています。
QtFuzzyLite
のライセンスを購入して、FuzzyLite ライブラリの開発をサポートすることを強くお勧めします。
QtFuzzyLite
は、ファジー ロジック コントローラーをリアルタイムで簡単に設計し、直接操作するために利用できる最高のグラフィカル ユーザー インターフェイスです。 Windows、Mac、Linux で利用でき、その目標は、非常に便利で機能的で美しいユーザー インターフェイスを提供しながら、ファジー ロジック コントローラーの設計を大幅にスピードアップすることです。ぜひダウンロードして、fuzzylite.com/downloads から無料でチェックしてください。
fuzzylite.com/documentationにアクセスしてください
(6) コントローラー:マムダニ、高木・菅野、ラーセン、塚本、インバース塚本、ハイブリッド
(25) 言語用語: (5)基本: 三角形、台形、長方形、離散、半楕円。 (8)拡張: Bell、Cosine、Gaussian、GaussianProduct、PiShape、SigmoidDifference、SigmoidProduct、Spike。 (7)エッジ: 円弧、バイナリ、凹面、ランプ、S 字形、SShape、ZShape。 (3)関数: 定数、線形、関数。 (2)特別: 集約、アクティブ化。
(7) アクティブ化方法: 一般、比例、しきい値、最初、最後、最低、最高。
(9) 結合と含意 (T ノルム) : Minimum、AlgebraicProduct、BoundedDifference、DrasticProduct、EinsteinProduct、HamacherProduct、NilpotentMinimum、LambdaNorm、FunctionNorm。
(11) 分離と集約 (S-ノルム) : Maximum、AlgebraicSum、BoundedSum、DrasticSum、EinsteinSum、HamacherSum、NilpotentMinimum、NormalizedSum、UnboundedSum、LambdaNorm、FunctionNorm。
(7) Defuzzifiers : (5) Integral : 重心、二等分線、最小値の最大値、最大値の最大値、最大値の平均。 (2)加重:加重平均、加重合計。
(7) ヘッジ: あらゆる、機能しない、非常に、めったにない、ある程度、非常に機能する。
(3) インポーター: FuzzyLite 言語fll
、ファジー推論システムfis
、ファジー制御言語fcl
。
(7) エクスポーター: C++
、 Java
、 FuzzyLite 言語fll
、 FuzzyLite データセットfld
、 R
スクリプト、 ファジー推論システムfis
、 ファジー制御言語fcl
。
(30+) Mamdani、Takagi-Sugeno、Tsukamoto、およびfuzzylite
、Octave、および Matlab のハイブリッド コントローラーの例。それぞれ次の形式に含まれています: C++
、 Java
、 fll
、 fld
、 R
、 fis
、および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 ()));
}
C++ でエンジンを作成したら、それをコンパイルして、 fuzzylite
ライブラリにリンクする実行可能ファイルを作成できます。リンクは静的または動的のいずれかにすることができます。基本的に、静的リンクと動的リンクの違いは次のとおりです。
静的リンクでは、 fuzzylite
ライブラリが実行可能ファイルに組み込まれるため、サイズが増加しますが、実行可能ファイルがfuzzylite
ライブラリ ファイルにアクセスする必要はなくなります。
動的リンクでは実行可能ファイルにfuzzylite
ライブラリが含まれないため、サイズが削減されますが、実行可能ファイルはfuzzylite
共有ライブラリ ファイルにアクセスできる必要があります。動的リンクを使用する場合は、共有ライブラリ ファイルが実行可能ファイルと同じディレクトリにあるか、環境変数を介してアクセスできることを確認してください。
rem Windows:
set PATH = " pathtofuzzylitereleasebin;%PATH% "
# Unix:
export LD_LIBRARY_PATH= " /path/to/fuzzylite/release/bin/: $LD_LIBRARY_PATH "
Windows でエンジンをコンパイルするコマンドは次のとおりです。
C++11 (デフォルト)
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
Unix でエンジンをコンパイルするコマンドは次のとおりです。
C++11 (デフォルト)
# 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
あるいは、CMake を使用してfuzzylite
にリンクするプロジェクトをビルドすることもできます。 Examples/application にあるサンプル アプリケーションを参照してください。
CMake
(cmake.org) を使用してソースからfuzzylite
ライブラリをビルドできます。
詳細については、 .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/
次の構築オプションが利用可能です。
-DFL_USE_FLOAT=ON
fl::scalar
データ型をdouble
ではなくfloat
として使用してバイナリを構築します。デフォルトでは、バイナリは-DFL_USE_FLOAT=OFF
を使用して構築されます。 fuzzylite
が-DFL_USE_FLOAT=ON
を使用してビルドされた場合、 fuzzylite
にリンクするアプリケーションもこのコンパイル フラグを指定する必要があります。
-DFL_CPP98=ON
C++11
の代わりにC++98
機能を使用してバイナリをビルドします。デフォルトでは、バイナリは-DFL_CPP98=OFF
使用してビルドされます。 C++98
使用する場合、 Benchmark
クラスを使用してエンジンのパフォーマンスをベンチマークすることはできず、テストを実行することもできません。
-DFL_BACKTRACE=OFF
エラーが発生した場合のバックトレース情報を無効にします。デフォルトでは、バイナリは-DFL_BACKTRACE=ON
使用して構築されます。 Windows では、バックトレース情報には外部ライブラリdbghelp
必要です。このライブラリはシステムで一般に利用可能です。
fuzzylite
のソース コードは、 doxygen
フォーマットを使用して非常に詳細に文書化されており、文書は fuzzylite.com/documentation で入手できます。ドキュメントをローカルで生成する場合は、コマンド ラインdoxygen Doxyfile
使用して、ファイル Doxyfile からhtml
ドキュメントを生成できます。ドキュメントはdocs
フォルダーに作成されます。
ソースからビルドした後、 Release
モードで作成される関連バイナリは次のとおりです。 Debug
モードでは、ファイル名は-debug
で終わります (例: fuzzylite-debug.exe
)。
fuzzylite.exe
fuzzylite.dll
、 fuzzylite.lib
fuzzylite-static.lib
fuzzylite
libfuzzylite.so
libfuzzylite-static.a
fuzzylite
libfuzzylite.dylib
libfuzzylite-static.a
fuzzylite
のコンソール アプリケーションを使用すると、エンジンをインポートおよびエクスポートできます。その使用法は、コンソール バイナリを実行して取得できます。さらに、コンソールを対話モードに設定できます。 FuzzyLite Interactive Console
と、入力値を手動で指定して、特定のコントローラーを評価できます。対話型コンソールは、入力ファイルと出力形式を指定することによってトリガーされます。たとえば、 ObstacleAvoidance
コントローラーと対話するには、対話型コンソールが次のように起動されます。
fuzzylite -i ObstacleAvoidance.fll -of fld
次のガイドラインに従っている限り、すべての投稿を歓迎します。
FuzzyLite ライブラリを使用している場合は、記事内で次の参照を引用してください。
フアン・ラダ=ヴィレラ。ファジーロジック制御用の FuzzyLite ライブラリ、2018。URL https://fuzzylite.com。
または、 bibtex
使用します。
@misc { fl::fuzzylite ,
author = { Juan Rada-Vilela } ,
title = { The FuzzyLite Libraries for Fuzzy Logic Control } ,
url = { https://fuzzylite.com } ,
year = { 2018 }
}
fuzzylite® は FuzzyLite Limited の登録商標です。
jfuzzylite™ は FuzzyLite Limited の商標です
pyfuzzylite™ は FuzzyLite Limited の商標です
QtFuzzyLite™ は FuzzyLite Limited の商標です