Skip to content

About

Fire evacuation simulation that automatically extracts grids from evacuation guide map images and controls emergency lights in real time using PPO reinforcement learning

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

ย 

History

132 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

ํ”ผ๋‚œ์•ˆ๋‚ด๋„ ๊ทธ๋ฆฌ๋“œ ์ž๋™ ์ถ”์ถœ ๋ฐ ๊ฐ•ํ™”ํ•™์Šต ๊ธฐ๋ฐ˜ ์œ ๋„๋“ฑ ์ œ์–ด๋ฅผ ํ†ตํ•œ ํ™”์žฌ ๋Œ€ํ”ผ ์‹œ๋ฎฌ๋ ˆ์ด์…˜

์กฐ์ˆ˜์—ฐ ยท ์ž„๊ฐ€์˜ ยท ์ฃผ์š”์…‰ ยท ๊น€๋ณ‘์ˆ˜ (์„œ์šธ๊ณผํ•™๊ธฐ์ˆ ๋Œ€ํ•™๊ต ์ฐฝ์˜์œตํ•ฉ๋Œ€ํ•™ ์ธ๊ณต์ง€๋Šฅ์‘์šฉํ•™๊ณผ)


๊ฐœ์š”

ํ”ผ๋‚œ์•ˆ๋‚ด๋„ ์ด๋ฏธ์ง€์—์„œ ๊ทธ๋ฆฌ๋“œ ๋งต์„ ์ž๋™์œผ๋กœ ์ถ”์ถœํ•˜๋Š” ์˜์ƒ์ฒ˜๋ฆฌ ๋ชจ๋“ˆ๊ณผ, ๊ฐ•ํ™”ํ•™์Šต(PPO)์œผ๋กœ ์œ ๋„๋“ฑ ๋ฐฉํ–ฅ์„ ์‹ค์‹œ๊ฐ„ ์ œ์–ดํ•˜๋Š” ๊ฐ•ํ™”ํ•™์Šต ๋ชจ๋“ˆ๋กœ ๊ตฌ์„ฑ๋œ 3๋‹จ๊ณ„ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ œ์•ˆํ•œ๋‹ค. ๊ฐ ๋ชจ๋“ˆ์€ ๋…๋ฆฝ์ ์œผ๋กœ ์„ค๊ณ„ยท๊ฒ€์ฆํ–ˆ์œผ๋ฉฐ, ๋ชจ๋“ˆ ๊ฐ„ ๊ฒฐํ•ฉ์€ ์•„๋ž˜์—์„œ ๋ฐ”๋กœ ์„ค๋ช…ํ•˜๋“ฏ ์•„์ง ์ด๋ค„์ง€์ง€ ์•Š์•˜๋‹ค(์ƒ์„ธ: "ํ•œ๊ณ„ ๋ฐ ํ–ฅํ›„ ์—ฐ๊ตฌ" ์ ˆ).
๊ธฐ์กด ์ •์  ์œ ๋„๋“ฑ๊ณผ ๋‹ฌ๋ฆฌ ํ™”์žฌ ํ™•์‚ฐยท๊ตฐ์ค‘ ๋ฐ€์ง‘์„ ๋ฐ˜์˜ํ•œ ๋™์  ๊ฒฝ๋กœ ๊ฐฑ์‹ ์ด ๊ฐ€๋Šฅํ•˜๊ณ , ๋ฐฉ์žฌ ์š”์›์˜ ์ธ์ง€์  ๋ถ€ํ•˜๋„ ๋‚ฎ์ถ˜๋‹ค.

[ํ”ผ๋‚œ์•ˆ๋‚ด๋„ ์ด๋ฏธ์ง€]                     โ† Stage 1์€ ์ด ์‚ฌ์ง„ ํ•œ ์žฅ์œผ๋กœ ๋…๋ฆฝ ๊ฒ€์ฆ๋จ
      โ”‚  Stage 1: OpenCV ์ƒ‰์ƒ ๋งˆ์Šคํ‚น โ†’ ๊ทธ๋ฆฌ๋“œ ๋ณ€ํ™˜
      โ–ผ
[40ร—25 ๊ทธ๋ฆฌ๋“œ ๋งต (grid_map.npy)]        โ† ์‹ค์ œ๋กœ๋Š” ์•„๋ž˜ ํ™”์‚ดํ‘œ๋กœ ์•ˆ ์ด์–ด์ง(๋ฏธํ†ตํ•ฉ)
      โ”Š  Stage 2: ์ปค๋ฆฌํ˜๋Ÿผ ๊ธฐ๋ฐ˜ PPO ๊ฐ•ํ™”ํ•™์Šต    Stage 2๊ฐ€ ํ•™์Šต์— ์“ฐ๋Š” ๊ทธ๋ฆฌ๋“œ๋Š”
      โ–ผ                                         Unity ์”ฌ์—์„œ ๋ณ„๋„๋กœ ๋งŒ๋“  ๊ฒƒ
[ํ•™์Šต๋œ PPO ์ •์ฑ…: 3๊ฐœ ์—ฐ์† ํ–‰๋™์œผ๋กœ ์œ ๋„๋“ฑ ์‹ค์‹œ๊ฐ„ ์ œ์–ด]
      โ”‚  Stage 3: Python ์‹œ๊ฐํ™” / Unity 3D ์‹œ๋ฎฌ๋ ˆ์ด์…˜
      โ–ผ
[2D GIF ๊ฒ€์ฆ] ยทยทยทยทยทยทยทยทยทยทยทยทยทยท [Unity ๊ธฐ๋ฐ˜ 3D ์‹œ๊ฐํ™”]

Stage 1๊ณผ Stage 2๋Š” ๊ฐ๊ฐ ๋…๋ฆฝ์ ์œผ๋กœ ๊ฒ€์ฆ๋๋‹ค. ์ง€๊ธˆ ํ•™์Šต๋œ ์ •์ฑ…์ด ์“ฐ๋Š” ๊ทธ๋ฆฌ๋“œ๋Š” Unity ์—๋””ํ„ฐ์—์„œ ๋งŒ๋“  ์”ฌ์„ ๋‚ด๋ณด๋‚ธ ๊ฒƒ์ด๊ณ , Stage 1(์‚ฌ์ง„โ†’๊ทธ๋ฆฌ๋“œ ์ž๋™ ์ถ”์ถœ)์€ ๊ฐ™์€ ๊ฑด๋ฌผ ์‚ฌ์ง„ ํ•œ ์žฅ์„ ๋ณ„๋„๋กœ ๊ฒ€์ฆํ–ˆ๋‹ค(์ž์ฒด ์ถœ๊ตฌ ๋„๋‹ฌ ๊ฐ€๋Šฅ๋ฅ  100%, ์ถœ๊ตฌ ๊ฒ€์ถœ 100%. ์ƒ์„ธ: Stage 1 ์ถ”์ถœ ์ •ํ™•๋„ ํ‰๊ฐ€). ๋‘ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ํ•˜๋‚˜๋กœ ์ž‡๋Š” ๊ฑด ๋‹ค์Œ ๋‹จ๊ณ„๋‹ค.


๊ด€๋ จ ์—ฐ๊ตฌ

๋™์  ๋Œ€ํ”ผ ์œ ๋„(dynamic evacuation guidance)์— ๊ฐ•ํ™”ํ•™์Šต์„ ์ ์šฉํ•œ ์„ ํ–‰ ์—ฐ๊ตฌ์™€ ๋น„๊ตํ–ˆ๋‹ค. ์ฐจ๋ณ„์ ์€ ๋‘ ๊ฐ€์ง€๋‹ค: (1) ๊ทธ๋ฆฌ๋“œ ํฌ๊ธฐ์— ๋…๋ฆฝ์ ์ธ 4์ฐจ์› ๊ณ ์ • ๊ด€์ธก(F1, F2, F14, F15 โ€” ํ™”์žฌ ์œ„ํ˜‘๊ณผ ๊ทธ ๋ณ€ํ™”์œจ๋งŒ ๋‚จ๊ธด ์ถ•์†ŒํŒ, ์ƒ์„ธ๋Š” ์•„๋ž˜ "๊ด€์ธก ๊ณต๊ฐ„" ์ ˆ)์œผ๋กœ ์ธ์› ์ˆ˜ N๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ ์ถ”๋ก  ์†๋„๊ฐ€ ์ผ์ •, (2) A*๋ฟ ์•„๋‹ˆ๋ผ ์œ„ํ—˜์ •๋ณด๋ฅผ ๋™์ผํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๋น„ํ•™์Šต Hazard-aware BFS๊นŒ์ง€ ๋น„๊ตํ•ด "๊ฐ•ํ™”ํ•™์Šต์ด ๊ธฐ์—ฌํ•œ ๋ชซ"๊ณผ "์œ„ํ—˜์ •๋ณด ์‚ฌ์šฉ ์ž์ฒด๊ฐ€ ๊ธฐ์—ฌํ•œ ๋ชซ"์„ ๋ถ„๋ฆฌํ•ด์„œ ์ œ์‹œ.

์—ฐ๊ตฌ ์ ‘๊ทผ ๋ฐฉ๋ฒ• ์ด ํ”„๋กœ์ ํŠธ์™€์˜ ์ฐจ์ด
Xie et al. (2025) [3] CTM ๊ธฐ๋ฐ˜ ๋ฉ”์กฐ์Šค์ฝ”ํ”ฝ ๊ตฐ์ค‘ ๋ชจ๋ธ + PyroSim ํ™”์žฌ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ + QMIX(MARL)๋กœ ๋™์  ํ‘œ์ง€ํŒ ์ตœ์ ํ™” ๊ฐ€์žฅ ๊ทผ์ ‘ํ•œ ์„ ํ–‰ ์—ฐ๊ตฌ(๋™์  ์œ ๋„๋“ฑ + ํ™”์žฌ ์ „ํŒŒ + RL). ๋ฉ€ํ‹ฐ์—์ด์ „ํŠธ QMIX๋กœ ํ‘œ์ง€ํŒ ์ž์ฒด๋ฅผ ์—์ด์ „ํŠธํ™”ํ•˜๋Š” ๋ฐ˜๋ฉด, ๋ณธ ํ”„๋กœ์ ํŠธ๋Š” ๋‹จ์ผ ์ •์ฑ…์ด ์ „์—ญ ์ถœ๊ตฌ ๊ฐ€์ค‘์น˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋‹จ์ˆœํ•œ ๊ตฌ์กฐ
Xu et al. (2021) [4] ๋‹ค์ค‘ ์ถœ๊ตฌ ๋Œ€ํ”ผ๋ฅผ DRL๋กœ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ (Transactions in GIS) ํ™”์žฌ ํ™•์‚ฐยท๋ณ‘๋ชฉ์„ ๋ช…์‹œ์ ์œผ๋กœ ๋ชจ๋ธ๋งํ•˜์ง€ ์•Š๊ณ  ์ •์  ๋‹ค์ค‘ ์ถœ๊ตฌ ์„ ํƒ ๋ฌธ์ œ์— ๊ฐ€๊นŒ์›€
Zhang, Chai & Lykotrafitis (2021) [5] Social force model ๊ธฐ๋ฐ˜ particle dynamics ํ™˜๊ฒฝ + DRL(Dyna-Q), ์˜ค๋ชฉ ์žฅ์• ๋ฌผ ํšŒํ”ผ ๊ฐœ๋ณ„ ์—์ด์ „ํŠธ ๊ฒฝ๋กœ๊ณ„ํš์ด ๋ชฉ์ . ๋ณธ ํ”„๋กœ์ ํŠธ์ฒ˜๋Ÿผ "์œ ๋„ ์‹œ์Šคํ…œ(์ถœ๊ตฌ ๊ฐ€์ค‘์น˜)"์„ ํ•™์Šตํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ์—์ด์ „ํŠธ ์ž์ฒด์˜ ์ด๋™ ์ •์ฑ…์„ ํ•™์Šต
Lee et al. (2025) [2] F_A*(A* ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ธฐ๋ฐ˜ ํ™”์žฌ ์ƒํ™ฉ ๋Œ€ํ”ผ ๊ฒฝ๋กœ ํƒ์ƒ‰) ํ•™์Šต ์—†๋Š” ํœด๋ฆฌ์Šคํ‹ฑ ๊ฒฝ๋กœํƒ์ƒ‰. ๋ณธ ํ”„๋กœ์ ํŠธ์˜ A* ๋ฒ ์ด์Šค๋ผ์ธ๊ณผ ๊ฐ™์€ ๊ณ„์—ด, RL ๋น„๊ต ๋Œ€์ƒ

๋ฐ์ดํ„ฐ ๋ฐฉ์‹ ๋น„๊ต: ์œ„ 4ํŽธ ๋ชจ๋‘ ์‹ค์ œ ํ™”์žฌยท๊ตฐ์ค‘ raw ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ์ง€ ์•Š๋Š”๋‹ค. ๊ฐ€์žฅ ๊ทผ์ ‘ํ•œ ์„ ํ–‰์—ฐ๊ตฌ์ธ Xie et al. (2025)๋„ ์‹ค์ œ ๋…ธ๋ž˜๋ฐฉ ๊ฑด๋ฌผ์˜ ํ‰๋ฉด๋„๋งŒ ์‹ค์‚ฌ์šฉํ•˜๊ณ  ํ™”์žฌยท๊ตฐ์ค‘ ์ž์ฒด๋Š” CTM+PyroSim ์‹œ๋ฎฌ๋ ˆ์ด์…˜์ด๋‹ค(๋ณธ ํ”„๋กœ์ ํŠธ๊ฐ€ Unity ํ‰๋ฉด๋„๋Š” ์‹ค์‚ฌ์šฉ, ํ™”์žฌยท๊ตฐ์ค‘์€ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์ธ ๊ตฌ์กฐ์™€ ๋™์ผ). ์ˆœ์ˆ˜ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์ด ์ด ๋‹ˆ์น˜(RL ๊ธฐ๋ฐ˜ ํ™”์žฌ/๊ตฐ์ค‘ ๋Œ€ํ”ผ)์˜ ํ‘œ์ค€ ๊ด€ํ–‰์ด๋‹ค.


๋ฐฉ๋ฒ•๋ก 

Stage 1: ํ”ผ๋‚œ์•ˆ๋‚ด๋„ ๊ทธ๋ฆฌ๋“œ ์ถ”์ถœ

