💡 CAIRN / SHERPA 計画・安全アーキテクチャ完全解説

見・決・伝の3層モデルと GRAD 応用数理スタック(Exp.01–14)による完全決定論的登山インテリジェンス

📋 本解説の目的と説明責任(Accountability)
CAIRN(分析・計画エンジン)および SHERPA(リアルタイム音声ガイド)が,どのようにして「山行計画の自動立案」から「現場での安全監視・エスケープ判定」までを計算しているのか,その全数理モデル,時相論理(LTL),制約処理,データ契約を完全に公開・解説します.

1. 山岳安全知能の設計思想(見・決・伝の3層モデル & 多層安全構造)

登山における意思決定は,気象や個人の体力変動といった「不確実性」と,日没や最終交通便といった「絶対に超えてはならない境界(ハードゲート)」の双方が絡み合う高度な計画最適化問題です. CAIRN / SHERPA では,これらを混同せず明確に役割分担させた「見(L1: 世界モデル)」「決(L2: 計画最適化)」「伝(L3: 確定ブリーフィング)」の3層モデルを採用しています.

✅ 3層アーキテクチャの基本方針

🧩 多層安全構造(マクロ・ミクロ・戦術)と「確率論×決定論」の安全統合

本システムは「マクロ広域環境」「ミクロ生体物理」「戦術即応」の多層安全構造を持ち,安全のために「確率論(不確実性の定量把握)」「決定論(安全ハードゲート・確定的指示)」を厳密に組み合わせています.

