人工知能技術に、フロッキングと呼ばれる群れ(flock)の動きをシミュレートするアルゴリズムがあります。フロッキングの理論を利用すると、簡単なコーディングで魚や動物の群れの動きをリアルに表現することができます。
これから紹介するBoid理論は、たった3つのルールだけで群れをシミュレーションすることができます。
- 分離(Separation)
仲間に近づきすぎたら離れる。 - 整列(Alignment)
仲間と同じ方向、同じ速度に合わせて飛ぶ。 - 結束(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理論について詳しく見ていきたいと思います。