์‹ค์ œ ํ”ผ๋‚œ์•ˆ๋‚ด๋„ ์‚ฌ์ง„์„ ์ฒ˜๋ฆฌํ•ด base_grid.npy(40ร—25 ์ •์ˆ˜ ๋ฐฐ์—ด)๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ํ™•์ • ํŒŒ์ดํ”„๋ผ์ธ์€ build_base_grid.py(Hough Line ๊ธฐ๋ฐ˜)๋‹ค โ€” gridcell_extract.py๋Š” ์ด ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐ์˜ ํ”„๋กœํ† ํƒ€์ž…์œผ๋กœ, ์ถœ๊ตฌยท๋ฌธ ๊ฒ€์ถœ์ด ์—†๊ณ  ๋ฒฝ ๊ฒ€์ถœ๋„ ํฌ๊ธฐ ๊ธฐ๋ฐ˜์ด๋ผ ํ™”์žฅ์‹ค ํ”ฝํ† ๊ทธ๋žจ ๊ฐ™์€ ๊ณก์„ ํ˜• ์•„์ด์ฝ˜์„ ๋ฒฝ์œผ๋กœ ์˜คํƒํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์–ด ๋Œ€์ฒด๋๋‹ค.

๋‹จ๊ณ„ ์ฒ˜๋ฆฌ ๋‚ด์šฉ
์ƒ‰์ƒ ๋งˆ์Šคํ‚น HSV ๋ฒ”์œ„๋กœ ๋นจ๊ฐ•ยทํŒŒ๋ž‘ ๋…ธ์ด์ฆˆ ์ œ๊ฑฐ
์–ด๋‘์šด ํ”ฝ์…€ ์ด์ง„ํ™” ๋ฒฝ ํ›„๋ณด ์ถ”์ถœ(๋ฒฝยท์นธ๋ง‰์ด)
์ง์„  ์„ฑ๋ถ„ ํ•„ํ„ฐ๋ง Hough Line Transform์œผ๋กœ ์ถ• ์ •๋ ฌ ์ง์„ ๋งŒ ๋ฒฝ์œผ๋กœ ์ธ์ •, ๊ณก์„ ํ˜• ์•„์ด์ฝ˜ ์˜คํƒ ์ œ๊ฑฐ
์™ธ๊ณฝ ๋งˆ์Šคํ‚น ๊ฑด๋ฌผ ์™ธ๊ณฝ ์ปจํˆฌ์–ด ๋ฐ–์„ WALL๋กœ ์ง€์ •(์ด˜์ด˜ํ•œ ๋งˆ์Šคํฌ ๊ธฐ์ค€)
๋ฌธ ๊ธฐํ˜ธ ๊ฒ€์ถœ ํ…œํ”Œ๋ฆฟ ๋งค์นญ์œผ๋กœ ๋ฌธ ์…€ ๊ฐœ๋ฐฉ(์ด ๋„๋ฉด ์ „์šฉ, ์ผ๋ฐ˜ํ™” ์•ˆ ๋จ)
์ถœ๊ตฌ ๊ฒ€์ถœ ๋…น์ƒ‰ ํ‘œ์ง€ ์ƒ‰์ƒ์œผ๋กœ EXIT ์‹๋ณ„
๊ทธ๋ฆฌ๋“œ ๋งคํ•‘ ํ”ฝ์…€ ์˜์—ญ โ†’ 40ร—25 ์…€ (HALL / WALL / EXIT / ROOM)
cd stage1
python build_base_grid.py
# ์ถœ๋ ฅ: base_grid.npy, base_grid_vis.jpg

์ •ํ™•๋„(WALL IoU 0.658, ์ถœ๊ตฌ ๋„๋‹ฌ๋ฅ  100% ๋“ฑ) ์ƒ์„ธ๋Š” "ํ•œ๊ณ„ ๋ฐ ํ–ฅํ›„ ์—ฐ๊ตฌ" ์ ˆ๊ณผ Stage 1 ์ถ”์ถœ ์ •ํ™•๋„ ํ‰๊ฐ€ ์ฐธ๊ณ . gridcell_extract.py๋Š” ํšŒ๊ท€ ๋น„๊ต์šฉ์œผ๋กœ๋งŒ ์ €์žฅ์†Œ์— ๋‚จ์•„์žˆ๋‹ค.


Stage 2: ๊ฐ•ํ™”ํ•™์Šต ๊ธฐ๋ฐ˜ ์œ ๋„๋“ฑ ์ œ์–ด

๋ชจ๋ธ ํ”„๋กœ์„ธ์Šค (4๊ณ„์ธต ๊ตฌ์กฐ)

LAYER 1: ์ž…๋ ฅ ๋ฐ ๋งคํ•‘
  ๊ทธ๋ฆฌ๋“œ ๋งต (40ร—25) + ํ™”์žฌยท์—ฐ๊ธฐยท๊ตฐ์ค‘ ์ƒํƒœ
          โ†“
LAYER 2: ์ •์ฑ… ๋ฐ ์˜์‚ฌ ๊ฒฐ์ • (PPO)
  ๊ด€์ธก ๋ฒกํ„ฐ F1, F2, F14, F15 (4์ฐจ์›) โ†’ PPO ์‹ ๊ฒฝ๋ง
  โ†’ [exit_A_cost, exit_B_cost, crowd_weight]
          โ†“
LAYER 3: ๋ฐฉํ–ฅ ์ตœ์ ํ™” (Dijkstra Cost Map)
  ํ™”์žฌ ์œ„ํ—˜ + ์—ฐ๊ธฐ ์œ„ํ—˜ + ๊ตฐ์ค‘ ๋ฐ€๋„ โ†’ ๋น„์šฉ ๋งต
  Dijkstra ๊ฒฝ๋กœ ํƒ์ƒ‰ โ†’ ๊ฐ ์…€ ์ตœ์  ๋ฐฉํ–ฅ ๊ฒฐ์ •
          โ†“
LAYER 4: ์‹คํ–‰ ๋ฐ ํ”ผ๋“œ๋ฐฑ
  ์œ ๋„๋“ฑ ๋ฐฉํ–ฅ ๊ฐฑ์‹  โ†’ ๊ตฐ์ค‘ ์ด๋™ โ†’ ์ƒ์กด์œจ ๋ณด์ƒ โ†’ PPO ํ•™์Šต

๊ด€์ธก ๊ณต๊ฐ„ (F1, F2, F14, F15 โ€” 4์ฐจ์› ํ™•์ •ํŒ)

ํ”„๋กœ๋•์…˜ ๋ชจ๋ธ์€ 4์ฐจ์› ๊ด€์ธก์„ ์“ด๋‹ค. ์›๋ž˜ ์„ค๊ณ„๋Š” 3์ฑ„๋„ ์ƒํƒœ(ํ™”์žฌยท๊ตฐ์ค‘ยท์—ฐ๊ธฐ)๋ฅผ 15๊ฐœ ์Šค์นผ๋ผ๋กœ ์š”์•ฝํ•œ ๊ด€์ธก์ด์—ˆ์œผ๋‚˜, ๊ฐœ๋ณ„ยท๊ทธ๋ฃน ๋‹จ์œ„ ๋งˆ์Šคํ‚น(ablation)์œผ๋กœ ์ •๋ณด ์ค‘๋ณต์„ฑ์„ ๊ฒ€์ฆํ•œ ๊ฒฐ๊ณผ 11๊ฐœ ํ”ผ์ฒ˜(F3~F13)๋ฅผ ์ œ๊ฑฐํ•ด๋„ ์ƒ์กด์œจ์ด ํ†ต๊ณ„์ ์œผ๋กœ ๊ตฌ๋ถ„๋˜์ง€ ์•Š์•˜๋‹ค. ์ด ๊ทผ๊ฑฐ๋กœ ํ™”์žฌ ์œ„ํ˜‘๊ณผ ๊ทธ ๋ณ€ํ™”์œจ๋งŒ ๋‚จ๊ธด 4์ฐจ์›์œผ๋กœ ์ฒ˜์Œ๋ถ€ํ„ฐ ์žฌํ•™์Šตํ–ˆ๊ณ , 15์ฐจ์› ๋ชจ๋ธ๊ณผ ๋™๋“ฑํ•œ ์„ฑ๋Šฅ์„ ํ™•์ธํ–ˆ๋‹ค(์ƒ์„ธ ๊ฒฝ์œ„: ํ”ผ์ฒ˜ ๊ณต๊ฐ„ ์ตœ์ ํ™” ๊ณ„ํš).

์ธ๋ฑ์Šค ํ”ผ์ฒ˜ ๋‚ด์šฉ
F1 ์ถœ๊ตฌ A ํ™”์žฌ ์œ„ํ˜‘ ํ™”์žฌโ†’์ถœ๊ตฌA ์ตœ๋‹จ๊ฑฐ๋ฆฌ ๊ธฐ๋ฐ˜ ์•ˆ์ „๋„ (1=์•ˆ์ „, 0=์œ„ํ—˜)
F2 ์ถœ๊ตฌ B ํ™”์žฌ ์œ„ํ˜‘ ํ™”์žฌโ†’์ถœ๊ตฌB ์ตœ๋‹จ๊ฑฐ๋ฆฌ ๊ธฐ๋ฐ˜ ์•ˆ์ „๋„
F14 ์ถœ๊ตฌ A ์œ„ํ˜‘ ๋ณ€ํ™”์œจ ์ด์ „ ์Šคํ… ๋Œ€๋น„ F1 ๊ฐ์†Œ๋Ÿ‰
F15 ์ถœ๊ตฌ B ์œ„ํ˜‘ ๋ณ€ํ™”์œจ ์ด์ „ ์Šคํ… ๋Œ€๋น„ F2 ๊ฐ์†Œ๋Ÿ‰

์ฝ”๋“œ์—์„œ๋Š” FireEvacEnv(feature_set="reduced")๋กœ ํ™œ์„ฑํ™”ํ•œ๋‹ค(๊ธฐ๋ณธ๊ฐ’ "full"์€ ๊ธฐ์กด 15์ฐจ์› ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ด ํ•˜์œ„ ํ˜ธํ™˜). ๊ทธ๋ฆฌ๋“œ ํฌ๊ธฐยท๋Œ€ํ”ผ์ž ์ˆ˜์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ์ฐจ์›์ด ๊ณ ์ •๋˜๋ฏ€๋กœ Unity ์ด์‹์—๋„ ์œ ๋ฆฌํ•˜๋‹ค.

์›๋ž˜ 15์ฐจ์› ์ „์ฒด ์ •์˜ (feature_set="full", ๋น„๊ต/ํšŒ๊ท€ ํ…Œ์ŠคํŠธ์šฉ์œผ๋กœ ์œ ์ง€)
์ธ๋ฑ์Šค ํ”ผ์ฒ˜ ๋‚ด์šฉ
F1 ์ถœ๊ตฌ A ํ™”์žฌ ์œ„ํ˜‘ ํ™”์žฌโ†’์ถœ๊ตฌA ์ตœ๋‹จ๊ฑฐ๋ฆฌ / 20 (1=์•ˆ์ „, 0=์œ„ํ—˜)
F2 ์ถœ๊ตฌ B ํ™”์žฌ ์œ„ํ˜‘ ํ™”์žฌโ†’์ถœ๊ตฌB ์ตœ๋‹จ๊ฑฐ๋ฆฌ / 20
F3 ์ถœ๊ตฌ A ์„ ํ˜ธ ๋น„์œจ ์ถœ๊ตฌ A๊ฐ€ ๋” ๊ฐ€๊นŒ์šด ์ƒ์กด์ž ๋น„์œจ
F4 ํƒˆ์ถœ ์™„๋ฃŒ ๋น„์œจ
F5 ์‚ฌ๋ง ๋น„์œจ
F6 ์‹œ๊ฐ„ ๊ฒฝ๊ณผ ๋น„์œจ (๊ธด๊ธ‰๋„)
F7 ์ถœ๊ตฌ A ๊ทผ์ ‘ ํ˜ผ์žก๋„ BFS ๊ฑฐ๋ฆฌ 4 ์ด๋‚ด ์ƒ์กด์ž ๋น„์œจ
F8 ์ถœ๊ตฌ B ๊ทผ์ ‘ ํ˜ผ์žก๋„ BFS ๊ฑฐ๋ฆฌ 4 ์ด๋‚ด ์ƒ์กด์ž ๋น„์œจ
F9 ํ‰๊ท  ๊ณตํ™ฉ ์ˆ˜์ค€ Helbing (2000)
F10 ์ƒ์กด์žโ†’์ถœ๊ตฌ A ํ‰๊ท  BFS ๊ฑฐ๋ฆฌ / 50 ์ •๊ทœํ™”
F11 ์ƒ์กด์žโ†’์ถœ๊ตฌ B ํ‰๊ท  BFS ๊ฑฐ๋ฆฌ / 50 ์ •๊ทœํ™”
F12 ํ™”์žฌ ๋ฌด๊ฒŒ์ค‘์‹ฌ ํ–‰ / ROWS
F13 ํ™”์žฌ ๋ฌด๊ฒŒ์ค‘์‹ฌ ์—ด / COLS
F14 ์ถœ๊ตฌ A ์œ„ํ˜‘ ๋ณ€ํ™”์œจ ์ด์ „ ์Šคํ… ๋Œ€๋น„ F1 ๊ฐ์†Œ๋Ÿ‰
F15 ์ถœ๊ตฌ B ์œ„ํ˜‘ ๋ณ€ํ™”์œจ ์ด์ „ ์Šคํ… ๋Œ€๋น„ F2 ๊ฐ์†Œ๋Ÿ‰

F7/F8(์ถœ๊ตฌ ๊ทผ์ ‘ ํ˜ผ์žก๋„)์„ ํฌํ•จํ•œ ๊ด€์ธก ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ํ†ต์งธ๋กœ ๊ฐ€๋ ค๋„ ์ƒ์กด์œจ ๋‚™ํญ์ด ยฑ1.6%p ์ด๋‚ด์˜€๋‹ค โ€” "PPO๊ฐ€ F7/F8์„ ์ธ์‹ํ•ด ๋ณ‘๋ชฉ์„ ํšŒํ”ผํ•œ๋‹ค"๋Š” ์ธ๊ณผ ์ฃผ์žฅ์€ ๋ฐ์ดํ„ฐ๋กœ ๋’ท๋ฐ›์นจ๋˜์ง€ ์•Š๋Š”๋‹ค(์ƒ๊ด€๋œ ๋‹ค๋ฅธ ์ฑ„๋„์ธ F3/F10/F11์ด ๊ฐ™์€ ์ •๋ณด๋ฅผ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์–ด์„œ๋กœ ์ถ”์ •). ์ด๊ฒŒ ๋ฐ”๋กœ F3~F13์„ ์ œ๊ฑฐํ•ด๋„ ์„ฑ๋Šฅ์ด ์œ ์ง€๋œ ์ด์œ ์ด์ž, 4์ฐจ์› ์ถ•์†ŒํŒ์„ ์ฑ„ํƒํ•œ ๊ทผ๊ฑฐ๋‹ค.


