Registers a shock to a parameter value. Associated with a value function, which shocks the variable, and a timer function, which determines when and how often to execute the value function.
name — str, required
A unique name for the shock, to be displayed in the GUI beside its checkbox.
param — str|tuple, required
A parameter identification string or tuple. A string value indicates a global parameter. Per-good parameters can be indicated with a three-item tuple,
('paramName', 'good', 'goodName'). A per-breed parameter can be indicated with a three- or four-item tuple,
('paramName', 'breed', 'breedName', 'primitive'), with the last element optional if there is only one primitive.
paramcan also be set to
None, in which case
valFuncbehaves somewhat differently. See below.
valFunc — func, required
A function that returns a new value for the parameter.
valFunctakes three arguments: the name of the variable being shocked, the parameter type (
Nonefor global parameters,
'good'for per-breed and per-good parameters, respectively), and (for per-breed or per-good parameters) the breed or the good in question. If
var is None, however,
valFunctakes one argument, the model object. This can be useful for more complex shocks that do not correspond to a particular parameter.
timerFunc — func(int)|str, required
A function that takes the current model time and returns a
bool, indicating whether to run
valFuncthat period or not.
timerFunccan also be set to the string
'button', in which case a button will be drawn in the control panel that runs
valFuncwhen the button is pressed.
active — bool, optional
Whether the shock is active by default when the control panel launches. This can be toggled on and off in the control panel later.
Default value: True
desc — str, optional
A long description to display as a tooltip.
Default value: None
Notes and Examples
charwickMar 24, 2020 at 4:08
This example shocks the
'rbd'breed parameter for the dwarf breed of agent-primitives with 2% probability each period by drawing from a normal distribution centered around the current value, and with a standard deviation of 4, bounded from below by 1.
charwickMar 24, 2020 at 3:45
The current population of any primitive is stored as a live-updating parameter
'agents_[primitive]'that you can update and shock. Increasing the value will spawn agents, and decreasing the value will cull them at random. See
This code registers a shock that reduces the population of human-primitive agents by half in period 2018.