ecclesia
Version:
Framework for political and electoral simulations
39 lines (38 loc) • 1.35 kB
JavaScript
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