Skip to content
noda50 edited this page Dec 31, 2014 · 14 revisions

拡張に関係する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

  • 移動関係
    • recordTrail() : 経由点の記録。

CapriciousAgent < NaiveAgent

  • 移動関係
    • calcWayCostTo(): goal までの距離に、ノイズを乗せてコストとする。 ノイズの大きさは、margin というパラメータ。

BustleAgent < NaiveAgent

  • 移動関係
    • calcWayCostTo(): goal までの距離に、その道の込み具合と、これまでたどった道の忌諱度を加味して返す。 混雑回避、同じ道路を通らないという性質を表すためのもの。
Clone this wiki locally