# 7. Differential Equations

This step illustrates how to use differential equations.

## Formulationâ€‹

We are interested in the spreading of the disease inside the buildings. In order to model it, we will use differential equations. So, we will need to:

- Add two global variables to define the building epidemic properties (
) and numerical integration parameter (`beta`

).`h`

- Add new variables for the buildings (
,`I`

,`S`

,`T`

,`t`

) to manage epidemic;`I_to1`

- Define differential equations for disease spreading inside buildings.
- Add one behavior for buildings for the spreading of the disease.

## Model Definitionâ€‹

### global variablesâ€‹

We define two new global variables used in the disease spreading dynamic inside the buildings: (i) `beta`

is the contamination rate, and `h`

is the integration step (used in the `solve`

statement).

`global {`

...

float beta <- 0.01;

float h <- 0.1;

...

}

### buildingâ€‹

In order to define the disease spread dynamics, we define several variables that will be used by the differential equations:

: float, number of people infected in the building.`I`

: float, number of people not infected in the building.`S`

: float, the total number of people in the building.`T`

: float, the current time of the equation system integration.`t`

: float, the remaining number of people infected (float number lower between 0 and 1 according to the differential equations).`I_to1`

`species building {`

...

float I;

float S;

float T;

float t;

float I_to1;

...

}

Then, we define the differential equations system that will be used for the disease spreading dynamic. Note that to define a differential equation system we use the block ** equation** + name. These equations are the classic ones used by SI mathematical models.

`species building {`

....

equation SI{

diff(S,t) = (- beta * S * I / T) ;

diff(I,t) = ( beta * S * I / T) ;

}

...

}

At last, we define a new reflex for the building called ** epidemic** that will be activated only when there is someone inside the building. This reflex first computes the number of people inside the building (

`T`

), then the number of not infected people (`S`

) and finally the number of infected ones (`I`

).If there is at least one people infected and one people not infected, the differential equations is integrated (according to the integration step value `h`

) with the method Runge-Kutta 4 to compute the new value of infected people. We then sum the old value of `I_to1`

with the number of people newly infected (this value is a float and not an integer). Finally, we cast this value as an integer, ask the corresponding number of not infected people to become infected, and decrement this integer value to `I\_to1`

.

`species building {`

...

reflex epidemic when: nb_total > 0 {

T <- float(nb_total);

S <- float(nb_total - nb_infected);

I <- T - S;

float I0 <- I;

if (I > 0 and S > 0) {

solve SI method: #rk4 step_size: h;

I_to1 <- I_to1 + (I - I0);

int I_int <- min([int(S), int(I_to1)]);

I_to1 <- I_to1 - I_int;

ask (I_int among (people_in_building where (!each.is_infected))) {

is_infected <- true;

}

}

}

...

}

## Complete Modelâ€‹

`https://github.com/gama-platform/gama.old/blob/GAMA_1.8.2/msi.gama.models/models/Tutorials/Incremental%20Model/models/Incremental%20Model%207.gaml`