Saving Jet Fuel
제트 연료 아끼기 — 오픈소스로 최적 비행 경로를 계산하는 방법
Airbus의 오픈소스 계획 프레임워크 Scikit-decide, TU Delft의 항공기 성능 모델 OpenAP, NOAA 풍향 데이터를 조합해 최적 비행 경로를 직접 계산한 실습기입니다. A320의 툴루즈~베를린 구간을 A* 탐색으로 0.28초 만에 풀어 연료 기준 최적 항로를 도출했고, Jeppesen 같은 상용 솔루션 없이도 연료 절감 경로 계획을 재현할 수 있음을 보여 줍니다.
- 주제
본문
뉴어크(EWR)에서 로마(FCO)까지 논스톱으로 비행하는 Boeing 787-9 Dreamliner는 8.5시간 동안 약 6만 8천 달러의 제트 연료를 소모합니다. 바람 조건에 맞게 비행 경로를 조정하면 연료 소모를 줄여 수천 달러를 아낄 수 있는데, 이 글은 Jeppesen 같은 상용 제품 대신 오픈소스 조합만으로 그 최적화를 재현한 과정을 다룹니다.
사용한 도구와 모델
Scikit-decide는 6년째 개발 중인 강화학습·자동 계획·스케줄링 프레임워크로, 비행 경로 최적화 외에도 항공사 인력 스케줄 재편이나 드론 군집 경로 계산에 활용할 수 있습니다. 연료 소모 모델에는 TU Delft에서 항공교통관제를 가르치는 Junzi Sun 박사가 개발한 OpenAP를 사용합니다. OpenAP는 약 3,369줄의 Python 코드와 함께 방대한 데이터셋을 내장하는데, Boeing 17종·Airbus 13종·Embraer 5종 등 항공기별 YAML 제원, 427개 엔진 데이터(최대 추력 기준 1위는 GE90-115B의 513.9kN), 기종별 연료 모델 계수, 그리고 이륙·상승·순항·하강·접근·착륙 각 단계의 통계적 비행 파라미터가 포함됩니다. 저자는 A380-800의 MTOW 56만 kg, 항력 계수 cd0 0.016 같은 실제 데이터 파일을 그대로 보여 주며 모델의 깊이를 설명합니다.
실습 과정과 결과
환경은 Python 3.12 가상환경에 scikit-decide[all]·openap[all]·opentop을 설치(8GB 이상의 저장 공간 필요)하고 구성했습니다. 데이터 분석에는 H3·JSON·Parquet·Spatial 확장을 단 DuckDB를, 지도 렌더링에는 QGIS를 사용했습니다. 시연 구간은 Toulouse(TLS)~Berlin(BER)이며, A320 기종으로 A* 솔버를 돌렸습니다. 휴리스틱은 'lazy_fuel', 비용 함수는 'fuel', 순항 마하 0.78, 탐색 고도는 30,000~38,000피트로 설정했고, 휴리스틱을 지정하지 않으면 Dijkstra와 유사한 탐색이 됩니다. 비행 날짜가 최근 6개월 이내라면 NOAA의 GFS 예보에서 전 지구를 덮는 GRB2 파일(개당 약 144MB)을 자동으로 내려받아 바람을 반영합니다. 결과적으로 A*는 0.28초 만에 해를 찾았고, 19단계를 거쳐 소요 시간 약 7,666초, 연료 소모 5,855kg의 비행 계획이 도출됐습니다.
Hacker News 반응
- @V-eHGsd_ — 이론적으로는 통하지만 현실에서는 조종사 재량만으로 상승·하강하고 직행 항로를 탈 수 없으며, 다른 항공기들도 똑같은 최적화를 하려 할 것이라는 한계를 지적했습니다.
- @walrus01 — 관제 공역 진입 시 정해진 waypoint를 지나고 문서화된 활주로 접근 절차에 맞춰야 하는 제약도 있다고 보충했습니다.
- @ggm — 한 사례에서 45분 단축·연료 25% 절감은 인상적이지만, 정기 노선의 1년치 사후 바람 데이터로 검증한 대규모 샘플이 있어야 설득력이 생긴다고 말했습니다.
- @trillic — 같은 아이디어를 요트 경로에 적용해 ERA5 풍향 데이터로 2011년 이후 Transpac 경기의 최적 항로를 풀고 실제 함대 항로와 비교한 자신의 프로젝트를 공유했습니다.
- @esafak — Airbus가 만든 scikit-decide를 보며 scikit 브랜드가 이어지는 게 반갑다는 반응을 보였습니다.
원문: Mark's Blog / 번역·요약: Trawling