# Problem in my code

Hello, can you please correct my code ? I have to do un small presentation and I’ve look for hours… I can’t find anything…
Here is the error:

and here the file of the code:

``````using Plots

function propagation_virus(taux_transmission, personnes_infectees_initiales, population_totale, duree_simulation)
# Initialisation des tableaux pour le suivi des données
temps = 1:duree_simulation
susceptibles = Int[population_totale - personnes_infectees_initiales]
infectes = Int[personnes_infectees_initiales]
recuperes = Int

plots = []  # Stockage des tracés pour créer le GIF

for jour in 2:duree_simulation
# Calcul du nombre de nouvelles infections
nouvelles_infections = Int[susceptibles[jour - 1] * taux_transmission * infectes[jour - 1] / population_totale]

# Calcul du nombre de récupérés (hypothétiquement, après un certain temps)
recuperes_jour = Int[infectes[jour - 1] - nouvelles_infections]

# Mise à jour des tableaux
push!(susceptibles, susceptibles[jour - 1] - nouvelles_infections)
push!(infectes, infectes[jour - 1] + nouvelles_infections - recuperes_jour)
push!(recuperes, recuperes[jour - 1] + recuperes_jour)

# Création d'un graphique à chaque étape
p = plot(temps[1:jour], susceptibles[1:jour], label="Susceptibles")
plot!(temps[1:jour], infectes[1:jour], label="Infectés")
plot!(temps[1:jour], recuperes[1:jour], label="Récupérés", xlabel="Jours", ylabel="Nombre de personnes", legend=true)
push!(plots, p)
end

return plots
end

# Paramètres de la simulation
taux_transmission = 0.2  # Taux de transmission (0.2 signifie qu'une personne infecte 20% de la population)
personnes_infectees_initiales = 1
population_totale = 1000
duree_simulation = 100

# Exécution de la simulation
plots = propagation_virus(taux_transmission, personnes_infectees_initiales, population_totale, duree_simulation)

# Création du GIF
anim = @animate for p in plots
p
end

gif(anim, "propagation_virus.gif", fps = 5)

``````

This is the same error you were having before. In line 14, you are trying to place a Float into an array of Integers. The quick fix is to remove all of the “`Int`” from your code. Test line-by-line to get a better understanding of what is going wrong rather than running the entire code at once.

(Your code formatting is better this time! But you should also copy and paste your error message into a code block between ````` rather than posting a screenshot and try to use a more descriptive title.)

1 Like

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 - 
ERROR: MethodError: no method matching -(::Int64, ::Vector{Int64})
For element-wise subtraction, use broadcasting with dot syntax: scalar .- array
``````
1 Like