bit-skate

ElevatorSim

08:00:00 ▶ 1x
準備中…

    「ビルドして実行」を押すと、update() の中身がコンパイルのためにサーバーへ送信されます。コードは保存されません。

    仕様

    10階建て・かご3台・定員8人のビルに湧く乗客を、update() の中身だけでさばきます。 かごの加減速・扉・乗降はシミュレータが処理するので、あなたは どのかごをどの階へ向かわせるか を指示するだけです。 成績は 平均待ち時間(短いほど良い)で決まります。

    呼ばれ方

    読める情報:w(sim::World)

    w.time経過秒(double)
    w.floors階数(1..floors。1F が最下階)
    w.elevators[i]かご i の状態
    w.hallCalls押されている呼び出しだけが入った配列

    かご(sim::ElevatorView)

    id0 始まり(画面の E1 = id 0)
    pos現在位置。1.0 = 1F、2.5 = 2F と 3F の中間
    dir+1 上昇中 / -1 下降中 / 0 停止
    load / capacity乗車人数 / 定員(8)
    doorOpen扉が開いている(開閉動作中も true)。この間は移動しない
    target現在の目的階。なければ -1
    carCalls[f]かご内で f 階のボタンが押されている(その階で降りたい人が乗っている)

    呼び出し(sim::HallCall)

    floor階
    uptrue = 上ボタン / false = 下ボタン
    waitSecその方向で最も長く待っている人の待ち秒数
    countその方向で待っている人数

    出せる命令

    out.push_back({ elevatorId, targetFloor });   // かご elevatorId を targetFloor 階へ

    シミュレータの固定ルール

    書くときの決まり

    進め方の目安

    P1最初の呼び出しに、手の空いたかごを向かわせる(先着順)
    P2進行方向の呼び出しを拾い切ってから折り返す(SCAN / LOOK)
    P3呼び出しごとに全かごの到着時間を見積もり、いちばん早いかごに割り当てる
    P4朝・昼・夕で戦略を切り替える。待機する階を工夫する

    比べるときは、同じシード・同じシナリオ・同じ経過時間で。「評価・履歴」から、4 シナリオをまとめて一瞬で計測できます。

    操作

    Ctrl+Enterビルドして実行(エディタ内)
    Space / 1 / 2 / 3一時停止 / 速度 1x・4x・16x
    R / N / S / Cリセット / シード変更 / シナリオ切替 / 結果を履歴に記録

    キー操作は、ビル断面をクリックしてから使えます(エディタ入力中は効きません)。

    評価・履歴

    一括評価

    いまビルドされている controller を、描画なしで 4 シナリオに通します。シードを複数指定すると平均も出ます。

    履歴

    履歴はこのブラウザ内にだけ保存されます。