@thi.ng/fuzzy
Version:
Fuzzy logic operators & configurable rule inferencing engine
51 lines (50 loc) • 1.24 kB
JavaScript
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
};