今回は以前さくらまち内で紹介し、荒木代表にしかウケなかった話題を公開いたします。
一般にアルゴリズムは「処理手順」、「計算手順」という訳をされるそうで、なんだか厳めしい感じですよね。日本語だとかっこいい感じですが、現在は英語でおしゃれイズムみたいな語呂でアルゴリズムって単語が定着しているの私は好きだなぁ(?)
アルゴリズムの語源
上記の通り、アルゴリズムはある問題を解決するための一般化された手順のことを指し、フローチャートなどでその手順を筆記できることから機械への命令に使われることが多いです。
その語源は 、9世紀頃のヨーロッパに発展した数学を伝えた数学者アル=フワーリズミー(al-kuwarizmiyy)が由来とされる。
アルゴリズムの中でも有名で、見てても楽しいのは「ソート」です。
「ソート」は「整理」や「並べ替え」と訳され、大量のデータをある規則によって順番に整列させる方法で、参考で示した動画では「規則=棒の長さ」とし、棒が整列していく様子を見てスッキリした気分になることでしょう。
参考:
【Unity】ソートアルゴリズム12種を可視化してみた – Qiita
アルゴリズムとは – コトバンク (kotobank.jp)
鳥の群れを再現するアルゴリズム
今回のテーマは、「ボイド(BOIDS)」!
辞書的には「人工生命プログラム」と表現され、CGアニメーションにおいて鳥の群れを再現するために、1987年アメリカのプログラマーであるCraing Raynoldsさんが開発しました。
※名称は「鳥もどきbird-oid」から c.f.ヒューマノイド
ボイドを数値も変えながら、実際にシミュレーションできるサイトを見つけたのが、このブログの動機になりました。
皆さんにも試していただくべく、URLをご紹介します。
『Flocking boids』https://bl.ocks.org/veltman/995d3a677418100ac43877f3ed1cc728
【ボイドにおける法則】
ボイドの法則は3つの法則から成り立つ、シンプルなものです。
複数の動物がいたとき、それぞれの動物が近くの個体について
- 引き離し:ぶつからないようにする
- 整列 :速度と方向を合わせる
- 結合 :群れの中心(個体の多い方向)へと向かう
以上の3つ法則の強弱や下に示すその他の指標の度合いを変更することによって、群れの形は大きく異なります。
群れの中心へと向かう力が強いと、小さな群れが動かずその場にとどまるので「自分の学生時代からの友達の会話が懐古ばかりでこのような感じだなぁ」と感じたり、方向を合わせる力が強いと、群れというよりは流れのようなものが形成されて「世の流行はこのような感じか…あ、今サブカルチャーの方に合流した個体がいたぞ!私が沼に引きずり込んだアイツじゃないか!」とはしゃげたりと形成された群れを見て考察する楽しさもあります。
ぜひ遊びつつ、現実と見比べてみてください!
他の指標
flockmateRadius:群れの半径
separationDistance:個体同士の距離
maxVelocity:個体の最高速度
cohesionForce:個体が中心に向かう力
alignmentForce:個体が同じ進行方向に向かう力
separationForce:ある個体が他の個体と離れる力
numBoids:シミュレーションする個体の総数