Boid理論 群行動生成アルゴリズム | 中目黒webデザインとランチブログ

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

人工知能技術に、フロッキングと呼ばれる群れ(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


参考にしたのは下記サイトになります。

Boids Pseudocode

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

[Boid理論のテスト]

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