์ปค๋ฆฌํ˜๋Ÿผ ๋ฐ์ดํ„ฐ์…‹ (ํ‘œ 1)

์ตœ๊ทผ 50 ์—ํ”ผ์†Œ๋“œ ํ‰๊ท  ํƒˆ์ถœ์™„๋ฃŒ์œจ์ด --curriculum-threshold(๋‹จ์ผ ๊ฐ’, ์ „ ๋‹จ๊ณ„ ๋™์ผ ์ ์šฉ) ์ด์ƒ์ด๋ฉด ๋‹ค์Œ ์‹œ๋‚˜๋ฆฌ์˜ค๋กœ ์ž๋™ ์ง„๊ธ‰ํ•œ๋‹ค. ํ™•์ •๊ฐ’์€ 0.85๋‹ค โ€” ์›๋ž˜ ๊ธฐ๋ณธ๊ฐ’ 0.90์œผ๋กœ๋Š” 3.5M ์Šคํ…์„ ๋๊นŒ์ง€ ๋Œ๋ ค๋„ S4 ์Šน๊ธ‰์ด ํ•œ ๋ฒˆ๋„ ์ผ์–ด๋‚˜์ง€ ์•Š์•„, 0.85๋กœ ๋‚ฎ์ถฐ ์žฌ๊ฒ€์ฆํ–ˆ๋‹ค(์ƒ์„ธ: Hazard-Awareness Ablation ํ›„์† ๋ถ„์„ 7).

๋‹จ๊ณ„ ์‹œ๋‚˜๋ฆฌ์˜ค ์ธ์› ํ™”์žฌ ์œ„์น˜ ํ™•์‚ฐ ํ™•๋ฅ 
S1 ๊ธฐ๋ณธ ํƒˆ์ถœ 20๋ช… ๊ณ ์ • ์œ„์น˜ 3%
S2 EXIT A ์œ„ํ˜‘ 40๋ช… ์šฐ์ธก ๊ตฌ์—ญ ์ƒ๋‹จ 12%
S3 ์ง„์ž…๋กœ ์ฐจ๋‹จ 40๋ช… EXIT A ์ ‘๊ทผ๋กœ 18%
S4 ์–‘๋ฐฉํ–ฅ ๋™์‹œ ์œ„ํ˜‘ 40๋ช… ์ถœ๊ตฌ AยทB ๊ตฌ์—ญ 15%

์ปค๋ฆฌํ˜๋Ÿผ์€ S1~S4๊นŒ์ง€๋งŒ ์ง„ํ–‰๋˜๋ฉฐ(--max-scenario 4), S5(EXIT B ์œ„ํ˜‘)๋Š” ํ•™์Šต์—์„œ ์™„์ „ํžˆ ์ œ์™ธํ•ด out-of-distribution ์ผ๋ฐ˜ํ™” ํ…Œ์ŠคํŠธ๋กœ ๋‚จ๊ฒจ๋‘”๋‹ค. ์ƒ์„ธ๋Š” ์‹คํ—˜ ๊ฒฐ๊ณผ ์ ˆ ์ฐธ๊ณ .


๋ณด์ƒ ํ•จ์ˆ˜ (ํ‘œ 2)

์ด๋ฒคํŠธ ๋ณด์ƒ
EXIT ํƒˆ์ถœ ์„ฑ๊ณต +20.0
์ถœ๊ตฌ ๋ฐฉํ–ฅ ์ ‘๊ทผ (urgency ๋ฐฐ์œจ ร—1.0~ร—3.0) +ฮ”
ํ™”์žฌยท์—ฐ๊ธฐ ์‚ฌ๋ง โˆ’20.0
์—ํ”ผ์†Œ๋“œ ์ข…๋ฃŒ ์‹œ ๋ฏธํƒˆ์ถœ 1๋ช…๋‹น โˆ’15.0
๋‘ ์ถœ๊ตฌ ๋ชจ๋‘ ์‚ฌ์šฉ (๋ถ„์‚ฐ ๋ณด๋„ˆ์Šค) +15.0

urgency ๋ฐฐ์œจ: ์Šคํ… ๊ฒฝ๊ณผ์— ๋”ฐ๋ผ ร—1.0 โ†’ ร—3.0์œผ๋กœ ์ฆ๊ฐ€ (ํƒ€์ž„์•„์›ƒ ์–ต์ œ)

๋ถ„์‚ฐ ๋ณด๋„ˆ์Šค๊ฐ€ ์žˆ์–ด๋„ ์‹ค์ œ ํ•™์Šต๋œ ์ •์ฑ…์€ ๊ท ํ˜•๋ณด๋‹ค ์ฒ˜๋ฆฌ ํšจ์œจ์„ ์šฐ์„ ํ•œ๋‹ค (Exit Balance ์‹ค์ธก ๊ฒฐ๊ณผ๋Š” ์‹คํ—˜ ๊ฒฐ๊ณผ ์ ˆ ์ฐธ๊ณ ). ๋‹ค๋ฅธ ๋ณด์ƒ ํ•ญ๋ชฉ(์ƒ์กดยท์‚ฌ๋งยท ์ž”๋ฅ˜ ํŽ˜๋„ํ‹ฐ)์˜ ํฌ๊ธฐ๊ฐ€ ๋” ์ปค์„œ, ์ตœ์ข…์ ์œผ๋กœ๋Š” "๊ณ ๋ฅด๊ฒŒ ๋‚˜๋ˆ„๊ธฐ"๋ณด๋‹ค "๋” ๋‚˜์€ ์ชฝ์œผ๋กœ ๋ชฐ์•„ ๋นจ๋ฆฌ ์ฒ˜๋ฆฌํ•˜๊ธฐ"๊ฐ€ ์šฐ์„ธํ•œ ์ „๋žต์œผ๋กœ ์ˆ˜๋ ดํ•œ ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค.


์‹คํ—˜ ๊ฒฐ๊ณผ

์กฐ๊ฑด: 30 ์—ํ”ผ์†Œ๋“œ | EXIT_CAPACITY=2 / CELL_CAPACITY=2(์ฝ”๋“œ ํ˜„์žฌ๊ฐ’. ์ฃผ์„์—๋Š” "ํ•™์Šต์€ 1๋กœ ์ง„ํ–‰"์ด๋ผ๊ณ  ์ ํ˜€ ์žˆ์œผ๋‚˜ ๋ฏธ๊ฒ€์ฆ โ€” ์ตœ์ข… ์ œ์ถœ ์ „ ์‹ค์ œ ์‚ฌ์šฉ๊ฐ’ ํ™•์ • ํ•„์š”, paper-review-todo ์ฐธ๊ณ ) | 4์ฐจ์› ์ถ•์†Œ ๊ด€์ธก(feature_set="reduced")์œผ๋กœ PPO 3,506,176 ์Šคํ… ํ•™์Šต(์ปค๋ฆฌํ˜๋Ÿผ S1โ†’S4, threshold=0.85, --max-scenario 4๋กœ S5๋Š” ํ•™์Šต์—์„œ ์ œ์™ธ) | --seed 42 ํŽ˜์–ด๋ง(๋„ค ์ „๋žต์ด ๋งค ์—ํ”ผ์†Œ๋“œ ๋™์ผํ•œ ํ™”์žฌยท์‹œ์ž‘ ์กฐ๊ฑด์„ ๊ฒช์Œ)

์‹œ๋‚˜๋ฆฌ์˜ค๋ณ„ ์„ฑ๋Šฅ ๋น„๊ต (ํ‘œ 3)

๋„ค ๊ฐ€์ง€ ์œ ๋„ ์ „๋žต์„ ๋น„๊ตํ•œ๋‹ค. ์ •์  ์œ ๋„๋“ฑ์€ ์ตœ์ดˆ 1ํšŒ ๊ณ„์‚ฐํ•œ ๊ฒฝ๋กœ๋ฅผ ํ™”์žฌยท๊ตฐ์ค‘ ์ƒํƒœ์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ๊ณ ์ •ํ•œ๋‹ค(EC directive 92/58/EEC ์ค€์ˆ˜ ํ‘œ์ค€ ํ‘œ์ง€ํŒ๊ณผ ๊ฐ™์€ ์›๋ฆฌ๋กœ, ๋™์  ์œ ๋„๋“ฑ ๋ฌธํ—Œ์˜ ํ‘œ์ค€ ๋น„๊ต๊ตฐ์ด๋‹ค). **A***๋Š” ๋งค ์Šคํ… ์žฌํƒ์ƒ‰ํ•˜๋˜ ํ™”์žฌ๋ฅผ ๋ฌด์‹œํ•˜๋Š” ์ˆœ์ˆ˜ ์ตœ๋‹จ๊ฒฝ๋กœ(Pure A*, Manhattan ํœด๋ฆฌ์Šคํ‹ฑ). Hazard-aware BFS๋Š” ํ™”์žฌ ์…€์„ ํ†ต๊ณผ ๋ถˆ๊ฐ€๋กœ ์ฐจ๋‹จํ•œ ์ฑ„ ๋งค ์Šคํ… ์žฌํƒ์ƒ‰ํ•˜๋Š” ๋น„ํ•™์Šต ํœด๋ฆฌ์Šคํ‹ฑ์œผ๋กœ, ์œ„ํ—˜์ •๋ณด๋ฅผ PPO์™€ ๋™์ผํ•œ ์ˆ˜์ค€์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค(์ฝ”๋“œ์ƒ astar_baseline.py์˜ bfs_action() โ€” ํ•จ์ˆ˜๋ช…๊ณผ ๋‹ฌ๋ฆฌ ํœด๋ฆฌ์Šคํ‹ฑ์ด ์—†๋Š” ์ˆœ์ˆ˜ BFS๋‹ค). **์ œ์•ˆ ์ •์ฑ…(PPO)**์€ 4์ฐจ์› ๊ด€์ธก์œผ๋กœ ํ•™์Šต๋œ ์ •์ฑ…. ์ •์  ์œ ๋„๋“ฑยทA* ๋ชจ๋‘ hazard_aware=False๋กœ ํ‰๊ฐ€ํ•ด ์‹ค์ œ๋กœ ํ™”์žฌ๋ฅผ ๋ฌด์‹œํ•˜๋„๋ก ๊ตฌํ˜„ํ–ˆ๋‹ค(๊ตฌํ˜„ ์„ธ๋ถ€์‚ฌํ•ญ์€ Hazard-Awareness Ablation ์ฐธ๊ณ ).

์‹œ๋‚˜๋ฆฌ์˜ค ์ธ์› ์ •์  ์œ ๋„๋“ฑ A* Hazard-aware BFS ์ œ์•ˆ ์ •์ฑ…(PPO) PPOโˆ’A* PPOโˆ’BFS
S1 ๊ธฐ๋ณธ ํƒˆ์ถœ 20๋ช… 99.8ยฑ0.9 99.8ยฑ0.9 99.8ยฑ0.9 99.8ยฑ0.9 0.0 0.0
S2 EXIT A ์œ„ํ˜‘ 40๋ช… 59.0ยฑ16.8 54.4ยฑ22.0 91.3ยฑ6.2 87.1ยฑ5.8 +32.7โ€ก โˆ’4.2โ€ก
S3 ์ง„์ž…๋กœ ์ฐจ๋‹จ 40๋ช… 57.8ยฑ12.1 60.5ยฑ14.3 86.4ยฑ5.8 86.0ยฑ7.0 +25.5โ€ก โˆ’0.4(n.s.)
S4 ์–‘๋ฐฉํ–ฅ ๋™์‹œ ์œ„ํ˜‘ 40๋ช… 50.0ยฑ25.8 53.0ยฑ29.1 68.9ยฑ34.1 66.3ยฑ32.2 +13.3โ€ก โˆ’2.6โ€ก
S5 EXIT B ์œ„ํ˜‘ (๋ฏธํ•™์Šต, OOD) 40๋ช… 63.1ยฑ15.4 67.1ยฑ20.5 89.6ยฑ7.0 80.3ยฑ7.9 +13.3โ€ก โˆ’9.3โ€ก
์‹œ๋‚˜๋ฆฌ์˜ค ์ •์  Step A* Step BFS Step PPO Step
S2 71ยฑ15 76ยฑ17 102ยฑ21 98ยฑ18
S3 58ยฑ10 62ยฑ14 84ยฑ10 84ยฑ8
S4 66ยฑ15 70ยฑ14 84ยฑ19 75ยฑ17
S5 74ยฑ12 84ยฑ14 105ยฑ17 91ยฑ11

โ€ก paired t-test ๊ธฐ์ค€ ์œ ์˜(n=30, seed=42 ํŽ˜์–ด๋ง). PPO vs A*: S2 p<0.0001, S3 p<0.0001, S4 p=0.0009, S5 p=0.0003 โ€” S1์„ ์ œ์™ธํ•œ ์ „ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์œ ์˜ํ•˜๊ฒŒ ๋†’๋‹ค. PPO vs Hazard-aware BFS: S2 p=0.0007, S3 p=0.55(์œ ์˜ํ•˜์ง€ ์•Š์Œ), S4 p=0.0102, S5 p<0.0001 โ€” S3์—์„œ๋งŒ ์ฐจ์ด๊ฐ€ ํ†ต๊ณ„์ ์œผ๋กœ ํ™•์ธ๋˜์ง€ ์•Š์•˜๊ณ (์ด๊ฒƒ์ด "๋™๋“ฑํ•จ์˜ ์ฆ๊ฑฐ"๋Š” ์•„๋‹ˆ๋‹ค, ๋‹จ์ง€ "๋ณธ ํ‰๊ฐ€์—์„œ ๋šœ๋ ทํ•œ ์ฐจ์ด๊ฐ€ ํ™•์ธ๋˜์ง€ ์•Š์Œ"), ๋‚˜๋จธ์ง€ ์„ธ ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ๋ชจ๋‘ PPO๊ฐ€ ์œ ์˜ํ•˜๊ฒŒ ๋‚ฎ๋‹ค. S1์€ ์ „ ๋ฐฉ๋ฒ•์ด ~100%๋กœ ์ˆ˜๋ ดํ•˜๋Š” ์ฒœ์žฅ ํšจ๊ณผ๋ผ ๊ฒ€์ • ๋Œ€์ƒ์—์„œ ์ œ์™ธ.

