Autonomous Agents: 個々の行動から複雑なComplex Systemsまで

Autonomous Agentとは?

人工知能やコンピュータグラフィックスにおいて、Autonomous Agentとは、リーダーやグローバルな計画に影響されることなく、環境内でどのように行動するかを自ら決定できるエンティティです。重要な構成要素は3つあります。

アリやシロアリのコロニーの人工シミュレーションは、Autonomous Agentシステムの優れたデモンストレーションです。ミッチェル・レズニックの『タートル、ターマイト、トラフィックジャム』(Turtles, Termites, and Traffic Jams, Bradford Books, 1997)を読むことをお勧めします。

VehicleとSteering

1980年代後半、コンピュータ科学者のCraig Reynoldsは、アニメーションキャラクターのためのSteering Behaviorsを開発しました。これらのビヘイビアにより、個々の要素は、逃げる、さまよう、到着する、追跡する、避けるなどの戦略を用いて、デジタル環境を現実的な方法でナビゲートできます。その後、1999年の論文「Steering Behaviors for Autonomous Characters」で、ReynoldsはAutonomous Agentを説明するために「Vehicle」という用語を使用しました。

したがって、Autonomous Agentクラスを Vehicle と名付けます。

Reynoldsは、理想化されたVehicleの動きを3つの層 (layer)で説明しました。

Seek

次のシナリオを考えてみましょう:Vehicleがターゲットを探しています。

Vehicleが自身の状態(速度と現在の移動方向)と環境(ターゲットの位置)の知覚に基づいて、ターゲットに向かって操縦するためのインテリジェントな決定を下すようにしたいです。

望ましい速度は、Vehicleの現在位置からターゲットの位置までのベクトル p5.Vector.sub(target, position) として設定できます。このベクトルの大きさは最高速度に設定されるため、Vehicleに maxspeed プロパティを追加する必要があります。

$$ \text{steering force} = \text{desired velocity} - \text{current velocity} $$

ステアリング力は、望ましい速度から現在の速度を引いたものに等しいです。

また、Vehicleが望ましい速度にすぐに変更できるかどうかを決定するために、Vehicleの操縦性も考慮する必要があります。これを行うには、Vehicleに maxforce プロパティを追加して、ステアリング力の大きさを制限する必要があります。

すべてをまとめると、p5.Vector ターゲットを受け取り、そのターゲットに向かうステアリング力を計算する seek() というメソッドを作成できます。

JAVASCRIPT
seek(target) {
  let desired = p5.Vector.sub(target,this.position);
  desired.setMag(this.maxspeed);
  let steer = p5.Vector.sub(desired, this.velocity);
  steer.limit(this.maxforce);
  this.applyForce(steer);
}
クリックして展開し、詳細を表示

Arrive

Vehicleがターゲットに非常に近い場合、「オーバーシュート」を避けるために、望ましい速度をターゲットまでの距離に比例させることができます。例えば、desired.mult(0.05) のようにします。

Reynoldsは、より複雑なアプローチを説明しました。ターゲットの周りに半径rの円を想像してください。Vehicleがこの円の内側にある場合、徐々に減速し、ターゲットで速度が0になります。

JAVASCRIPT
let d = desired.mag();  // ターゲットを指すベクトルの大きさ
if (d < 100) {
  let m = map(d, 0, 100, 0, this.maxspeed);
  desired.setMag(m);
} else {
  desired.setMag(this.maxspeed);
}
クリックして展開し、詳細を表示

Wander

SeekとArriveはどちらも、各ビヘイビアに対して単一のベクトル、つまり望ましい速度を計算すると見なすことができます。Reynoldsが提案したすべての誘導ビヘイビアは、このパターンに従います。

Wanderの目標はランダムな動きではなく、しばらく一方向に移動してから、少し別の方向にさまようという感覚です。次のフレームの方向は前のフレームの方向に関連しているため、各フレームでランダムな操縦方向を生成するよりも興味深い動きが生まれます。

まず、Vehicleは前方の固定距離(現在の速度の方向)に将来の位置を予測します。次に、その位置を中心として半径rの円を描き、円周上の点をランダムに選択します。この点は、各フレームで円の周りをランダムに移動し、Vehicleのターゲットとなるため、その望ましい速度はその方向を指します。

Wanderビヘイビアは、Vehicleの前方の円周上のランダムな点をターゲットとして扱います。

ランダム性を利用してVehicleのステアリングを駆動しますが、このランダム性を円で制約することで、Vehicleの動きがぎくしゃくしたり、完全にランダムに見えたりするのを防ぎます。

Flow-field following

Flow-fieldとは何ですか?キャンバスをグリッドと見なし、各セルに方向ベクトルがあると想像してください。Vehicleがキャンバスを横切って移動するとき、「ねえ、私の下にある矢印は何ですか?それが私が望む速度です!」と尋ねます。

パーリンノイズを使用すると、ノイズ値を0〜1から0〜2πの角度にマッピングできます(ただし、パーリンノイズは正規分布しているため、左に移動する傾向があります)。

