[エレベーターバンク]パネル
[エレベーターバンク]パネルは、バンク内のエレベーターのロジックを定義します。
[エレベーターバンク]パネルには、次のプロパティがあります。
最大速度、加速度、減速
エレベーターバンクでのエレベーターの速度設定を定義します。
ドアの開閉時間
エレベーターのドアの開閉時間を定義します。「開」とは、エレベーターがある階に到着してから、最初の人が乗降を始めるまでの時間を指します。「閉」とは、最後の人が乗降を終えてから、エレベーターが次の階に向けて移動を開始するまでの時間を指します。
待ち時間
エレベーターがドアを開いたままその階にとどまる最短時間を定義します。
最大進入/退出数
エレベーターに同時に乗降できる人の最大数を定義します。この値と[入退出時間]プロパティの組み合わせによって、複数の人がエレベーターの乗降に要する合計時間が決まります。
乗降のアルゴリズム
エレベーターバンクは、エレベーターの乗降のシーケンスにシンプルなアルゴリズムを使用しています。1人の入退出(乗降)時間をeで表し、同時に入退出する人の数をsで表すと、e/sによって、ある人が乗降を始めてから次の人が乗降を始めるまでの時間が決まります。たとえば、入退出時間が5秒で、同時に入退出する人の数が2の場合、ある人が降車を始めてから次の人が降車を始めるまでの時間は2.5秒になります。複数の人が降車しなければならない場合、たとえば開始時間が100であれば、最初の人は時間100の時点で降車を始めます。2番目の人は時間102.5の時点で降車を始めます。3番目の人は時間105の時点で降車を始めます。同時に、最初の人は降車を完了します。このシナリオでは、たとえば5人が降車しなければならない場合、最初の人の降車開始が時間100の時点であれば、最後の人の降車完了は時間115の時点となります。
エレベーターの乗降では、その階で降車することになっている人がすべて先に降車します。すべての人が降車を終えた後で、乗車の必要のある人々が乗車を開始します。つまり、降車と乗車は同時には発生しません。先に降車し、その後で乗車します。
エレベーター容量
エレベーターの定員を定義します。[歩行者のキャパシティ使用量]プロパティの単位で定義します。
歩行者のキャパシティ使用量
1人の移動者が占めるエレベーターの面積を定義します。デフォルトは、移動者自身の占有面積(x/y footprint)と移動者の荷物の占有面積の合計です。
入退出時間
1人がエレベーターの乗降に要する時間を定義します。この時間と[# Simultaneous Entries/Exits]プロパティの組み合わせによって、複数の人がエレベーターの乗降に要する合計時間が決まります。
要求リスト プル クエリ
利用可能なエレベーターが次の目的階を判断するために使用するクエリを定義します。
エレベーターバンクは、現在アクティブなリクエストのリストを管理しています。たとえば、エレベーターバンクの乗り場またはエレベーターの中で押された(点灯された)ボタンに対応するリクエストを考えてみましょう。エレベーターバンクに到着した人が、上下いずれかの方向のボタンを押します。これらのボタンを押すと、エレベーターにその階への移動を求める新しいリクエストが作成されます。さらに、エレベーターに乗車した人が、目的階のボタンを押します。すると、そのエレベーターに目的階への移動を求める新しいリクエストが作成されます。
エレベーターバンクは、すべてのアクティブなリクエストを参照するリストを内部的に保有しています。エレベーターは、次の目的階を判断するとき、ここで定義されたクエリを使用してこのリストからプルし、プルオペレーションで選択された階に移動します。
リクエストリストのプロパティを表示するには、[リストのプロパティを要求...]を押します。リクエストの現在のリストを表示するには、[リクエストリストを表示...]を押します。
エレベーターバンクのリクエストリストは、リクエストリストのプルクエリを定義するときにカスタムエイリアスを使用します。つまり、デフォルトの語である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句は、エレベーターに最も近いリクエストを優先します。
リストのプロパティを要求
内部リクエストリストのプロパティウィンドウが開きます。
リクエストリストを表示
内部リクエストリストの[エントリ]ウィンドウが開きます。