Multi-Agent Simulation approaches problem-solving from a stochastic lens. Instead of quantitatively or numerically determining the solution to a set of equations representing a system, HASH will let you approximate messy, complex real-world systems, and empirically and statistically come to conclusions about how they behave. In order to better approximate the real world, you'll often want to initialize agents with heterogeneous properties, and ensure your behaviors properly randomize when necessary. Here are a number of ways you can incorporate stochasticity into your HASH simulations.
Initializing agent properties using different types of distributions is a common practice in Multi-Agent models. In HASH, you can use the jStats library or the NumPy package for sampling distributions. Here's an example that uses a number of these distributions to create agents:
x
and y
coordinates.function behavior(state, context) {
const { poisson, uniform, triangular, normal } = hstd.stats;
const num_new_agents = poisson.sample(10); // expected occurence rate
for (let i = 0; i < num_new_agents; i++) {
const x = uniform.sample(0, 10); // min, max
const y = uniform.sample(0, 10);
const altitude = triangular.sample(10, 10000, 500); // min, max, mode
state.addMessage("hash", "create_agent", {
agent_name: "bird",
position: [x, y, altitude],
speed: normal.sample(25, 10), // mean, standard deviation
});
}
}
You can find an example of these distribution methods being used in the Consumer Credit simulation. The create_client.js behavior uses three of the above methods to initialize heterogeneous agents.
If you are creating simulations from data consisting of observations, as opposed to having summary statistics, you are trying to use empirical distributions in your simulation. There are many ways you might implement this, but one of the simplest is using Python's random.choice
method. By providing a list of values and a corresponding list of probabilities, you've effectively implemented an empirical distribution function.
You can find a working example of this in the Alcoholism Intervention model. The births_intervention.py_
and births_control.py
behaviors both make use of this python method in concert with a dataset.
By implementing more advanced methods, you can create empirical distributions with linear or polynomial interpolation. We encourage you to share whatever you create!
You can ensure deterministic runs by using HASH standard library functions and
setting the seed of the random number
generators with
hstd.setSeed("[string]")
Previous
Next