ํ•ต์‹ฌ์€ ๋น„๊ต ๋Œ€์ƒ์„ ์–ด๋””๋กœ ์žก๋А๋ƒ์— ๋”ฐ๋ผ ๊ฒฐ๋ก ์ด ๊ฐˆ๋ฆฐ๋‹ค๋Š” ์ ์ด๋‹ค. ํ™”์žฌ๋ฅผ ๋ฌด์‹œํ•˜๋Š” A* ๋Œ€๋น„๋กœ๋Š” PPO๊ฐ€ ์ „ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ๋šœ๋ ทํ•˜๊ฒŒ ์šฐ์œ„์ง€๋งŒ, ์œ„ํ—˜์ •๋ณด๋ฅผ ๋™์ผํ•˜๊ฒŒ ์“ฐ๋Š” Hazard-aware BFS ๋Œ€๋น„๋กœ๋Š” ํ•™์Šต ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ๋„ ๋Œ€๋“ฑํ•˜๊ฑฐ๋‚˜ ์—ด์„ธ์ด๊ณ  ๋ฏธํ•™์Šต ์‹œ๋‚˜๋ฆฌ์˜ค(S5)์—์„œ๋Š” ๊ฒฉ์ฐจ๊ฐ€ ๊ฐ€์žฅ ํฌ๋‹ค(โˆ’9.3%p). ์ฆ‰ A* ๋Œ€๋น„ ๊ฐœ์„ ๋ถ„์˜ ์ƒ๋‹น ๋ถ€๋ถ„์€ "๊ฐ•ํ™”ํ•™์Šต"์ด ์•„๋‹ˆ๋ผ "์œ„ํ—˜์ •๋ณด ์‚ฌ์šฉ ์ž์ฒด"์—์„œ ๋‚˜์˜จ๋‹ค. ์ด ๊ตฌ๋ถ„์ด ์™œ ์ค‘์š”ํ•œ์ง€๋Š” ๋ฐ”๋กœ ์•„๋ž˜ ์ถ”๋ก  ์†๋„ ์ ˆ์—์„œ ์ด์–ด์ง„๋‹ค โ€” ์ƒ์กด์œจ์—์„œ ๋ชป ์ด๊ธฐ๋Š” Hazard-aware BFS๋ฅผ ๊ณ„์‚ฐ ๋น„์šฉ์—์„œ๋Š” ์••๋„์ ์œผ๋กœ ์ด๊ธด๋‹ค.

๋ฉ”์ปค๋‹ˆ์ฆ˜: "์ถœ๊ตฌ ๋ถ„์‚ฐ"์ด ์•„๋‹ˆ๋ผ "๊ฒฐ๋‹จ๋ ฅ ์žˆ๋Š” ์ ๋ฆผ". Exit Balance(์–‘์ชฝ ์ถœ๊ตฌ ๊ท ๋“ฑ ์‚ฌ์šฉ๋„)์™€ Throughput(์Šคํ…๋‹น ์ฒ˜๋ฆฌ ์ธ์›)์„ experiments/compute_extra_metrics.py๋กœ ๋ถ„ํ•ดํ•˜๋ฉด, PPO์˜ Exit Balance๋Š” A*๋ณด๋‹ค ์˜คํžˆ๋ ค ๋‚ฎ๋‹ค(S2: 0.221 vs 0.411, S3: 0.245 vs 0.400, S4: 0.381 vs 0.496, S5: 0.356 vs 0.435). ๋Œ€์‹  Throughput์€ ํ•ญ์ƒ A*๋ณด๋‹ค ๋†’๋‹ค(S2: 0.364 vs 0.302, S3: 0.414 vs 0.403, S4: 0.344 vs 0.300, S5: 0.360 vs 0.322). ์ฆ‰ PPO๋Š” ์–‘์ชฝ ์ถœ๊ตฌ์— ๊ณ ๋ฅด๊ฒŒ ๋‚˜๋ˆ„๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, ๋” ์•ˆ์ „ํ•˜๊ฑฐ๋‚˜ ๋น ๋ฅธ ์ชฝ ์ถœ๊ตฌ๋กœ ๊ณผ๊ฐํ•˜๊ฒŒ ๋ชฐ์•„ ์ฒ˜๋ฆฌ ํšจ์œจ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ์ „๋žต์„ ํ•™์Šตํ–ˆ๋‹ค. ๋‹ค๋งŒ ์ด ์ „๋žต์ด ํŠน์ • ๊ด€์ธก ์ฑ„๋„(์˜ˆ์ „ 15์ฐจ์› ์„ค๊ณ„์˜ F7/F8 "์ถœ๊ตฌ ๊ทผ์ ‘ ํ˜ผ์žก๋„")์„ ์ธ์‹ํ•ด์„œ ๋‚˜์˜จ ํ–‰๋™์ด๋ผ๋Š” ์ธ๊ณผ ๊ด€๊ณ„๋Š” ํ™•์ธ๋˜์ง€ ์•Š์•˜๋‹ค โ€” ์˜คํžˆ๋ ค ๊ทธ ์ฑ„๋„์„ ํฌํ•จํ•œ ๊ด€์ธก ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ํ†ต์งธ๋กœ ๊ฐ€๋ ค๋„ ์ƒ์กด์œจ ๋‚™ํญ์ด ยฑ1.6%p ์ด๋‚ด์˜€๋‹ค(๊ทธ๋ฃน ablation, Feature Space Optimization ์ฐธ๊ณ ). ์ด๊ฒŒ ๋ฐ”๋กœ F7/F8์„ ํฌํ•จํ•œ 11๊ฐœ ํ”ผ์ฒ˜๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  4์ฐจ์›์œผ๋กœ ์ถ•์†Œํ•ด๋„ ์„ฑ๋Šฅ์ด ์œ ์ง€๋œ ์ด์œ ์ด๊ธฐ๋„ ํ•˜๋‹ค.

S5(EXIT B ์œ„ํ˜‘)๋Š” ์ปค๋ฆฌํ˜๋Ÿผ ํ•™์Šต์— ์ „ํ˜€ ํฌํ•จ๋˜์ง€ ์•Š์€ ์‹œ๋‚˜๋ฆฌ์˜ค๋‹ค. env_core.py์˜ ์ปค๋ฆฌํ˜๋Ÿผ์€ S1~S4๊นŒ์ง€๋งŒ ์ง„ํ–‰ํ•˜๋ฉฐ --max-scenario 4๋กœ ํ•™์Šต ์ค‘ ์ง„๊ธ‰์ด ์›์ฒœ ์ฐจ๋‹จ๋˜์–ด ์žˆ๋‹ค. A* ๋Œ€๋น„๋กœ๋Š” ๋ฏธํ•™์Šต ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ๋„ ์œ ์˜ํ•˜๊ฒŒ ๋†’์€ ์ƒ์กด์œจ(+13.3%p)์„ ๋ณด์ด์ง€๋งŒ, Hazard-aware BFS ๋Œ€๋น„๋กœ๋Š” ๋„ค ์‹œ๋‚˜๋ฆฌ์˜ค ์ค‘ ๊ฐ€์žฅ ํฐ ๊ฒฉ์ฐจ(โˆ’9.3%p)๋กœ ๋’ค์ง„๋‹ค. ๋”ฐ๋ผ์„œ "๋ฏธํ•™์Šต ์กฐ๊ฑด์—์„œ๋„ ์ผ์ •ํ•œ ๋Œ€ํ”ผ ์„ฑ๊ณผ๋ฅผ ์œ ์ง€ํ•œ๋‹ค"๋Š” ์ฃผ์žฅ์€ ๊ฐ€๋Šฅํ•ด๋„, "์œ„ํ—˜ ๋ฐ˜์˜ ํƒ์ƒ‰๋ณด๋‹ค ์ผ๋ฐ˜ํ™”๋ฅผ ์ž˜ํ•œ๋‹ค"๋Š” ์ฃผ์žฅ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋’ท๋ฐ›์นจํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋™์ผ ๊ฑด๋ฌผ ๋‚ด ํ™”์žฌ ์œ„์น˜ ๋ณ€ํ™”์ด๋ฏ€๋กœ ๋‹ค๋ฅธ ๊ฑด์ถ•๋ฌผ๋กœ์˜ ์ „์ด ์„ฑ๋Šฅ์œผ๋กœ ํ™•๋Œ€ ํ•ด์„ํ•˜์ง€๋„ ์•Š๋Š”๋‹ค.


์ถ”๋ก  ์†๋„ ๋น„๊ต (๊ทธ๋ฆผ 5)

2026-10 ์ •์ •: ์•„๋ž˜ ํ‘œ๋Š” experiments/exp_speed_breakdown.py(์‹ ๊ทœ)๋กœ ์ธก์ •ํ•œ ์ „์ฒด ์ œ์–ด์ฃผ๊ธฐ(T_control) ๊ธฐ์ค€์ด๋‹ค. ์ด์ „ ๋ฒ„์ „์€ PPO ์ชฝ์€ ์‹ ๊ฒฝ๋ง forward pass(T_policy)๋งŒ ์Ÿ€๊ณ  Hazard-aware BFS ์ชฝ์€ ๊ฒฝ๋กœํƒ์ƒ‰ ์ „์ฒด๋ฅผ ์Ÿ€๋‹ค โ€” ์ธก์ • ๋ฒ”์œ„๊ฐ€ ๋‹ฌ๋ผ "์ „์ฒด ์ œ์–ด ์†๋„"์˜ ๊ณต์ •ํ•œ ๋น„๊ต๊ฐ€ ์•„๋‹ˆ์—ˆ๋‹ค(์ง€๋„๊ต์ˆ˜ ๊ฒ€ํ†  ๋ฉ”๋ชจ 3.1์ ˆ ์ง€์ , ์ƒ์„ธ: paper-review-todo). T_policy๋งŒ ๋ณด๋ฉด 0.14~0.18ms์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” Dijkstra ๋น„์šฉ์žฅ ์ƒ์„ฑ(T_costmap+guidance)์ด ์ „์ฒด ์ œ์–ด์ฃผ๊ธฐ์˜ 90%๋ฅผ ์ฐจ์ง€ํ•ด **T_control์€ 6.67.2ms**๋‹ค.

PPO๋Š” 4์ฐจ์› ๊ณ ์ • ๊ด€์ธก์œผ๋กœ ์ „์ฒด ์ƒํ™ฉ์„ ์š”์•ฝํ•ด ํ–‰๋™ 3๊ฐœ๋กœ ์ œ์–ดํ•˜๋ฏ€๋กœ, ์ „์ฒด ์ œ์–ด์ฃผ๊ธฐ๊ฐ€ ์ธ์› ์ˆ˜ N์— ๊ฑฐ์˜ ๋ฌด๊ด€ํ•˜๋‹ค. Hazard-aware BFS๋Š” ์ƒ์กด์ž๋งˆ๋‹ค ๊ฐœ๋ณ„ ํƒ์ƒ‰์„ ๋Œ๋ ค์•ผ ํ•ด์„œ O(N)์œผ๋กœ ์„ ํ˜• ์ฆ๊ฐ€ํ•œ๋‹ค. N=20/50/100/150/200/300/500 7๋‹จ๊ณ„๋กœ ์ธก์ •ํ–ˆ๋‹ค(S4, M1 8์ฝ”์–ด CPU, ๋‹จ๋… ์‹คํ–‰ยท๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์™€ CPU ๊ฒฝํ•ฉ ์—†์Œ).

N T_observation T_policy T_costmap+guidance T_control(ํ•ฉ๊ณ„) Hazard-aware BFS(์ „์ฒด)
20 0.22ms 0.27ms 6.07ms 6.56ms 8.5ms
50 0.37ms 0.22ms 6.21ms 6.80ms 26.3ms
100 0.56ms 0.20ms 5.88ms 6.64ms 47.4ms
150 0.46ms 0.21ms 6.01ms 6.68ms 74.9ms
200 0.64ms 0.20ms 5.90ms 6.74ms 97.7ms
300 0.68ms 0.35ms 6.18ms 7.21ms 170.4ms
500 0.86ms 0.19ms 5.84ms 6.88ms 255.1ms

T_control์€ N=20500 ์ „ ๊ตฌ๊ฐ„์—์„œ 6.67.2ms๋กœ ๊ฑฐ์˜ ํ‰ํ‰ํ•˜๋‹ค(๋น„์šฉ๋งต ์ƒ์„ฑ์ด ๊ทธ๋ฆฌ๋“œ ํฌ๊ธฐ์—๋งŒ ์˜์กดํ•˜๊ณ  N์—๋Š” ๊ฑฐ์˜ ์•ˆ ์˜์กดํ•ด์„œ๋‹ค โ€” T_observation๋งŒ N์— ๋”ฐ๋ผ ์†Œํญ ์ฆ๊ฐ€). Hazard-aware BFS๋Š” "์‹ค์‹œ๊ฐ„" ๊ธฐ์ค€์„ 100ms/์Šคํ…์œผ๋กœ ์žก์œผ๋ฉด Nโ‰ˆ200~300 ์‚ฌ์ด์—์„œ ์ด ๊ธฐ์ค€์„ ๋„˜๋Š”๋‹ค(N=200: 97.7ms, N=300: 170.4ms). ์ œ์•ˆ ์ •์ฑ…์€ N=500์—์„œ๋„ T_control์ด 7ms ๋ฏธ๋งŒ์ด๋ผ ์ด ๊ธฐ์ค€์„ ๋„˜๊ธธ ์—ฌ์ง€๊ฐ€ ๊ตฌ์กฐ์ ์œผ๋กœ ๊ฑฐ์˜ ์—†๋‹ค.

