2016年1月8日金曜日

ラングトンのアリを実装してみた[Python]

『心はプログラムできるか』の話の続き。
ライフゲームの話とともに,ラングトンのアリも紹介されていたので実装してみた。この先生蟻コロニー最適化も本の中で紹介してるしアリ好きだな(笑)。というか本の中でアリを飼っている話が出てきていた。

1.ラングトンのアリ

詳細はWikipediaがあるので引用。
平面が格子状に構成され、各マスが白または黒で塗られる。ここで、1つのマスを「アリ」とする。アリは各ステップで上下左右のいずれかのマスに移動することができる。アリは以下の規則に従って移動する。
  • 黒いマスにアリがいた場合、90°右に方向転換し、そのマスの色を反転させ、1マス前進する。
  • 白いマスにアリがいた場合、90°左に方向転換し、そのマスの色を反転させ、1マス前進する。
この単純な規則で驚くほど複雑な動作をする。
ルールが非常に単純(プログラム書くのも簡単)。なのに結構複雑な動きをする。まさに複雑系(よく理解していないケド)。

実際の動画はこんな感じ。
ツイートにも書いたけど,これで自由に絵がかけたら面白いんだけれどなぁ。Wikipediaには二次元チューリングマシンって書いてあるけれど,チューリング完全ってことで良いのだろうか。もし仮にそうならば,ある程度絵がかけるとは思うけど……まぁ良いや。
追記
巻き戻す方向にルールを決めてやればいいだけの話でした。

2.プログラム


こちらのサイトを参考にしました。
ライフゲーム - 人工知能に関する断創録

1 件のコメント:

  1. これだとfor i in range(self.speed):のところでエラーを吐いてしまうのですが、どうすればいいのでしょうか

    返信削除