世界を動かす技術を、日本語で。

エレベーター

2026年8月1日原文(john.fun)

概要

  • エレベーターの待ち時間や動作の謎を解説
  • 基本的なアルゴリズムから高度な制御方式まで紹介
  • 複数台の協調や混雑時の最適化手法を比較
  • 待ち時間分布やユーザー体験への影響を分析
  • 先進的なシステムの意外な落とし穴も解説

エレベーターのアルゴリズム基礎

  • エレベーターの動作は 単純そうに見えて実は複雑 な制御
  • 最も基本的なアルゴリズムは SCAN方式 (1961年特許取得)
    • ロビーから最上階まで直行し、折り返して降下
    • 途中で乗降希望者がいれば随時対応
  • 実際は 最上階まで行かず、必要な階で折り返すLOOK方式 が主流
    • 利用者が期待する一般的な動き

複数台エレベーターの協調

  • 複数台ある場合、 中央スケジューラー が各エレベーターに指示
    • 新しいリクエストは 最も近いエレベーター に割り当て
  • さらに進んだ制御で、 より効率的な割り当て が可能

待ち時間の評価指標

  • アルゴリズムの良し悪しは 待ち時間の短さ で評価
    • 例:30秒以内、90秒以内に到着する割合
  • より厳密には 待ち時間分布(ヒストグラム) を分析
    • 例:p90=2分→90%の利用者が2分以内に乗車
    • p50=1分→半数の利用者が1分以内に乗車
  • 平均値よりも 最悪ケース(p90) が印象に残りやすい

混雑パターンと待ち時間

  • 朝のラッシュ時 はロビーから上階への一方向集中
  • 夕方は逆方向、昼は双方向や階間移動が増加
  • 時間帯や交通パターンで 待ち時間分布が大きく変動
    • 特に朝のラッシュは 待ち時間が悪化しやすい

より賢いエレベーター制御

  • LOOK方式では 最寄りのエレベーター に割り当てるだけ
  • Otis社の RSR(Relative System Response)アルゴリズム でさらに最適化
    • 各エレベーターに スコア を付与し、最適な車両を選定
    • スコア=到着予想時間+車内混雑ペナルティ+同方向重複ペナルティ−方向一致ボーナス−近接待機ボーナス−低混雑ボーナス
    • 同方向重複防止 :既に他の車両が同じ方向に向かっていればペナルティ
    • 近接待機ボーナス :2フロア以内の待機車両にボーナス
  • 5秒ごとに再最適化 し、状況変化に柔軟対応

LOOK方式 vs RSR方式の比較

  • LOOK方式 は流量が少ない小規模ビルで優位
  • RSR方式 は混雑時や複雑な交通パターンで効果的
  • 流量が極端に多い場合は LOOK方式が逆転優位 になる場合も
  • 乗車中の移動時間 (journey time)は両方式で特性が異なるが本記事では割愛

Destination Dispatch(目的地指定型制御)

  • 最新型エレベーターでは 各階にキオスク端末 を設置し、行き先階を事前指定
    • 端末が どのエレベーターに乗るべきか案内
  • 理論上は 全利用者の目的地情報が分かるため最適化しやすい はずだが、現実は逆
    • 多くの場合、 待ち時間が悪化
    • 例外は超高層ビルや1バンク8台以上の大規模運用時のみ
  • 理由は 5秒ごとの再最適化ができなくなる柔軟性の喪失
    • 一度割り当てた車両に必ず乗らなければならず、状況変化に対応不可
    • 情報増加より柔軟性喪失のデメリットが大きい

シミュレーションとまとめ

  • 全パラメータを調整可能な シミュレーション も存在
  • エレベーターのアルゴリズムは 奥深く、日常のイライラも合理的な理由
  • 「ボタンを押しても来ない」理由は、単なる無視ではなく複雑な最適化の結果

Hackerたちの意見

まじで、エレベーター待ってる時、アルゴリズム作ってる人って大変だなって思う。人をピックアップして目的地に連れて行くまでの待ち時間を最小限にするために頑張ってるんだろうな。でも、エレベーターのロジックをプログラムしてる人たちが、わざと待たせて私たちを苦しめる悪党なんじゃないかとも考えちゃう。

もしかしたら、エレベーターの摩耗やエネルギー使用量みたいな他の目的関数があるかもしれないね。

他の機器とエレベーターを連携させるために、いくつかのサードパーティ製エレベーター統合(エレベーターコントローラーと通信するソフトウェア)をやったことがあるんだ。エレベーターの位置や動きが全部見えるようになった時にいつも驚くのは、エレベーターのスケジュールがどれだけ忙しいかってこと。エレベーターのロビーでキャブを待ってると永遠に感じるけど、配車の側から見ると、すごい活動があって、建物が通常稼働している時間帯にはキャブがほとんどアイドル状態にならないんだよね。ステータスパネルを見てるだけでオタク気分になるよ。もう一つ学んだことは、エレベーターのメカニックが「朝一番に会いましょう」と言ったら、だいたい午前4時のことを指してるってこと。人が来る前に出入りしたいんだよ。

もう一つ付け加えると、エレベーターのスケジューリングソフトが難解なわけじゃないんだ。そのソフトにはすごく多くの考慮がされてる。でも、エレベーターは高価だし、ビルのオーナーは気まぐれで無駄遣いしないよ。通常、予想される負荷を処理するために、必要最低限のキャブしか持ってないんだ。

エレベーターのスケジューリングを体験したことがない人には、これをおすすめするよ: https://play.elevatorsaga.com/ この穴にハマって楽しんでね :D

会議でホテルにいる時、エレベーターを待ってるときはいつもこのゲームに戻ってくる。

わあ、ここに来たのは、エレベーターのスケジューラーをプログラムするゲームが面白いのかずっと気になってたからなんだ。誰もそんなゲームを作ろうと思わなかったんじゃないかって思ってたけど、間違ってたみたいで嬉しいよ。

こういうゲームがもっとあればいいな。シンプルなアイデアなのに、各レベルの後はすごく難しくて満足感があるんだよね。ちょっとしたランダムな失敗もあって、さらにチャレンジングになるし。

すごくよくできてるけど、やっぱり https://en.wikipedia.org/wiki/Elevator_Action の方が好きだな!

エレベーターに関していつも悩むのは、アルゴリズムじゃなくて、みんなが上に行くか下に行くかのボタンを押すのが理解できてないこと。ほとんどの場合、両方押しちゃう人がいて、「そうすればエレベーターが早く来る」って思ってるみたい。結果的に、半分の確率で間違った方向に行っちゃって、すでに乗ってる人たちに無駄な停車をさせることになるのに。理解するのってそんなに難しいのかな?

そんなことする人、見たことないな。

それで、エレベーターのドアが開いた時に、中にいる人に「上に行くの?それとも下?」って聞くんだよね。ちゃんと矢印があるのに、ほんとに。

Hacker Newsで議論の続きを見る