UNPKG

@thi.ng/fuzzy

Version:

Fuzzy logic operators & configurable rule inferencing engine

51 lines (50 loc) 1.24 kB
import { eqDelta } from "@thi.ng/math/eqdelta"; import { __defaultOpts } from "./opts.js"; const meanOfMaximaStrategy = (opts) => { const { samples, eps } = __defaultOpts(opts); return (fn, [min, max]) => { const delta = (max - min) / samples; let peak = -Infinity; let peakPos = min; let n = 1; for (let i = 0; i <= samples; i++) { const t = min + i * delta; const x = fn(t); if (eqDelta(x, peak, eps)) { peakPos += t; n++; } else if (x > peak) { peak = x; peakPos = t; n = 1; } } return peakPos / n; }; }; const firstOfMaximaStrategy = (opts) => { const { samples } = __defaultOpts(opts); return (fn, [min, max]) => { const delta = (max - min) / samples; let peak = -Infinity; let peakPos = min; for (let i = 0; i <= samples; i++) { const t = min + i * delta; const x = fn(t); if (x > peak) { peak = x; peakPos = t; } } return peakPos; }; }; const lastOfMaximaStrategy = (opts) => { const impl = firstOfMaximaStrategy(opts); return (fn, [min, max]) => impl(fn, [max, min]); }; export { firstOfMaximaStrategy, lastOfMaximaStrategy, meanOfMaximaStrategy };