์ธก์ • ํ•œ๊ณ„: _compute_dirs_for_strategy()๊ฐ€ Dijkstra ๋น„์šฉ์žฅ ์ƒ์„ฑ๊ณผ ๋ฐฉํ–ฅ ๊ฒฐ์ •์„ ํ•œ ํ•จ์ˆ˜ ์•ˆ์—์„œ ๊ฐ™์ด ์ˆ˜ํ–‰ํ•ด, ํ˜„์žฌ ์ฝ”๋“œ ๊ตฌ์กฐ๋กœ๋Š” T_costmap๊ณผ T_guidance๋ฅผ ๋” ์„ธ๋ถ„ํ™”๋œ ๋‘ ํƒ€์ด๋จธ๋กœ ๋ถ„๋ฆฌํ•˜์ง€ ๋ชปํ–ˆ๋‹ค(๋ฆฌํŒฉํ„ฐ๋ง ์—†์ด๋Š” ํ•ฉ์‚ฐ๊ฐ’๊นŒ์ง€๋งŒ ๋ณด๊ณ  ๊ฐ€๋Šฅ). ๋˜ํ•œ Hazard-aware BFS๋Š” "๊ด€์ธก ๊ตฌ์„ฑ"๊ณผ "๊ฒฝ๋กœํƒ์ƒ‰"์ด ๋ถ„๋ฆฌ๋˜์ง€ ์•Š์€ ๋‹จ์ผ ํ•จ์ˆ˜๋ผ ๊ฐ™์€ 4๋‹จ๊ณ„๋กœ๋Š” ๋ถ„ํ•ดํ•  ์ˆ˜ ์—†์–ด, ์œ„ ๋น„๊ต๋Š” "PPO์˜ T_control ํ•ฉ๊ณ„" ๋Œ€ "BFS ํ•จ์ˆ˜ 1ํšŒ ํ˜ธ์ถœ ์ „์ฒด"์˜ ๋น„๊ต๋‹ค.


A* vs PPO ์‹œ๊ฐํ™” ๋น„๊ต

โ–  ๋นจ๊ฐ•: ํ™”์žฌ | โ— ์ดˆ๋ก/ํŒŒ๋ž‘: ๋Œ€ํ”ผ์ž | ํ™”์‚ดํ‘œ: ์œ ๋„๋“ฑ ๋ฐฉํ–ฅ | A*ยทPPO๋ฅผ ํ•œ ์ด๋ฏธ์ง€์— ๋‚˜๋ž€ํžˆ ๋น„๊ต(make_comparison_gifs_2.py ์ƒ์„ฑ, seed=42๋กœ ํ‘œ 3๊ณผ ๋™์ผ ์กฐ๊ฑด)

S1: ๊ธฐ๋ณธ ํƒˆ์ถœ (20๋ช…, ๊ณ ์ • ํ™”์žฌ)

S1 ๋น„๊ต

S2: EXIT A ์œ„ํ˜‘ (40๋ช…, ์šฐ์ธก ๊ตฌ์—ญ ํ™”์žฌ)

S2 ๋น„๊ต

S3: ์ง„์ž…๋กœ ์ฐจ๋‹จ (40๋ช…, EXIT A ์ ‘๊ทผ๋กœ ํ™”์žฌ)

S3 ๋น„๊ต

S4: ์–‘๋ฐฉํ–ฅ ๋™์‹œ ์œ„ํ˜‘ (40๋ช…, ์ถœ๊ตฌ AยทB ๊ตฌ์—ญ ํ™”์žฌ)

S4 ๋น„๊ต

(์—…๋ฐ์ดํŠธ๋จ, 2026-08-20): ์ด GIF ๋‚ด ์บก์…˜์€ "๋œ ์œ„ํ—˜ํ•œ ์ถœ๊ตฌ๋กœ ๊ท ๋“ฑ ๋ถ„์‚ฐ"์ด๋ผ๊ณ  ์ ํ˜€ ์žˆ์œผ๋‚˜, ์ดํ›„ Exit Balance ์‹ค์ธก(์œ„ ์‹คํ—˜ ๊ฒฐ๊ณผ ์ ˆ ์ฐธ๊ณ )์œผ๋กœ ์ •์ •๋๋‹ค. ์‹ค์ œ๋กœ๋Š” "๊ท ๋“ฑ ๋ถ„์‚ฐ"์ด ์•„๋‹ˆ๋ผ "๋” ์•ˆ์ „ํ•œ ์ชฝ์œผ๋กœ ๊ฒฐ๋‹จ๋ ฅ ์žˆ๊ฒŒ ๋ชฐ์•„ ์ฒ˜๋ฆฌ ํšจ์œจ์„ ๋†’์ด๋Š”" ์ „๋žต์ด๋‹ค. GIF๋Š” ์žฌ์ƒ์„ฑ ์ „๊นŒ์ง€ ๊ตฌ๋ฒ„์ „ ์บก์…˜ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•œ๋‹ค.

S5: EXIT B ์œ„ํ˜‘ (40๋ช…, ๋ฏธํ•™์Šต OOD)

S5 ๋น„๊ต

(์—…๋ฐ์ดํŠธ๋จ, 2026-08-20): GIF ๋‚ด๋ถ€ ์ œ๋ชฉ์€ "์ค‘์•™ ์ฐจ๋‹จ"์œผ๋กœ ํ‘œ์‹œ๋˜์ง€๋งŒ, ์ด ๋ฌธ์„œ ์ „๋ฐ˜์˜ "S5"๋Š” env_core.SCENARIO_CONFIGS[5]("EXIT B ์œ„ํ˜‘")๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ์žฌ์ƒ์„ฑ ์ „๊นŒ์ง€ GIF ์ž์ฒด์˜ ํ‘œ์‹œ ์ œ๋ชฉ์€ ๊ตฌ๋ฒ„์ „ ๊ทธ๋Œ€๋กœ๋‹ค.


๋ฐœํ‘œ ํฌ์Šคํ„ฐ

์—ฐ๊ตฌ ํฌ์Šคํ„ฐ

(์—…๋ฐ์ดํŠธ๋จ, 2026-08-20): ์ด ํฌ์Šคํ„ฐ๋Š” hazard_aware ๋ฒ„๊ทธ ์ˆ˜์ • (Hazard-Awareness Ablation ์ฐธ๊ณ ) ์ด์ „ ๋ฒ„์ „์ด๋ผ ์•„๋ž˜ ํ•ญ๋ชฉ๋“ค์ด ๋ณธ๋ฌธ ํ‘œ 3ยท๊ทธ๋ฆผ 5์™€ ๋‹ค๋ฅด๋‹ค.

  • ํ‘œ 3 ์ˆ˜์น˜: ํฌ์Šคํ„ฐ๋Š” ์ •์  ์œ ๋„๋“ฑ ์—†์ด A*/PPO 2-way ๋น„๊ต์ด๊ณ  ์ƒ์กด์œจ ์ž์ฒด๊ฐ€ ๋‹ค๋ฅด๋‹ค(์˜ˆ: S2 ํฌ์Šคํ„ฐ A*77ยฑ16/PPO89ยฑ5 vs ๋ณธ๋ฌธ A*54.4ยฑ22.0/ PPO85.7ยฑ6.1). ์ •์  ์œ ๋„๋“ฑ ๋ฒ ์ด์Šค๋ผ์ธ์€ ๋ฒ„๊ทธ ์ˆ˜์ • ์ดํ›„์— ์ถ”๊ฐ€๋๋‹ค.
  • ์™„๋ฃŒ ์‹œ๊ฐ„ ๋ฐฉํ–ฅ์„ฑ์ด ๋ฐ˜๋Œ€๋‹ค: ํฌ์Šคํ„ฐ๋Š” PPO๊ฐ€ A*๋ณด๋‹ค ํ•ญ์ƒ ๋น ๋ฅด๋‹ค๊ณ  ๋ณด๊ณ ํ•˜์ง€๋งŒ, ์žฌ์ธก์ • ๊ฒฐ๊ณผ๋Š” ๋ฐ˜๋Œ€๋‹ค. S2/S3/S5์—์„œ๋Š” ์ •์ ยทA*๊ฐ€ ํ™”์žฌ๋ฅผ ๋ฌด์‹œํ•˜๊ณ  ์ง์ง„ํ•ด PPO๋ณด๋‹ค ์Šคํ… ์ˆ˜๊ฐ€ ์ ๋‹ค(๋Œ€์‹  ํ›จ์”ฌ ๋งŽ์ด ์ฃฝ๋Š”๋‹ค). ์†๋„์™€ ์ƒ์กด์œจ์˜ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„๋กœ ์žฌํ•ด์„๋๋‹ค(๋ณธ๋ฌธ ํ‘œ 3 ํ•ด์„ค ์ฐธ๊ณ ).
  • ์ถ”๋ก  ์†๋„ "38๋ฐฐ" ์š”์•ฝ: ํฌ์Šคํ„ฐ๋Š” N=200์—์„œ PPO ~1.5ms, 38๋ฐฐ ๋น ๋ฅด๋‹ค๊ณ  ์š”์•ฝํ•˜์ง€๋งŒ, ์žฌ์‹ค์ธก ๊ฒฐ๊ณผ PPO๋Š” 0.16ms(O(1) ๊ณ ์ •), A*๋Š” 53.6ms์ด๊ณ  ๋ฐฐ์œจ์€ N์— ๋”ฐ๋ผ 10๋ฐฐ849๋ฐฐ๊นŒ์ง€ ๋ณ€ํ•œ๋‹ค(๋ณธ๋ฌธ ๊ทธ๋ฆผ 5 ์ฐธ๊ณ ). ๋‹จ์ผ ๋ฐฐ์œจ ์š”์•ฝ์€ ์˜คํ•ด ์†Œ์ง€๊ฐ€ ์žˆ์–ด ๋ณธ๋ฌธ์—์„œ๋Š” ์ œ๊ฑฐํ–ˆ๋‹ค.
  • ํ‘œ 1 ํ™”์žฌ ํ™•์‚ฐ ํ™•๋ฅ : ํฌ์Šคํ„ฐ๋Š” S3 15%/S4 18%๋กœ ์ ํ˜€ ์žˆ๋Š”๋ฐ ๋ณธ๋ฌธ ํ‘œ 1์€ S3 18%/S4 15%๋กœ ๋ฐ˜๋Œ€๋‹ค. ๋ณธ๋ฌธ ํ‘œ 1์€ ํ˜„์žฌ env_core.SCENARIO_CONFIGS ์ฝ”๋“œ๊ฐ’๊ณผ ์ผ์น˜์‹œํ‚จ ๊ฒƒ์ด๋‹ค.
  • S5 ๋ผ๋ฒจ: ํฌ์Šคํ„ฐ์˜ "S5 ์ค‘์•™ ์ฐจ๋‹จ"์€ ์ดํ›„ SCENARIO_CONFIGS[5] ("EXIT B ์œ„ํ˜‘")๋กœ ์ด์–ด์ง€๋Š”๋ฐ, ์ด ๋ช…์นญ ๋ถˆ์ผ์น˜๋Š” ์•„์ง ์™„์ „ํžˆ ํ•ด์†Œ๋˜์ง€ ์•Š์•˜๋‹ค(์œ„ ์‹œ๊ฐํ™” ์ ˆ ๊ฐ์ฃผ ์ฐธ๊ณ ).
  • Conclusion์˜ "+10%p ์ƒ์กด์œจ, 30๋ฐฐ ์†๋„" ์š”์•ฝ๋„ ์žฌ์ธก์ • ํ›„ ์‹œ๋‚˜๋ฆฌ์˜ค๋ณ„๋กœ +12.3%p+31.2%p, ๋ฐฐ์œจ 10๋ฐฐ~849๋ฐฐ๋กœ ํ›จ์”ฌ ํฌ๊ณ  ๊ฐ€๋ณ€์ ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ๋‹ค.

์„ค์น˜ ๋ฐ ์‹คํ–‰

pip install -r requirements.txt
# Stage 1: ๊ทธ๋ฆฌ๋“œ ์ถ”์ถœ
cd stage1
python gridcell_extract.py

# Stage 2 ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ
cd stage2

# PPO ํ•™์Šต (4์ฐจ์› ์ถ•์†Œ ๊ด€์ธก, ์ปค๋ฆฌํ˜๋Ÿผ S1โ†’S4 ์ž๋™ ์ง„๊ธ‰, S5๋Š” --max-scenario๋กœ ์ œ์™ธ)
python ppo/ppo_train.py --mode train --people 40 --steps 3506176 \
    --feature-set reduced --curriculum-threshold 0.85 --ent-coef 0.005 --max-scenario 4

# ์‹œ๋“œ ํŽ˜์–ด๋ง + ์ •์ ยทA*ยทHazard-aware BFS ํฌํ•จ ์ „์ฒด ๋น„๊ต (ํ‘œ 3 ์žฌํ˜„)
python experiments/exp1_compare.py --scenarios 1 2 3 4 5 --episodes 30 --seed 42 \
    --feature-set reduced --include-static --include-hazard-astar

# ์ „์ฒด ์ œ์–ด์ฃผ๊ธฐ ์‹œ๊ฐ„ ๋ถ„ํ•ด ์ธก์ • (๊ทธ๋ฆผ 5, T_observation+T_policy+T_costmap+guidance)
python experiments/exp_speed_breakdown.py --scenarios 4 --feature-set reduced \
    --n-agents-list 20 50 100 150 200 300 500

# (๊ตฌ๋ฒ„์ „) ์‹ ๊ฒฝ๋ง ์ถ”๋ก ์‹œ๊ฐ„๋งŒ ๋น„๊ต โ€” T_policy๋งŒ ์žฌ๋ฏ€๋กœ ์ „์ฒด ์ œ์–ด ์†๋„ ๋น„๊ต๋กœ๋Š” ์“ฐ์ง€ ๋ง ๊ฒƒ
python experiments/exp_speed.py --n-agents 200 --feature-set reduced

# ์—ํ”ผ์†Œ๋“œ GIF ์‹œ๊ฐํ™” (๊ทธ๋ฆผ 6)
python experiments/exp3_visualize.py

# A* ๋ฒ ์ด์Šค๋ผ์ธ ๋‹จ๋… ํ…Œ์ŠคํŠธ
python baselines/astar_baseline.py --all-scenarios --episodes 30          # Hazard-aware
python baselines/astar_simple_baseline.py --all-scenarios --episodes 30   # Simple (ํ™”์žฌ ๋ฌด์‹œ)
python baselines/astar_real.py --all-scenarios --episodes 30              # Pure (ํ™”์žฌ ๋ฌด์‹œ)
python baselines/static_signage_baseline.py --all-scenarios --episodes 30 # ์ •์  ์œ ๋„๋“ฑ

# ๋ณด์กฐ ํ‰๊ฐ€์ง€ํ‘œ (Exit Balance / Throughput / Path Efficiency)
python experiments/compute_extra_metrics.py --scenario 4 --csv <exp1_compare.py ์ถœ๋ ฅ CSV>

# TensorBoard ํ•™์Šต ์ง€ํ‘œ ํ™•์ธ
tensorboard --logdir ./fire_evac_log/

ํŒŒ์ผ ๊ตฌ์กฐ

