Skip to content

monte_carlo

The monte_carlo module provides a small framework for running Monte Carlo simulations, including variance-reduction techniques (antithetic variates, control variates, stratified sampling) and summary statistics.

use std::core::monte_carlo

MonteCarloConfig controls run behavior:

FieldTypeDescription
seedintRNG seed; 0 leaves the global RNG untouched
collect_resultsboolWhether to accumulate per-trial results

monte_carlo::monte_carlo(n_sims, sim_fn, config?)

Section titled “monte_carlo::monte_carlo(n_sims, sim_fn, config?)”

Run sim_fn(i, config) for i in 0..n_sims. Returns { simulations: int, results: Array<_> }.

use std::core::monte_carlo
let report = monte_carlo::monte_carlo(1000, |i, cfg| {
let u = random()
if u < 0.5 { 1.0 } else { 0.0 }
})
print(f"simulations: {report.simulations}")

monte_carlo::monte_carlo_antithetic(n_sims, sim_fn, config?)

Section titled “monte_carlo::monte_carlo_antithetic(n_sims, sim_fn, config?)”

Pairs each random draw with its complement (1 - U) to reduce variance via negative correlation. sim_fn(i, is_antithetic) should return a number; results are pair averages. Total evaluations = 2 * n_sims.

monte_carlo::monte_carlo_control_variate(n_sims, sim_fn, control_mean, config?)

Section titled “monte_carlo::monte_carlo_control_variate(n_sims, sim_fn, control_mean, config?)”

Reduces variance by exploiting a known-mean control variate. sim_fn(i) must return { value: number, control: number }. The returned record includes adjusted_mean and variance_reduction (fraction of variance removed).

monte_carlo::monte_carlo_stratified(n_sims, sim_fn, config?)

Section titled “monte_carlo::monte_carlo_stratified(n_sims, sim_fn, config?)”

Divides [0, 1) into n_sims equal strata and draws one sample per stratum. sim_fn(i, u) receives a uniform u in [i/n, (i+1)/n).

Compute a summary record from a results array:

FieldDescription
countNumber of samples
mean, std, min, maxStandard summaries
p5, p50, p955th / 50th / 95th percentiles
ci_low, ci_high95% confidence-interval bounds
let report = monte_carlo::monte_carlo(10000, |i, cfg| random())
let stats = monte_carlo::monte_carlo_stats(report.results)
print(f"mean ~ {stats.mean}, 95% CI [{stats.ci_low}, {stats.ci_high}]")