JAVASCRIPT
let xoff = 0;
for (let i = 0; i < this.cols; i++) {
  let yoff = 0;
  for (let j = 0; j < this.rows; j++) {
    let angle = map(noise(xoff, yoff), 0, 1, 0, TWO_PI);
    this.field[i][j] = p5.Vector.fromAngle(angle);  // 角度から単位ベクトルを生成
    yoff += 0.1;
  }
  xoff += 0.1;
}
クリックして展開し、詳細を表示

Path Following

Simple Path Following

Path Followingには、パス、Vehicle、将来の位置、法線、およびターゲットが必要です。

パスとは何ですか?簡単な方法は、パスを一連の接続された点として定義することです。パスには半径があり、これは道路の幅です。

現在の方向に沿って将来の位置を予測します。ステアリング力は、Vehicleがパスから逸脱した場合にのみ適用する必要があります。

法線点を見つけ、法線点の前にターゲットを設定し(ターゲットはパス上にあります)、最後に望ましい速度を計算します。

Path Following with Multiple Segments

重要なのは、パスに沿ってターゲットポイントを見つける方法です。つまり、最初に正しい線分を見つけてから、その線分上の法線点を計算する必要があります。

Reynoldsが提案した解決策は、パス上にある最も近い法線点を選択することです。

Complex Systems

論理的な次のステップとして、エージェントは物理的な環境だけでなく、仲間のエージェントの行動も知覚し、それに応じて行動できる必要があります。

Complex Systemは、しばしばその部分の総和以上のシステムとして定義されます。システムの個々の要素は非常に単純で理解しやすいかもしれませんが、システム全体の振る舞いは非常に複雑で、インテリジェントで、予測が困難な場合があります。

小さな這うアリを想像してみてください。アリはAutonomous Agentです。環境を知覚し(触角を使って化学信号の方向と強さに関する情報を収集します)、これらの信号に基づいて移動の決定を下すことができます。しかし、単独で行動する1匹のアリが巣を作ったり、食物を集めたり、女王を守ったりすることができますか?アリは、直接の環境しか知覚できない単純なユニットです。しかし、アリのコロニーはComplex Systemであり、協調して働く超個体であり、その構成要素は困難で複雑な目標を達成するために協力します。

Complex Systemを構築するための3つのコア原則:

  1. 単純なユニット間の短距離関係:環境の知覚が制限されています。
  2. 単純なユニットは並行して動作します:各サイクルで、各ユニットは独自のステアリング力を計算します。
  3. システム全体がEmergenceを示します:複雑な行動、パターン、および知性は、単純なユニット間の相互作用から現れる可能性があります。この現象は、アリのコロニー、渡りのパターン、地震、雪の結晶など、自然界で発生します。

Complex Systemの他の3つの特徴は、議論を組み立て、ソフトウェアシミュレーションのガイドラインを提供するのに役立ちます。これはあいまいな特徴のセットであり、すべてのComplex Systemがすべてを持っているわけではありません。

  1. 非線形性:Complex Systemのこの側面は、しばしばバタフライ効果と呼ばれ、カオス理論の研究のパイオニアである数学者で気象学者のEdward Norton Lorenzに由来します。初期条件の変化と結果の間に線形関係がないため、非線形と呼ばれます。初期条件の小さな変化が結果に大きな影響を与える可能性があります。多くの0と1で構成されるシステムであっても、1ビットを変更するだけで、結果は完全に異なります。非線形システムは、カオスシステムのスーパーセットです。
  2. 競争と協力:構成要素の間には競争と協力の両方が存在します。
  3. フィードバック:Complex Systemには、システムの出力をシステムにフィードバックするループが含まれていることが多く、その動作に正または負の方向に影響を与えます。

Flocking

Flockingは、鳥、魚、昆虫など、多くの生物に見られる群れの動物の行動です。1986年、ReynoldsはFlocking行動のコンピュータシミュレーションを作成し、そのアルゴリズムを論文Flocks, Herds, and Schools: A Distributed Behavioral Modelで文書化しました。

Reynoldsは、Flockingシステムの要素を説明するために、boid(鳥のようなオブジェクトを指す架空の言葉)という用語を使用しました。

Flockingの3つのルール:

これらの単純なローカルルールは、システムレベルで自然で現実的なFlockingパターンを形成できます。

著作権表示

著者: Aspi-Rin

リンク: https://blog.aspi-rin.top/ja/posts/autonomous-agents-%E5%80%8B%E3%80%85%E3%81%AE%E8%A1%8C%E5%8B%95%E3%81%8B%E3%82%89%E8%A4%87%E9%9B%91%E3%81%AAcomplex-systems%E3%81%BE%E3%81%A7/

ライセンス: CC BY 4.0

This work is licensed under a Creative Commons Attribution 4.0 International License. Please attribute the source.

検索を開始

キーワードを入力して記事を検索

↑↓
ESC
⌘K ショートカット