HOME>> 行動シミュレータ>> 行動モデル   [[English]]

1 提案する行動モデルの概念

1.1 ルール

MobiREALでは各ノードの行動をルールの並びで記述する.この記述法をCPE記述と呼び, CPE記述で記述された行動モデルをCPEモデルと呼ぶ. ルールとは,(1)条件,(2)確率,(3)行動の3つで構成されており, 条件を満たせば,その条件に対する確率で対応する行動をとる.

例えば,以下のようなルールは 「移動端末のアプリケーションからバーゲンの情報を受け取った ならば確率50%でそのバーゲンをやっている店に向かう」 という行動を表している.

  <条件>アプリケーション(移動端末)からバーゲンの情報を受け取る
  <確率>50%
  <行動>バーゲンをやっている店に向かう

ルールに確率を使用することで同じ条件に対しても 複数の行動をとり得る.

<例> 以下の2つのルールは1つのモデルの中に両方入れることができる

  【ルール1】
     <条件> 目的地に予定していた時間に到着できない
     <確率> 70%
     <行動> (急ぐ)速度を上げる
  【ルール2】
     <条件> 目的地に予定していた時間に到着できない
     <確率> 20%
     <行動> その目的地に行くのをやめて,別の目的地に行く

条件は「目的地に予定していた時間に到着できない,かつ 現在地が目的地から50m以内のところにいる」といった論理式で 表すこともできる.

また,MobiREALでは条件,確率,行動をユーザが簡単に記述できるように 条件や行動に使用できる関数や値をいくつか提供する. どのような関数,値が使用できるかは以下<2.3>を参照.

1.2 CPE記述

CPEモデルは前節で述べたルールを順番に並べることで記述する.

このCPEモデルを用いてノードは以下のように行動を決定する.

  1. 単位時間ごとにCPEモデルのルールを最初から順番に調べていく.
  2. ルールの条件が成立すれば,指定された確率で対応する行動を実行する.
  3. 条件が成立しない,もしくは,条件が成立しても確率によって行動が 実行されなかった場合,次のルールを調べる.
  4. あるルールの行動が実行されれば,それ以降のルールは調べない.
【ルール】 <条件>                 <確率>  <行動>
【ルール1】<目的地に到着した>     <100%>   <Dlistにある目的地(のうちの1つ)へ向かう>
【ルール2】<周囲が混んでいる>     < 30%>   <回り道をする>
【ルール3】<目的地到着が遅れそう> < 80%>   <急ぐ>
【ルール4】<目的地到着が遅れそう> <100%>   <その目的地に行くのを諦めてDlistにある別の目的地に向かう>

上の表を用いて具体的に説明する.
まず,ルール1の条件をチェックする. ルール1の条件が成立すれば, 確率100%で(すなわち必ず)ルール1の行動を実行する.
もし,ルール1の条件が成立しなければ,ルール2の条件をチェックする. ルール2の条件が成立すれば,確率30%でルール2の行動を実行する. ルール2の条件の不成立,または,確率によってルール2の行動が実行されなければ, ルール3をチェックする,といったように行動が実行されなければ次のルールを逐次チェック していく. あるルールの行動が実行された,もしくは全てのルールをチェックしたならば ルールの参照を終了し,前回のステップと同じ速度ベクトルで進む.ただし 衝突回避行動 により,速度ベクトルは変更される場合はある.

また,ルールを記述する上でルールの順番や実行確率にも注意を しなければならない

<例>以下の順番でルールを記述したCPEモデルを考える.

【ルール1】
   <条件> 目的地に到着した
   <確率> 100%
   <行動> Dlistにある目的地(のうちの1つ)へ向かう
【ルール2】
   <条件> 目的地に到着した. かつ,Dlistが空である
            (これから向かう予定の目的地がない)
   <確率> 100%
   <行動> ノードが発生した場所を目的地をしてそこへ向かう. 
            (出発点,家へ戻る)
  

