MATSim実践編――自己中なエージェント1万人を「通勤」させてみる:リタイア直前エンジニアの社会人大学漂流記(6-2)(5/7 ページ)
今回のMATSim(マルチエージェントシミュレーション)実践編では、エージェントの価値観や行動パターンを定義して、「通勤(通学)」させてみます。かなり“人間くさい”価値観を持ったエージェント1万人は、どんな行動を取るのでしょうか。
エージェントの「行動パターン」を定義する
次に、
<module name=" strategy"> (中略) </module>
では、「エージェントが、次のiterationで、どのように行動計画(plan)を変更するか」を定義しています。
つまり、MATSimの「学習ルール」です。
この設定では、エージェントは、
- 80%は保守的
- 10%は経路変更
- 10%は時間変更
を行います。かなり“人間っぽい”設定です。
1. maxAgentPlanMemorySize
<param name="maxAgentPlanMemorySize" value="5" />
これは、「過去のplanを最大5個記憶する」という意味です。
例えば、
- 8:00出発
- 7:45出発
- 別ルート
- 電車利用
- 徒歩増加
などを保持できます。
MATSimのエージェントは、「昔の成功体験」を記憶しています。
2. BestScore (weight=0.8)
<param name="strategyName" value="BestScore"/> <param name="weight" value="0.8"/>
これは、「過去のplanの中で、最もscoreが高かったものを使う」戦略です。
しかもweight=0.8とは、80%の確率で“無難な行動”を選ぶ、ということになります。
例えば、
| plan | 内容 | score |
|---|---|---|
| A | 8:00出発 | -120 |
| B | 7:45出発 | -80 |
| C | 別ルート | -90 |
なら、「Bを採用」します。
つまり、「以前マシだった行動を繰り返す」という、かなり人間っぽい動きです。
3. ReRoute (weight=0.1)
<param name="strategyName" value="ReRoute"/> <param name="weight" value="0.1"/>
これは、「経路だけ変える」戦略です。
つまり、
- 出発時刻はそのまま
- 活動もそのまま
- ただし別の道路を試す
です。
例えば、
- 昨日:国道を使用 → 渋滞
- 今日:裏道を試す
みたいなことをやる。ただし10%の確率でやります。つまり、「たまに冒険する」程度です。
4. TimeAllocationMutator (weight=0.1)
<param name="strategyName" value="TimeAllocationMutator"/>
これは、「活動時間や出発時刻を少し変更する」戦略です。
例えば、
- 08:00出発→ 07:50へ変更
- shop 30分→ 20分へ変更
- work終了→ 少し延長
などを試す。
つまり、「生活時間を少しずらす」です。
これは非常に重要です。なぜなら、MATSimは、「交通だけ」ではなく、「生活スケジュール」そのものを最適化対象にしているからです。
5. この3つを合わせると
エージェントは、
- 80%は、前にうまくいった行動を繰り返す
- 10%は、別ルートを試す
- 10%は、出発時刻や滞在時間を変える
ことになります。
6. これは何を意味しているのか
これ、かなり人間っぽいです。
人間って、
- 基本は昨日と同じ行動
- たまに別ルート
- たまに早起き
- たまに帰宅時間変更
つまりMATSimは、「超知能AI」を作っているわけではなく、むしろ、「昨日より少しマシを探す、保守的な人間」を作っています。
7. 重要なポイント
この設定では、
- 80%が保守
- 20%が探索
です。
つまり、「完全最適化」ではなく、「少しずつ試す」構造になっています。
これは、
- 焼きなまし法
- 遺伝的アルゴリズム
- 強化学習
にも少し似ていますが、MATSimはもっと泥臭いのです。各エージェントが、「まあ、昨日よりマシならいいか」を、永遠に繰り返しているだけです。
Copyright © ITmedia, Inc. All Rights Reserved.