// Rules: IF temperature IS warm THEN fan_speed IS medium engine.addRule("temperature", "warm", "fan_speed", "medium"); engine.addRule("temperature", "hot", "fan_speed", "high");
Usually MIT or BSD – permissive. 2. Architecture & Core Components The library is structured around four main classes (all in namespace afl ): afl library
// Output variable "fan_speed" engine.addVariable("fan_speed"); engine.addFuzzySet("fan_speed", "low", afl::Triangular(0, 0, 50)); engine.addFuzzySet("fan_speed", "medium", afl::Triangular(30, 50, 80)); engine.addFuzzySet("fan_speed", "high", afl::Triangular(70, 100, 100)); // Rules: IF temperature IS warm THEN fan_speed
1. Overview & Purpose AFL (not to be confused with AFLP for genomics or Adobe Flash Library) is a lightweight, header-only C++ library for Associative Fuzzy Logic . It implements a form of fuzzy logic where fuzzy sets and rules are stored and manipulated using associative containers (like std::map ), making it highly flexible and dynamic. Overview & Purpose AFL (not to be confused
// Create input variable "temperature" engine.addVariable("temperature"); engine.addFuzzySet("temperature", "cold", afl::Triangular(0, 0, 20)); engine.addFuzzySet("temperature", "warm", afl::Triangular(10, 25, 40)); engine.addFuzzySet("temperature", "hot", afl::Triangular(30, 45, 45));
Its associative design offers unmatched flexibility, but that same design limits performance and type safety. It is not suitable for large-scale, high-performance, or safety-critical applications.