Diszkrét esemény modell betegek Poisson-szerű érkezése gráfelmélettel, városi közlekedési hálózat figyelembevételével, shortest path routing végzett operációkutatás az erőforrás-allokáció (mentők) greedy dispatch policy valós teljesítménymutatóival. response time load balancing bottleneck detection mentők „versenyeznek” a betegekért torlódó várakozás egyes kórházak túlterhelődése reakcióidő ingadozás.
-------------
import numpy as np
import matplotlib.pyplot as plt
print("=" * 80)
print("MENTŐLOGISZTIKA SZIMULÁCIÓ (EMS DISPATCH MODEL)")
print("Hálózatalapú sürgősségi ellátás optimalizáció")
print("=" * 80)
# -----------------------------
# 1. VÁROSI HÁLÓZAT (GRÁF)
# -----------------------------
N = 30
rng = np.random.default_rng(42)
adj = [[] for _ in range(N)]
dist = np.full((N, N), np.inf)
np.fill_diagonal(dist, 0)
for i in range(N):
for j in range(i + 1, N):
if rng.random() < 0.15:
w = int(rng.integers(2, 15))
adj[i].append((j, w))
adj[j].append((i, w))
dist[i, j] = w
dist[j, i] = w
# Floyd-Warshall
for k in range(N):
for i in range(N):
for j in range(N):
if dist[i, k] + dist[k, j] < dist[i, j]:
dist[i, j] = dist[i, k] + dist[k, j]
# kórházak
hospitals = [0, 5, 10, 20]
# mentők indulási helyei
ambulances = [1, 6, 12]
print(f"Csomópontok: {N}")
print(f"Kórházak: {hospitals}")
print(f"Mentők száma: {len(ambulances)}")
# -----------------------------
# 2. SEGÉDFÜGGVÉNYEK
# -----------------------------
def shortest_time(a, b):
return dist[a, b]
def nearest_hospital(node):
return min(hospitals, key=lambda h: shortest_time(node, h))
# -----------------------------
# 3. SZIMULÁCIÓ
# -----------------------------
T = 100
patients = []
response_times = []
print("\nSzimuláció indul...")
for t in range(T):
if rng.random() < 0.6:
patient_node = int(rng.integers(0, N))
patients.append(patient_node)
if patients:
patient = patients.pop(0)
ambulance = min(ambulances, key=lambda a: shortest_time(a, patient))
travel_to_patient = shortest_time(ambulance, patient)
hospital = nearest_hospital(patient)
travel_to_hospital = shortest_time(patient, hospital)
if np.isinf(travel_to_patient) or np.isinf(travel_to_hospital):
total_time = np.inf
else:
total_time = travel_to_patient + travel_to_hospital
response_times.append(total_time)
ambulances[ambulances.index(ambulance)] = hospital
if t % 10 == 0:
print(f"t={t:3d} | várakozó betegek: {len(patients)}")
print("\nSzimuláció befejezve.")
# -----------------------------
# 4. EREDMÉNYEK
# -----------------------------
finite_times = [x for x in response_times if np.isfinite(x)]
plt.figure(figsize=(10, 5))
plt.plot(response_times, label="Reakcióidő (mentés + szállítás)")
if finite_times:
plt.axhline(np.mean(finite_times), color='red', linestyle='--', label="Átlag")
plt.title("Mentőlogisztikai reakcióidők")
plt.xlabel("Esemény")
plt.ylabel("Idő (egység)")
plt.legend()
plt.grid()
plt.show()
# -----------------------------
# 5. STATISZTIKA
# -----------------------------
print("\nÖSSZEGZÉS")
print("-" * 40)
print(f"Esetek száma: {len(response_times)}")
if finite_times:
print(f"Átlagos reakcióidő: {np.mean(finite_times):.2f}")
print(f"Legjobb eset: {np.min(finite_times)}")
print(f"Legrosszabb eset: {np.max(finite_times)}")
else:
print("Nem volt teljesíthető eset.")
-----------------
================================================================================
MENTŐLOGISZTIKA SZIMULÁCIÓ (EMS DISPATCH MODEL)
Hálózatalapú sürgősségi ellátás optimalizáció
================================================================================
Csomópontok: 30
Kórházak: [0, 5, 10, 20]
Mentők száma: 2
ÖSSZEGZÉS
----------------------------------------
Esetek száma: 59
Átlagos reakcióidő: 25.68
Legjobb eset: 10.0
Legrosszabb eset: 42.0
--------------------

Nincsenek megjegyzések:
Megjegyzés küldése