flownet 소개: R로 효율적인 운송 모델링

R-Blogger · 블로그·해설 · 2026-02-10

R-Blogger블로그·해설한국어2026-02-10

flownet 소개: R로 효율적인 운송 모델링

flownet: R에서 고성능 교통 모델링 도구 새로운 R 패키지 flownet을 소개합니다. 이 패키지는 네트워크 처리, 경로 열거, 교통 할당 등 R에서 교통 모델링을 위한 고성능 도구를 제공합니다. 현재 flownet은 경로 크기 로짓(PSL) 모델(Ben-Akiva & Bierlaire, 1999)과 새로운 경로 열거 알고리즘, 효율적인 All-or-Nothing 할당 솔루션을 구현하고 있습니다. 또한 재귀적 그래프 통합/축소 및 단순화 등(다중 모드) 네트워크 처리를 위한 강력한 유틸리티 함수를 제공합니다. 그래프와 희소(Origin‑Destination, OD) 행렬을 데이터 프레임과 간결한 API로 표현함으로써 교통 분석과 그래프 조작에 모두 매력적인 툴박스를 만들어 냅니다. 이 패키지는 collapse와 kit(빠른 데이터 조작), igraph(효율적인 경로 탐색), geodist와 leaderCluster(공간 거리 및 클러스터링), mirai(R 수준의 효율적 병렬 처리) 등 fastverse 라이브러리를 기반으로 하여 높은 계산 효율성을 추구합니다. 또한 PSL 모델은 완전히 C로 구현되어 있어 성능이 더욱 강화됩니다. 향후 igraph를 내부 C/C++ 라우팅 코드로 대체하면 전체 경로 열거 알고리즘을 C/C++로 옮길 수 있을 것으로 기대됩니다. 이러한 혁신은 앞으로의 업데이트와 새로운 교통 할당 방법과 함께 다룰 주제입니다. 패키지는 방향성 유/무 방향 그래프와 다중 모드 네트워크를 지원합니다. 두 개의 네트워크에서의 예시 다음에서 flownet을 두 개의 네트워크에 적용해 보겠습니다. 첫 번째는 Job Market Paper에 사용한 아프리카 대륙 도로망입니다. 이 네트워크는 이미 통합되어 있으며 1,379개의 노드와 2,344개의 엣지를 가지며 315,000 km의 도로망을 나타냅니다. flownet의 기능을 살펴보기에 충분히 작은 네트워크입니다. 두 번째는 미국 화물 분석 프레임워크(FAF5) 네트워크로 487,384개의 링크와 348,498개의 노드를 포함합니다. 이 네트워크는 매우 크며 PSL 방법을 세밀하게 조정해야 합니다. 또한 flownet의 네트워크 단순화 기능을 보여주기에 좋은 테스트 케이스가 됩니다. 예시 1: 아프리카 대륙 도로망 아프리카 도로망 africa_network은 Krantz(2024) “Optimal Investments in Africa’s Road Network”에서 가져왔으며 패키지에 포함되어 있습니다. 100,000 인구가 넘는 453개의 아프리카 도시와 국제 항구 사이의 가장 빠른 OSRM(“Open Source Routing Machine”) 차량 경로를 교차하고 단순화하여 생성되었습니다. 자세한 절차는 논문과 flownet의 초보자 튜토리얼에서 설명됩니다. 본 게시물에서는 네트워크 처리는 두 번째 예시(FAF5)로 넘겨두고, 네트워크를 시각화해 보겠습니다. 아래는 새로 제안된 링크를 회색, 453개(항구) 도시를 검은색으로 표시한 네트워크 시각화입니다. library(fastverse) ## 패키지 부착 fastverse_extend(flownet, sf, tmap) ## 확장 패키지 부착 tm_basemap("CartoDB.Positron", zoom = 4) + tm_shape(africa_network) + tm_lines(col = "speed_kmh", col.scale = tm_scale_continuous(values = "turbo", values.range = c(0.1, 0.9), value.na = "grey"), col.legend = tm_legend("Speed (km/h)", position = c("left", "bottom"), frame = FALSE, text.size = 0.8, title.size = 1, item.height = 2, na.show = FALSE), lwd = 1.5) + tm_shape(africa_cities_ports) + tm_dots(size = 0.1) + tm_layout(frame = FALSE, outer.margins = 0) OSRM 링크 속도는 크게 차이가 납니다. 중앙 아프리카 도로의 속도는 약 40km/h이며, 도시 중심부에 가까워질수록 속도가 상승합니다. 아래에서는 새로 제안된 링크를 제거한 네트워크를 자세히 설명합니다. 논문 3장에 따르면, 마지막 World Bank Doing Business Survey(2019 데이터)를 사용해 국경 및 서류 통과 시간과 비용을 추출하고, 이를 국경 통과 링크에 대한 이동시간에 해당하는 마찰(분 단위)으로 변환했습니다. 따라서 마찰이 없는 이동시간 변수와 서류 시간(중간값 76시간)을 합친 total_time 변수가 생성됩니다. # 잠재적 신규 링크 제거 africa_net %>% qsu(africa_net, cols = .c(from, to, speed_kmh, distance, duration, border_time, total_time)) 아프리카 무역 데이터 africa_trade는 47개 아프리카 국가 간 453개(항구) 도시를 포함한 양자 무역 흐름 데이터를 제공합니다. CEPII BACI 데이터베이스(HS96 버전, 2012‑2022 평균)를 기반으로 21개의 HS 섹션을 통합한 데이터셋입니다. # HS 섹션별 무역 데이터 통합 africa_trade_agg <- collap(quantity ~ iso3_o + iso3_d, fsum) 다음으로, (포트) 도시 위치를 가장 가까운 네트워크 노드에 매핑합니다. od_matrix_trade <- africa_trade_agg %>% join(city_pop |> add_stub("_d", FALSE), multiple = TRUE) %>% fmutate(flow = quantity * pop_share_o * pop_share_d) %>% frename(from = node_o, to = node_d) %>% fsubset(flow > 0 & from != to) 이제 PSL 모델을 사용해 트래픽 할당을 실행합니다. 8코어 M4 Pro 칩에서 nthreads = 8로 병렬 처리합니다. 중간 결과를 모두 저장하려면 return.extra = "all"을 설정하며, 메모리 사용량이 늘어날 수 있으므로 OD 쌍당 경로 수를 150으로 제한합니다. # PSL 모델을 위한 비용 스케일링 setfm(graph, duration_ms = fmedian(duration, TRA = "/")) # PSL을 이용한 교통 할당 실행 result <- run_assignment(graph, od_matrix_trade, nthreads = 8, return.extra = "all", npaths.max = 150) 다음으로 All-or-Nothing(AoN) 할당을 수행합니다. 그래프를 완전 방향성으로 전환하고, 일반화 비용을 계산한 뒤 AoN을 실행합니다.
원문 URL
전체 글은 원문 페이지에서 이어서 읽을 수 있습니다.
원문에서 전체 글 읽기
작성자
R-Blogger
출처
R-Blogger
플랫폼
R-Blogger
분류
블로그·해설
언어
한국어
발행일
2026-02-10