Variance Reduction Techniques#
Analog Monte Carlo converges as \(O(1/\sqrt{N})\), which can be prohibitively slow for deep-penetration or rare-event problems. MC/DC provides several variance reduction (VR) techniques that reduce the statistical uncertainty per particle history without introducing bias.
All techniques below are configured on an explicit
mcdc.Simulation instance.
Implicit Capture#
Also called survival biasing or absorption suppression. Instead of terminating a particle at every capture event, the particle’s weight is reduced by the non-absorption probability after each collision:
The particle continues with the reduced weight, ensuring that every history contributes to tallies for longer. This is especially effective in highly absorbing media.
Usage:
simulation.technique.implicit_capture()
Note
Implicit capture is enabled by default in most MC/DC examples. Without a companion technique (weight roulette or weight windows) to eliminate very-low-weight particles, a memory overhead can build up over time.
Weight Roulette#
When a particle’s weight drops below a threshold \(w_{\text{thresh}}\), Russian roulette is applied:
With probability \(p = w / w_{\text{target}}\), the particle survives and its weight is set to \(w_{\text{target}}\).
With probability \(1 - p\), the particle is killed.
This prevents an ever-growing population of low-weight particles while preserving the expected weight (unbiased).
Usage:
simulation.technique.global_weight_roulette(
weight_threshold=0.25,
weight_target=1.0,
)
weight_threshold and weight_target should be chosen so that
\(w_{\text{thresh}} < w_{\text{target}}\); a common ratio is
\(w_{\text{thresh}} / w_{\text{target}} \approx 0.25\).
Weighted Emission#
In fission problems, the number of secondary neutrons is
\(\lfloor\nu + \xi\rfloor\) in analog mode. Weighted emission
instead emits a fixed number of secondaries (weight_target worth
of weight), adjusting their weights so that the total expected weight
is preserved:
This reduces the variance of the fission source weight distribution.
Usage:
simulation.technique.weighted_emission(active=True, weight_target=1.0)
Population Control#
In time-dependent (transient) problems, the neutron population can grow or decay exponentially, making it difficult to maintain a well-sampled phase space. Population control adjusts the particle bank at each time census by splitting high-weight particles and rouletting low-weight ones, targeting a uniform weight close to \(w_{\text{target}}\).
Usage:
simulation.technique.population_control()
Population control is typically combined with a time census
(set_time_census) that checkpoints the particle population at
specified time boundaries.
Weight Windows#
Weight windows define position-dependent (and optionally energy- and time-dependent) target weights and bounds. They combine splitting and roulette to focus computational effort in regions of high importance.
MC/DC supports both user-defined and automatically generated weight
windows. See Weight Windows for a full description of the available
strategies (WW_USER and WW_PREVIOUS) and modification schemes
(WW_MIN and WW_WOLLABER).
Combining Techniques#
VR techniques are designed to be composable. A typical production setup might use:
simulation.technique.implicit_capture()
simulation.technique.global_weight_roulette(
weight_threshold=0.25,
weight_target=1.0,
)
For time-dependent fission problems:
simulation.technique.implicit_capture()
simulation.technique.weighted_emission(active=True, weight_target=1.0)
simulation.technique.population_control()
The order of activation does not matter — MC/DC applies them in the correct transport-physics order internally.
For quasi-Monte Carlo acceleration of the source iteration, see iQMC.
References#
T. E. Booth. “A Sample Problem for Variance Reduction in MCNP.” LA-10363-MS, LANL (1985).
A. B. Wollaber. “Advanced Monte Carlo Methods for Radiation Transport.” PhD diss., Univ. of Michigan (2016).