Mathematical and Minischeme Appendix

Main Menu Previous Topic Next Topic

**Correspondence between the Time-Dependent Quantities and the Simulator's Agents**

At each moment in time, certain amounts of people leave one state
and enter another, which is modeled by the rival sharing of these amounts
between the corresponding agents. For example, every day a certain number
of untraced-susceptible individuals become infected, i.e. enter the first
stage of the disease. In the model, this corresponds to subtracting this
amount from state `S0`

, and adding it to `I01`

.

These dependencies are described by a system of 17 first-order ordinary differential equations. For instance,

Note that the first term of equation [1] is a negation of the first term of equation [2]. It equals the number of people that leave state S0, and enter state I01, i.e. the number of susceptible-untraced individuals that become infected in some small unit of time dt. This term is proportional to the number of currently infectious individuals - I3, who are responsible for new infections. It's also proportional to beta - a constant that is defined in "Smallpox Attack," and depends on the number of people that receive the disease from each infectious individual in a day.

Similarly, all the other terms in the 17 differential equations that describe this model can be interpreted as numbers of people leaving one state and entering another. Here are the rest of the equations:

We translated the above equations into our agent-based computational model. The model has 17 agents, each one corresponding to one of the time-dependent quantities, segments of the population. Two agents are connected as partners if and only if they are "connected" by a term in the differential equations. In other words, they are connected if at every moment in time there are people who travel between the segments of the population that these agents represent.

We chose to represent the exchange between these agents using a Multiple Types Model, in which each agent has a one-dimensional state vector associated with it. We used the state vector to hold the value of the agent's associated population. The Learning Functions for this component of the state vector are set to 0, enforcing conservation of population. All the computational work gets done in the Sharing Functions: for each agent, its sharing function evaluates to the number of people that leave this state to join a particular partner state. Very importantly, we turn on rival sharing, so that each time an agent shares a particular amount with her partner, the same amount is subtracted from her own state vector. Rival sharing would be inappropriate for modeling an exchange of non-rival goods, such as information, but is necessary for modeling an exchange of people under this model.

For example, here is the Sharing Production Function for Agent 0, which corresponds to the quantity S0 above, in the case of trace vaccination (TV). It corresponds almost exactly to equation [1] above.

Agent 0 (S0) sharing production function:

(* (cond (= (getpartnerid) 2)

(* beta (I-3) (self))

(and (= (getpartnerid) 6) (>= (gettime) (/ tau time-step)))

(* (CPRN) (self) r3 (I-3))

1 0)

time-step)

In other words, if the current partner is Agent 2 (state I01), then Agent 0 gives it the amount of population equal to the term shared by their differential equations, as discussed above. Similarly, if the current partner is Agent 6 (Q0), and we've reached the response time for the governmental services, Agent 0 gives some of its population to Agent 6, as some susceptible people are put on the vaccination queue. This corresponds to the second term on the right hand side of equation [1], which is also the first term on the right hand side of equation [5].

In case of mass vaccination (MV), Agent 0's sharing production function looks quite different:

(* (cond (and (= (getpartnerid) 2) (< (gettime) (/ tau time-step)))

(* beta (I-3) (self))

(and (= (getpartnerid) 6) (>= (gettime) (/ tau time-step)))

(/ (self) time-step)

1 0)

time-step)

In the few days between the onset of the infection and the start of vaccination, Agent 0 gives a number of infected individuals to Agent 2, as discussed above. However, in the case of MV, when the vaccination starts, the entire untraced population is transferred onto the vaccination queue, which means that Agent 0 (S0) gives everything to Agent 6.