このCPEモデルでは【ルール1】の条件が満たされると,確率が100% なので【ルール1】の行動を確実に実行する. しかし,【ルール2】の条件は【ルール1】の条件を包含 している.CPEモデルではあるルールの行動を実行すれば,それ以降の ルールはチェックしないため,ルール4の条件を調べる時には (【ルール1】の確率が100%なので),【ルール1】の条件を満たして いない場合である.そのため,ルール4の行動を実行することはない.

したがって,

などの工夫が必要である.



2 CPEモデルの具体的な書き方

2.1 ルール記述に用いる変数

実際にルールを記述する際,以下の定義済み変数を用いて記述する. これらの変数は,CPEモデルの内部でのみ参照,更新可能な内部変数と, CPEモデルの外部からも参照,更新可能な外部変数から成り立つ.
また,内部変数はユーザが新しく定義して用いることができる.

内部変数

変数名 説明
dst.p 現在の目的地ポイント(交差点番号)が格納される変数
dst.r 現在の目的地までの経路ポイント列が格納されるリスト
dst.t 現在の目的地への到着予定時刻が格納される変数
dst.s 現在の目的地での滞在時間が格納される変数
Dlist その後訪れる予定の目的地群を保持するリスト

【ユーザ定義内部変数の例】
目的地で滞在していることを表すフラグ staying
目的地での滞在を延長していることを表すフラグ overstaying
目的地に到着した時刻を入れておく変数 sst


外部変数

変数名 説明
T シミュレーション時刻
P 現在位置
V 速度ベクトル


2.2 提供している条件や行動のライブラリ

CPEモデルを容易に記述可能にするため,条件や行動で頻繁に使われると 考えられるものをライブラリとして提供している.

→関数一覧

これらの他にも有用と考えられる関数を提供していく予定である.
また,ユーザが新しく関数を定義して用いることも可能である.

2.3 ルールの記述法

ルールは主に行動シミュレータで提供している関数を用いる. 行動シミュレータはCPEモデルを書く上で必要だろうと思われる関数を ライブラリとして提供する(予定である).

ルールはC++における各行動クラスのメンバ関数ruleとして記述する. 一つのルールは以下のフォーマットに従う.

if (条件 && 確率) {行動; return;}
そしてルールの列をCPEモデルとして記述していく.

[例]次のルールを記述してみよう.

  【ルール1】
     <条件> 目的地への到着予定時刻に遅れそうだが,急げば間に合う.
     <確率> 70%
     <行動> 速度を0.5m/s上げる(急ぐ)
  【ルール2】
     <条件> 目的地への到着予定時刻に間に合わない
     <確率> 20%
     <行動> その目的地に行くのをやめて,次の目的地に行く
  

【ルール1】
目的地への到着予定時刻に遅れそうだが,急げば間に合う場合を判定するには関数lateを用いる. また,速度を上げる関数はfastである.
したがって,【ルール1】は次のように記述することができる (ここでは時間単位sec,距離単位mに設定してあると仮定).

if (late(P, V, T, dst) && prob(70)) {V=fast(V, 0.5, dst); return;}

【ルール2】
目的地への到着予定時刻に間に合わない場合を判定するには関数missを用いる. リストDlistには訪れる予定の目的地群(現在の目的地を除く)が格納されているので, 今の目的地に行くのをやめて次の目的地へ向かうにはDlistの先頭から要素を一つ取り出し, 変数dstへ代入すればよい.そして次の目的地までの経路を計算をすればよい. したがって,【ルール2】は次のように記述することができる.

if (miss(P, V, T, dst) && prob(20)) {
  dst=pop(Dlist);
  dst.r=shortest_path(P, dst.p);
  return;
}

2.4 ソース記述例

2.3 で示した変数や関数を使用し,複数の目的地を巡回する ようなCPEモデルを記述した. このCPEモデルは次のような特性を持つ汎用モデルである.

なお,ここでは時間単位sec,距離単位mに設定されていると仮定する.

→ソース(一部抜粋)


3 サンプル画像

Under Construction. Please wait for a while.