安全統括層 見・決・伝の対応 主な構成要素 確率論と決定論の統合役割
マクロ層(Macro) L1: 世界モデル(見) OSM登山道・登山口・バス停・山小屋,気象予報・発雷リスク,日没・最終便 【確率論】 天候悪化(雨・風)やペース低下の不確実性を分布として捉え,P90ワーストケース時間を算出.
ミクロ層(Micro) L2: 計画最適化(決) Readiness・睡眠,動的ELC膝負荷,SCR持続登高速度,Minerペース崩壊,Minetti代謝,OSM退路再計算 【決定論】 P90制約下で確定通過目標・確定ETP/PNR・ポール展開点を1秒のブレもなく確定立案.
戦術層(Tactical) L3: 確定ブリーフィング(伝)& 現場即応 SherpaRuntimeContract 保持,残余バジェット \(\Delta T(t)\) 監視,規約R1〜R4(PNR超過・手動退避・シェルター駆け込み) 【融合】 圏外・気圧計なしでも,事前契約に基づき現場で迷わない確定音声・退避ナビを即時実行.
flowchart LR subgraph L1 ["L1: 世界モデル(見)"] Geometry["幾何世界
OSM登山道・登山口・バス停"] HardGate["記号論理ハードゲート
・日没・最終便SPOF
・動的ELC膝耐性限界"] CostField["不確実性(目標仕様)
・気象 GP / MC P90
・現行は対数正規分位"] end subgraph L2 ["L2: 計画器(決)"] Opt["GRAD 計算 + OSMグラフ上の Dijkstra"] end subgraph L3 ["L3: ブリーフィング(伝)"] Out["確定計画・通過時刻・ETP/PNR
オレンジ点線 / SHERPA 監視"] end Geometry --> Opt HardGate --> Opt CostField --> Opt Opt --> Out

2. システム構成と各層の連携

ユーザーが指定した条件(L0)を受け取り,L1〜L3 が連携して計画を立案・検証します.

flowchart TB subgraph L0 ["L0 仕様入力"] UserSpec["ユーザーTier / Readiness / 目的山域 / 交通ダイヤ / 許容リスク ε = 0.05"] end subgraph L1 ["L1 世界モデル(見)"] subgraph L1_Geometry ["幾何世界(記号接地)"] TrailGraph["OSM登山道グラフ
path / track / sac_scale footway"] AccessPOI["出口POI
trailhead / parking / bus_stop / station"] end subgraph L1_Learned ["連続場 & 不確実性(目標仕様)"] GP_Field["ガウス過程(GP)回帰
・空間気象・風温場 μ(x), σ²(x)
・区間路面抵抗コスト場"] MC_Sim["モンテカルロ(MC)摂動ロールアウト
・ペース・体調・休憩の確率分布
・P10 / P50 / P90 所要時間生成"] GP_Field --> MC_Sim end subgraph L1_Symbolic ["ハード制約集合(記号接地・見逃し率0%)"] BusSPOF["交通SPOF(最終バス・電車の1本前)"] SunsetGate["日没リミット(日没1時間前下山)"] KneeGate["動的 ELC 膝耐性下降限界"] TierGate["Summit Route Gates(Tier到達判定)"] WaterSPOF["水・補給地点(湧水・山小屋)"] end end subgraph L2 ["L2 計画器(決 / 決定論的 Chance-Constrained 最適化)"] S1["ステージ1: 離散骨格探索(Dijkstra / 候補・エスケープ)"] S2["ステージ2: 決定論的 軌道・時間最適化
(P90最悪ケース保証: P(T_finish ≤ T_deadline) ≥ 1 - ε)"] Physics["GRAD 応用生理・機体モデル(Exp.01–14)
- Exp.14: FitRec-Ridge 移動時間 (R²=0.929)
- Exp.07: Miner+GRAD ペース崩壊 (AUC=0.800)
- Exp.10/12/13: Schwameder 膝荷重 & 動的ELC
- Exp.01/02/05: GACD 心肺ドリフト & SCR
- Exp.08: 代謝仕事量 & 動的補給トリガー"] S1 --> S2 Physics --> S2 MC_Sim --> S2 end subgraph L3 ["L3 ブリーフィング出力(伝)"] VerifiedObj["計画オブジェクト(確定値・通過時刻・エスケープ判定・PNR/ETP)"] Renderer["検証付きテキストレンダリング(数値改変禁止の厳格フォーマット)"] VerifiedObj --> Renderer end subgraph L3_Gate ["承認ゲート(人)"] HumanGate["ガイド / 登山者本人による計画承認"] end L0 --> L1 TrailGraph --> S1 AccessPOI --> S1 L1_Learned --> S1 L1_Symbolic --> S1 L2 --> VerifiedObj Renderer --> HumanGate

実装の現状(層との対応)

仕様の数式と,いま動いているコードは一致していない箇所があります.この表が正です.

仕様 いまの実装
L1 幾何OSM登山道と出口POIHOMEと同じGCSタイルを先に読む.欠落時のみOverpass
L1 記号ゲート日没・最終便・ELC・Tier・水場日没・バス時刻・動的ELC・Tierあり.水場OSMは未接続
L1 気象気象GP場の事前焼き込み全国タイル化しない.PLAN時にOpen-Meteo 3日予報を観測し発汗量・水分計画をリアルタイム補正.タイルのOpen-Meteoは標高DEM
L1 不確実性MC 10,000回対数正規の閉じたP10/P50/P90.GPなし.サンプルなし
L2 ステージ1A*で候補列挙Dijkstraで別出口を探索.主ルートはアップロードGPX
L2 ステージ2Chance-Constrained軌道最適化GRAD閉じた式をGPX主ルートに適用.OSM退路は幾何標高から所要時間・膝負荷を精密再計算
L3確定契約の伝達点線はOSM線を優先.無ければGPX逆順
フォールバック(仕様に無い)L1失敗または別出口なしのときGPX逆順.見でも決でもない

2.1 MC / GP(確率的モデリング)と決定論的計画 — 目標仕様

以下は 目標仕様 です.現行の時間幅は対数正規の閉じた P10/P50/P90 であり,GP 場も \(N_{\text{mc}}=10{,}000\) ロールアウトも動かしていません(上表).

設計としての結論は,「L1(世界モデル)で不確実性の分布を捉え,L2(計画器)でその最悪ケース(P90)を満たす決定論的最適化を行う」 です.

1. L1: MC / GP による不確実性モデリング(見)
天候変化,気温,個人の心肺ドリフトや疲労によるペースの揺らぎをガウス過程回帰(\(f(x) \sim \mathcal{GP}(m(x), k(x,x'))\))でモデル化.モンテカルロ法(\(N_{\text{mc}}=10,000\) 回ロールアウト)により,P10(最速)・P50(標準)・P90(ワーストケース)の所要時間分布を算出します.
2. L2: Chance-Constrained 決定論的最適化(決)
現場の登山者や SHERPA 音声ガイドに曖昧な指示を出すと判断がブレます.L2 は P90 ワーストケースを用い,\(\mathbb{P}(T_{\text{finish}} \le T_{\text{deadline}}) \ge 1 - \epsilon\)(95%安全保証)を満たす確定した通過目標・確定ETP/PNR・確定ポール展開点を1秒の狂いもなく決定論的に算出します.
$$\text{L1 (GP/MC分布)}: \quad T_{\text{total}} \sim \text{MC-Rollout}\left( N_{\text{mc}}=10000, \; \mathcal{GP}_{\text{weather}}, \; \mathcal{GP}_{\text{pace}} \right)$$ $$\text{L2 (確率的制約充足)}: \quad \mathbb{P}\left( T_{\text{finish}} \le T_{\text{deadline}} \right) \ge 1 - \epsilon \quad (\epsilon = 0.05 \implies P_{90} \text{ 最悪ケース保証})$$ $$\text{L3 / SHERPA (確定値)}: \quad \text{TargetPassTime} = 12:15 \quad (\text{確定的指示・現場での即断即決を担保})$$

2.2 天候不確実性の事前モデリング & 悪化シナリオの事前焼き込み(Pre-Baking)

出発前(CAIRN オンライン時)に,Open-Meteo アンサンブル気象予報から空間ガウス過程場 \(\mathcal{GP}_{\text{weather}}(\mathbf{x}, t)\) を構築.豪雨・強風による減速ペナルティを含めた P90 最悪シナリオを事前に算出して端末契約オブジェクト(SherpaRuntimeContract)に焼き込みます.

🌧️ ぬかるみ減速係数 \(\gamma_{\text{weather}}\)
降雨による路面摩擦低下をモデル化.豪雨時で最大 35% ペース低下(\(\gamma = 0.65\))を想定.
💨 風冷体感温度 \(T_{\text{feel}}\)
風速と気温から体感温度を算定.寒冷・強風時の筋硬直・エネルギー消費増分(+15〜25%)を補正.
🌫️ 視界不良蛇行率 \(\text{TI}_{\text{fog}}\)
濃霧時の道探し・足場確認による停滞と蛇行係数(+15%)を移動時間予測に上乗せ.

2.3 突発的な雷雨・気象急変への多層安全設計

山岳における「突発的な雷雨(ゲリラ豪雨・落雷・突風)」に対し,見・決・伝の3層多層防御で安全を担保します.

防御層 状態 突発雷雨への具体的動作
L1: 事前リスク観測 オンライン Open-Meteo 3日予報から雷雨コード(WMO 95/96/99)・降水確率・風速を観測.午後の発雷リスク(thunderstorm_risk)を評価し,稜線安全離脱リミット(12:30等)をハード制約として導出.
L2: 緊急シェルター探索 計画時 通常の下山エスケープ(登山口・バス停)に加え,OSMグラフ上の山小屋・避難小屋(emergency_shelters)への最短退避ルート(15〜30分駆け込み線)を事前探索して契約に保持.
L3: オフライン現場即応 圏外・現場 ① ユーザー手動ワンタップ・エスケープ(規約 R3): 黒雲や雷鳴感知時に直近避難所への誘導を即時開始.
② GPS物理プロキシ異常検知(規約 R4): 豪雨・突風による停滞(\(r_{\text{stop}} > 0.40\))や極端な減速を検知し,音声警告と最寄り退避先を提示.
③ 稜線滞在時間超過アラート: 雷雨警戒時に12:30以降も稜線・山頂にとどまる場合,標高下げと樹林帯退避を音声指示.

3. L2 計画器における GRAD 応用数理モデル(全数式仕様)

FitRec(253,020ワークアウト,675名)および N-of-1 フィールド研究で検証された 14 の実験モデル(GRAD Applied Stack)が,ルートの所要時間や生体負荷を厳密に計算します.

3.1 移動時間予測 & YAMAP/Capstone ペース%(GRAD Exp.14)

GPXルートの12次元特徴量から移動時間(Moving Time)を予測する Ridge 回帰モデル(LOOCV \(N=81, R^2=0.9289\)).

$$T_{\text{moving}} = \mathbf{w}^T \mathbf{x} + b \quad [\text{h}]$$ $$T_{\text{SAC}} = \frac{D_{\text{total}}}{4.0} + \frac{D^+}{400} + \frac{D^-}{800} \quad [\text{h}]$$ $$P_{\text{pace}} = \frac{T_{\text{moving}} \times (1 + r_{\text{rest}})}{T_{\text{SAC}}} \times 100 \quad [\%]$$

3.2 ペース崩壊二値分類モデル(GRAD Exp.06/07)

後半にペースが 30% 以上低下する「ペース崩壊」の発生確率 \(P_{\text{collapse}}\) を,Miner累積損傷則とコンディション指標の融合ロジットモデルで算出します(\(\text{AUC}=0.800\)).

$$z = \beta_0 + \beta_1 S_{\text{knee}} + \beta_2 (75 - \text{Readiness}) + \beta_3 \rho_{\text{climb}} + \beta_4 \sigma_{\text{grad}} + \beta_5 I_{\text{summer}}$$ $$P_{\text{collapse}} = \frac{1}{1 + e^{-z}} \times 100 \quad [\%]$$

3.3 膝関節負荷・動的 ELC 容量 & ポール展開判定(GRAD Exp.10/12/13)

Oura の睡眠・Readiness スコアから当日の動的耐性容量 \(\text{ELC}_{\text{dynamic}}\) を計算し,膝飽和度 \(S_{\text{knee}}\) を導出します.

$$\text{ELC}_{\text{dynamic}} = \text{ELC}_{\text{base}} \times \left(\frac{\text{Readiness}}{75}\right) \times \left(\frac{\text{Sleep}}{75}\right) \quad [\text{m}]$$ $$S_{\text{knee}} = 100 \times \left(1 - \exp\left( - \frac{D^-}{\text{ELC}_{\text{dynamic}}} \right)\right) \quad [\%]$$ $$D^-_{\text{pole}} = - \text{ELC}_{\text{dynamic}} \times \ln(1 - 0.60) \approx 0.916 \times \text{ELC}_{\text{dynamic}} \quad [\text{m}]$$

3.4 心肺ドリフト・持続登高速度 SCR(GRAD Exp.01/02/05)

60分持続可能な登高速度 \(\text{SCR}\)(Sustainable Climbing Rate)と,後半の心拍ドリフト(GACD)を算出します.

$$\text{VAM}_{\text{target}} = \min\left( \text{SCR}, \; \text{VAM}_{\text{history\_p80}} \right) \quad [\text{m/h}]$$ $$\text{HR}_{\text{drift}}(t) = \text{HR}_{\text{base}} + \delta_{\text{cardiac\_drift}} \times \max(0, t - 1.5\,\text{h})$$

3.5 Minetti 代謝仕事量 & 動的補給・水分トリガー(GRAD Exp.08)

Minetti (2002) の歩行代謝エネルギー方程式から消費カロリーと発汗量を推計し,400 kcal 消費ごとに補給フラグを自動配置します.

$$C(g) = 280.5 g^5 - 58.7 g^4 - 289.2 g^3 + 51.6 g^2 + 42.8 g + 3.2 \quad [\text{J}/(\text{kg}\cdot\text{m})]$$ $$E_{\text{total}} = \sum_{i=1}^N C(g_i) \times (m_{\text{body}} + m_{\text{pack}}) \times d_i \quad [\text{J}]$$

4. 交通機関連動タイムバック計算 & ETP / PNR シミュレーション

登山計画は登山口から山頂へ進む順方向ではなく,下山口の最終交通便・日没デッドラインから手前へ逆算する「タイムバック逆伝播」によって成立します.

flowchart RL T_transit["最終バス T_transit_last
(例: 17:30)"] T_target["目標バス T_transit_target
(1本前マージン: 16:30)"] T_sunset["日没リミット
T_sunset - 1h (16:45)"] T_deadline["絶対下山リミット T_deadline
min(16:30, 16:45) = 16:30"] T_finish["行動終了目標 T_finish_target
16:30 - 20分 = 16:10"] T_action["総行動時間 T_action_total
(移動 6.5h + 休憩 1.2h = 7.7h)"] T_start["必須出発時刻 T_start_req
16:10 - 7h42分 = 08:28"] T_bus_in["往路接続便確定
登山口着 <= 08:28 の便を選択"] T_transit --> T_target T_target --> T_deadline T_sunset --> T_deadline T_deadline --> T_finish T_finish --> T_action T_action --> T_start T_start --> T_bus_in

4.1 タイムバック計算の数理式

$$T_{\text{deadline}} = \min\left( T_{\text{transit\_target}}, \; T_{\text{sunset}} - 1.0\,\text{h} \right)$$ $$T_{\text{finish\_target}} = T_{\text{deadline}} - T_{\text{buffer}} \quad (T_{\text{buffer}} = 20\,\text{min})$$ $$T_{\text{rest}} = \sum_{k=1}^K t_{\text{rest\_fixed}, k} + T_{\text{moving}} \times r_{\text{rest\_rate}}$$ $$T_{\text{start\_req}} = T_{\text{finish\_target}} - (T_{\text{moving}} + T_{\text{rest}})$$

4.2 ETP(等時撤退分岐点)と PNR(限界行動決定点)

航空安全理論の ETP / PNR を登山ルート上に写像し,撤退・エスケープの確定判断点を算出します.

flowchart LR Start["登山口 A
(出発)"] --> ETP["📍 ETP
(等時撤退分岐点)"] ETP --> PNR["🚨 PNR
(限界行動決定点)"] PNR --> Peak["目的山頂 B
(前進完了)"] ETP -.->|"引き返す方が早い"| Start PNR -.->|"撤退不能・直ちにエスケープ"| Escape["エスケープルート C
(小仏バス停/駅)"]
$$x_{\text{ETP}}: \quad T_{\text{return}}(x) = T_{\text{forward\_escape}}(x)$$ $$x_{\text{PNR}}: \quad t_{\text{current}} + \min\left( T_{\text{return}}(x), T_{\text{forward\_escape}}(x) \right) \le T_{\text{deadline}}$$

L1(見) が Overpass / GCSタイルで登山道と出口 POI を取ります(待ちはここ).L2(決) がそのグラフ上で ETP/PNR から到達可能なすべての別出口へ Dijkstra し,最良案と代替候補群を整理します.L3(伝) が最良退路を太いオレンジ点線,代替候補を細い点線で描画し,現場での即時切り替えを可能にします.L1 が空,または別出口が無いときは GPX 逆順です.PLAN の地図は L1 を待たず先に出します.小仏バス停は説明用の例です.

5. SHERPA 現場監視 & コースアウト警告時相論理

現在地 GPS 座標と計画ルート線分群の最短垂直距離(クロス・トラック・エラー: \(d_{\perp}\))を計算し,樹林帯のGPS揺らぎによる誤警告を防ぐヒステリシス LTL を適用します.

flowchart TD S_OnRoute["🟢 正常ルート上 (d < 20m)"] S_Caution["🟡 注意ゾーン (d >= 20m)"] S_OffCourse["🟠 コース離脱 (d >= 40m, 15秒継続)"] S_Critical["🔴 緊急警報 (d >= 80m)"] S_OnRoute -->|"離脱検知"| S_Caution S_Caution -->|"復帰 (d < 15m, 5秒)"| S_OnRoute S_Caution -->|"15秒継続"| S_OffCourse S_OffCourse -->|"スナップバック復帰 (d < 15m)"| S_OnRoute S_OffCourse -->|"さらに離脱"| S_Critical S_Critical -->|"減衰"| S_OffCourse

5.1 時相論理(LTL)による誤警告防止規約

規約 時相論理式(LTL) 動作説明
C1: 発話トリガー \(\mathbf{G} ((\mathbf{H}_{\le 15\text{s}} (d_{\perp} \ge 40\text{m}) \land \text{acc} \le 25\text{m}) \to \mathbf{X} \text{Alert})\) 40m以上の離脱が15秒以上継続し,かつGPS精度が25m以内の場合にのみ音声アラートを発火.
C2: 復帰スナップバック \(\mathbf{G} ((\text{State} = \text{OffCourse} \land \mathbf{H}_{\le 5\text{s}} (d_{\perp} \le 15\text{m})) \to \mathbf{X} \text{OnRoute})\) 15m以内に戻り5秒経過した時点で「ルート復帰」を通知.
C3: 連続発話抑制 \(\text{Alert} \to \mathbf{G}_{\le 90\text{s}} (\neg \text{Alert})\) 同一警告は最低90秒間ブロックし,過度な音声スパムを防止.

5.2 完全オフライン(圏外)・気圧センサー非依存環境での現場エッジ撤退検知アーキテクチャ

SHERPA は山中での 「完全圏外(インターネット接続不可)」 かつ 「気圧センサーなし」 という極限制約下でも,GPS 物理プロキシと端末内事前契約(\(\text{Pre-Baked P90}\))により,天候急変や体力低下による撤退・エスケープを自律的に確定判断します.

flowchart TD subgraph OfflineEdge ["📱 現場 SHERPA(完全オフライン・気圧計不要)"] GPS_Data["GPS観測(緯度・経度・対地速度 v_gps・GPS標高・時刻)"] Proxy["物理プロキシ判定
・対地速度激減 (κ_v = v_gps / v_plan < 0.6)
・停留比率増大 (r_stop > 40%)
・局所蛇行率増大 (TI > 1.30)"] Contract["端末保持契約
・事前P90所要時間テーブル
・全分岐エスケープ限界時刻 (t_pnr)"] DeadReckon["残余時間バジェット毎秒評価
ΔT(t) = T_deadline - (t_now + T_escape_P90)"] GPS_Data --> Proxy Proxy --> DeadReckon Contract --> DeadReckon end subgraph AutoTriggers ["🚨 3大 自律撤退・エスケープ発動規約"] R1["規約R1: PNR限界時刻超過
(t_now > t_pnr_limit)"] R2["規約R2: タイムバジェット枯渇
(ΔT < 15分 が10分継続)"] R3["規約R3: ユーザーワンタップ
(手動エスケープボタン)"] end DeadReckon --> R1 DeadReckon --> R2 OfflineEdge --> R3 R1 --> AlertVoice["🗣️ 確定音声介入
「日没前脱出のため,直ちに○○エスケープルートへ転進してください」"] R2 --> AlertVoice R3 --> EscapeNav["🧭 オフライン自律誘導
最短脱出路の矢印・残距離・P90下山時刻表示"]

💡 気圧センサーなし・ネットなしでも天候悪化を検知できる物理的理由

豪雨・強風・濃霧に遭遇すると,登山者は必ず「足元が悪く歩行速度が激減(対地速度・VAM急落)」「雨具着用や足場確認で立ち止まる(停留時間比率 \(r_{\text{stop}} > 40\%\))」「視界不良でルートを探す(蛇行率急増)」という形で GPS 物理データに直接的な変化 が生じます.SHERPA は毎秒残余バジェット \(\Delta T(t) \le 15\text{分}\) を計算するため,悪化要因が天候であれ疲労であれ,「このまま進むと日没・最終バスに間に合わない」という物理的事実 を数学的に捉えて即座に撤退指示を発動できます.

6. データ契約仕様(JSON Schema)

CAIRN(L2計画器)と SHERPA(リアルタイム監視)は,計画候補の比較・決定理由・全GRADスタックを含む以下の厳密なスキーマを介して通信します.

6.1 PlanContract(事前計画・候補比較・決定理由オブジェクト)

{
  "plan_id": "plan_takao_jinba_20260819",
  "route_metadata": {
    "name": "高尾山・陣馬山 縦走",
    "distance_km": 15.4,
    "total_ascent_m": 980,
    "total_descent_m": 950,
    "max_elevation_m": 855,
    "required_tier": 2
  },
  "time_budget": {
    "start_time_required": "08:15",
    "sunset_time": "18:20",
    "finish_deadline": "16:40",
    "transit_target": { "stop_name": "陣馬高原下バス停", "target_departure": "16:55", "last_departure": "17:55" },
    "predicted_moving_time_h": 4.85,
    "moving_time_p10_h": 4.20,
    "moving_time_p50_h": 4.85,
    "moving_time_p90_h": 5.60,
    "total_action_time_h": 5.95
  },
  "candidates": [
    { "candidate_id": "plan_a_main", "name": "主尾根縦走案 (推奨・採用)", "distance_km": 15.4, "total_action_time_h": 5.95, "knee_saturation_pct": 58.4, "pace_collapse_prob_pct": 38.2, "deadline_margin_minutes": 20, "is_hard_gate_cleared": true, "selection_score": 92.5 },
    { "candidate_id": "plan_b_bypass", "name": "巻き道・低負荷迂回案", "distance_km": 13.5, "total_action_time_h": 5.10, "knee_saturation_pct": 42.1, "pace_collapse_prob_pct": 22.0, "deadline_margin_minutes": 65, "is_hard_gate_cleared": true, "selection_score": 84.0 },
    { "candidate_id": "plan_c_escape", "name": "小仏峠エスケープ案", "distance_km": 9.5, "total_action_time_h": 3.80, "knee_saturation_pct": 32.0, "pace_collapse_prob_pct": 15.0, "deadline_margin_minutes": 110, "is_hard_gate_cleared": true, "selection_score": 78.0 }
  ],
  "decision_rationale": {
    "selected_candidate_id": "plan_a_main",
    "selected_candidate_name": "主尾根縦走案 (推奨・採用)",
    "primary_decision_reason": "SCR(380m/h)と前日コンディション(Readiness=68)から,P90ワーストケース下山時刻(16:40)が最終バス(17:55)を20分以上の安全マージンで充足するため採用決定.",
    "gate_checks": { "sunset_limit_cleared": true, "transit_deadline_cleared": true, "knee_dynamic_elc_safe": true, "tier_requirement_matched": true },
    "safety_margin_minutes": 20,
    "chance_constraint_confidence_pct": 95.0,
    "grad_applied_highlights": {
      "Exp.14 (Moving Time)": "FitRec-Ridge予測: 移動4.85h (SAC比88%)",
      "Exp.06/07 (Collapse)": "Miner累積損傷ロジット: 崩壊確率38.2% (MODERATE)",
      "Exp.10/12/13 (Dynamic ELC)": "Schwameder膝飽和度: 58.4% (下山420mでポール展開)",
      "Exp.01/02/05 (SCR & GACD)": "SCR 380m/h / 前半登り有酸素上限保持",
      "Exp.08 (Dynamic Supply)": "Minetti代謝仕事量: 1850kcal / 水分1950ml携行"
    }
  }
}

6.2 SherpaRuntimeContract(SHERPA ランタイム設定)

{
  "plan_id": "plan_takao_jinba_20260819",
  "athlete": {
    "vam_target": 380.0,
    "elc_dynamic_m": 692.0,
    "knee_pole_trigger_descent_m": 420.0,
    "sweat_rate_ml_per_hour": 328.0
  },
  "gates": [
    { "gate_id": "gate_etp_kobotoke", "name": "景信山 等時撤退点 (ETP)", "distance_from_start_m": 6200.0, "action": "体調不安時は小仏バス停へ下山決定" },
    { "gate_id": "gate_pnr_myoo", "name": "明王峠 限界判断点 (PNR)", "distance_from_start_m": 11800.0, "hard_limit_time": "14:15", "action_on_miss": "FORCE_ESCAPE_SAGAMIKO" }
  ],
  "monitoring": {
    "cte_caution_m": 20.0,
    "cte_offcourse_m": 40.0,
    "cte_critical_m": 80.0,
    "debounce_seconds": 15,
    "cooldown_seconds": 90
  }
}

7. 画面設計・UI設定仕様(計画候補比較・決定理由・全GRADスタック表示)

ダッシュボードの「PLAN タブ」およびルート事前評価モーダルでは,以下のように「計画候補の比較」「決定論的理由」「GRAD 応用全14実験モデル」が構造化されて視覚表示されます.

🗻 高尾山・陣馬山 縦走ルート事前計画

✅ 決定案: 候補A (主ルート) 採用

1. 計画候補の比較(Multi-Candidate Comparison)

候補案 距離 / 累積標高 予想行動時間 (P90) 膝飽和度 (\(S_{\text{knee}}\)) ペース崩壊リスク 安全マージン 判定
🟢 候補A (主尾根縦走・推奨) 15.4 km / +980m -950m 5.95 時間 (P90) 58.4% (安全圏) 38.2% 🟡 +20 分 採用
⚪ 候補B (巻き道・低負荷迂回) 13.5 km / +760m -740m 5.10 時間 (P90) 42.1% (低負荷) 22.0% 🟢 +65 分 比較
⚪ 候補C (小仏峠エスケープ) 9.5 km / +620m -580m 3.80 時間 (P90) 32.0% (最小) 15.0% 🟢 +110 分 退路

🎯 決定理由(Decision Rationale: なぜこの計画に決めたのか)

ユーザーの持続登高能力(\(\text{SCR}=380\text{ m/h}\))と前日コンディション(Readiness 68点)に基づき,主ルート縦走案の P90 ワーストケース下山時刻(16:40)が日没(18:20)および最終バス便(陣馬高原下 17:55発)を 20 分以上の安全マージンで充足するため採用決定.

✅ 日没1h前下山クリア ✅ 最終バス接続クリア (+1h15m) ✅ 膝耐性動的ELC安全圏 (58.4%) ✅ Tier-2 適合

2. GRAD 応用全14実験モデル・カードスタック(GRAD Applied Stack)

⏱️ Exp.14: 移動時間予測 (FitRec-Ridge)

  • 移動時間: 4.85h (P10 4.2h / P90 5.6h)
  • YAMAP / SAC比ペース: 88% (健脚ペース)
  • 総行動時間: 5.95h (休憩1.10h含む)

🦵 Exp.10/12/13: 動的ELC & 膝負荷

  • 前日補正動的ELC: 692 m
  • Schwameder膝飽和度: 58.4% (安全圏)
  • ポール展開トリガー: 下山420m地点 🦯

📈 Exp.06/07: ペース崩壊リスク予測

  • 崩壊確率: 38.2% (MODERATE 🟡)
  • 判定: 前半イーブンペース厳守
  • 登攀密度: 63.6 m/km

❤️ Exp.01/02/05: GACD心肺ドリフト&SCR

  • 持続登高速度(SCR): 380 m/h
  • 前半目標登坂VAM: 400 m/h (有酸素上限)
  • 後半心拍ドリフト予測: +4.5 bpm/h

🥤 Exp.08: 代謝仕事量&動的補給

  • Minetti推定消費: 1,850 kcal
  • 必要水分量: 1,950 ml (2.0L携行推奨)
  • 🥤補給フラグ: 4.2km / 8.5km / 12.0km

📍 ETP / PNR 現場安全境界

  • 等時撤退点 (ETP): 景信山 (6.2km)
  • 限界判断点 (PNR): 明王峠 (11.8km)
  • PNR通過限界: 14:15 超過時即エスケープ 🚨

8. 科学的根拠(エビデンス)と参考文献