Agent の拡張 - crest-cassia/CrowdWalk GitHub Wiki
拡張に関係するAgentクラスの変数・メソッド
EvacuationAgent
- 初期設定
initByConf()
: generation_file に記載されたエージェントの Config (JSON を読み込んだ Term 形式) から、
必要なパラメータ設定を行う。
各クラスごとに再定義されるべき。
- Config は、JSON 形式の generation_file では、"agentType" の "config" に記載される。
- CSV 形式(Ver.1) では、第3カラムにJSON形式でConfigを記載する。
- 移動関係
current_link
: 現在のリンク。
prev_node
: リンク上の後方のノード。(direction によって、current_link の fromNode または toNode)
next_node
: リンク上の前方のノード。(direction によって、current_link の toNode または fromNode)
position
: リンク上の位置。リンクの fromNode からの距離。
- directive関係
isKnownDirective()
: routePlan に含まれる directive が、知っている directive かどうかを判定。
各エージェントクラスで、必要に応じて再定義しなければならない。
pushPlaceTagInDirective()
: directive に含まれる経由点タグ情報を取り出す。
初期設定で、ゴールまでのダイクストラを行うのに必要。
各エージェントクラスで、direcive毎に必要なタグ情報を取り出すよう、このメソッドを再定義しなければならない。
- abstract methods
prepareForSimulation()
: シミュレーションの開始時に呼ばれる。(?)
preUpdate()
:
update()
RunningAroundPerson < EvacuationAgent
- 移動関係
speed
: 移動速度(?)
direction
: リンク上の向き。toNode に向かっていれば、1.0。fromNode に向かっていれば、-1.0。
preUpdate()
: ここで、スピードを決めている。また、スピードに応じて、移動の予約(move_set
)をしている。
move_set()
: 移動先の場所として next_position
を決めている。
- 2引数が expected 用。3引数がそれ以外用。中で
navigate()
を呼んでいる。
3引数の第三引数は、WaitDirective のためにある。
false なら wait に対応する処理をする(次のリンクに移らない)。
- StopTime という機能がここで実装されている。間欠的に stop/go を繰り返すリンク。
タグになにか追加で情報を付加する模様。
これにより、リンクに StopTime という情報が追加される。これにより、間欠的なstop/goを判断。
これらの定義は、OBNode にある。
update()
: preUpdate()
で求めた行動予定を実行する。
実際にはmove_commit()
を呼んでいる。
move_commit()
: position に next_position を代入。
ただし、next_position が負あるいはリンクの長さより大きい時
(リンクを通り過ぎている時)、
次のリンクへ移る計算をする。
その計算は、navigate()
で行なっている。
navigate()
: 次に選ぶべきリンクを決定している。
次に向かうリンクは、sane_navigation()
で行なっている。
sane_navigation()
: 単に sane_navigation_from_node()
を呼ぶのみ。
sane_navigation_from_node()
: コスト最小の分岐を探している。
コスト計算には calcWayCostTo()
を使っている。
calcWayCostTo()
: 予めダイクストラで求めた、ゴールまでの距離。
- ルート関係
class CheckPoint
: 通過した地点(Node)情報。経由時刻などを含む。
route
: 通過した地点情報列。CheckPoint の列。
routePlan
: 計画されている経路。class RoutePlan
のインスタンス。
現在の経過状態を示す indexを中に持つ。
tryToPassNode()
: リンクを終えて、次のリンクに行くノードの通過処理。
中で、calc_next_target()
を呼んでいる。
calc_next_target()
: もしノードを通過中なら、routePlan を1つ進める。
その上で、現状のターゲット(ノードを通過した場合は1つ先のターゲット)を返す。
calc_speed()
: おそらく、social force model に基づき、速度を求めている。
求めた速度は、speed
変数に代入。
WaitRunningAroundPerson < RunningAroundPerson
- 移動関連
preUpdate()
: ここで、WaitDirective の判定を行なっている。
directive によって、doWaitUntil()
, doWaitFor()
を呼び出す。
wait しない場合は super.preUpdate()
、
すなわち RunningAroundPerson の preUpdate()
を実行。
doWaitUntil()
: リンク上のイベントタグを待つ。待っている間は、doWait()
を呼び出す。
doWaitFor()
: 一定時間過ぎるまで待つ。待っている間は doWait()
を呼び出す。
doWait()
: 待つ処理。how によって、scatter()
かpack()
を呼び出す。
scatter()
: できるだけ広がって待つ。計算方法はよくわからない。
pack()
: できるだけ前に詰める。calc_speed()で求めたspeedでできるだけ詰める。
calc_next_target()
: WaitDirective を含めた routePlan での、次のターゲットを見つける処理。
([2014.12.30 I.Noda] 現状で間違っている可能性大)
NaiveAgent < WaitRunningAroundPerson
CapriciousAgent < NaiveAgent
- 移動関係
calcWayCostTo()
: goal までの距離に、ノイズを乗せてコストとする。
ノイズの大きさは、margin というパラメータ。
BustleAgent < NaiveAgent
- 移動関係
calcWayCostTo()
: goal までの距離に、その道の込み具合と、これまでたどった道の忌諱度を加味して返す。
混雑回避、同じ道路を通らないという性質を表すためのもの。