Fuzzy Logic in JavaScript
npm install es6-fuzz
const { Logic, Triangle, Trapezoid, Grade } = require('es6-fuzz');
const logic = new Logic();
const result = logic
.init('noAttack', new Triangle(0, 20, 40))
.or('normalAttack', new Trapezoid(20, 30, 90, 100))
.or('enragedAttack', new Grade(90, 100))
.defuzzify(40);
console.log(result); // 'enragedAttack'
const { Logic, Trapezoid } = require('es6-fuzz');
const logic = new Logic();
const result = logic
.init('cold', new Trapezoid(0, 12, 18, 20))
.or('hot', new Trapezoid(12, 14, 16, 100))
.defuzzify(20);
console.log(result); // 'hot'
Combine multiple fuzzy functions with boolean logic using the boon-js compatibility layer.
A monster that bites when it's cold AND you're close to it:
const { Logic, Triangle } = require('es6-fuzz');
const { getEvaluator } = require('boon-js');
// Temperature logic
const logicHeat = new Logic();
logicHeat.init('cold', new Triangle(0, 10, 15))
.or('optimal', new Triangle(10, 20, 30))
.or('hot', new Triangle(25, 40, 60));
// Distance logic
const logicDistance = new Logic();
logicDistance.init('close', new Triangle(0, 10, 20))
.or('far', new Triangle(5, 50, 100));
// Combine with boolean logic
const monsterBiteTest = getEvaluator('heat.cold AND distance.close');
const resHeat = logicHeat.defuzzify(2, 'heat');
const resClose = logicDistance.defuzzify(2, 'distance');
const jsBoonInput = { ...resHeat.boonJsInputs, ...resClose.boonJsInputs };
console.log(monsterBiteTest(jsBoonInput)); // true
npm test
npm run docs # Generate API docs
npm run docs:site # Build documentation site