A járványok terjedésének modellezésére a legelterjedtebb matematikai eszköz az úgynevezett SIR (Fogékony, Fertőző, Gyógyult) modell. Ezzel a dinamikus rendszerrel szimulálható a betegség terjedése, a csúcspontok elérése és a lefolyás időtartama.A kipusztulás (amikor mindenki megfertőződik és belehal) egy speciális, végzetes forgatókönyv, ami akkor következik be, ha a betegség halálozási rátája \(100\%\)
-----------
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint
# 1. A modell paraméterei
N = 8000000000 # Kezdeti összlakosság (pl. 8 milliárd)
I0 = 1 # Kezdeti fertőzöttek száma
R0 = 0 # Kezdeti gyógyultak/halottak száma
S0 = N - I0 - R0 # Kezdeti fogékonyak száma
beta = 0.4 # Fertőzési ráta (kontaktusok száma * fertőzési esély)
gamma = 0.1 # Átlagos gyógyulási ráta (itt: 1/10 nap)
mortality_rate = 1.0 # Halálozási ráta (1.0 = minden fertőzött meghal)
# 2. A differenciálegyenlet-rendszer (SIR modell)
def sir_model(y, t, N, beta, gamma, mortality):
S, I, R = y
# Fogékonyak számának változása
dSdt = -beta * S * I / N
# Fertőzöttek számának változása
dIdt = (beta * S * I / N) - (gamma * I)
# Gyógyultak és halottak számának változása
dRdt = gamma * I * mortality
return dSdt, dIdt, dRdt
# 3. Időtartomány meghatározása (pl. 300 nap)
t = np.linspace(0, 300, 301)
# 4. A szimuláció futtatása
y0 = S0, I0, R0
ret = odeint(sir_model, y0, t, args=(N, beta, gamma, mortality_rate))
S, I, R = ret.T
# 5. Eredmények vizualizációja
plt.figure(figsize=(10, 6))
plt.plot(t, S, 'b', alpha=0.7, linewidth=2, label='Fogékony (Susceptible)')
plt.plot(t, I, 'r', alpha=0.7, linewidth=2, label='Fertőzött (Infected)')
plt.plot(t, R, 'k', alpha=0.7, linewidth=2, label='Elhunyt (Dead/Removed)')
plt.title('Járvány terjedése és az emberiség kipusztulása', fontsize=14)
plt.xlabel('Idő (nap)', fontsize=12)
plt.ylabel('Népesség', fontsize=12)
plt.ylim(0, N + N*0.1)
plt.legend(loc='best')
plt.grid(True, linestyle='--', alpha=0.6)
plt.show()
# 6. Mennyi ideig tart?
# Megkeressük azt a napot, amikor a fertőzöttek száma 0 alá csökken
infection_days = np.where(I < 1)[0]
if len(infection_days) > 0:
end_day = np.max(infection_days)
print(f"A szimuláció szerint a járvány lefolyása: {end_day} nap.")
else:
print("A járvány nem ért véget a vizsgált időszakon belül.")
---------
A járvány 5 év alatt teljesen kiírtja az emberi fajt.
------------
Könyvek
https://mek.oszk.hu/08400/08435/08435.pdf
https://mtmi.unideb.hu/pluginfile.php/554/mod_resource/content/3/thinkcspy3.pdf
Nincsenek megjegyzések:
Megjegyzés küldése