Fuzzy Logic in Javascript
Supported fuzzyfiers
es6-fuzz is available as a NPM package.
npm install es6-fuzz
var logic = new Logic();
var res = logic
.init('noAttack', new Triangle(0, 20, 40))
.or('normalAttack', new Trapezoid(20, 30, 90, 100))
.or('enragedAttack', new Grade(90, 100))
.defuzzify(40);
- enraged attack
var Trapezoid = require('./lib/curve/trapezoid');
var logic = new Logic();
var res = logic
.init('cold', new Trapezoid(0, 12, 18, 20))
.or('hot', new Trapezoid(12, 14, 16, 100))
.defuzzify(20);
- hot
In order to combine 2 fuzzy functions with boolean logic, there is a compat layer for boon-js which allows the sauge of 'boolean expression language'.
Example of a monster biting when its cold and you are close to it:
Heat part:
var logicHeat = new Logic();
const optimalTemperature = new Triangle(10, 20, 30);
const toColdTemperature = new Triangle(0, 10, 15);
const toHotTemperature = new Triangle(25, 40, 60);
logicHeat.init('cold', toColdTemperature)
logicHeat.or('optimal', optimalTemperature)
logicHeat.or('hot', toHotTemperature);
Distance Part
var logicDistance = new Logic();
const close = new Triangle(0, 10, 20);
const far = new Triangle(5, 50, 100);
logicDistance.init('close', close)
logicDistance.or('far', far)
Now we marry the 2 and use boon js
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 }
monsterBiteTest(jsBoonInput)
// returns true
Tests use mocha and a plugin for traceur
npm test
- docs: npm run docs, npm run docs:site
- http://de.slideshare.net/BCSLeicester/fuzzy-logic-in-the-real-world-2326817
- http://computing.dcu.ie/~humphrys/Notes/Neural/sigmoid.html
Versions: 6 and 7