Library - Afl

// Rules: IF temperature IS warm THEN fan_speed IS medium engine.addRule("temperature", "warm", "fan_speed", "medium"); engine.addRule("temperature", "hot", "fan_speed", "high");

// 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));

| Class | Description | |-------|-------------| | FuzzySet | Represents a membership function (triangular, trapezoidal, Gaussian). Contains parameters (a,b,c,d) and methods to compute membership degree. | | LinguisticVariable | Holds multiple FuzzySets (e.g., "Temperature" with sets: Cold, Warm, Hot). Uses std::map<string, FuzzySet> . | | FuzzyRule | IF-THEN rule with antecedent and consequent (both are std::map<string, double> or strings). | | FuzzyEngine | Main inference engine. Stores linguistic variables and rules. Performs fuzzification, inference (Mamdani), and defuzzification (Centroid, Bisector, etc.). |

// 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));

// Input engine.setInput("temperature", 32.0);

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.