# P14-03 混雑と経路選択:証拠(候補 0754f41) 作業内容は「客用・業務用EV、階段、ワープの待ち時間をA*費用へ反映する」です。受入条件は「ラッシュ、相乗り、50%減速、救護同伴、経路喪失を、実際の位置と人数で検証する」です。 ## A*費用に入るもの | 移動手段 | 費用の内訳 | |---|---| | EV | 基本費用と移動階数×階あたり時間に、待ち時間を足します。待ち時間は2つの和です。1つは同じ階の組の待ち行列(1人1分と、満員の籠1回ごとに2分)。もう1つは今回追加した「同じ籠で別の階の組を待つ人数×1分」で、各接続の dynamic_cost として公開します。行列が変わるたび(乗車の要求・取消・籠の毎分処理)に更新し、保存を読むときは行列から再計算した値と一致するかを検証します。 | | 階段 | 費用150です。待ち時間はありません。移動は半速(2分)です。セルの混雑費用が足されます。 | | ワープ | 費用400です。到着先セルの混雑費用(定員を超えた1人ごとに75)が足されます。停止中や残量不足のときは経路から除外します(P14-02)。 | | 通路・セル | 定員を超えた1人ごとに75を足します。2人以上が重なると移動速度は50%になります。 | ## 証拠 | 観点 | 試験 | |---|---| | ラッシュ | `test_route_wait_choice`: 実際の客12人が籠Aで3階行きを待つと、0→1階の経路は空いている籠Bへ迂回します。籠Aの0→1階の接続は、12人分の待ちを費用に含みます。取消後は、その分の費用がちょうど消えます。保存・読込で完全に一致し、待ち費用を改ざんした保存は原子的に拒否されます。`test_shift_rush`: シフト交代時の通勤ラッシュです。 | | 相乗り | `test_route_wait_choice`: 実際の客6人が籠Bで同乗し、同時に乗るのは定員4人以内です。6人全員が運ばれ、消えた客はいません。 | | 50%減速 | `test_path_congestion`: 同じ経路の5人で定員を超える密度を作り、半速、2分目までに必ず進むこと、混雑した経路を避けることを確認します。 | | 救護同伴 | `test_rescue_elevator`: 救護者と患者の2人組が同じ籠を予約し、乗車中に保存・読込しても一致し、停電時は2人一緒に降ります。ワープでの2人分課金はコードで確認済みです(P14-02 レビュー)。 | | 経路喪失 | `test_route_wait_choice`: 籠Bを撤去すると、経路は残る籠Aに切り替わります。`test_path_congestion` と `test_runtime_path_traffic`: 30分動けない状態からの安全な回復と、構造の再構築を確認します。 | | ワープの混雑 | `test_route_wait_choice`: 出口に客6人がいると、ワープ経路のA*費用が上がります。 | ## 主張しないこと - 階段の費用150(2分)とEVの階あたり10分の釣り合いは変えていません。近くに階段があればEVより優先されます。 - ワープ到着先の定員4は、混雑費用以外では扱いません。 - Windows 実機は対象外です。