-
Notifications
You must be signed in to change notification settings - Fork 5
StatisticalBehaviour.wiki
This documentation is a part of the TCI reference.
Is there an error? Something missing? Funky grammar? Do not hesitate to leave a comment.
Because of the very nature of simulations (see FormulationVsSimulation), Simulationcraft produces slightly different results on every run. This is why multiple iterations of the same fight are performed, to produce average and more stable results, and smoothen out the randomness. The following options can help you to tweak out those problems.
- iterations (scope: global; default: 1000) is the number of simulated fights per run. Increasing this setting is the most obvious way to improve the accuracy and stability of the simulations but it also increases computations times.
iterations=10000
You can give a look at FightingVariance if you want more information on the relationship between the number of iterations and the variance of the results.
Pseudo-random number generators (rng) can be seen as pseudo-random numbers sequences. By default, Simulationcraft will use a different sequence on every run, which is why two consecutive runs using the same inputs still produce different outputs. A constant seed forces Simulationcraft to always use the same sequence : if Simulationcraft was only using rolls between 1 and 6, a constant seed would ensure the sequence would always be, for example, 1-5-4-4-3-6-..., whatever those numbers would be used for.
- seed (scope: global; default:0) is the seed of the pseudo-random sequence. When set to 0, Simulationcraft will use a different seed on every run, based on the execution time. When different from zero, the given seed will be used to generate the same pseudo-random sequence across all runs.
seed=1247695
Note: there are some misconceptions about constant seeds. You may think it is useful to compare slightly different inputs but it is probably not : just switching one piece of gear and increasing haste means the actions order will change : if your highest dpet action was previously favored by good rolls on the first run, those good rolls can now have been consumed by something else. Really, what constant seeds just achieve is to ensure that two different runs with two identical inputs yield identical outputs.
By default, Simulationcraft uses a true pseudo-random number generator (rng). Using the smooth rng option, Simulationcraft will use "normalized" generators which tend to force rolls to match the expected distribution. For example, if Simulationcraft was flipping coins, let's imagine we started with three "heads" in a row. Because of probabilistic independence, a true rng would still have 50% to then produce a "head" and 50% to produce a "tail" on the next flip. With a normalized RNG, the odds of producing a "tail" would be higher, to ensure the rolls match the expected distribution. TOCHECK.
- smooth_rng (scope:global; default:0), when different from zero, will force the application to use normalized rng packages, one for every category of rolls (one package for every spell, etc), instead of using a single true rng shared across all rolls. Enabling this setting will ensure that, for example, the number of procs are close to our expectations. Very rare sequences of events will still happen, they will just be even more rare. Enabling this setting will force the application to ignore the seed one. Beware: this settings is still considered to be in an alpha state, use with caution. TOCHECK.
smooth_rng=1
- deterministic_roll (scope:global, default:0), when different from zero, will seed our rng packages with an arbitrary, hard-coded, value (31459, incremented for every thread). When smooth_rng is disabled, enabling deterministic_roll will just act as the seed option and will prevail over it. When smooth_rng is enabled, it will take this option one step further, seeding all the rng packages with the same value. TOCHECK.
deterministic_roll=1
- average_range (scope:global, default:1), when different from zero, will force rolls for damages ranges, such as the one for weapon damages, to always return the average value. This setting does not affect rolls for the attack table, chances of procs, etc. It has little to no effect on the accuracy of the simulation but it helps reducing the variance, hence why it is enabled by default.
average_range=0
- average_gauss (scope:global; default:0), when different from zero, will force normal distribution rolls (see Wikipedia - Normal distribution), such as the ones for gcd variation, travel time variation on raid movement, etc, to always return the average value. It obviously makes settings such as gcd_stddev useless.
average_gauss=1