Skip to content

Latest commit

 

History

History
136 lines (87 loc) · 2.88 KB

Readme.md

File metadata and controls

136 lines (87 loc) · 2.88 KB

es6-fuzz

Fuzzy Logic in Javascript

npm license GitHub tag GitHub issues

Supported fuzzyfiers

Install and Usage

es6-fuzz is available as a NPM package.

npm install es6-fuzz

Example

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

Example 2

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

Usage with boon-js

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

development

Tests use mocha and a plugin for traceur

npm test
  • docs: npm run docs, npm run docs:site

Stuff

Supported Node.js Versions

Versions: 6 and 7

Related