층 선택:
화재 위치를 클릭하여 설정하세요
"화재 배치 모드" 버튼을 먼저 누르세요
속도 1x
승객 수

실시간 현황

대피 완료 인원 0
남은 인원 0
위험 구역 인원 0
경과 시간 0.0s
평균 대피 시간 --
위험 구역 수 0
평균 가시성 30m
승객 유형 분포 --
대피 진행률 0%

범례 (Legend)

복도 (Corridor)
객실 (Cabin)
레스토랑
기관실
집결지
출구 (Exit)
건강한 성인
고령자
어린이
휠체어
임산부
부상자
화재
연기
계단
대피 완료
출입구
소화기
소화 중
경로탐색 중

시뮬레이션 상태

모드 대기 중
화재 발생 수 0
화재 확산 반경 0px
소화기 잔여 -
소화 활동 중 0명
경로탐색 중 0명
🚒 소방관 투입 0명
🔥 진압 완료 0건

알고리즘 상세 (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_random
F_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·C
w_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)

복도 벽면, 계단 근처, 주요 교차점에 소화기(빨간 십자 표시)가 배치되어 있습니다. 화재로 모든 대피 경로가 차단된 승객은 다음 절차를 실행합니다:

  1. 가장 가까운 소화기 위치로 이동 (주황색 표시)
  2. 소화기를 들고 화재 근처로 접근
  3. 3초간 진압 활동 수행 (깜박임 표시)
  4. 화재 반경 60% 감소 → 통로 확보 후 대피 재개
진압 후: r_fire → r_fire * 0.4, r_smoke → r_smoke * 0.5
소화기 1개당 1회 사용 (사용 후 회색 표시)