실시간 현황
범례 (Legend)
시뮬레이션 상태
WiFi 위치추적
AI 엔진 상태
알고리즘 상세 (Algorithm Details)
본 시뮬레이션은 크루즈선 화재 발생 시 승객 대피 과정을 모사합니다. 9가지 수리 모델과 물리 기반 화재/연기 확산, 군중 역학이 통합 적용되어 있습니다.
🧭 A* 동적 위험 회피 경로탐색
각 승객 에이전트는 A* 알고리즘 변형을 사용하여 가장 가까운 안전한 출구까지의 최적 경로를 탐색합니다. 화재 및 연기 구역에 높은 비용(cost penalty)을 부여하여 위험 지역을 동적으로 회피합니다.
f(n) = g(n) + h(n) + R(n)R(n) = w_fire · D_fire(n) + w_smoke · D_smoke(n)
여기서 R(n)은 위험 가중치 함수이며, 화재 거리와 연기 밀도에 따라 노드별 추가 비용을 산정합니다. 경로는 화재 확산에 따라 실시간으로 재계산됩니다. Binary MinHeap 우선순위 큐를 사용하여 O(n log n) → O(n log n) 최적 시간복잡도로 탐색합니다.
🧑🤝🧑 Social Force Model (Eq. 1)
Helbing & Molnár 사회적 힘 모델을 적용하여 승객 간 자연스러운 충돌 회피와 군중 역학을 모사합니다. 각 에이전트에 작용하는 힘은 목표 방향력, 사회적 반발력, 벽면 반발력으로 구성됩니다.
F_i = F_desire + Σ F_social + Σ F_wall + F_randomF_social = A · exp(-d_ij / B), A=2.0, B=15px
가까운 승객 간 지수 감소 반발력이 작용하여 병목 구간에서의 자연스러운 분산 효과를 구현합니다.
🔥 화재 확산 + 이류-확산 모델 (Eq. 5-7)
화재는 발화 지점으로부터 비선형 확산됩니다. 연기는 Navier-Stokes 기반 이류-확산(Advection-Diffusion) 방정식으로 바람 방향에 따라 비대칭 확산됩니다.
r_fire(t) = r_0 + α · t^1.3∂C/∂t + u·∇C = D·∇²C + S
연기 중심 이동: x_s += u_wind · cos(θ) · dt
해상 바람의 풍향/풍속이 연기 확산 방향과 형태(타원 비율)에 영향을 줍니다. 풍하 방향으로 연기가 더 넓게 확산됩니다.
🕶️ Beer-Lambert 가시성 모델 (Eq. 10)
연기 농도에 따른 가시 거리를 Beer-Lambert 법칙으로 산출합니다. 가시성 저하는 승객 이동 속도에 직접 영향을 줍니다.
V(C) = K / C, K = 8 (발광 표지판 기준)v_smoke = v_base · max(0.1, V/30)
맑은 공기(30m 가시거리)에서 완전 속도, 농연(1m 이하)에서 최대 90% 속도 감소. 통계 패널에서 실시간 평균 가시성을 모니터링할 수 있습니다.
🗺️ 다중 위험 동적 리스크 맵 (Eq. 11)
화재, 연기, 구조 손상, 군중 밀도를 가중 합산한 종합 위험도 지도를 실시간으로 생성합니다. "위험지도" 버튼으로 히트맵 오버레이를 활성화할 수 있습니다.
R(x,y,t) = w_F·F + w_S·S + w_D·D + w_C·Cw_F=0.35, w_S=0.30, w_D=0.20, w_C=0.15
녹색(안전) → 황색(주의) → 적색(위험) 컬러맵으로 시각화되며, A* 경로탐색의 비용 함수에도 반영됩니다.
⚕️ 건강 상태 인지 대피 (Eq. 20-22)
승객을 6가지 유형(건강한 성인, 고령자, 어린이, 휠체어, 임산부, 부상자)으로 분류하고 개인별 이동능력계수(μ_i)에 따라 속도를 조절합니다.
μ_i ∼ U[μ_min, μ_max] (유형별 범위)v_i = μ_i · v_base · f(age, condition)
Priority = (1 - μ_i) · w_health + d_fire / d_max · w_prox
이동능력이 낮은 승객에게 높은 대피 우선순위가 부여되며, 시각적으로 각 유형별 고유 색상으로 구분됩니다.
👥 Greenshields 군중 밀집도 모델 (Eq. 4)
교통류 이론의 Greenshields 기본 다이어그램을 군중 보행에 적용합니다. 좁은 복도나 출구 근처에서 병목이 발생하면 속도가 비선형적으로 감소합니다.
v(ρ) = v_max · (1 - ρ/ρ_max)^γγ = 1.4 (밀집도 감도 계수)
개인별 건강 상태에 따른 v_max와 결합하여 실질 이동 속도가 결정됩니다. 출구 근처 집중 시 자동 분산 로직이 적용됩니다.
🚪 객실 출입구 및 이동 경로
각 객실에는 복도 방향으로 1개의 출입구(노란색 표시)가 있습니다. 승객은 반드시 출입구를 통해 복도로 나온 후 출구 또는 계단을 향해 이동합니다. 계단에 도달한 승객은 다른 층으로 이동하여 안전하게 대피한 것으로 간주됩니다. 레스토랑은 4방향(상/하/좌/우) 출입구가 있어 다양한 경로로 대피 가능합니다.
이동 경로: 객실 내부 → 출입구(doorway) → 복도(corridor) → 계단(stairway)/출구(exit) → 대피 완료🧯 소화기 사용 시스템 (Fire Extinguisher)
복도 벽면, 계단 근처, 주요 교차점에 소화기(빨간 십자 표시)가 배치되어 있습니다. 화재로 모든 대피 경로가 차단된 승객은 다음 절차를 실행합니다:
- 가장 가까운 소화기 위치로 이동 (주황색 표시)
- 소화기를 들고 화재 근처로 접근
- 3초간 진압 활동 수행 (깜박임 표시)
- 화재 반경 60% 감소 → 통로 확보 후 대피 재개
소화기 1개당 1회 사용 (사용 후 회색 표시)
🛡️ AI 출구 분산 최적화 (Exit Crowd Balancing)
기존 대피 시스템은 모든 승객에게 가장 가까운 출구만 안내합니다. 이 방식은 특정 출구에 수백 명이 몰리는 병목 현상을 유발하여 대피 시간이 급격히 증가합니다.
FireNavi는 각 출구의 실시간 배정 인원을 추적하여, 이미 많은 승객이 향하는 출구에 혼잡도 패널티를 부과합니다. 이를 통해 승객이 자연스럽게 여러 출구와 계단으로 분산됩니다.
Score(exit) = Distance + FirePenalty + SmokePenalty + CrowdPenaltyCrowdPenalty = N_assigned × 40
(N_assigned = 해당 출구에 현재 배정된 승객 수)
예: 출구 A에 이미 15명이 배정되었다면, 패널티 = 15 × 40 = 600이 추가됩니다. 결과적으로 더 먼 출구 B(거리 500 + 패널티 0 = 500)가 혼잡한 출구 A(거리 300 + 패널티 600 = 900)보다 더 나은 선택이 됩니다. AI가 전체 최적을 자동으로 계산합니다.
⚕️ 취약 계층 우선 경로 AI (Priority Rescue Routing)
고령자, 장애인(휠체어), 어린이, 임산부, 부상자 등 이동 취약 계층과 동반 보호자에게는 일반 승객과 완전히 다른 경로 계산 기준이 적용됩니다.
Score_priority(exit) = Distance + FirePenalty × α + SmokePenalty × α + CrowdPenaltyα = 2.0 (우선구조 대상), α = 1.0 (일반 승객)
핵심 차별점: 화재/연기 패널티가 2배로 적용되므로, 취약 계층은 조금 멀더라도 연기가 없는 더 안전한 출구를 자동으로 선택합니다. 일반 성인이 연기 속을 빠르게 통과하는 경로를 선택할 때, 고령자나 휠체어 사용자는 연기 없는 우회 경로를 배정받습니다.
연기 구간 통과 허용 (속도 감소)
가장 가까운 출구 배정
연기 구간 원천 회피
가장 안전한 출구 배정
🧠 개인화 AI 출구 배정 (Personalized Exit Assignment)
FireNavi의 출구 선택 함수는 승객 개인의 건강 상태, 이동 능력, 유형 정보를 입력받아 각 개인에게 최적화된 출구를 배정합니다. 같은 위치에 있더라도 건강한 성인과 휠체어 사용자는 서로 다른 출구를 안내받을 수 있습니다.
findNearestSafeExit(x, y, passenger)passenger = { typeKey, isPriority, speed, mu, ... }
→ isPriority ? smokeMultiplier = 2.0 : smokeMultiplier = 1.0
→ 6가지 유형별 차별화된 출구 스코어링
이 함수는 매 경로 재계산 시(1~2.5초 간격) 호출되어, 화재 확산에 따라 실시간으로 출구를 재배정합니다. 멈춘 승객은 더 자주(0.2초 간격) 재탐색하여 대안 출구를 찾습니다.
2. 승객~출구 거리 계산 + 근접 보너스 (50px/100px)
3. 출구 주변 화재/연기 패널티 산정 (× α)
4. 경로상 화재 장애물 체크 (직선 샘플링)
5. 출구별 혼잡도 패널티 + 유형별 가중치 합산 → 최저 스코어 출구 배정
🧠 AI 소방관 최적 투입 위치 (Optimal Firefighter Positioning)
대피 진행 중 소방관을 투입할 때, AI가 6가지 요소를 종합 분석하여 가장 효과적인 접근 위치와 우선순위를 자동으로 결정합니다.
Position Score = Upwind(40) + ExitAccess(30) - PassengerBlock(5×N) + MultiFireCover(10) - FFOverlap(20) + CorridorBonus(15)2. 출구 접근성 (진입 속도)
3. 승객 대피 경로 비간섭
4. 복수 화재 커버 가능성
5. 기존 소방관 중복 방지
6. 복도 위치 우선 (이동 안전)
2. 경로 차단 승객 수 (×30)
3. 연기 영향 승객 수 (×15)
4. 출구 위협 수 (×40)
5. 화재 반경 크기 (×2)
6. 기존 투입 소방관 (-80)
🧠 AI 최적 투입 버튼을 누르면, Decision Engine이 위 점수를 실시간 계산하여 가장 높은 우선순위 화재에 최적 위치에서 소방관 4명을 자동 투입합니다. 캔버스에 보라색 십자 마커로 추천 위치가 표시됩니다.