تشير مكتبات FuzzyLite للتحكم في المنطق الضبابي إلى fuzzylite
(C++)، و pyfuzzylite
(Python)، و jfuzzylite
(Java).
الهدف من مكتبات FuzzyLite هو تصميم وحدات تحكم منطقية غامضة وتشغيلها بكفاءة باتباع نموذج برمجة موجه للكائنات مع الحد الأدنى من الاعتماد على المكتبات الخارجية.
fuzzylite
مرخص بشكل مزدوج بموجب GNU GPL 3.0 وبموجب ترخيص ملكية للأغراض التجارية .
ننصحك بشدة بدعم تطوير مكتبات FuzzyLite عن طريق شراء ترخيص QtFuzzyLite
.
QtFuzzyLite
هي أفضل واجهة مستخدم رسومية متاحة لتصميم وحدات التحكم المنطقية الغامضة وتشغيلها مباشرة في الوقت الفعلي. متوفر لأنظمة التشغيل Windows وMac وLinux، وهدفه هو تسريع تصميم وحدات التحكم المنطقية الغامضة بشكل كبير، مع توفير واجهة مستخدم مفيدة للغاية وعملية وجميلة . من فضلك، قم بتنزيله والتحقق منه مجانًا على fuzzylite.com/downloads.
قم بزيارة fuzzylite.com/documentation
(6) وحدات التحكم : مامداني، تاكاجي سوجينو، لارسن، تسوكاموتو، معكوس تسوكاموتو، هجين
(25) مصطلحات لغوية : (5) أساسية : المثلث، شبه المنحرف، المستطيل، المنفصل، شبه القطع الناقص. (8) ممتد : الجرس، جيب التمام، جاوسي، منتج جاوسي، بيشيب، فرق سيجمويد، منتج سيجمويد، سبايك. (7) الحواف : قوس، ثنائي، مقعر، منحدر، سيجمويد، SShape، ZShape. (3) الدوال : ثابتة، خطية، دالة. (2) خاص : مجمع، مفعل.
(7) طرق التنشيط : عام، متناسب، عتبة، الأول، الأخير، الأدنى، الأعلى.
(9) الاقتران والتضمين (T-Norms) : الحد الأدنى، المنتج الجبري، BoundedDifference، DrasticProduct، EinsteinProduct، HamacherProduct، NilpotentMinimum، LambdaNorm، FunctionNorm.
(11) الفصل والتجميع (S-Norms) : الحد الأقصى، المجموع الجبري، المجموع المحدود، المجموع الجذري، مجموع أينشتاين، مجموع هاماتشر، مجموع NilpotentMaximum، مجموع طبيعي، مجموع غير محدود، LambdaNorm، FunctionNorm.
(7) مزيلات الضبابية : (5) التكامل : النقطه الوسطى، المنصف، الأصغر من الحد الأقصى، الأكبر من الحد الأقصى، متوسط الحد الأقصى. (2) مرجح : المتوسط المرجح، المجموع المرجح.
(7) التحوطات : أي، لا، للغاية، نادرا، إلى حد ما، جدا، وظيفة.
(3) المستوردون : لغة FuzzyLite fll
، نظام الاستدلال الغامض fis
، لغة التحكم الغامضة fcl
.
(7) المصدرون : C++
، Java
، FuzzyLite Language fll
، FuzzyLite Dataset fld
، R
script، Fuzzy Inference System fis
، Fuzzy Control Language fcl
.
(30+) أمثلة على وحدات التحكم Mamdani وTakagi-Sugeno وTsukamoto وHybrid من 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
ج++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
ج++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
. يرجى الرجوع إلى نموذج التطبيق المتاح في الأمثلة/التطبيق.
يمكنك إنشاء مكتبة fuzzylite
من المصدر باستخدام CMake
(cmake.org).
تحقق من .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
float
بدلاً من double
. بشكل افتراضي، يتم إنشاء الثنائيات باستخدام -DFL_USE_FLOAT=OFF
. إذا تم إنشاء fuzzylite
باستخدام -DFL_USE_FLOAT=ON
، فإن التطبيقات المرتبطة بـ fuzzylite
تحتاج أيضًا إلى تحديد علامة التجميع هذه.
-DFL_CPP98=ON
يقوم بإنشاء ثنائيات باستخدام ميزات C++98
بدلاً من C++11
. بشكل افتراضي، يتم إنشاء الثنائيات باستخدام -DFL_CPP98=OFF
. إذا كنت تستخدم C++98
، فلن تتمكن من قياس أداء محركك باستخدام فئة Benchmark
، ولن تتمكن من إجراء أي من الاختبارات.
-DFL_BACKTRACE=OFF
يقوم بتعطيل معلومات التتبع الخلفي في حالة حدوث أخطاء. بشكل افتراضي، يتم إنشاء الثنائيات باستخدام -DFL_BACKTRACE=ON
. في نظام التشغيل Windows، تتطلب معلومات التتبع الخلفي مكتبة dbghelp
الخارجية، والتي تتوفر بشكل عام في نظامك.
تم توثيق الكود المصدري لـ fuzzylite
بشكل جيد للغاية باستخدام تنسيق doxygen
، والوثائق متاحة على fuzzylite.com/documentation. إذا كنت تريد إنشاء الوثائق محليًا، فيمكنك إنتاج وثائق html
من الملف Doxyfile باستخدام سطر الأوامر: doxygen Doxyfile
. سيتم إنشاء الوثائق في مجلد 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