ไลบรารี FuzzyLite สำหรับ Fuzzy Logic Control อ้างอิงถึง fuzzylite
(C++), pyfuzzylite
(Python) และ jfuzzylite
(Java)
เป้าหมาย ของไลบรารี FuzzyLite คือการออกแบบและใช้งานตัวควบคุมลอจิกแบบคลุมเครือ ได้อย่างง่ายดาย และ มีประสิทธิภาพ ตามโมเดลการเขียนโปรแกรม เชิงวัตถุ โดยมีการพึ่งพาไลบรารีภายนอกน้อยที่สุด
fuzzylite
มีลิขสิทธิ์แบบคู่ภายใต้ GNU GPL 3.0 และอยู่ภายใต้ ลิขสิทธิ์ที่เป็นกรรมสิทธิ์เพื่อวัตถุประสงค์ทางการค้า
คุณได้รับการสนับสนุน อย่างยิ่ง ให้สนับสนุนการพัฒนา FuzzyLite Libraries โดยการซื้อลิขสิทธิ์ของ QtFuzzyLite
QtFuzzyLite
เป็นอินเทอร์เฟซผู้ใช้แบบกราฟิกที่ดีที่สุดสำหรับการออกแบบและใช้งานตัวควบคุม fuzzy logic โดยตรงแบบเรียลไทม์ได้อย่างง่ายดาย พร้อมใช้งานสำหรับ Windows, Mac และ Linux เป้าหมายคือ การเร่ง การออกแบบตัวควบคุมลอจิกคลุมเครือของคุณอย่างมีนัยสำคัญ ขณะเดียวกันก็มอบอินเทอร์เฟซผู้ใช้ ที่มีประโยชน์ ใช้งาน ได้จริง และ สวยงาม กรุณาดาวน์โหลดและทดลองใช้ฟรีที่ fuzzylite.com/downloads
ไปที่ fuzzylite.com/documentation
(6) คอนโทรลเลอร์ : Mamdani, Takagi-Sugeno, Larsen, Tsukamoto, Inverse Tsukamoto, Hybrid
(25) ศัพท์ภาษาศาสตร์ : (5) พื้นฐาน : สามเหลี่ยม, สี่เหลี่ยมคางหมู, สี่เหลี่ยมผืนผ้า, ไม่ต่อเนื่อง, วงรีกึ่งวงรี (8) ขยาย : เบลล์, โคไซน์, เกาส์เซียน, ผลิตภัณฑ์เกาส์เซียน, PiShape, SigmoidDifference, SigmoidProduct, Spike (7) ขอบ : ส่วนโค้ง, ไบนารี, เว้า, ทางลาด, ซิกมอยด์, SShape, ZShape (3) ฟังก์ชัน : ค่าคงที่ เชิงเส้น ฟังก์ชัน (2) พิเศษ : รวม, เปิดใช้งานแล้ว
(7) วิธีการเปิดใช้งาน : ทั่วไป, ตามสัดส่วน, เกณฑ์, อันดับแรก, สุดท้าย, ต่ำสุด, สูงสุด
(9) การรวมกันและความหมาย (T-Norms) : ขั้นต่ำ, ผลิตภัณฑ์พีชคณิต, ความแตกต่างขอบเขต, ผลิตภัณฑ์ที่รุนแรง, ผลิตภัณฑ์ไอน์สไตน์, ผลิตภัณฑ์ฮามาเชอร์, NilpotentMinimum, LambdaNorm, FunctionNorm
(11) การแบ่งแยกและการรวมกลุ่ม (S-Norms) : ค่าสูงสุด, AlgebraicSum, BoundedSum, DrasticSum, EinsteinSum, HamacherSum, NilpotentMaximum, NormalizedSum, UnboundedSum, LambdaNorm, FunctionNorm
(7) ตัว Defuzzifier : (5) อินทิกรัล : Centroid, Bisector, SmallestOfMaximum, LargestOfMaximum, MeanOfMaximum (2) ถ่วงน้ำหนัก : WeightedAverage, WeightedSum
(7) การป้องกันความเสี่ยง : ใดๆ, ไม่ใช่, อย่างมาก, น้อยมาก, ค่อนข้างมาก, มาก, ใช้งานได้
(3) ผู้นำเข้า : FuzzyLite Language fll
, Fuzzy Inference System fis
, Fuzzy Control Language 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
ปิดใช้งานข้อมูล backtrace ในกรณีที่มีข้อผิดพลาด ตามค่าเริ่มต้น ไบนารีจะถูกสร้างขึ้นโดยใช้ -DFL_BACKTRACE=ON
ใน Windows ข้อมูล backtrace ต้องใช้ไลบรารีภายนอก 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 Libraries โปรดอ้างอิงข้อมูลอ้างอิงต่อไปนี้ในบทความของคุณ:
ฮวน ราดา-วิเลลา ไลบรารี FuzzyLite สำหรับ Fuzzy Logic Control, 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