To be even clearer:
nouvelles_infections = Int[susceptibles[jour - 1] * taux_transmission * infectes[jour - 1] / population_totale]
Here you are saying the number of new infections is given by the number of susceptible agents in the population yesterday, multiplied by a transmission rate and the share of infected in the total population. Clearly it is unlikely that this number will be an integer - the transmission rate is probably not an exact integer, and neither will the share of infected in the total population be. So this calculation is bound to create a non-integer number; if you want the number to be integer you have to round it explicitly, so:
nouvelles_infections = round(Int, susceptibles[jour - 1] * taux_transmission * infectes[jour - 1] / population_totale)
Note here I’ve replaced Int[...]
with round(Int, ...)
. This will give a single integer number which is then assigned to nouvelles_infections
. It’s not clear to me why you are doing Int[...]
here but note that this creates an array of integers with a single number in it, which is not the same as just the number. Later on you are doing:
push!(susceptibles, susceptibles[jour - 1] - nouvelles_infections)
which suggests that susceptibles
is a vector that you are using to track the number of not-yet-infected over time. Then susceptibles[jour-1]
is an element of that vector, i.e. likely a single integer, which means susceptibles[jour - 1] - nouvelles_infections
will fail if nouvelles_infections
is an array rather than an integer:
julia> 4 - [2]
ERROR: MethodError: no method matching -(::Int64, ::Vector{Int64})
For element-wise subtraction, use broadcasting with dot syntax: scalar .- array