MORIKAWA

森川くん、人工知能の本をここで再編集。

<群れの知能>

前回まで考えない知能の代表として、
ゴキブリを紹介してきましたが、
昆虫には、彼のように
1匹オオカミ(ゴキブリ)として生活するものと、
アリやハチのように集団を作って生活するものがいます。
今回は、この「群れの知能」がテーマです。
アリやハチの「社会」を見ていると、
なんだか、とても複雑なルールがあるように見え、
私たち人間の社会と似ている!同じだ!おれは働き蜂だ!!
と感じてしまうことも多いです。
そして、つい、社会を構成するものたちも、
私たちと同じように
「考える知能」の持ち主じゃないかと
思ってしまいがちです。
ところが、ところが、
この一見複雑で高度で知的に見える「群れの動き」が、
実はすっごく簡単なルールで作れてしまうとしたら、
どーしましょう。

上の3段論法
 1:アリやハチの群れの動きは、とても複雑である。
 2:複雑な群れの動きは、
   複雑で高度な知性(ルール)によって作られている。
 3:よって、アリもハチも私たちのように賢いのだ!

の2:以降が破綻してしまいます。
というか、実際、破綻しています。

ということで、今回は、アリやハチじゃないですが、
同じように複雑な動きに見える
「鳥の集団」についてのお話です。

以下、「マッチ箱の脳」の「ニューラルネットワーク」より抜粋

<ボイド>

★鳥や虫たちは何を基準に動いているか

例えばアリの行列、海を泳ぐ魚の群れ、
空を飛ぶ鳥の群れ、草原を走るバッファローの群れ……。
そういう群れの動きを見ていると、
とっても複雑に見えます。
きっと、彼らは彼らなりに、
とても複雑な判断や行動をしているんだろうと
思ってしまいます。

ところが、こうした集団の複雑な動きが、
実は非常にシンプルなルールでできあがっている。
いや、できあがっているかどうかはわからないけど、
少なくとも非常に簡単なルールで、
そういう振る舞いを再現できるんです。

「複雑さとは、単純さの集まりである」
という名言がありますが、
鳥の群れが飛んでいる様子を非常に簡単なルールで
再現してみせた、うまい例がありますので紹介します。

★バードイド、短く言うとボイド

1987年に、グレイグ・レイノルズという人は、
コンピュータ空間上を自由に、
自分の考えで飛び回る鳥
birdoid(バードイド:鳥もどきという意味)
を創りました。
後年、この名前が短くなって、
boid(ボイド)という今の呼び名になりました。

レイノルズは、このボイドが、
本当の鳥たちのように自然に、
しかもおのおの自分の考えで飛び回るように、
次のようなルールを与えました。

◆ルール1:近くの鳥たちと
      飛ぶスピードや方向を合わせようとすること
◆ルール2:鳥たちが多くいる方へ向かって飛ぶこと
◆ルール3:近くの鳥や物体に近づきすぎたら、
      ぶつからないように離れること



ボイドに与えられたルールはたったこれだけです。
しかし、たったこれだけのルールで、
ボイドの群れは、
実際の鳥の群れのように非常に自然な飛び方をしました。
このルールが何を意味しているか
もう少し詳しく説明しましょう。

▼ルール1について
近くにいるボイドと
飛ぶ方向を合わせるようにしなさいというのは、
説明の必要はないですね。

同じ方向に、あまり距離を空けないように
飛んでいけということです。
集団下校のルールと同じですね。
これは、非常に単純な行動で解決されます。
イイ感じの距離より遠ざかりすぎてしまったら、
前を飛んでいるボイドはスピードを遅くする。
後ろを飛んでいるボイドは
スピードを速くするようにするだけです。

▼ルール2について
鳥が多くいる方向というのは、
大ざっぱにいうと群れの中心(重心)方向
ということになります。
ですからこのルールは、
ボイドに群れの中心の方向へ
飛んでいくことを指示しています。