Unity-FireEvacSim-pipeline/
โ”œโ”€โ”€ requirements.txt
โ”‚
โ”œโ”€โ”€ stage1/
โ”‚   โ”œโ”€โ”€ build_base_grid.py           # ํ”ผ๋‚œ์•ˆ๋‚ด๋„ ์ด๋ฏธ์ง€ โ†’ base_grid.npy (Stage 1, Hough Line ํ™•์ •ํŒ)
โ”‚   โ”œโ”€โ”€ gridcell_extract.py          # ์ดˆ๊ธฐ ํ”„๋กœํ† ํƒ€์ž…(ํšŒ๊ท€ ๋น„๊ต์šฉ, ์ถœ๊ตฌ/๋ฌธ ๊ฒ€์ถœ ์—†์Œ)
โ”‚   โ”œโ”€โ”€ build_ground_truth.py        # ์ •ํ™•๋„ ํ‰๊ฐ€์šฉ ์ˆ˜์ž‘์—… ์ •๋‹ต ์ œ์ž‘
โ”‚   โ”œโ”€โ”€ eval_extraction_accuracy.py  # WALL IoUยท์—ฐ๊ฒฐ์„ฑ ๋ณด์กด์œจยท์ถœ๊ตฌ ๋„๋‹ฌ๋ฅ  ํ‰๊ฐ€
โ”‚   โ”œโ”€โ”€ image.jpg                    # ์›๋ณธ ํ”ผ๋‚œ์•ˆ๋‚ด๋„ ์‚ฌ์ง„
โ”‚   โ”œโ”€โ”€ door_template.png            # ๋ฌธ ๊ธฐํ˜ธ ํ…œํ”Œ๋ฆฟ(์ด ๋„๋ฉด ์ „์šฉ)
โ”‚   โ””โ”€โ”€ base_grid.npy                # ์ถ”์ถœ๋œ 40ร—25 ๊ทธ๋ฆฌ๋“œ
โ”‚
โ””โ”€โ”€ stage2/
    โ”œโ”€โ”€ env_core.py                  # ํ•ต์‹ฌ ํ™˜๊ฒฝ (FireEvacEnv, ์‹œ๋‚˜๋ฆฌ์˜ค, ๋ณด์ƒ, hazard_aware ํ”Œ๋ž˜๊ทธ)
    โ”œโ”€โ”€ train_ppo_grid.py            # 3,000์ฐจ์› ๊ทธ๋ฆฌ๋“œ ๊ด€์ธก ablation (๋ณ„๋„ ์‹คํ—˜, ๋ณธ ํ”„๋กœ์ ํŠธ ์ฃผ ๋ชจ๋ธ ์•„๋‹˜)
    โ”œโ”€โ”€ train_common.py              # ์ปค๋ฆฌํ˜๋Ÿผ ๋ž˜ํผยท์ฒดํฌํฌ์ธํŠธยทVecNormalize ์œ ํ‹ธ๋ฆฌํ‹ฐ
    โ”œโ”€โ”€ unity_interface.py           # Python โ†” Unity 3D ์—ฐ๋™ ์ธํ„ฐํŽ˜์ด์Šค
    โ”œโ”€โ”€ record_episode.py            # ์—ํ”ผ์†Œ๋“œ ๊ธฐ๋ก (recordings/*.jsonl ์ƒ์„ฑ)
    โ”œโ”€โ”€ playback_server.py           # ๊ธฐ๋ก๋œ ์—ํ”ผ์†Œ๋“œ ์žฌ์ƒ ์„œ๋ฒ„
    โ”œโ”€โ”€ visualize_episode.py         # 2D GIF ๋ Œ๋”๋ง ์—”์ง„
    โ”œโ”€โ”€ make_visualize_episode.py    # ์‹œ๊ฐํ™” ์Šคํฌ๋ฆฝํŠธ (VISUALIZE_README ์ฐธ๊ณ )
    โ”œโ”€โ”€ make_visualize_episode_test.py
    โ”œโ”€โ”€ make_comparison_gifs.py      # A* vs PPO ๋น„๊ต GIF ์ƒ์„ฑ
    โ”œโ”€โ”€ make_comparison_gifs_2.py    # ๋น„๊ต GIF ์ƒ์„ฑ (๊ฐœ์„ ํŒ)
    โ”œโ”€โ”€ make_gridworld_map.py        # ํฌ์Šคํ„ฐ์šฉ ๊ทธ๋ฆฌ๋“œ์›”๋“œ ๋งต ์‹œ๊ฐํ™”
    โ”œโ”€โ”€ plot_exp1_table.py           # ํ‘œ 3 ๊ทธ๋ž˜ํ”„ ์ƒ์„ฑ
    โ”œโ”€โ”€ plot_speed_cached.py         # ๊ทธ๋ฆผ 5 ํฌ์Šคํ„ฐ์šฉ ์ฐจํŠธ ์ƒ์„ฑ
    โ”œโ”€โ”€ plot_obs_design_split.py     # ๊ด€์ธก ๊ณต๊ฐ„ ์„ค๊ณ„ ๋น„๊ต ๊ทธ๋ž˜ํ”„
    โ”œโ”€โ”€ poster_grid.py               # ๊ทธ๋ฆผ 4: A* vs PPO ๊ฒฝ๋กœ ๋น„๊ต ๊ทธ๋ฆฌ๋“œ
    โ”‚
    โ”œโ”€โ”€ ppo/
    โ”‚   โ””โ”€โ”€ ppo_train.py             # PPO ์ปค๋ฆฌํ˜๋Ÿผ ํ•™์Šต ๋ฉ”์ธ ์Šคํฌ๋ฆฝํŠธ (--feature-set reduced=F1,F2,F14,F15/4์ฐจ์›[๊ธฐ๋ณธ ํ”„๋กœ๋•์…˜], full=F1~F15/15์ฐจ์›[ํ•˜์œ„ํ˜ธํ™˜])
    โ”‚
    โ”œโ”€โ”€ baselines/
    โ”‚   โ”œโ”€โ”€ astar_baseline.py          # Hazard-aware A* (ํ™”์žฌยท์—ฐ๊ธฐยทํ˜ผ์žก ๋ฐ˜์˜)
    โ”‚   โ”œโ”€โ”€ astar_simple_baseline.py   # Simple A* (ํ™”์žฌ ๋ฌด์‹œ, ์ˆœ์ˆ˜ ์ตœ๋‹จ๊ฑฐ๋ฆฌ)
    โ”‚   โ”œโ”€โ”€ astar_real.py              # Pure A* (Manhattan ํœด๋ฆฌ์Šคํ‹ฑ, ํ‘œ 3 ๊ธฐ์ค€)
    โ”‚   โ””โ”€โ”€ static_signage_baseline.py # ์ •์  ์œ ๋„๋“ฑ (์ตœ์ดˆ 1ํšŒ ๊ณ„์‚ฐ ํ›„ ๊ณ ์ •, ์ด ๋ถ„์•ผ ํ‘œ์ค€ ๋น„๊ต๊ตฐ)
    โ”‚
    โ”œโ”€โ”€ experiments/
    โ”‚   โ”œโ”€โ”€ exp1_compare.py            # ์‹œ๋‚˜๋ฆฌ์˜ค๋ณ„ ์ •์ /A*/Hazard-aware BFS/PPO ๋น„๊ต, ์‹œ๋“œ ํŽ˜์–ด๋ง (ํ‘œ 3)
    โ”‚   โ”œโ”€โ”€ exp3_visualize.py          # ์—ํ”ผ์†Œ๋“œ GIF ์‹œ๊ฐํ™” (๊ทธ๋ฆผ 6)
    โ”‚   โ”œโ”€โ”€ exp_speed.py               # ์ถ”๋ก  ์†๋„ ๋น„๊ต โ€” T_policy(์‹ ๊ฒฝ๋ง ์ถ”๋ก )๋งŒ ์ธก์ •, ๊ตฌ๋ฒ„์ „
    โ”‚   โ”œโ”€โ”€ exp_speed_breakdown.py     # ์ „์ฒด ์ œ์–ด์ฃผ๊ธฐ ๋ถ„ํ•ด ์ธก์ • (๊ทธ๋ฆผ 5, T_control ๊ธฐ์ค€, ํ™•์ •ํŒ)
    โ”‚   โ”œโ”€โ”€ feature_ablation.py        # F1~F15 ๊ฐœ๋ณ„ permutation ๋งˆ์Šคํ‚น
    โ”‚   โ”œโ”€โ”€ feature_group_ablation.py  # F1~F15 ๊ทธ๋ฃน ๋‹จ์œ„ ๋งˆ์Šคํ‚น (HAZARD/CROWD/PROGRESS/ALL_BLIND)
    โ”‚   โ”œโ”€โ”€ feature_correlation.py     # F1~F15 15ร—15 ์ƒ๊ด€ํ–‰๋ ฌ
    โ”‚   โ””โ”€โ”€ compute_extra_metrics.py   # Exit Balance / Throughput / Path Efficiency
    โ”‚
    โ”œโ”€โ”€ recordings/                  # ์‹œ๋‚˜๋ฆฌ์˜ค๋ณ„ ๊ธฐ๋ก๋œ ์—ํ”ผ์†Œ๋“œ (*.jsonl)
    โ”œโ”€โ”€ figures/                     # ํฌ์Šคํ„ฐยท๊ทธ๋ฆผ์šฉ ์ •์  ์ด๋ฏธ์ง€
    โ”œโ”€โ”€ model/                       # ํ•™์Šต๋œ PPO ๋ชจ๋ธ (.zip, _vecnorm.pkl)
    โ”‚   โ””โ”€โ”€ ppo/
    โ”œโ”€โ”€ result/                      # ์‹คํ—˜ ๊ฒฐ๊ณผ JSON
    โ”‚   โ”œโ”€โ”€ ppo/
    โ”‚   โ”œโ”€โ”€ astar/
    โ”‚   โ”œโ”€โ”€ astar_real/
    โ”‚   โ”œโ”€โ”€ astar_simple/
    โ”‚   โ”œโ”€โ”€ exp1_compare/
    โ”‚   โ””โ”€โ”€ visualize/               # GIFยทPNG ์‹œ๊ฐํ™” ๊ฒฐ๊ณผ
    โ””โ”€โ”€ fire_evac_log/               # TensorBoard ๋กœ๊ทธ

ํ•œ๊ณ„ ๋ฐ ํ–ฅํ›„ ์—ฐ๊ตฌ

๋‹จ์ผ ๊ฑด๋ฌผ ๊ฒ€์ฆ: ๋ชจ๋“  ์‹คํ—˜์ด ์‹ค์ œ ์ƒ์ƒ๊ด€ 2์ธต ํ‰๋ฉด๋„ ํ•˜๋‚˜๋กœ ์ˆ˜ํ–‰๋๋‹ค. Stage 1(์ด๋ฏธ์ง€โ†’๊ทธ๋ฆฌ๋“œ ์ž๋™ ์ถ”์ถœ)์ด ์ž„์˜์˜ ํ‰๋ฉด๋„๋ฅผ ์ง€์›ํ•˜๋ฏ€๋กœ ๊ตฌ์กฐ์ ์œผ๋กœ ๋‹ค๋ฅธ ๊ฑด๋ฌผ์— ๋Œ€ํ•œ zero-shot ์ผ๋ฐ˜ํ™” ๊ฒ€์ฆ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์•„์ง ๋‘ ๋ฒˆ์งธ ํ‰๋ฉด๋„๋กœ ์‹ค์ธกํ•˜์ง€๋Š” ์•Š์•˜๋‹ค. ๋‹ค๋งŒ ์„ ํ–‰์—ฐ๊ตฌ(Xie et al. 2025 ๋“ฑ) ์ค‘์—๋„ ์—ฌ๋Ÿฌ ๊ฑด๋ฌผ๋กœ ๊ฒ€์ฆํ•œ ์‚ฌ๋ก€๊ฐ€ ์—†์–ด, ๋‹จ์ผ ๊ฑด๋ฌผ ๊ฒ€์ฆ ์ž์ฒด๊ฐ€ ์ด ๋ถ„์•ผ์—์„œ ์ด๋ก€์ ์ธ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.

Stage 1์€ ์‹ค์ œ ํ•™์Šต์— ์“ฐ์ธ ๊ทธ๋ฆฌ๋“œ์˜ ์ถœ์ฒ˜๊ฐ€ ์•„๋‹ˆ๋‹ค: ์ง€๊ธˆ ํ•™์Šต๋œ ๋ชจ๋ธ์ด ์“ฐ๋Š” env_core.BASE_GRID๋Š” ์ด ์‚ฌ์ง„(stage1/image.jpg)์—์„œ ์ž๋™ ์ถ”์ถœ๋œ ๊ฒŒ ์•„๋‹ˆ๋ผ, Unity ์—๋””ํ„ฐ์—์„œ ์ˆ˜์ž‘์—…์œผ๋กœ ๋งŒ๋“  3D ์”ฌ์„ ๋‚ด๋ณด๋‚ธ ๊ฒƒ์ด๋‹ค(์ฝ”๋“œ ์ฃผ์„ ํ™•์ธ). ์ฆ‰ "์‚ฌ์ง„ โ†’ ๊ทธ๋ฆฌ๋“œ ์ž๋™ ์ถ”์ถœ โ†’ ํ•™์Šต"์ด๋ผ๋Š” E2E ํŒŒ์ดํ”„๋ผ์ธ์€ ์ง€๊ธˆ ๊ฒฐ๊ณผ๋ฌผ ๊ธฐ์ค€์œผ๋กœ๋Š” ์‹ค์ œ๋กœ ์ด์–ด์ ธ ์žˆ์ง€ ์•Š๋‹ค. Stage 1(build_base_grid.py)์€ ๋ณ„๋„๋กœ ๊ฒ€์ฆ๋œ ํ™•์žฅ ๊ฒฝ๋กœ๋‹ค.

