Библиотеки 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) Расширенный : Bell, Cosine, Gaussian, GaussianProduct, PiShape, SigmoidDifference, SigmoidProduct, Spike. (7) Края : Дуга, Двоичная, Вогнутая, Наклонная, Сигмовидная, SShape, ZShape. (3) Функции : постоянная, линейная, функциональная. (2) Специальный : Агрегированный, Активированный.
(7) Методы активации : Общий, Пропорциональный, Пороговый, Первый, Последний, Самый низкий, Самый высокий.
(9) Соединение и импликация (Т-нормы) : Минимум, Алгебраический продукт, Ограниченная разница, Драматический продукт, Продукт Эйнштейна, Продукт Хамахера, Нильпотентный минимум, Лямбданорма, Функциянорма.
(11) Дизъюнкция и агрегирование (S-нормы) : максимум, алгебраическая сумма, ограниченная сумма, драматическая сумма, сумма Эйнштейна, сумма Хамахера, нильпотентмаксимум, нормализованная сумма, неограниченная сумма, лямбданорма, функциянорма.
(7) Дефаззификаторы : (5) Интеграл : центроид, биссектриса, наименьший максимум, наибольший максимум, средний максимум. (2) Взвешенные : Взвешенное среднее, Взвешенная сумма.
(7) Изгороди : Любые, Нет, Чрезвычайно, Редко, Немного, Очень, Функциональные.
(3) Импортеры : язык FuzzyLite fll
, система нечеткого вывода fis
, язык нечеткого управления fcl
.
(7) Экспортеры : C++
, Java
, язык FuzzyLite fll
, набор данных FuzzyLite fld
, сценарий R
, система нечеткого вывода fis
, язык нечеткого управления 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 следующие:
С++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 следующие:
С++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
. Пожалуйста, обратитесь к примеру приложения, доступному по адресу example/application.
Вы можете собрать библиотеку 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.