2026. június 29., hétfő

EMS NETWORK MODEL

 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