Skip to content

trainRoute の値で走らせた所要時間が、同じ較正値を使う estimateArrivalTimes より短くなる #1709

Description

@TinyKitten

概要

trainRoute の値で台形の速度プロファイルを作って走らせると、estimateArrivalTimes より所要時間が短くなります。

原因は、2 つのクエリが別々の運動学モデルで値を出していることです。trainRoute の最高速度と加減速は、追加した時点(#1568)の MobileApp の定数を写したものです。その後の推定の改良(#1572、#1577、#1580、#1590、#1596)は、arrival_estimation.rs にだけ入りました。

  • 路線種別ごとの速度
  • 運転余裕率
  • 通過駅のペナルティ
  • 停車時間
  • 迂回係数

また、#1591 と #1597 の較正値は、scripts/compute_speed_table.py が推定のモデル(加速 0.7m/s²、減速 0.9m/s²、運転余裕率 1.15 など)を再現して当てはめた値です。trainRoute はその最高速度だけを、#1568 の加減速(0.83m/s² / 0.69m/s²)と組み合わせて返しています。このため、較正した所要時間が trainRoute では再現されません。

再現方法

次の 2 経路で比べました。trainRoute の値は、MobileApp の useSimulationMode と同じ方法で走らせました。

  • 走らせ方: 停車駅から次の停車駅までを 1 本の走行とし、到着側の駅の値で台形を作ります。
  • 距離: trackDistanceFromPrevious の合計です。
  • 途中駅の停車: 推定と同じ 0.6 分にそろえました。
経路 trainRoute の値で走らせた所要時間 estimateArrivalTimes の終点
東急東横線 特急 渋谷→横浜(lineGroupId 161) 23.1 分 26.5 分
京王線 特急 新宿→京王八王子(lineGroupId 71) 32.3 分 41.0 分

一般則(較正テーブルに無い路線・種別の速度)も、2 か所で値が違います。

条件 arrival_estimation.rs dto/simulation.rs
在来線・種別なし 80km/h 90km/h
在来線・特急 96km/h 130km/h
新幹線 250km/h 320km/h

想定していた動作

走行の所要時間を時刻表に近づけたい用途(MobileApp の GPX 生成など)で、trainRoute から推定と同じモデルの値を取れること。

実際の動作

trainRoute は、#1568 の時点のモデルの値しか返しません。

対応方針

trainRoute に、どちらのモデルで値を出すかを選ぶ引数を足します。

enum TrainRouteModel {
	Legacy
	Estimated
}

trainRoute(fromStationId: Int!, toStationId: Int!, lineGroupId: Int, legs: [RouteLegInput!], model: TrainRouteModel): TrainRouteResponse!
  • Legacy(省略時): いまの処理のまま変えません。MobileApp のオートモードはこちらを使い続けます。新しいフィールドは null です。
  • Estimated: 推定(arrival_estimation)のモデルで値を出します。
    • TrainRouteSegment に arrivalCumulativeMinutes / departureCumulativeMinutes を足し、返す駅列に対する到着・出発の累積分を入れます。legs を渡したときは、estimateArrivalTimes に同じ legs を渡した値と一致させます。
    • maxSpeed / maxAcceleration / maxDeceleration も、推定のモデルの値にします。
    • バスは Legacy と同じ値を返し、累積分は null にします。

環境情報

  • 対象: 本番(gql.trainlcd.app)、2026-10-01 に取得
  • コードの参照: dev(c0e7fd0)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions