いつもやってる本のレビューとは全く関係ありませんが、脳科学者である池谷裕二さんの著書『単純な脳、複雑な「私」』(池谷裕二)の感想(246レビュー) - ブクログ
で紹介されていた、「ラングトンの蟻」についてずっと気になっていたので、コーディングしてみました。
(wiki参照】ラングトンの蟻とは:
平面が格子状に構成され、各マスが白または黒で塗られる。ここで、1つのマスを「アリ」とする。アリは各ステップで上下左右のいずれかのマスに移動することができる。アリは以下の規則に従って移動する。
①黒いマスにアリがいた場合、90°右に方向転換し、そのマスの色を反転させ、1マス前進する。
②白いマスにアリがいた場合、90°左に方向転換し、そのマスの色を反転させ、1マス前進する。
イメージが湧きにくいかもしれませんが、入力として与えるものは、
1. 格子状の平面(各マスは白または黒)
2. アリの向き(上下左右いずれか4方向)
だけで、あとはアリは①と②のルールに従って動き続けるのみ。
‥アタマで想像できますでしょうか?
一番イメージしやすいのは、平面を真っ黒に塗り潰して、アリを上向きに配置させる初期設定。そこからアリは
1. ①に従って右に方向転換し、もともといた場所を白く塗りつぶす。
2. ①に従って右に方向転換し、もともといた場所を白く塗りつぶす。
3. ①に従って右に方向転換し、もともといた場所を白く塗りつぶす。
4. ①に従って右に方向転換し、もともといた場所を白く塗りつぶす。
で、ここまでくると元いた場所からグルッと1周したことになるのですが、ここで元いた場所は1の手順で白く塗りつぶされているので、今度は②のルールに従って左に方向転換することになります。
このように、自らが通った道によって白または黒に反転していくことで、動き方は単純ではなくなっていきます。
①と②のルールだけでここまで複雑に動くものなのか、、と感心します。
‥‥が、、、、、、
「ラングトンの蟻」がとんでもないのが、このルールに従ってアリを10000回程度動かした辺りで起こる異常な行動。
visual studio + openCV 環境で実装してみたところ、見事に発生しました(上記動画参照〕
気持ち悪くて震えます。
そしてどう現象は、背景画素が単色でなく白黒混合であっても成り立つそうで、、、、
定式などは分からないので、どなたか詳しい方がいれば是非この現象について教えて頂きたい、、、
いやーー、数学って本当に不思議です。