UNPKG

tiny-essentials

Version:

Collection of small, essential scripts designed to be used across various projects. These simple utilities are crafted for speed, ease of use, and versatility.

106 lines (77 loc) 4.37 kB
# 🧠 Fuzzy Logic Engine Documentation Welcome to the official documentation for the **Fuzzy Logic Engine**! 🚀 This robust, type-safe JavaScript module provides a implementation of a Mamdani Inference System, allowing you to model logic using trapezoidal membership functions. --- ## 🛠️ Core Utilities ### 📐 `trapezoid(value, a, b, c, d, optimize = false)` A high-performance utility to safely calculate the fuzzy membership degree using a trapezoidal shape. It includes built-in protections against division by zero and short-circuit optimizations. **Parameters:** | Parameter | Type | Description | | :--- | :--- | :--- | | `value` | `number` | The crisp input value to check. | | `a` | `number` | Start of the rise (membership = 0). | | `b` | `number` | End of the rise / start of plateau (membership = 1). | | `c` | `number` | Start of the fall / end of plateau (membership = 1). | | `d` | `number` | End of the fall (membership = 0). | | `optimize` | `boolean`, optional | Enables performance optimization by skipping math for absolute bounds. Default is `false`. | **Returns:** * `number` - The degree of membership, safely clamped between `[0, 1]`. --- ### 🎯 `defuzzifyCentroid(fuzzyOutput, outputSets, step = 0.5)` Performs defuzzification using the highly accurate Centroid (Center of Gravity) numerical integration method. * **Parameters:** | Parameter | Type | Description | | :--- | :--- | :--- | | `fuzzyOutput` | `Object.<string, number>` | The evaluated rule strengths (e.g., `{"High": 0.8, "Medium": 0.2}`). | | `outputSets` | `FuzzySet[]` | The array of sets defining the output spectrum. | | `step` | `number`, optional | Resolution of the integral approximation. Default is `0.5`. | * **Returns:** `number` - The final, precise crisp output value. --- ## 🏗️ Classes ### 🟦 `FuzzySet` Represents a single linguistic term (e.g., "Cold", "High", "Severe") defined by a trapezoidal membership function. It includes strict type validations for all its properties. #### ⚙️ Constructor ```javascript new FuzzySet(name, a, b, c, d, optimize = false) ``` #### 📦 Properties * **`name`** (`string`): The name of the fuzzy set. * **`a`, `b`, `c`, `d`** (`number`): The coordinates defining the trapezoidal shape. * **`optimize`** (`boolean`): Internal flag to enable calculation optimization for absolute bounds. #### 🧮 Methods * **`calculate(x)`** Calculates the membership degree for a specific input using the set's coordinates and optimization flag. * **Parameters:** `x` (`number`) - The crisp input value. * **Returns:** `number` - Degree of membership `[0, 1]`. * **`static trapezoid(value, a, b, c, d, optimize = false)`** Static wrapper for the global `trapezoid` utility. --- ### 🧠 `MamdaniInferenceSystem` The core engine that handles the storage of linguistic variables, performs fuzzification, evaluates rules, and calculates the final crisp output via defuzzification. #### ⚙️ Constructor ```javascript const engine = new MamdaniInferenceSystem(); ``` #### 🧮 Variable Management Methods * **`addVariable(name, sets)`** ➕ Registers a new linguistic variable and its associated fuzzy sets. * **Parameters:** * `name` (`string`) - The variable's name (e.g., "temperature"). * `sets` (`FuzzySet[]`) - An array of `FuzzySet` instances. * **`removeVariable(name)`** 🗑️ Deletes a linguistic variable from the engine. * **Parameters:** `name` (`string`) - The variable's name. * **Returns:** `boolean` - `true` if successfully removed. * **`getVariable(name)`** 🔍 Retrieves a cloned array of the fuzzy sets for a specific variable. * **Parameters:** `name` (`string`) - The variable's name. * **Returns:** `FuzzySet[]` * **Throws:** `Error` if the variable is not found. * **`hasVariable(name)`** ❓ Checks if a variable is registered in the engine. * **Parameters:** `name` (`string`) - The variable's name. * **Returns:** `boolean` #### 🔬 Logic Processing Methods * **`fuzzify(varName, value)`** 🌫️ Converts a crisp numeric input into a dictionary of fuzzy membership degrees based on the variable's sets. * **Parameters:** * `varName` (`string`) - The variable to evaluate. * `value` (`number`) - The crisp input value. * **Returns:** `Object.<string, number>` - A map of set names to their membership degrees.