HN 日本語サマリー

← 一覧へ戻る
科学・技術

ジェット燃料の節約

Saving Jet Fuel (tech.marksblogg.com)

22 pointsby marklit13 コメント

要約

この記事は、オープンソースのフレームワークであるScikit-decideと航空機性能モデルであるOpenAPを活用し、風の条件や航空機の性能データに基づいて最適な飛行経路を計算することで、ジェット燃料の消費を削減する方法を解説しています。必要なソフトウェアのインストール手順や、OpenAPが提供する様々な航空機モデルのデータ構造についても詳細に説明しています。

全文翻訳

ジェット燃料の節約 ボーイング787-9ドリームライナーがニューアーク・リバティー国際空港(EWR)からレオナルド・ダ・ヴィンチ=フィウミチーノ空港(FCO)までノンストップで飛行する場合、8.5時間のフライトで68,000ドルのジェット燃料が必要になる可能性があります。風の条件に合わせて飛行経路を調整することで、燃料消費を削減し、数千ドルを節約できる可能性があります。Jeppesenのような企業がこの分野で製品を提供していますが、Scikit-decideは、デルフト工科大学の教授が開発したナローボディおよびワイドボディの燃料消費モデルと、NOAAからの風データと組み合わせることで、オープンソースのソリューションを提供します。Scikit-decideは6年間開発が続けられています。これは、強化学習、自動計画、スケジューリングのためのフレームワークです。このプロジェクトは、飛行経路の最適化、航空会社の労働力スケジュールの再編成、ドローンの群れ経路の計算を行うことができます。 OpenAPは、Junzi Sun博士によって開発された航空機性能モデルおよびツールキットです。Sun博士は航空交通管理の博士号を持ち、その他多くの業績の中で、オランダのTU Delftでテニュアを持つ准教授としてこの分野のコースを教えています。Scikit-decideの最適な飛行経路ソルバーは、異なる燃料消費モデルを使用するように設定できます。この記事では、Airbus A320とOpenAPの燃料消費モデルを使用して飛行された2つの飛行経路を比較します。 私のワークステーション 私は5.7 GHzのAMD Ryzen 9 9950X CPUを使用しています。これは16コア32スレッド、1.2 MBのL1、16 MBのL2、64 MBのL3キャッシュを備えています。液体クーラーが取り付けられており、広々としたフルサイズのCooler Master HAF 700コンピューターケースに収められています。システムには4,800 MT/sでクロックされた96 GBのDDR5 RAMと、最大12,400 MB/sの読み取り速度を持つ第5世代のCrucial T700 4 TB NVMe M.2 SSDが搭載されています。SSDには温度を下げるためのヒートシンクが付いています。これが私のシステムのCドライブです。システムは1,200ワットのフルモジュラーCorsair電源によって電力が供給されており、ASRock X870E Nova 90マザーボード上に配置されています。Windows 11 Pro上のUbuntu for WindowsでUbuntu 24 LTSを実行しています。なぜプライマリワーク環境としてLinuxベースのデスクトップを実行しないのか疑問に思っているかもしれませんが、私はまだNvidia GTX 1080 GPUを使用しており、Windowsの方がドライバーのサポートが優れており、ArcGIS ProはWindowsネイティブでしかサポートされていないためです。 前提条件のインストール この記事では、Python 3.12とjqを使用します。 ```bash $ sudo add-apt-repository ppa:deadsnakes/ppa $ sudo apt update $ sudo apt install \ jq \ python3-pip \ python3.12-venv ``` Python仮想環境を設定し、scikit-decide、OpenAPオープン航空機性能モデル、およびSun博士によって開発された飛行軌道ツールキットであるOpenTopをインストールします。 ```bash $ python3 -m venv ~/.flight_planning $ source ~/.flight_planning/bin/activate $ pip install \ 'scikit-decide[all]' \ 'openap[all]' \ opentop ``` 上記は少なくとも8 GBのストレージ容量を必要とします。インストールされたパッケージは以下の通りです。 ```bash $ pip install pipdeptree $ pipdeptree -d0 ``` lz4==4.4.5 openevolve==0.3.2 opentop==2.6.0 pip==24.0 pipdeptree==4.2.5 plado==0.1.6 pygeodesy==26.9.9 pygrib==2.1.8 pyRDDLGym-gurobi==0.2 pyRDDLGym-jax==3.1 pyRDDLGym-rl==0.2 pytz==2026.3.post1 ray==2.37.0 rddlrepository==2.2 sb3_contrib==2.3.0 scikit-decide==1.1.1 scikit-image==0.26.0 tensorboardX==2.6.5 torch-geometric==2.8.0.post1 typer==0.27.2 unified-planning==1.2.0 up-enhsp==0.0.27 up_fast_downward==0.5.2 up-pyperplan==1.1.0 z3-solver==5.1.0.0 この記事では、H3、JSON、Lindel、Parquet、Spatial拡張機能とともにDuckDBを使用します。 ```bash $ cd ~ $ wget -c https://github.com/duckdb/duckdb/releases/download/v1.5.4/duckdb_cli-linux-amd64.zip $ unzip -j duckdb_cli-linux-amd64.zip $ chmod +x duckdb $ ~/duckdb ``` ```sql INSTALL h3 FROM community; INSTALL lindel FROM community; INSTALL json; INSTALL parquet; INSTALL spatial; ``` DuckDBを起動するたびにすべてのインストール済み拡張機能をロードするように設定します。 ```bash $ vi ~/.duckdbrc ``` ``` .timer on .width 180 LOAD h3; LOAD lindel; LOAD json; LOAD parquet; LOAD spatial; ``` この記事のマップは、QGISバージョン4.2.1でレンダリングされました。QGISは、Windows、macOS、Linuxで実行されるデスクトップアプリケーションです。このアプリケーションは近年人気が高まっており、毎月世界中のユーザーから約2200万回のアプリケーション起動があります。境界線と地名はNatural Earthから、海洋境界線はMarine Regionsから取得しました。 OpenAPの航空機タイプ まずOpenAPリポジトリをクローンします。 ```bash $ git clone https://github.com/junzis/openap ``` 単体テストとユーティリティスクリプトを除くと、このパッケージには3,369行のPythonコードが含まれています。OpenAPのモデルは、コードベースとともにパッケージ化された多数のデータセットに依存しています。これらは幅広い航空機をカバーしています。以下は航空機メーカーの数です。 ```bash $ grep -ho 'aircraft: .*[a-z] ' \ openap/data/aircraft/*.yml \ | cut -d' ' -f2 \ | sort \ | uniq -c \ | sort -rn ``` 17 Boeing 13 Airbus 5 Embraer 1 Gulfstream 1 Cessna これはAirbus A380-800のプロパティです。 ```bash $ cat openap/data/aircraft/a388.yml ``` ```yaml aircraft: Airbus A380-800 mtow: 560000 mlw: 386000 oew: 277000 mfc: 320000 vmo: 340 mmo: 0.89 ceiling: 13100 pax: max: 853 low: 410 high: 620 fuselage: length: 72.72 height: 8.41 width: 7.14 wing: area: 845 span: 79.75 mac: null sweep: 33.5 t/c: 0.08 flaps: type: single-slotted area: null bf/b: null lambda_f: 0.900 cf/c: 0.150 Sf/S: 0.150 cruise: height: 12800 mach: 0.85 range: 14800 engine: type: turbofan mount: wing number: 4 default: GP7270 options: A380-841: Trent 970-84 A380-842: Trent 972-84 A380-861: GP7270 drag: cd0: 0.016 k: 0.050 e: 0.855 gears: 0.012 ``` これはその抗力係数です。 ```bash $ cat openap/data/dragpolar/a388.yml ``` ```yaml aircraft: Airbus A380-800 clean: cd0: 0.016 k: 0.050 e: 0.855 gears: 0.012 flaps: lambda_f: 0.900 cf/c: 0.150 Sf/S: 0.150 ``` これはいくつかの追加のプロパティです。 ```bash $ echo "import pandas as pd; print( pd.read_fwf('openap/data/wrap/a388.txt') \ .to_csv(index=False))" \ | python3 \ | ~/duckdb \ -c '.maxwidth 150' \ -c "SELECT * EXCLUDE(parameters), parameters: SPLIT(parameters, '|') FROM READ_CSV('/dev/stdin')" ``` ``` ┌──────────────────────┬────────────────┬───────────────────────────────────────┬────────┬────────┬─────────┬─────────┬──────────────────────────────┐ │ variable │ flight phase │ name │ opt │ min │ max │ model │ parameters │ ├──────────────────────┼────────────────┼───────────────────────────────────────┼────────┼────────┼─────────┼─────────┼──────────────────────────────┤ │ to_v_lof │ takeoff │ Liftoff speed │ 89.9 │ 75.4 │ 104.4 │ norm │ [89.93, 10.07] │ │ to_d_tof │ takeoff │ Takeoff distance │ 2.56 │ 1.35 │ 3.78 │ norm │ [2.56, 0.74] │ │ to_acc_tof │ takeoff │ Mean takeoff accelaration │ 1.35 │ 1.04 │ 1.66 │ norm │ [1.35, 0.19] │ │ ic_va_avg │ initial_climb │ Mean airspeed │ 88.0 │ 80.0 │ 96.0 │ norm │ [88.15, 5.64] │ │ ic_vs_avg │ initial_climb │ Mean vertical rate │ 5.65 │ 4.4 │ 8.94 │ gamma │ [4.76, 3.22, 0.65] │ │ cl_d_range │ climb │ Climb range │ 296.0 │ 200.0 │ 446.0 │ beta │ [3.23, 5.18, 179.46, 335.24] │ │ cl_v_cas_const │ climb │ Constant CAS │ 163.0 │ 155.0 │ 170.0 │ norm │ [163.39, 4.51] │ │ cl_v_mach_const │ climb │ Constant Mach │ 0.84 │ 0.8 │ 0.86 │ beta │ [12.23, 5.32, 0.72, 0.17] │ │ cl_h_cas_const │ climb │ Constant CAS crossover altitude │ 3.3 │ 1.3 │ 5.3 │ norm │ [3.29, 1.24] │ │ cl_h_mach_const │ climb │ Constant Mach crossover altitude │ 8.9 │ 8.2 │ 9.7 │ norm │ [8.94, 0.47] │ │ cl_vs_avg_pre_cas │ climb │ Mean climb rate, pre-constant-CAS │ 7.85 │ 5.95 │ 9.75 │ norm │ [7.85, 1.16] │ │ cl_vs_avg_cas_const │ climb │ Mean climb rate, constant-CAS │ 7.51 │ 5.2 │ 9.82 │ norm │ [7.51, 1.40] │ │ cl_vs_avg_mach_const │ climb │ Mean climb rate, constant-Mach │ 5.56 │ 3.23 │ 7.91 │ norm │ [5.57, 1.42] │ │ cr_d_range │ cruise │ Cruise range │ 4348.0 │ 892.0 │ 20565.0 │ gamma │ [2.81, 246.73, 2274.81] │ │ cr_v_cas_mean │ cruise │ Mean cruise CAS │ 136.0 │ 130.0 │ 145.0 │ beta │ [3.32, 5.27, 126.00, 29.75] │ │ cr_v_cas_max │ cruise │ Maximum cruise CAS │ 145.0 │ 134.0 │ 164.0 │ beta │ [2.02, 3.21, 130.38, 46.65] │ │ cr_v_mach_mean │ cruise │ Mea ```