퍼지 논리 제어용 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) 컨트롤러 : Mamdani, Takagi-Sugeno, Larsen, Tsukamoto, Inverse Tsukamoto, Hybrid
(25) 언어 용어 : (5) 기본 : 삼각형, 사다리꼴, 직사각형, 이산형, 반타원형. (8) 확장 : Bell, Cosine, Gaussian, GaussianProduct, PiShape, SigmoidDifference, SigmoidProduct, Spike. (7) 모서리 : 호, 이진, 오목, 램프, 시그모이드, SShape, ZShape. (3) 함수 : 상수, 선형, 함수. (2) 특수 : 집계, 활성화.
(7) 활성화 방법 : 일반, 비례, 임계값, 첫 번째, 마지막, 최저, 최고.
(9) 결합 및 함축(T-Norms) : 최소값, AlgebraicProduct, BoundedDifference, DrasticProduct, EinsteinProduct, HamacherProduct, NilpotentMinimum, LambdaNorm, FunctionNorm.
(11) 분리 및 집계(S-Norms) : Maximum, AlgebraicSum, BoundedSum, DrasticSum, EinsteinSum, HamacherSum, NilpotentMaximum, NormalizedSum, UnboundedSum, LambdaNorm, FunctionNorm.
(7) 역퍼지화기 : (5) 적분 : Centroid, Bisector, SmallestOfMaximum, LargestOfMaximum, MeanOfMaximum. (2) 가중 : WeightedAverage, WeightedSum.
(7) 헤지스 : 전혀, 아님, 매우, 드물게, 다소, 매우, 기능.
(3) 수입자 : FuzzyLite 언어 fll
, 퍼지 추론 시스템 fis
, 퍼지 제어 언어 fcl
.
(7) 내보내기 : C++
, Java
, FuzzyLite 언어 fll
, FuzzyLite Dataset fld
, R
스크립트, 퍼지 추론 시스템 fis
, 퍼지 제어 언어 fcl
.
(30개 이상) fuzzylite
, Octave 및 Matlab의 Mamdani, Takagi-Sugeno, Tsukamoto 및 Hybrid 컨트롤러의 예는 각각 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
에 연결되는 프로젝트를 빌드할 수 있습니다. 예제/애플리케이션에서 제공되는 예제 애플리케이션을 참조하세요.
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의 상표입니다.