UNPKG

@thi.ng/fuzzy

Version:

Fuzzy logic operators & configurable rule inferencing engine

41 lines (40 loc) 1.11 kB
import { constant, intersect, union, weighted } from "./shapes.js"; import { centroidStrategy } from "./strategies/centroid.js"; import { snormMax, tnormMin } from "./tnorms.js"; const defuzz = (ins, outs, rules, vals, strategy = centroidStrategy(), imply = tnormMin, combine = snormMax) => { const ruleTerms = rules.map((r) => { let alpha = null; for (let id in vals) { if (r.if[id]) { const v = ins[id].terms[r.if[id]](vals[id]); alpha = alpha !== null ? r.op(alpha, v) : v; } } const terms = {}; if (alpha) { const aterm = constant(alpha); for (let id in r.then) { if (outs[id]) { const oterm = outs[id].terms[r.then[id]]; terms[id] = intersect( imply, r.weight == 1 ? oterm : weighted(oterm, r.weight), aterm ); } } } return terms; }); const res = {}; for (let id in outs) { res[id] = strategy( union(combine, ...ruleTerms.map((r) => r[id]).filter((f) => !!f)), outs[id].domain ); } return res; }; export { defuzz };