ActionScriptテックラボ

Boid理論 群行動生成アルゴリズム

2009年7月21日

人工知能技術に、フロッキングと呼ばれる群れ(flock)の動きをシミュレートするアルゴリズムがあります。フロッキングの理論を利用すると、簡単なコーディングで魚や動物の群れの動きをリアルに表現することができます。

これから紹介するBoid理論は、たった3つのルールだけで群れをシミュレーションすることができます。

  1. 分離(Separation)
    仲間に近づきすぎたら離れる。
  2. 整列(Alignment)
    仲間と同じ方向、同じ速度に合わせて飛ぶ。
  3. 結束(Cohesion)
    群れの中心に向かって飛ぶ。

この3つの力を合計して、各個体が動く方向と速度を算出します。

計算式は下記のものが公表されています。

1.分離(Separation)
PROCEDURE rule1(boid bJ)
Vector pcJ
FOR EACH BOID b
IF b != bJ THEN
pcJ += b.position
END IF
END
pcJ /= N-1
RETURN (pcJ - bJ.position) / 100
END PROCEDURE
2.整列(Alignment)
PROCEDURE rule2(boid bJ)
Vector c = 0;
FOR EACH BOID b
IF b != bJ THEN
IF |b.position - bJ.position| < 100 THEN
c -= (b.position - bJ.position)
END IF
END IF
END
RETURN c
END PROCEDURE
3.結束(Cohesion)
PROCEDURE rule3(boid bJ)
Vector pvJ
FOR EACH BOID b
IF b != bJ THEN
pvJ += b.velocity
END IF
END
pvJ = pvJ / N-1
RETURN (pvJ - bJ.velocity) / 8
END PROCEDURE

上記公式で得られた値を下記のように計算して最終的な位置を計算します。

PROCEDURE move_all_boids_to_new_positions()
Vector v1, v2, v3
Boid b
FOR EACH BOID b
v1 = rule1(b)
v2 = rule2(b)
v3 = rule3(b)
b.velocity = b.velocity + v1 + v2 + v3
b.position += b.velocity
END
END PROCEDURE
参考

FlashのActionScriptで、Boid理論を使って群れを表現してみました。 マウスの後を追うようにしてあります。

[Boid理論のテスト]

次回はもう少しBoid理論について詳しく見ていきたいと思います。

Comment

コメントを残す

メールアドレスが公開されることはありません。

関連記事

リズムファクトリーはホームページの制作会社です。
ホームページ制作に関するご要望・ご相談はこちらからどうぞ。

株式会社リズムファクトリーでは現在、下記の職種について人材募集を行っております。
求人をクリックすると「求人情報サイトFind Job!」の求人詳細画面が開きますので、こちらからご応募下さい。

提供 : Webな人の求人情報サイト Find Job!