ํ†ตํ•ฉ์ด ๋ง‰ํžŒ ์ด์œ ๋Š” ๊ทธ๋ฆฌ๋“œ ํ’ˆ์งˆ(WALL IoU)๋งŒ์ด ์•„๋‹ˆ๋‹ค. env_core.py์˜ EXIT_A_POS/EXIT_B_POS์™€ ์‹œ๋‚˜๋ฆฌ์˜ค๋ณ„ ํ™”์žฌ ๋ฐœ์ƒ ๊ตฌ์—ญ(_EXIT_A_UPPER, _EXIT_A_CROSSING, _EXIT_B_LOWER, _CENTER_CORRIDOR)์ด ์ „๋ถ€ ์ง€๊ธˆ Unity ๊ทธ๋ฆฌ๋“œ์˜ ๊ตฌ์ฒด์  ์ขŒํ‘œ์— ์†์œผ๋กœ ๋งž์ถฐ์ ธ ์žˆ์–ด์„œ(2026-09-17 ํ™•์ธ), Stage 1 ๊ทธ๋ฆฌ๋“œ๋กœ ๊ต์ฒดํ•˜๋ ค๋ฉด ํ•ด์ƒ๋„๋ฅผ ๋งž์ถ”๋Š” ๊ฒƒ๊ณผ ๋ณ„๊ฐœ๋กœ ์ด ์ขŒํ‘œ๋“ค์„ ์ƒˆ ๊ทธ๋ฆฌ๋“œ์˜ ๊ฑด๋ฌผ ๊ตฌ์กฐ์— ๋งž๊ฒŒ ๋‹ค์‹œ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค. ๋‹จ์ˆœ ์ƒ์ˆ˜ ์žฌ์กฐ์ •์œผ๋กœ ๋๋‚˜์ง€ ์•Š๋Š” ๋ณ„๋„ ์„ค๊ณ„ ์ž‘์—…์ด๋ผ ์ด๋ฒˆ ํ†ตํ•ฉ์—์„œ๋Š” ๋ฒ”์œ„ ๋ฐ–์œผ๋กœ ๋’€๋‹ค.

์ด ์‚ฌ์ง„ ํ•œ ์žฅ์— ๋Œ€ํ•ด ์ง์ ‘ ๋งŒ๋“  ์ •๋‹ต๊ณผ ๋น„๊ตํ•œ ๊ฒฐ๊ณผ: ์…€ ๋‹จ์œ„ ์ •ํ™•๋„(pixel accuracy) 80.0%, WALL IoU 65.8%, ๊ฒฝ๊ณ„ 1์นธ ์˜ค์ฐจ๊นŒ์ง€ ํ—ˆ์šฉํ•˜๋Š” ๊ด€๋Œ€ํ•œ ๋งค์นญ ๊ธฐ์ค€์œผ๋กœ๋Š” recall 94.1%/precision 94.3%, ์ถœ๊ตฌ(EXIT) ๊ฒ€์ถœ์€ recall/precision ๋ชจ๋‘ 100%. ์ž์ฒด ์ถœ๊ตฌ ๋„๋‹ฌ ๊ฐ€๋Šฅ๋ฅ (๊ทธ๋ฆฌ๋“œ ๋‚ด ๋ชจ๋“  ๋ณดํ–‰ ๊ฐ€๋Šฅ ์…€์ด ์ถœ๊ตฌ๊นŒ์ง€ ๋‹ฟ๋Š” ๋น„์œจ)์€ ์›๋ž˜ 45%์—์„œ ๊ฑด๋ฌผ ์™ธ๊ณฝ ๋งˆ์Šคํ‚นยท๋ฌธ ๊ฒ€์ถœ ๊ฐœ์„ (98.1%)๊ณผ ๋ฒฝ ๊ฒ€์ถœ ์ž์ฒด๋ฅผ ์ƒ‰์ƒ/ํฌ๊ธฐ ๊ธฐ์ค€์—์„œ ์ง์„ (Hough Line) ๊ธฐ์ค€์œผ๋กœ ๋ฐ”๊พผ ๊ฐœ์„ (100%)์„ ๊ฑฐ์ณ ๋Œ์–ด์˜ฌ๋ ธ๋‹ค. ํ™”์žฅ์‹ค ํ”ฝํ† ๊ทธ๋žจ์ฒ˜๋Ÿผ ๊ณก์„ ํ˜• ์•„์ด์ฝ˜์„ ๋ฒฝ์œผ๋กœ ์˜คํƒํ•˜๋˜ ๋ฌธ์ œ๋ฅผ "๋ฒฝ์€ ์ง์„ , ์•„์ด์ฝ˜์€ ๊ณก์„ "์ด๋ผ๋Š” ์ „์ œ๋กœ ์ƒ๋‹น ๋ถ€๋ถ„ ์ค„์˜€์ง€๋งŒ, ์—ฌ์ „ํžˆ ๋‹จ์ˆœ ๊ทœ์น™ ๊ธฐ๋ฐ˜ ๋ฐฉ์‹์ด๋ผ CubiCasa5K๊ธ‰ ๋”ฅ๋Ÿฌ๋‹ ๋ฐฉ๋ฒ•(mIoU ~87%)๋ณด๋‹ค ์ •๋ฐ€๋„๊ฐ€ ๋‚ฎ๊ณ , ์—˜๋ฆฌ๋ฒ ์ดํ„ฐยท์†Œํ™”๊ธฐ ํ‘œ์ง€ํŒ ๊ฐ™์€ ์ง์„  ์œ„์ฃผ ์•„์ด์ฝ˜์€ ์ด ๋ฐฉ์‹์œผ๋กœ๋„ ์•ˆ ๊ฑธ๋Ÿฌ์ง„๋‹ค. ํ‘œ๋ณธ์ด ์‚ฌ์ง„ 1์žฅ๋ฟ์ด๋ผ ์˜ค์ฐจ์˜ ์‹ ๋ขฐ๊ตฌ๊ฐ„๋„ ๋…ผํ•  ์ˆ˜ ์—†๋‹ค. ์ƒ์„ธ: Stage 1 ์ถ”์ถœ ์ •ํ™•๋„ ํ‰๊ฐ€ Phase E.

๋ฐ€๋„ ์ผ๋ฐ˜ํ™” ๊ฒฝ๊ณ„: ์ปค๋ฆฌํ˜๋Ÿผ ํ•™์Šต์€ ์ตœ๋Œ€ 40๋ช…๊นŒ์ง€๋งŒ ์ง„ํ–‰๋œ๋‹ค. S4์—์„œ N์„ 40โ†’500๊นŒ์ง€ ๋Š˜๋ ค๊ฐ€๋ฉฐ 4์ฐจ์› ๋ชจ๋ธ๋กœ ์žฌ์ธก์ •ํ•œ ๊ฒฐ๊ณผ(n=8), A* ๋Œ€๋น„ ์ƒ์กด์œจ ์šฐ์œ„๋Š” N=200๊นŒ์ง€๋Š” ์œ ์ง€๋˜์ง€๋งŒ(N=40: +12.8%p โ†’ N=80: +11.2%p โ†’ N=120: +12.1%p โ†’ N=160: +8.6%p โ†’ N=200: +8.0%p) N=300 ์ด์ƒ์—์„œ๋Š” ์‚ฌ์‹ค์ƒ ์‚ฌ๋ผ์ง„๋‹ค(N=300: +0.3%p, N=500: +0.1%p). ์—ญ์ „๊นŒ์ง€๋Š” ์•„๋‹ˆ์ง€๋งŒ, ํ•™์Šต ๋ฐ€๋„(โ‰ค40๋ช…)๋ฅผ 10๋ฐฐ ์ด์ƒ ๋ฒ—์–ด๋‚˜๋ฉด ์ƒ์กด์œจ ์šฐ์œ„๋ฅผ ๋” ์ด์ƒ ์ฃผ์žฅํ•  ์ˆ˜ ์—†๋‹ค. ์ด ๋น„๊ต ์ƒ๋Œ€๋Š” Hazard-aware BFS๊ฐ€ ์•„๋‹ˆ๋ผ A*์ด๋ฏ€๋กœ, "์ธ์›์ด ๋Š˜์–ด๋„ ์œ„ํ—˜ ๋ฐ˜์˜ ํƒ์ƒ‰๋ณด๋‹ค ์šฐ์ˆ˜ํ•˜๋‹ค"๋Š” ๋œป์€ ์•„๋‹ˆ๋‹ค. T_control(์ „์ฒด ์ œ์–ด์ฃผ๊ธฐ, ์œ„ ์ถ”๋ก  ์†๋„ ์ ˆ ์ฐธ๊ณ )์€ N=500์—์„œ๋„ 7ms ๋ฏธ๋งŒ์œผ๋กœ ์ผ์ •ํ•ด ๊ณ„์‚ฐ ๋น„์šฉ ์šฐ์œ„๋Š” ๋ฐ€๋„์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ์œ ์ง€๋œ๋‹ค โ€” ์ƒ์กด์œจ๊ณผ ๊ณ„์‚ฐ ๋น„์šฉ์€ ์„œ๋กœ ๋‹ค๋ฅธ ํ‰๊ฐ€์ถ•์ด๋ฉฐ, ๊ณ ๋ฐ€๋„ ๊ตฌ๊ฐ„์—์„œ๋Š” ์ „์ž๊ฐ€ ๋ฌด๋„ˆ์ง€๊ณ  ํ›„์ž๋งŒ ๋‚จ๋Š”๋‹ค.

์ธ์›์ˆ˜(N) ์„ค์ • ๊ทผ๊ฑฐ ๋ฏธํ™•์ •: ์ปค๋ฆฌํ˜๋Ÿผ์€ 20~40๋ช… ๊ทœ๋ชจ๋กœ ํ•™์Šตํ•œ๋‹ค. ์ด ๊ทœ๋ชจ๊ฐ€ ์‹ค์ œ ์ƒ์ƒ๊ด€ 2์ธต ๊ฑด๋ฌผ์— ์ ์ ˆํ•œ์ง€ ๋’ท๋ฐ›์นจํ•˜๋Š” ๊ทผ๊ฑฐ๊ฐ€ ์•„์ง ์—†๋‹ค. ๊ทธ๋ฆฌ๋“œ ์…€ 1๊ฐœ๊ฐ€ ์‹ค์ œ ๋ช‡ ใŽก์— ๋Œ€์‘ํ•˜๋Š”์ง€ ์ •์˜๋œ ๊ณณ์ด ์—†์–ด์„œ, ์†Œ๋ฐฉ๋ฒ•๋ น ์ˆ˜์šฉ์ธ์› ๊ธฐ์ค€(๊ตญ๊ฐ€ํ™”์žฌ์•ˆ์ „๊ธฐ์ค€, ๋˜๋Š” NFPA 101 occupant load factor)๊ณผ ๋Œ€์กฐํ•˜๋Š” ๊ฒŒ ํ˜„์žฌ๋Š” ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ฑด๋ฌผ์˜ ์‹ค์ œ ๋ฉด์  ์ž๋ฃŒ๋ฅผ ํ™•๋ณดํ•˜๋Š” ๋Œ€๋กœ ์ด ๊ณ„์‚ฐ์„ ์ฑ„์›Œ ๋„ฃ์„ ๊ณ„ํš์ด๋‹ค.

PPO ์•„ํ‚คํ…์ฒ˜ ๋ฏธ๊ฒ€์ฆ: ์ง€๊ธˆ PPO๋Š” ๊ธฐ๋ณธ MLP(net_arch=[256, 256]) ๊ตฌ์กฐ ๊ทธ๋Œ€๋กœ์ด๊ณ , ์ง€์—ญ์„ฑ ์š”์•ฝ ๋ ˆ์ด์–ด ๊ฐ™์€ ๊ฒฝ๋Ÿ‰ ๋ชจ๋“ˆ ์ถ”๊ฐ€๋Š” ์•„์ง ์‹คํ—˜ํ•˜์ง€ ์•Š์•˜๋‹ค. ์—”ํŠธ๋กœํ”ผ ๊ณ„์ˆ˜(ent_coef) ๊ฐ์‚ฌ๋Š” 40๋งŒ ์Šคํ… ๊ธฐ์ค€์œผ๋กœ๋Š” ๊ธฐ์กด ๊ธฐ๋ณธ๊ฐ’ 0.05๊ฐ€ ๋‚ซ๋‹ค๊ณ  ๊ฒฐ๋ก  ๋ƒˆ์—ˆ์ง€๋งŒ, production ๊ธธ์ด(3.5M ์Šคํ…)๊นŒ์ง€ ๋๊นŒ์ง€ ํ•™์Šตํ•˜๋ฉด log_std๊ฐ€ ๋ฐœ์‚ฐํ•ด exit ๋น„์šฉ ์•ก์…˜์ด ๊ฒฝ๊ณ„๊ฐ’์— ๊ณ ์ •๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋’ค๋Šฆ๊ฒŒ ๋ฐœ๊ฒฌ๋๋‹ค. ๊ทผ๋ณธ ์›์ธ์€ ์—”ํŠธ๋กœํ”ผ๊ฐ€ ์•„๋‹ˆ๋ผ ์ •์ฑ…๋ง์˜ ์ดˆ๊ธฐ ์ถœ๋ ฅ ์Šค์ผ€์ผ๊ณผ ์•ก์…˜ ๋ฐ•์Šค๊ฐ€ ์–ด๊ธ‹๋‚˜ ์žˆ๋˜ ๊ฒƒ์ด์—ˆ๊ณ , action_net์˜ ์ดˆ๊ธฐ bias๋ฅผ ๋ฐ•์Šค ์ค‘๊ฐ„๊ฐ’์œผ๋กœ ๋งž์ถ”๋Š” ์ˆ˜์ •์œผ๋กœ ํ•ด์†Œํ–ˆ๋‹ค(์ƒ์„ธ: Hazard-Awareness Ablation ํ›„์† ๋ถ„์„ 6, ํ”ผ์ฒ˜ ๊ณต๊ฐ„ ์ตœ์ ํ™” ๊ณ„ํš). GAE ฮปยทlearning rate schedule ๋“ฑ ๋‚˜๋จธ์ง€ ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ์•„์ง ๊ฒ€ํ† ํ•˜์ง€ ์•Š์•˜๋‹ค. ์ปค๋ฆฌํ˜๋Ÿผ ํ•™์Šต(S1โ†’S4 ์ˆœ์ฐจ ์ง„๊ธ‰) ์ž์ฒด์˜ ํšจ๊ณผ๋Š” ์˜› ent_coef=0.05 ๊ธฐ์ค€์œผ๋กœ ๊ฒ€์ฆํ–ˆ๋‹ค. ๊ฐ™์€ ์กฐ๊ฑด(40๋งŒ ์Šคํ…)์—์„œ ์ปค๋ฆฌํ˜๋Ÿผ ์—†์ด S4๋กœ ๋ฐ”๋กœ ํ•™์Šตํ•œ ๋ชจ๋ธ(53.3ยฑ36.6%)๊ณผ ๋น„๊ตํ•˜๋ฉด ์ปค๋ฆฌํ˜๋Ÿผ ์ชฝ์ด +12.15%p ๋†’๊ณ  ๋ถ„์‚ฐ๋„ ๋” ์ž‘์ง€๋งŒ(65.4ยฑ28.2%), n=30 ํ‘œ๋ณธ์—์„œ ํ†ต๊ณ„์ ์œผ๋กœ ์œ ์˜ํ•œ ์ˆ˜์ค€์€ ์•„๋‹ˆ์—ˆ๋‹ค(์ƒ์„ธ๋Š” Hazard-Awareness Ablation ํ›„์† ๋ถ„์„ 4ยท5). ์ด ๋น„๊ต ์ž์ฒด๋Š” ์œ„ ์ˆ˜์ •ํŒ(ent_coef=0.005 + bias ์ดˆ๊ธฐํ™”) ๊ธฐ์ค€์œผ๋กœ๋Š” ์•„์ง ์žฌ๊ฒ€์ฆ ์ „์ด๋‹ค. ๋‹ค๋งŒ ์ˆ˜์ •ํŒ์œผ๋กœ ์žฌํ•™์Šตํ•˜๋Š” ๊ณผ์ •์—์„œ ์Šน๊ธ‰ ๊ธฐ์ค€(์ตœ๊ทผ 50 ์—ํ”ผ์†Œ๋“œ ํ‰๊ท  ์ƒ์กด์œจ 0.90 ์ด์ƒ)์ด S4์—์„œ ํ•œ ๋ฒˆ๋„ ์ถฉ์กฑ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฑธ ๋ฐœ๊ฒฌํ•ด, ๊ธฐ์ค€์„ 0.85๋กœ ๋‚ฎ์ถฐ ๋‹ค์‹œ ํ•™์Šตํ•˜๋‹ˆ ์ฒ˜์Œ์œผ๋กœ S4๊นŒ์ง€ ์Šน๊ธ‰ํ–ˆ๊ณ  S4ยทS5 ์ƒ์กด์œจ์ด ํ•จ๊ป˜ ๊ฐœ์„ ๋๋‹ค(์ƒ์„ธ: ํ›„์† ๋ถ„์„ 7). ์Šน๊ธ‰ ๊ธฐ์ค€ ์ž์ฒด๋„ ์žฌ๊ฒ€์ฆ์ด ํ•„์š”ํ•œ ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ์˜€๋˜ ์…ˆ์ด๋‹ค.

