@swrpg-online/monte-carlo
Version:
A library for performing Monte Carlo simulations with the Star Wars RPG narrative dice system by Fantasy Flight Games
81 lines (80 loc) • 2.21 kB
TypeScript
import { DicePool } from "@swrpg-online/dice";
import { DiceResult } from "@swrpg-online/dice/dist/types";
export { DicePool };
export declare class MonteCarloError extends Error {
constructor(message: string);
}
export interface HistogramData {
netSuccesses: {
[key: number]: number;
};
netAdvantages: {
[key: number]: number;
};
triumphs: {
[key: number]: number;
};
despairs: {
[key: number]: number;
};
lightSide: {
[key: number]: number;
};
darkSide: {
[key: number]: number;
};
}
export interface DistributionAnalysis {
skewness: number;
kurtosis: number;
outliers: number[];
modes: number[];
percentiles: {
[key: number]: number;
};
}
export interface MonteCarloResult {
averages: DiceResult;
medians: DiceResult;
standardDeviations: DiceResult;
successProbability: number;
criticalSuccessProbability: number;
criticalFailureProbability: number;
netPositiveProbability: number;
histogram: HistogramData;
analysis: {
netSuccesses: DistributionAnalysis;
netAdvantages: DistributionAnalysis;
triumphs: DistributionAnalysis;
despairs: DistributionAnalysis;
lightSide: DistributionAnalysis;
darkSide: DistributionAnalysis;
};
}
export declare class MonteCarlo {
private readonly dicePool;
private readonly iterations;
private histogram;
private static readonly MIN_ITERATIONS;
private static readonly MAX_ITERATIONS;
private statsCache;
private runningStats;
private results;
constructor(dicePool: DicePool, iterations?: number, runSimulate?: boolean);
private validateDicePool;
private validateIterations;
private calculateHistogramStats;
private calculateSkewness;
private calculateKurtosis;
private findOutliers;
private analyzeDistribution;
private average;
private standardDeviation;
private resetRunningStats;
private updateHistogram;
simulate(): MonteCarloResult;
private resetHistogram;
private calculateMedianFromHistogram;
private findModes;
private calculatePercentiles;
}