Ez már egy kontrollelméleti + mesterséges intelligencia alapú epidemiológiai optimalizációs probléma: egy rendszer, amely a fertőzés dinamikája alapján dinamikusan szabályozza a karantén erősségét.
Az alábbi modell egy adaptív kontrollrendszer, ahol: SIR járványmodell fut a „karantén erősség” csökkenti a fertőzési rátát (β) egy AI-szerű szabályozó dönt minden lépésben!
-------------
import numpy as np
import matplotlib.pyplot as plt
print("=" * 75)
print("AI-VEZÉRELT ADAPTÍV KARANTÉN STRATÉGIA")
print("SIR modell + egyszerű megerősítéses tanulás (Q-learning heurisztika)")
print("=" * 75)
# -----------------------------
# PARAMÉTEREK
# -----------------------------
N = 1000
beta_base = 0.35
gamma = 0.05
T = 250
# karantén szintek (0 = nincs, 1 = erős)
actions = [0.0, 0.3, 0.6, 0.85]
print(f"Népesség: {N}")
print(f"Alap fertőzési ráta β: {beta_base}")
print(f"Gyógyulási ráta γ: {gamma}")
print(f"Karantén akciók: {actions}")
# -----------------------------
# ÁLLAPOT
# -----------------------------
S = N - 10
I = 10
R = 0
# Q-tábla (diszkretizált állapot: fertőzöttek aránya)
q_table = np.zeros((10, len(actions)))
def state_to_index(I):
ratio = I / N
return min(9, int(ratio * 10))
history_S, history_I, history_R = [], [], []
history_action = []
# -----------------------------
# SZIMULÁCIÓ
# -----------------------------
print("\nSzimuláció indul...")
for t in range(T):
# ---- állapot diszkretizálása
state_idx = state_to_index(I)
# ---- AI döntés (exploráció + exploitáció)
if np.random.rand() < 0.2:
action_idx = np.random.randint(len(actions))
else:
action_idx = np.argmax(q_table[state_idx])
quarantine = actions[action_idx]
# ---- effektív fertőzési ráta
beta = beta_base * (1 - quarantine)
# ---- SIR dinamika (stochasztikus)
new_infections = np.random.binomial(S, 1 - np.exp(-beta * I / N))
new_recoveries = np.random.binomial(I, gamma)
S = max(S - new_infections, 0)
I = max(I + new_infections - new_recoveries, 0)
R = N - S - I
# ---- jutalomfüggvény
cost_infection = I / N
cost_lockdown = quarantine ** 2
reward = -(cost_infection + 0.3 * cost_lockdown)
# ---- Q-learning frissítés
next_state_idx = state_to_index(I)
lr = 0.1
discount = 0.9
q_table[state_idx, action_idx] += lr * (
reward +
discount * np.max(q_table[next_state_idx]) -
q_table[state_idx, action_idx]
)
# ---- mentés
history_S.append(S)
history_I.append(I)
history_R.append(R)
history_action.append(quarantine)
if t % 25 == 0:
print(
f"t={t:3d} | "
f"I={I:4d} | "
f"S={S:4d} | "
f"karantén={quarantine:.2f}"
)
print("\nSzimuláció befejezve.")
# -----------------------------
# EREDMÉNYEK
# -----------------------------
plt.figure(figsize=(12, 6))
plt.plot(history_S, label="Fogékony (S)")
plt.plot(history_I, label="Fertőzött (I)", linewidth=2)
plt.plot(history_R, label="Gyógyult (R)")
plt.plot(np.array(history_action) * N, '--', label="Karantén erősség (skálázva)")
plt.title("AI-vezérelt adaptív karantén stratégia")
plt.xlabel("Idő")
plt.ylabel("Populáció")
plt.legend()
plt.grid()
plt.show()
# -----------------------------
# ANALÍZIS
# -----------------------------
peak_infection = max(history_I)
avg_lockdown = np.mean(history_action)
print("\nÖSSZEGZÉS")
print("-" * 40)
print(f"Csúcsfertőzés: {peak_infection}")
print(f"Átlagos karantén szint: {avg_lockdown:.2f}")
if peak_infection < N * 0.2:
print("Eredmény: sikeres járványgörbe-lapítás")
else:
print("Eredmény: túlterhelt rendszer")
---------
AI-VEZÉRELT ADAPTÍV KARANTÉN STRATÉGIA
SIR modell + egyszerű megerősítéses tanulás (Q-learning heurisztika)
===========================================================================
Népesség: 1000
Alap fertőzési ráta β: 0.35
Gyógyulási ráta γ: 0.05
Karantén akciók: [0.0, 0.3, 0.6, 0.85]
Szimuláció indul...
t= 0 | I= 13 | S= 986 | karantén=0.30
t= 25 | I= 307 | S= 520 | karantén=0.00
t= 50 | I= 289 | S= 72 | karantén=0.85
t= 75 | I= 106 | S= 28 | karantén=0.30
t=100 | I= 24 | S= 25 | karantén=0.00
t=125 | I= 7 | S= 22 | karantén=0.00
t=150 | I= 1 | S= 22 | karantén=0.00
t=175 | I= 0 | S= 22 | karantén=0.60
t=200 | I= 0 | S= 22 | karantén=0.00
t=225 | I= 0 | S= 22 | karantén=0.60
ÖSSZEGZÉS
----------------------------------------
Csúcsfertőzés: 471
Átlagos karantén szint: 0.20
Eredmény: A túlterhelt rendszer miatt 50%-al több halálozási arány!
Nincsenek megjegyzések:
Megjegyzés küldése