ํ”ผ์ฒ˜ ๊ณต๊ฐ„(F1~F15) ์ตœ์ ํ™” โ€” ์™„๋ฃŒ, 4์ฐจ์›์œผ๋กœ ์ถ•์†Œ ํ™•์ •: ๊ด€์ธก ๋ฒกํ„ฐ 15์ฐจ์›์€ ์ดˆ๊ธฐ ์„ค๊ณ„ ์ดํ›„ ์žฌ๊ฒ€ํ†  ์—†์ด ์“ฐ์—ฌ์˜ค๋‹ค๊ฐ€, ์•ก์…˜ ๊ฒฝ๊ณ„๊ฐ’ ๊ณ ์ • ๋ฒ„๊ทธ(์œ„ "PPO ์•„ํ‚คํ…์ฒ˜ ๋ฏธ๊ฒ€์ฆ" ํ•ญ๋ชฉ)๋ฅผ ๊ณ ์นœ ์ •์ƒ ์ž‘๋™ ๋ชจ๋ธ ๊ธฐ์ค€์œผ๋กœ permutation ๊ฐœ๋ณ„ยท๊ทธ๋ฃน ๋งˆ์Šคํ‚น๊ณผ 15ร—15 ์ƒ๊ด€ํ–‰๋ ฌ ๋ถ„์„์„ ์žฌ๊ฒ€์ฆํ–ˆ๋‹ค. F3ยทF7ยทF8ยทF10ยทF11์ด "์ถœ๊ตฌ ์„ ํ˜ธ"๋ผ๋Š” ๊ฐ™์€ ์ถ•์„ ์ค‘๋ณต ์ธ์ฝ”๋”ฉํ•˜๊ณ (|r| 0.640.95), F1/F13ยทF2/F12๋„ ์ด ๊ฑด๋ฌผ ํ˜•์ƒ์— ๊ณ ์ •๋ผ ์ƒ๊ด€์ด ๋†’์•˜๋˜ ๋ฐ˜๋ฉด(|r| 0.850.90), F1/F2์™€ F14/F15๋Š” ์˜ˆ์ƒ๊ณผ ๋‹ฌ๋ฆฌ ๋…๋ฆฝ์ ์ด์—ˆ๋‹ค(|r|<0.06). ๊ทธ๋ฃน ๋‹จ์œ„๋กœ ๊ฐ€๋ ค๋„(HAZARD/ CROWD/PROGRESS/ALL_BLIND) ๋‚™ํญ์ด ยฑ4.4%p ์ด๋‚ด์˜€๊ณ , ์ด ๊ทผ๊ฑฐ๋กœ F1, F2, F14, F15 4๊ฐœ๋งŒ ๋‚จ๊ธด ์ถ•์†Œ ๊ด€์ธก์„ ์„ค๊ณ„ํ•ด ์ฒ˜์Œ๋ถ€ํ„ฐ ์žฌํ•™์Šตํ–ˆ๋‹ค(feature_set= "reduced"). 15์ฐจ์› ๋ชจ๋ธ๊ณผ ํ†ต๊ณ„์ ์œผ๋กœ ๊ตฌ๋ถ„๋˜์ง€ ์•Š๋Š” ์„ฑ๋Šฅ์„ ํ™•์ธํ•ด ์ด์ œ ์ด๊ฒŒ ํ”„๋กœ๋•์…˜ ๊ธฐ๋ณธ ๋ชจ๋ธ์ด๋‹ค(์ƒ์„ธ ์ˆซ์ž๋Š” ์œ„ "๊ด€์ธก ๊ณต๊ฐ„" ์ ˆ, ์ „์ฒด ๊ฒฝ์œ„๋Š” ํ”ผ์ฒ˜ ๊ณต๊ฐ„ ์ตœ์ ํ™” ๊ณ„ํš).

Kim & Ha(2020)๊ฐ€ ๋ณด๊ณ ํ•œ "observation dropout์œผ๋กœ ๋ถˆํ•„์š”ํ•œ ๊ด€์ธก ์ฑ„๋„์„ ์ œ๊ฑฐํ•ด๋„ ์ •์ฑ… ์„ฑ๋Šฅ์ด ์œ ์ง€๋œ๋‹ค"๋Š” ๊ฒฐ๊ณผ์™€ ๋ฐฉํ–ฅ์ด ์ผ์น˜ํ•œ๋‹ค. S1(20๋ช…)๋„ ๋™์ผ ์ ˆ์ฐจ(3,506,176 ์Šคํ…, threshold=0.85)๋กœ 4์ฐจ์›์œผ๋กœ ์žฌํ•™์Šตํ•ด ๋‘ ์ธ์›๋Œ€ (20๋ช…ยท40๋ช…) ๋ชจ๋‘ ํ”„๋กœ๋•์…˜ ๋ชจ๋ธ์ด 4์ฐจ์›์œผ๋กœ ๊ต์ฒด๋๋‹ค.

์žฌํ˜„ ๋ถˆ๊ฐ€๋Šฅํ•œ ์•„ํ‚คํ…์ฒ˜ ๋ณ€ํ˜•: stage2/model/, stage2/logs/์—๋Š” RecurrentPPOยทJointPPOยทAutoregressivePPO๋กœ ํ•™์Šตํ•œ ์ฒดํฌํฌ์ธํŠธยท๋กœ๊ทธ๊ฐ€ ์ผ๋ถ€ ๋‚จ์•„ ์žˆ์œผ๋‚˜, ํ•ด๋‹น ์†Œ์Šค ์ฝ”๋“œ๋Š” ์ •๋ฆฌ ๊ณผ์ •์—์„œ ์‚ญ์ œ๋๋‹ค(๊ฐ ๋ณ€ํ˜• ๋ชจ๋‘ 30์‹œ๊ฐ„ ์ด์ƒ ํ•™์Šตํ•ด๋„ ์ˆ˜๋ ดํ•˜์ง€ ์•Š์•„ ํ๊ธฐ๋จ). ์ด ๊ฒฐ๊ณผ๋ฌผ๋“ค์€ ํ˜„์žฌ ์žฌํ˜„ ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‘œ 3 ๋“ฑ ์–ด๋–ค ๋น„๊ต์—๋„ ํฌํ•จํ•˜์ง€ ์•Š์•˜๋‹ค.

ํ•™ํšŒ ์ œ์ถœ์šฉ ์™ธ๋ถ€ ์›๊ณ ์™€์˜ ์ •ํ•ฉ์„ฑ(์ง„ํ–‰ ์ค‘): ํ•œ๊ตญ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•™ํšŒ๋…ผ๋ฌธ์ง€ ํˆฌ๊ณ ๋ฅผ ์œ„ํ•ด ์ด ์ €์žฅ์†Œ ๋ฐ–์—์„œ ๋ณ„๋„๋กœ ์ž‘์„ฑ ์ค‘์ธ ํ™•์žฅ ์›๊ณ ๋ฅผ ์ง€๋„๊ต์ˆ˜๊ฐ€ ๊ฒ€ํ† ํ•œ ๊ฒฐ๊ณผ, (1) ์‹œ๋‚˜๋ฆฌ์˜ค ๊ตฌ์„ฑํ‘œ์—์„œ S5๊ฐ€ ์‹ค์ œ SCENARIO_CONFIGS[5] ("EXIT B ์œ„ํ˜‘")๊ฐ€ ์•„๋‹ˆ๋ผ S6("์ค‘์•™ ๊ฒฝ๋กœ ์ฐจ๋‹จ")์œผ๋กœ ์ž˜๋ชป ์ ํžŒ ๋ถ€๋ถ„, (2) ์ƒ์กด์œจ ํ‘œ์—์„œ S3์˜ A* ๊ฐ’์ด ๋ณต์‚ฌ ์˜ค๋ฅ˜๋กœ ์ •์  ์œ ๋„๋“ฑ ๊ฐ’๊ณผ ๊ฐ™๊ฒŒ ์ ํžŒ ๋ถ€๋ถ„ (์ •ํ™•ํ•œ ๊ฐ’์€ 60.5, ์œ„ ํ‘œ 3 ์ฐธ๊ณ ), (3) ์ฐธ๊ณ ๋ฌธํ—Œ ์„œ์‹์ด ํ•™ํšŒ ๊ณต์‹ ์–‘์‹๊ณผ ๋‹ค๋ฅธ ๋ถ€๋ถ„์ด ์•„์ง ๋‚จ์•„์žˆ๋‹ค. ์ƒ์„ธ์™€ ์ฒดํฌ๋ฆฌ์ŠคํŠธ๋Š” paper-review-todo-2026-10.md.

Raw ๋ฐ์ดํ„ฐ์…‹: ํ™”์žฌยท๊ตฐ์ค‘ ์‹ค์ธก ๋ฐ์ดํ„ฐ๋Š” ์œค๋ฆฌ์ ยทํ˜„์‹ค์ ์œผ๋กœ ์ˆ˜์ง‘์ด ๋ถˆ๊ฐ€๋Šฅํ•ด ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๋‹ค. ์ด๋Š” ์ด ๋ถ„์•ผ(RL ๊ธฐ๋ฐ˜ ํ™”์žฌ/๊ตฐ์ค‘ ๋Œ€ํ”ผ)์˜ ํ‘œ์ค€ ๊ด€ํ–‰์ด๋ฉฐ, ์„ ํ–‰์—ฐ๊ตฌ 4ํŽธ ๋ชจ๋‘ ๋™์ผํ•˜๋‹ค. ๊ตฐ์ค‘ ๋ฌผ๋ฆฌ ๋ชจ๋ธ(Fruin 1971, Helbing 2000)์„ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ๋Š” ์‹ค์ธก ๋ณดํ–‰์ž ๋ฐ์ดํ„ฐ๋Š” ๋ณ„๋„๋กœ ๊ณต๊ฐœ๋ผ ์žˆ๋‹ค(์ƒ์„ธ๋Š” ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ทผ๊ฑฐํ‘œ).


์ถ”๊ฐ€ ๋ฌธ์„œ

์ฐธ๊ณ  ๋ฌธํ—Œ

  • [1] J. Schulman et al., "Proximal Policy Optimization Algorithms," arXiv:1707.06347, 2017.
  • [2] H.-K. Lee et al., "Research Evacuation Route Search in Case of Fire Using the F_A* Algorithm Based on the A* Algorithm," Fire Sci. Eng., vol. 39, no. 1, pp. 22โ€“32, 2025.
  • [3] C.-Z. Xie et al., "Coordinating Dynamic Signage for Evacuation Guidance: A Multi-Agent Reinforcement Learning Approach Integrating Mesoscopic Crowd Modeling and Fire Propagation," Chaos, Solitons & Fractals, 2025.
  • [4] D. Xu, X. Huang, J. Mango, X. Li, & Z. Li, "Simulating multi-exit evacuation using deep reinforcement learning," Transactions in GIS, 2021.
  • [5] Y. Zhang, Z. Chai, & G. Lykotrafitis, "Deep reinforcement learning with a particle dynamics environment applied to emergency evacuation of a room with obstacles," Physica A, 571, 2021.
  • [6] J. T. Kim & S. Ha, "Observation Space Matters: Benchmark and Optimization Algorithm," arXiv:2011.00756, 2020.
  • [7] S. Zeng, X. Yang, X. Yeung, S. Fu, & W. Chun, "Deep Floor Plan Recognition Using a Multi-Task Network with Room-Boundary-Guided Attention," ICCV, 2019.
  • [8] A. Kalervo, J. Ylioinas, M. Hรคikiรถ, A. Karhu, & J. Kannala, "CubiCasa5K: A Dataset and an Improved Multi-Task Model for Floorplan Image Analysis," arXiv:1904.01920, 2019.
  • [9] L.-P. de las Heras, O. R. Terrades, S. Robles, & G. Sรกnchez, "Statistical segmentation and structural recognition for floor plan interpretation," IJDAR, 2014.
  • [10] C. Liu, J. Wu, P. Kohli, & Y. Furukawa, "Raster-to-Vector: Revisiting Floorplan Transformation," ICCV, 2017.
  • Fruin, J. J. (1971). Pedestrian Planning and Design. Metropolitan Association of Urban Designers.
  • Helbing, D., Farkas, I., & Vicsek, T. (2000). Simulating dynamical features of escape panic. Nature, 407, 487โ€“490.
  • Henderson, L. F. (1974). On the fluid mechanics of human crowd motion. Transportation Research, 8(6), 509โ€“515.

About

Fire evacuation simulation that automatically extracts grids from evacuation guide map images and controls emergency lights in real time using PPO reinforcement learning

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Packages

Contributors

Languages