ActionScriptテックラボ

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
参考

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

[Boid理論のテスト]

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

関連記事