エレベーターバンク
概要と主要な概念
A*ネットワークの各階(グリッド)の間で人を輸送するエレベーターのバンクを表すオブジェクトです。
エレベーターバンクは、施設の各階の間で人を動かすエレベーターをシミュレートするために使用します。エレベーターバンクは、モデルのz軸に沿って積み重ねられたA*グリッド間をつなぐカスタムA*ブリッジとして機能します。
エレベーターバンクは、ライブラリからドラッグして作成します。次に、x軸のサイズを拡張して、必要なエレベーター数を定義します。モデルへのエレベーターバンクの追加については、「A*ナビゲーションを使用する」を参照してください。
イベント
移動者到着時
OnTravelerArrivalイベントは、移動者が他の階に移動するためにエレベーターバンクに到着したときに起動します。
次のパラメータがあります。
イベントパラメータ | タイプ | 説明 |
---|---|---|
移動者 | TaskExecuter | エレベーターバンクに到着した移動者。 |
DestFloorZ | 倍精度浮動小数点数 | 移動者の目的階のz位置。 |
移動者退出時
OnTravelerContinueイベントは、移動者がエレベーターバンクの使用を終え、A*ネットワーク内の移動を続行するときに起動します。
次のパラメータがあります。
イベントパラメータ | タイプ | 説明 |
---|---|---|
移動者 | TaskExecuter | エレベーターバンクに到着した移動者。 |
エレベーターバンクもバンクエレベーターのイベントをリレーします。(処理フローの[イベントを待つ]または[イベントトリガーソース]アクティビティを使用して)エレベーターバンク経由でこれらのイベントをリッスンしている場合、リッスンするターゲットエレベーターのランクを定義する必要があります。
状態
エレベーターバンクは、状態プロファイルを実装していません。バンクエレベーターの状態を参照してください。
統計
エレベーターバンクは独自の統計を実装していません。バンクエレベーターの統計を参照してください。
プロパティ
エレベーターバンクオブジェクトには、さまざまなプロパティを持つ4つのタブがあります。最後の3つのタブは、すべてのオブジェクトに共通の標準タブです。これらのタブのプロパティの詳細については、以下を参照してください。
[エレベーターバンク]タブを以下に示します。
[エレベーターバンク]タブには、次のプロパティがあります。
ドアの開閉時間
エレベーターのドアの開閉時間を定義します。「開」とは、エレベーターがある階に到着してから、最初の人が乗降を始めるまでの時間を指します。「閉」とは、最後の人が乗降を終えてから、エレベーターが次の階に向けて移動を開始するまでの時間を指します。
待ち時間
エレベーターがドアを開いたままその階にとどまる最短時間を定義します。
入退出時間
1人がエレベーターの乗降に要する時間を定義します。この時間と[# Simultaneous Entries/Exits]プロパティの組み合わせによって、複数の人がエレベーターの乗降に要する合計時間が決まります。
# Simultaneous Entries/Exits
エレベーターに同時に乗降できる人の最大数を定義します。この値と[入退出時間]プロパティの組み合わせによって、複数の人がエレベーターの乗降に要する合計時間が決まります。
乗降のアルゴリズム
エレベーターバンクは、エレベーターの乗降のシーケンスにシンプルなアルゴリズムを使用しています。1人の入退出(乗降)時間をeで表し、同時に入退出する人の数をsで表すと、e/sによって、ある人が乗降を始めてから次の人が乗降を始めるまでの時間が決まります。たとえば、入退出時間が5秒で、同時に入退出する人の数が2の場合、ある人が降車を始めてから次の人が降車を始めるまでの時間は2.5秒になります。複数の人が降車しなければならない場合、たとえば開始時間が100であれば、最初の人は時間100の時点で降車を始めます。2番目の人は時間102.5の時点で降車を始めます。3番目の人は時間105の時点で降車を始めます。同時に、最初の人は降車を完了します。このシナリオでは、たとえば5人が降車しなければならない場合、最初の人の降車開始が時間100の時点であれば、最後の人の降車完了は時間115の時点となります。
エレベーターの乗降では、その階で降車することになっている人がすべて先に降車します。すべての人が降車を終えた後で、乗車の必要のある人々が乗車を開始します。つまり、降車と乗車は同時には発生しません。先に降車し、その後で乗車します。
最大速度、加速度、減速
エレベーターバンクでのエレベーターの速度設定を定義します。
歩行者のキャパシティ使用量
1人の移動者が占めるエレベーターの面積を定義します。デフォルトは、移動者自身の占有面積(x/y footprint)と移動者の荷物の占有面積の合計です。
エレベーター容量
エレベーターの定員を定義します。[歩行者のキャパシティ使用量]プロパティの単位で定義します。
要求リスト プル クエリ
利用可能なエレベーターが次の目的階を判断するために使用するクエリを定義します。
エレベーターバンクは、現在アクティブなリクエストのリストを管理しています。たとえば、エレベーターバンクの乗り場またはエレベーターの中で押された(点灯された)ボタンに対応するリクエストを考えてみましょう。エレベーターバンクに到着した人が、上下いずれかの方向のボタンを押します。これらのボタンを押すと、エレベーターにその階への移動を求める新しいリクエストが作成されます。さらに、エレベーターに乗車した人が、目的階のボタンを押します。すると、そのエレベーターに目的階への移動を求める新しいリクエストが作成されます。
エレベーターバンクは、すべてのアクティブなリクエストを参照するリストを内部的に保有しています。エレベーターは、次の目的階を判断するとき、ここで定義されたクエリを使用してこのリストからプルし、プルオペレーションで選択された階に移動します。
リクエストリストのプロパティを表示するには、[リストのプロパティを要求...]を押します。リクエストの現在のリストを表示するには、[リクエストリストを表示...]を押します。
エレベーターバンクのリクエストリストは、リクエストリストのプルクエリを定義するときにカスタムエイリアスを使用します。つまり、デフォルトの語であるvalueとpullerの代わりに、requestおよびelevatorという語を使用します。これは、このリストの値(value)がエレベーターのリクエスト(request)に関連付けられ、リストのプラー(puller)がエレベーター(elevator)に関連付けられるためです。さらに、requestはFlexScriptタイプElevatorBank.Requestの語であり、elevatorはElevatorBank.Elevatorタイプの語です。そのため、作成するプルクエリは、これらのインターフェイスに関連付けられたメソッドやプロパティを直接使用できます。
デフォルトのプルクエリ
デフォルトのリクエストリストのプルクエリは次のとおりです。
WHERE
(request.onElevator == 0 OR request.onElevator == elevator)
AND elevator.canStop(request.floorZ, request.travelDirection)
ORDER BY distance ASC
このデフォルトクエリには、WHERE句に2つの条件があります。最初の条件は式(request.onElevator == 0 OR request.onElevator == elevator)
です。なお、requestは、エレベーター内、またはフロアのエレベーターバンクの乗り場で押された(点灯された)ボタンです。この式は、そのエレベーターが、エレベーター内部以外で点灯されたボタン(request.onElevator == 0
、つまり、エレベーターの外にあるフロアのボタン)か、そのエレベーター内のボタン(request.onElevator == elevator
)にのみ対応することを意味します。つまり、このエレベーターは、別のエレベーターで押されたリクエストには対応しません。
WHERE句の第2の要件は、elevator.canStop(request.floorZ, request.travelDirection)
です。この式は、エレベーターが2つの条件を満たす場合にのみリクエストに対応することを意味します。第1の条件は、目的階が現在の移動方向にあること、第2の条件は、(エレベーターが現在移動中の場合)現在の速度と減速を踏まえたときに、目的階で停止できるだけの十分な距離があることです。
デフォルトクエリのORDER BY句は、エレベーターに最も近いリクエストを優先します。
バンクエレベーター
バンクエレベーター、つまりエレベーターは、エレベーターバンク内にある個々のエレベーターを意味します。エレベーターバンク内のエレベーターを操作するには、主にFlexScriptインターフェイスのElevatorBankとElevatorBank.Elevatorを使用します。ただし、個別のエレベーターのイベントをリッスンしたり、エレベーターの状態情報を収集したりすることもお勧めします。
エレベーターのイベント
階への到着時
OnFloorArrivalイベントは、エレベーターがある階に到着したときに起動します。
次のパラメータがあります。
イベントパラメータ | タイプ | 説明 |
---|---|---|
フロアZ | 倍精度浮動小数点数 | エレベーターの到着階のz位置。 |
階からの出発時
OnFloorDepartureイベントは、エレベーターがある階から出発したときに起動します。
次のパラメータがあります。
イベントパラメータ | タイプ | 説明 |
---|---|---|
次のフロアZ | 倍精度浮動小数点数 | エレベーターの次の目的階のz位置。 |
前のフロアZ | 倍精度浮動小数点数 | エレベーターの出発階のz位置。 |
アイドル時
OnIdleイベントは、エレベーターがある階に到着し、次の目的階が見つからないときに起動します。
このイベントには、関連するパラメータはありません。
移動者乗車時
OnTravelerEntryイベントは、移動者がエレベーターに乗るときに起動します。
次のパラメータがあります。
イベントパラメータ | タイプ | 説明 |
---|---|---|
移動者 | TaskExecuter | エレベーターに乗る移動者。 |
移動者降車時
OnTravelerExitイベントは、移動者がエレベーターから降りるときに起動します。
次のパラメータがあります。
イベントパラメータ | タイプ | 説明 |
---|---|---|
移動者 | TaskExecuter | エレベーターから降りる移動者。 |
エレベーターの一般的な状態
エレベーターの一般的な状態プロファイルは、次の状態を使用します。
アイドル
エレベーターは、アイドル状態で停止しています。
ビジー
エレベーターは現在ドアを開閉しています。
ロード中
移動者がエレベーターに乗るところです。
アンロード中
移動者がエレベーターから降りるところです。
空の移動
エレベーターがフロア間を移動していますが、移動者は乗っていません。
ロードした状態での移動
エレベーターがフロア間を移動しており、移動者が1人以上乗っています。
エレベーターのカスタムプロファイルの状態
エレベーターには、次の状態を使用するカスタムプロファイル、プロファイル1が組み込まれています。
アイドル
エレベーターは、アイドル状態で停止しています。
開扉中
エレベーターがドアを開くところです。
閉扉中
エレベーターがドアを閉じるところです。
移動者降車中
移動者がエレベーターから降りるところです。
移動者乗車中
移動者がエレベーターに乗るところです。
移動中
エレベーターがリクエストに応えて目的階に移動しています。
アイドル移動中
エレベーターが目的階に移動していますが、リクエストに応えるためではありません。この状態は、アイドル状態のエレベーターに「ホーム」位置への移動を明示的に指示する目的でのみ使用します。
エレベーターの統計
エレベーターは、タスク実行者と同じ統計を使用します。これらの統計情報については、「タスク実行者の概念 - 統計」を参照してください。
移動者のイベント
エレベーターバンクを使用するA*移動者には、リッスン可能な次のイベントもあります。
エレベーターバンク到着時
OnElevatorBankArrivalイベントは、移動者が他の階に移動するためにエレベーターバンクに到着したときに起動します。エレベーターバンクのOnTravelerArrivalイベントと同時に起動しますが、これは移動者のイベントであり、エレベーターバンクのイベントではありません。
次のパラメータがあります。
イベントパラメータ | タイプ | 説明 |
---|---|---|
エレベーターバンク | ElevatorBank | 移動者が到着したエレベーターバンク。 |
目的フロアZ | 倍精度浮動小数点数 | 移動者の目的階のz位置。 |
エレベーター乗車時
OnElevatorEntryイベントは、移動者がエレベーターに乗るときに起動します。エレベーターのOnTravelerEntryイベントと同時に起動しますが、これは移動者のイベントであり、エレベーターのイベントではありません。
次のパラメータがあります。
イベントパラメータ | タイプ | 説明 |
---|---|---|
エレベーター | ElevatorBank.Elevator | 移動者が乗るエレベーター。 |
エレベーター降車時
OnElevatorExitイベントは、移動者がエレベーターから降りるときに起動します。エレベーターのOnTravelerExitイベントと同時に起動しますが、これは移動者のイベントであり、エレベーターのイベントではありません。
次のパラメータがあります。
イベントパラメータ | タイプ | 説明 |
---|---|---|
エレベーター | ElevatorBank.Elevator | 移動者が降りるエレベーター。 |
エレベーターバンク退出時
OnElevatorBankContinueイベントは、移動者がエレベーターバンクを離れ、通常のA*移動を再開するときに起動します。エレベーターバンクのOnTravelerContinueイベントと同時に起動しますが、これは移動者のイベントであり、エレベーターバンクのイベントではありません。
次のパラメータがあります。
イベントパラメータ | タイプ | 説明 |
---|---|---|
エレベーターバンク | ElevatorBank | 移動者が到着したエレベーターバンク。 |