この群れの中心をどう出すかですが、
これは全ボイドの位置(座標)の平均として求めます。

▼ルール3について
ボイドは一番近くにいるヤツや
柱や壁のような障害物に衝突しないような間隔を
取るように心がけます。

もし、ボイド同士が近づきすぎてしまったら、
前を飛んでいるボイドはスピードを速くする。
後ろを飛んでいるボイドは
スピードを遅くするようにします。
障害物、例えば柱とか壁とかに対しては、
それにぶつからないように
方向転換して衝突を避けるようにします。



ボイドに与えられたルールはたったこれだけです。
非常に簡単ですね。

しかし、勘のいい方なら、
即座に次のような質問が頭に浮かんだでしょう。

「じゃあ、次の瞬間、ボイドは、
 いったいどっちの方向へ進むんだ?」って。

確かにルール1に従って、
近くのボイドと同じ方角にしろと言われ、
ルール2に従って、
群れの中心位置の方角にしろと言われています。
さらにルール3では
仲間や障害物にぶつかりそうになったら
方向転換するように言われています。
これらはそれぞれ別の方角への移動を指示しますから、
このままでは矛盾します。

そこで、ボイドは、次の瞬間の方角はこうして決めます。
近くのボイドの方角と、群れの中心位置の方角、
それに衝突を回避する方角、
これらを平均した方角に進む。そのように決めます。

 ボイドがどのような動き方をするか
見られるサイトがありますので、紹介しておきます。
ただし、鳥の形はしていません。
http://www.dias.co.jp/complex/boid/
実は、このボイド、1987年に、
シーグラフというCGの祭典
(正式には、コンピュータグラフィック会議)で、
シリコングラフィックス社の作品
「Stanley and Louise」
という作品名で発表されました。


★よりバードに近づくために
3つのルール以外にも、
ボイドをより本物の鳥に近づけるような
いくつかのアイデアが提案されています。
例えば、ボイド自身に
近くの仲間や群れの中心を見つける能力を
持たせるというアイデアがあります。
具体的には、各ボイドに
「視野」というパラメータを加え、
全方角の仲間を見渡せるヤツ、
前の方向だけの仲間しか見えないヤツなどの
個性を与えます。
また飛ぶ能力にも個性を持たせて、
どのくらいスピードで他のボイドや
障害物に近づいたり離れたりするか、
どのくらいの角度で方向転換するとなども
個体差を持たせてやると、
集団となったときの振る舞いが、
より複雑により自然になるのです。

実際、鳥の群れが、
このようなルールを採用しているかどうかはわかりません。
ひょっとしたら、
全く違うルールで動いているかもしれません。

しかし、こうした単純なルールの組み合わせでも、
一見複雑きわまりないと思える振る舞いを
うまく表現できるという事実は、大変面白いです。

ちなみに、こうした集団を扱う簡単な考え方は、
「群行動生成アルゴリズム」などと呼ばれますが、
CGの世界でも重宝されています。
生き物の集団の行動をCGアニメーションにする場合、
1体、1体にいちいち個性あるアクションを
つけるとなると、
とんでもない時間と労力がかかります。



こんなとき、移動してほしいコースを
先頭の1体にだけ設定し、後の個体は、
上のボイドのようなアルゴリズムで自分で移動するので、
いちいちアクションをつける必要がありません。
経済的にも精神衛生的にも非常にありがたい話です。

実際に、『バットマン・リターンズ』の
ペンギンの集団のシーン、
『ライオンキング』の
バッファローの集団が移動するシーンなどは、
このような方法
(上と全く同じアルゴリズム
 というわけではないでしょうが)
で作られています。

こうした手法は、ゲームの世界でも役立ちそうです。
町の人なんていう、
あまり重要な機能を持ち合わせていない人や
生き物の行動パターンを、
こういったアルゴリズムで作れば、
よりリアルに、より経済的に作ることができるでしょう。

BACK
戻る