HN 日本語サマリー

← 一覧へ戻る
プログラミング

エレベーター

Elevators (john.fun)

1516 pointsby Jrh0203382 コメント

要約

エレベーターの待ち時間やアルゴリズムについて解説した記事です。単純なSCANやLOOKアルゴリズムから、複数のエレベーターを協調させるシステム、待ち時間を測定する指標、そしてより高度なOtis RSRアルゴリズムやDestination Dispatchシステムについて、その利点と欠点を比較しながら説明しています。最終的には、シンプルなアルゴリズムが特定の状況でより優れている場合もあることを示唆しています。

全文翻訳

エレベーター 誰もが、いつまでたっても来ないエレベーターを待つというフラストレーションを共有したことがあるでしょう。「ボタンを押したのに、なぜ来ないんだ?」とあなたは尋ねます。エレベーターという身近なものでさえ、見た目以上に複雑なのです。 この記事では、エレベーターの謎を解き明かしていきます。あなたがボタンを押す方法と、エレベーターがあなたをどう動かすか。 43211x5x25x 1台のエレベーター 最も単純なエレベーターアルゴリズムはSCANと呼ばれ、1961年に特許が取得されました。エレベーターはロビーから始まり、最上階まで行き、そこで反転して戻ってきます。途中で誰かの乗り降りを扱います。 ほとんどの場合、実際には最上階に行く必要はありません。もしエレベーターが要求された階までしか行かずに反転する場合、そのアルゴリズムはLOOKアルゴリズムと呼ばれます。これはほとんどの人が知っていて期待しているアルゴリズムです。 43211x5x25x 5つの呼び出しを追加 複数台のエレベーター ここからが謎の始まりです。もしエレベーターが複数台ある場合、どの車が誰をピックアップするかをどのように調整するのでしょうか? 最も基本的なシステムでは、中央スケジューラがあり、各エレベーターがどの階に停止するかを指示します。新しいリクエストが入ると、最も近いエレベーターに割り当てられます。しかし、後述するように、もっと良い方法があります。 43211x5x25x 長い待ち時間 エレベーターアルゴリズムの良さを実際にどのように測定するのでしょうか?明らかな指標は、エレベーターが到着するまでの待ち時間です。 非常に単純な測定方法は、「30秒以内にエレベーターが到着する頻度は?」あるいは「90秒以内にエレベーターが到着する頻度は?」です。 -wait < 30s -wait < 90s 6543211x5x25x flow14/min reset 統計的応用 より厳密には、待ち時間の分布を見たいのです。数千回の乗車にわたる待ち時間をプロットすると、以下のヒストグラムが得られます。 654321010sp50—p90—25x100x500x flow14/min reset p90が2分というのは、90%の乗客が2分以下でエレベーターを待つことを意味します。p50が1分というのは、半数の乗客が1分以内にエレベーターが到着することを意味します。 人々は通常、自分が待つ平均時間を覚えていません。彼らは、エレベーターが永遠にかかったと感じた時間を記憶に留めます。それがp90のケースです。 朝のラッシュ すべての乗客トラフィックが同じではありません。大きな企業オフィスビルを想像してみてください。朝は、ほとんどすべてのトラフィックがロビーから上層階への移動で占められています。 夕方になると、全員がビルを出るため、これは逆転します。昼食時のラッシュは両方の要素が混在し、残りのトラフィックはしばしば階から階への移動です。 Morning Lunch Evening Interfloor -wait < 30s -wait < 90s 6543215x25x100x flow14/min reset 待ち時間の分布は、時間帯やエレベーターが直面しているトラフィックパターンによって劇的に変化します。朝のラッシュは、待ち時間の統計が最も悪いことで悪名高いです。 より賢いエレベーター LOOKエレベーターアルゴリズムを分析する際、乗客がどのように車に割り当てられるかをLOOKED(ハハ)しました。私たちは最も近い車に各リクエストを単純に割り当てましたが、もっとうまくやれると言いました。 もし最も近い車が満員だったらどうなるでしょうか?OtisのRSR(Relative System Response)アルゴリズムを使えば、より賢くなれます。RSRは、各車が乗客をピックアップするのにどれだけ適しているかをスコアリングします。スコアが低いほど良いです。 RSRピックアップスコア Score = ETA to pickup + onboard load penalty + same-direction anti-bunching penalty - direction-match bonus - idle-nearby bonus - low-load bonus アンチバンチング 別の車がすでに同じ階に同じ方向に向かっている場合、その車をペナルティ対象とします。 アイドル近接 呼び出し元から2階以内のアイドル状態の車にボーナスを与えます。 RSRは5秒ごとに再最適化も行います。エレベーターAでピックアップされる予定だった乗客も、エレベーターAが遅延に遭遇した場合、エレベーターBに再ルーティングされる可能性があります。この再最適化は、トラフィックフローを合理化する鍵となります。 以下のグラフィックでは、もし3階からの呼び出しボタンがちょうどその瞬間に押された場合、各エレベーターが最適な選択肢であるときに点灯します。エレベーターが移動するにつれてこれは常に変化し、オプティマイザーが動作している様子を示しています。 4321ABCDAScore 1 LOOK vs RSR エレベーター分析ツールキットを装備して、LOOKとRSRのパフォーマンスをベンチマークし、よりスマートなエレベーターアルゴリズムが実際に待ち時間をどれだけ改善するかを見てみましょう。 LOOK -wait < 30s -wait < 90s 10987654321 RSR -wait < 30s -wait < 90s 10987654321 1x25x250x flow8/min reset 興味深いことに、フローレートが高くなるにつれて、LOOKはRSRを上回り始めます。エレベーターが常に満員で、すべての階に停止する場合、追加のルールはそれほど重要ではありません。 また、LOOKは、エレベーターバンクあたりのエレベーターが少ない小規模なビルでもRSRを上回る傾向があります。時には物事をシンプルに保つ方が良いのです。 追跡できるもう一つの指標は、旅程時間、つまり目的の階に到着するまでにエレベーター内で実際に待っている時間です。RSRとLOOKはここでも異なる特性を持っていますが、それはこの記事の範囲外です。 デスティネーションディスパッチ すべてエレベーターにボタンがあるわけではありません。最新の高級エレベーターには、各階にキオスクがあり、エレベーターが到着する前に目的地を指定できます。その後、キオスクはどのエレベーターを待つべきかを示します。 これはデスティネーションディスパッチと呼ばれます。一見すると、それは素晴らしいように思えます。エレベーターオプティマイザーは、誰がどこへ行くかを知っているので、待ち時間を減らすためにそれを利用できるはずですよね? RSR -wait < 30s -wait < 90s 87654321 Destination Dispatch -wait < 30s -wait < 90s 87654321 71x25x250x flow8/min reset 実際には、これらの派手なキオスクは、従来の昔ながらの上げ下げボタンよりも、待ち時間においては一般的に劣ることが判明しました。キオスクが勝つエッジケース(8台以上のエレベーターバンクを持つ非常に高いビル)も確かにありますが、ほとんどの場合、シンプルな上げ下げボタンが最高です。 この直感に反する結果は、すべて5秒ごとにシステムが各エレベーターの経路を再最適化する再バランシングステップのおかげです。キオスクは硬直性を強制し、指定されたエレベーターに乗らなければなりません。 エレベーターを呼んでから30秒後の世界の状況は非常に異なっているかもしれませんが、システムは適応できません。柔軟性の喪失は、オプティマイザーにとって追加の情報に見合うものではないことが判明しました。 フルシミュレーション ここに、すべてのボタンとノブを操作できるシミュレーションがあります。自由に遊んでください! Morning Lunch Evening Interfloor -wait < 30s -wait < 90s 87654321 floors8 cars4 flow18/min 1x25x100x Look RSR Destination Dispatch reset histogram 結論 この記事はエレベーターアルゴリズムの表面をかすめたにすぎません。次にエレベーターを待っているときに、個人的に受け取らないようにしてみてください。エレベーターはあなたの声を聞いていますが、考えることがたくさんあるのです。