2026. június 26., péntek

Járványok terjedésének modellezése

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