知能を実現する方法の一つとして、創発的(または相乗的)アプローチがあります。このアプローチは、多くの比較的単純なエージェントの組み合わせた行動が、システム全体としてより複雑(または知的)な行動を生み出す可能性があるという事実に基づいています。理論的には、集合知、創発主義、進化的サイバネティクスの原則に基づいており、これらは、低レベルのシステムを適切に組み合わせることで高レベルのシステムが付加価値を得る(いわゆるメタシステム移行の原則)と述べています。
マルチエージェントシステムの方向性は、1990年代にインターネットと分散システムの成長に応じてAIの分野で登場しました。古典的なAIの教科書の一つであるArtificial Intelligence: A Modern Approachは、マルチエージェントシステムの観点から古典的なAIを捉えています。
マルチエージェントアプローチの中心となるのはエージェントという概念です。エージェントは、ある環境に存在し、その環境を認識し、行動を起こすことができる存在です。この定義は非常に広範であり、エージェントにはさまざまな種類や分類があります。
- 推論能力による分類:
- 反応型エージェントは通常、単純なリクエストとレスポンスの行動を持つ
- 熟慮型エージェントは論理的な推論や計画能力を使用する
- コードの実行場所による分類:
- 静的エージェントは専用のネットワークノードで動作する
- 移動型エージェントはネットワークノード間でコードを移動できる
- 行動による分類:
- 受動型エージェントは特定の目標を持たない。外部刺激に反応することはできるが、自ら行動を起こすことはない。
- 能動型エージェントは追求する目標を持つ
- 認知型エージェントは複雑な計画や推論を含む
現在、マルチエージェントシステムは多くのアプリケーションで使用されています。
- ゲームでは、多くのノンプレイヤーキャラクターが何らかのAIを使用しており、知的エージェントと見なすことができる
- 映像制作では、群衆を含む複雑な3Dシーンのレンダリングは通常、マルチエージェントシミュレーションを使用して行われる
- システムモデリングでは、マルチエージェントアプローチを使用して複雑なモデルの行動をシミュレートする。例えば、マルチエージェントアプローチはCOVID-19の世界的な感染拡大を予測するために成功裏に使用された。同様のアプローチは都市の交通をモデル化し、交通規則の変更に対する反応を観察するためにも使用できる。
- 複雑な自動化システムでは、各デバイスが独立したエージェントとして機能し、システム全体をよりモノリシックでなく、より堅牢にする。
私たちはマルチエージェントシステムについて深く掘り下げることはしませんが、マルチエージェントモデリングの一例を考えてみましょう。
NetLogoは、Logoプログラミング言語の改良版に基づいたマルチエージェントモデリング環境です。この言語は子供たちにプログラミングの概念を教えるために開発され、タートルと呼ばれるエージェントを制御することができます。このタートルは移動しながら後ろに軌跡を残すことができ、複雑な幾何学的図形を作成することができます。これにより、エージェントの行動を視覚的に理解することができます。
NetLogoでは、create-turtlesコマンドを使用して多くのタートルを作成できます。その後、すべてのタートルに対して何らかのアクションを命令することができます(以下の例では、10ポイント前進する)。
create-turtles 10
ask turtles [
forward 10
]
もちろん、すべてのタートルが同じことをするのは面白くありません。そのため、特定のポイント付近にいるタートルのグループにaskコマンドを使用して命令することができます。また、breed [cats cat]コマンドを使用して異なる種類のタートルを作成することもできます。ここでcatは種類の名前であり、単数形と複数形の両方を指定する必要があります。これは、異なるコマンドが明確さのために異なる形を使用するためです。
✅ NetLogo言語自体を学ぶことはしませんが、興味がある場合は素晴らしいBeginner's Interactive NetLogo Dictionaryリソースを訪れてください。
NetLogoをダウンロードしてインストールし、試してみることができます。
NetLogoの素晴らしい点は、試すことができる動作するモデルのライブラリが含まれていることです。File → Models Libraryに移動すると、多くのカテゴリのモデルを選択できます。
Dmitry Soshnikovによるモデルライブラリのスクリーンショット
モデルの一つを開くことができます。例えば、Biology → Flockingを選択してください。
モデルを開くと、NetLogoのメイン画面に移動します。ここでは、有限の資源(草)を考慮した狼と羊の個体数を記述するサンプルモデルを見てみましょう。
Dmitry Soshnikovによるスクリーンショット
この画面では以下が確認できます。
- インターフェースセクションには以下が含まれます:
- エージェントが存在するメインフィールド
- ボタンやスライダーなどのさまざまなコントロール
- シミュレーションのパラメータを表示するためのグラフ
- コードタブにはNetLogoプログラムを入力するエディタが含まれています
ほとんどの場合、インターフェースにはSetupボタン(シミュレーション状態を初期化する)とGoボタン(実行を開始する)が含まれています。これらはコード内の対応するハンドラーによって処理され、以下のように見えます。
to go [
...
]
NetLogoの世界は以下のオブジェクトで構成されています。
- エージェント(タートル)はフィールドを移動し、何かを行うことができます。
ask turtles [...]構文を使用してエージェントに命令し、角括弧内のコードはすべてのエージェントによってタートルモードで実行されます。 - パッチはフィールドの正方形の領域で、エージェントが存在します。同じパッチ上のすべてのエージェントを参照したり、パッチの色やその他のプロパティを変更することができます。また、
ask patchesを使用してパッチに何かを行わせることもできます。 - オブザーバーは世界を制御するユニークなエージェントです。すべてのボタンハンドラーはオブザーバーモードで実行されます。
✅ マルチエージェント環境の魅力は、タートルモードやパッチモードで実行されるコードがすべてのエージェントによって同時に並行して実行されることです。そのため、少しのコードを書いて個々のエージェントの行動をプログラムすることで、シミュレーションシステム全体の複雑な行動を作り出すことができます。
マルチエージェント行動の例として、**群れ行動**を考えてみましょう。群れ行動は、鳥の群れが飛ぶ様子に非常に似た複雑なパターンです。鳥が飛ぶ様子を見ていると、何らかの集団的なアルゴリズムに従っているように見えたり、集合知を持っているように思えるかもしれません。しかし、この複雑な行動は、各個体のエージェント(この場合は鳥)が近距離にいる他のエージェントを観察し、以下の3つの単純なルールに従うことで生じます。
- 整列 - 近隣のエージェントの平均的な進行方向に向かって進む
- 結束 - 近隣の平均位置に向かって進む(長距離の引力)
- 分離 - 他の鳥に近づきすぎた場合、離れるように動く(短距離の反発)
群れ行動の例を実行してその動作を観察することができます。また、分離の度合いや視野範囲などのパラメータを調整することもできます。視野範囲を0に減らすと、すべての鳥が盲目になり、群れ行動が停止します。分離を0に減らすと、すべての鳥が一直線に集まります。
✅ コードタブに切り替えて、群れ行動の3つのルール(整列、結束、分離)がコード内でどのように実装されているかを確認してください。視界内にいるエージェントのみを参照している点に注目してください。
以下のような興味深いモデルをいくつか試してみることができます。
- Art → Fireworksは、花火が個々の火の流れの集合的な行動として考えられる様子を示します
- Social Science → Traffic BasicおよびSocial Science → Traffic Gridは、交通信号の有無にかかわらず、1Dおよび2Dグリッドでの都市交通のモデルを示します。シミュレーション内の各車両は以下のルールに従います:
- 前方のスペースが空いている場合 - 加速(一定の最大速度まで)
- 前方に障害物が見える場合 - ブレーキ(運転者がどれだけ遠くまで見えるかを調整可能)
- Social Science → Partyは、カクテルパーティ中に人々がどのように集まるかを示します。グループの幸福度が最も速く増加するパラメータの組み合わせを見つけることができます。
これらの例からわかるように、マルチエージェントシミュレーションは、同じまたは類似の論理に従う個々の個体で構成される複雑なシステムの行動を理解するための非常に有用な方法となり得ます。また、コンピュータゲーム内のNPCや3Dアニメーションの世界内のエージェントなど、仮想エージェントを制御するためにも使用できます。
上記で説明したエージェントは非常に単純で、環境の変化に対して何らかのアルゴリズムを使用して反応します。このようなエージェントは反応型エージェントと呼ばれます。しかし、時にはエージェントが推論し、行動を計画することがあり、その場合は熟慮型と呼ばれます。
典型的な例として、人間からの指示を受けて休暇ツアーを予約する個人エージェントがあります。インターネット上に存在する多くのエージェントがそれを助けることができると仮定します。このエージェントは他のエージェントに連絡し、利用可能なフライトや異なる日付のホテル料金を確認し、最良の価格を交渉しようとします。休暇計画が完了し、所有者によって確認されると、予約を進めることができます。
これを実現するために、エージェントは通信する必要があります。通信を成功させるためには以下が必要です。
- Knowledge Interchange Format (KIF)やKnowledge Query and Manipulation Language (KQML)などの知識を交換するための標準言語。これらの言語は発話行為理論に基づいて設計されています。
- 交渉のためのプロトコルを含む必要があり、さまざまなオークション形式に基づいています。
- 共通のオントロジーを使用し、同じ概念を参照してその意味を理解できるようにする
- さまざまなエージェントが何をできるかを発見する方法も必要であり、これも何らかのオントロジーに基づいています
熟慮型エージェントは反応型エージェントよりもはるかに複雑です。環境の変化に反応するだけでなく、行動を開始することもできなければなりません。熟慮型エージェントの提案されているアーキテクチャの一つに、Belief-Desire-Intention (BDI)エージェントがあります。
- Beliefsはエージェントの環境に関する知識のセットを形成します。知識ベースやルールのセットとして構造化され、エージェントが環境内の特定の状況に適用することができます。
- Desiresはエージェントが何をしたいか、つまりその目標を定義します。例えば、上記の個人アシスタントエージェントの目標はツアーを予約することであり、ホテルエージェントの目標は利益を最大化することです。
- Intentionsはエージェントが目標を達成するために計画する具体的な行動です。行動は通常、環境を変化させ、他のエージェントとの通信を引き起こします。
マルチエージェントシステムを構築するためのプラットフォームとしてJADEなどがあります。この論文には、マルチエージェントプラットフォームのレビュー、マルチエージェントシステムの簡単な歴史、およびそのさまざまな使用シナリオが含まれています。
マルチエージェントシステムは非常に多様な形を取り、多くの異なるアプリケーションで使用される可能性があります。 これらはすべて、個々のエージェントの単純な行動に焦点を当て、相乗効果によってシステム全体のより複雑な行動を実現する傾向があります。
このレッスンを

