Last updated on 16th July 2024
The Simudyne SDK provides a SeededRandom
class which allows you to create prngs with specific seeds.
A SeededRandom
instance can be created from anywhere in the model using a seed. The recomended way of getting a seed is using the config. This seed can be controlled through the console.
public class MyModel extends Model {
// Use getOrSetLong if using this method before setup. (There might not be a seed value before setup.)
public long seed = this.getConfig().getOrSetLong("core.prng-seed", System.nanoTime());
public SeededRandom random = SeededRandom.create(seed);
}
If using this method from outside of a Model
, retrieve the config with InternalModelConfig.get()
.
The SeededRandom
class is a wrapper around Apache Commons Math3 PRNG functions. An Apache Commons RandomGenerator
implementation exists on the SeededRandom
instance at the field generator
.
public SeededRandom random = SeededRandom.create(seed);
random.generator.nextInt();
The SeededRandom
instance can also be used to create common distributions. Refer to the SeededRandom
Javadoc for a full list of distributions.
public SeededRandom random = SeededRandom.create(seed);
NormalDistribution normalDistribution = random.gaussian(1, 1);
normalDistribution.sample();
When running an agent based model, every agent has its own random number generator, each with its own seed built using the root seed. This means that if the root seed is constant, the agent seeds will stay the same.
public class MyAgent extends Agent<GlobalState> {
this.getPrng().nextDouble;
}