UNPKG

ecclesia

Version:

Framework for political and electoral simulations

39 lines (38 loc) 1.35 kB
import { createRandomObj } from "../chunk-7OCVVPU4.js"; // src/actors/opinionsArray.ts import { range, sum } from "@gouvernathor/python"; import * as math from "@gouvernathor/python/math"; function normalToUniform(x, mu, sigma) { return 0.5 * (1 + math.erf((x - mu) / (sigma * Math.SQRT2))); } function getAligner(opinMax, factors) { const rang = range(-opinMax, opinMax + 1); const oneSigma = Math.sqrt(sum(rang.map((i) => i ** 2)) / rang.length); const sigma = math.hypot(...factors.map((f) => f * oneSigma)); return (opinions) => { const scapro = sum(opinions.map((opinion, i) => opinion * factors[i])); return normalToUniform(scapro, 0, sigma); }; } function getDefaultAlignmentFactors(nOpinions) { return Array.from({ length: nOpinions }, (_, i) => 1 - i / nOpinions); } var OpinionsArrayManager = class { constructor({ nOpinions, opinMax, opinionAlignmentFactors = getDefaultAlignmentFactors(nOpinions) }) { this.nOpinions = nOpinions; this.opinMax = opinMax; this.opinionAlignmentFactors = opinionAlignmentFactors; this.aligner = getAligner(opinMax, opinionAlignmentFactors); this.generator = (randomParam) => createRandomObj(randomParam).choices(range(-opinMax, opinMax + 1), { k: nOpinions }); } }; export { OpinionsArrayManager }; //# sourceMappingURL=opinionsArray.js.map