スクリーンショット_2015-10-16_11.32.14

趣味としての人工生命づくり 第一回

●人工生命って?

人工生命ってちょっとSFチックな感じがする言葉ですね。なんだか未来的なイメージがある反面うさんくさい気もします。
人工生命(Artificial life)という言葉が使われるようになったのは、1980年代の後半のことです。だいたいパソコンの普及と同じ頃です。
そもそも、人工生命ということを提唱したアメリカのC.ラングトンは、大きなスーパーコンピュータではなくapple Ⅱという小さなパソコンを使ってプログラムを作っていました。

人工生命を研究している人には、コンピューターの研究者もいれば、経済学者も芸術家も、もちろん生物学者もいます。そのため一口に人工生命といってもその中身は結構バラバラです。
でもおおざっぱに言えば人工的な手段を使って生命現象を再現することといえます。

●スターロゴで人工生命をつくろう

人工生命の分野は、まだ生まれたばかりで、取り組んでいる人はそれほど多くありません。しかも研究に必要なのは、パソコン1つ。私たち素人にも何か新しい発見をする可能性が十分残されています。

しかも、スターロゴというソフトをつかえば、はじめてプログラムをするような中学生でも簡単に人工生命をつくることができます。スターロゴは無料で手に入ります。
ただ、外国のものなので、説明書もすべて英語ですが、順番にみればだいたい使えるようになると思います。

StarLogo(スターロゴ)はLOGO(ロゴ)という教育用プログラミング言語がもとになっています。
logoはタートルと呼ばれるキャラクターに命令をあたえて、絵を書いたり、ちょっとしたゲームも作ることができます。
日本語でプログラミングできる、ドリトルというフリーウェアーもあるので遊んでみるのもいいと思います。

●スターロゴをダウンロードする

StarLogo(スターロゴ)の一種である「NetLogo」(ネットロゴ)はノースウェスタン大学のホームページから無料でダウンロードすることができます

NetLogoはJava(ジャバ)という、いろいろなパソコンで動くプログラムで作られているので、マッキントッシュでもウィンドウズでも同じように使うことができます。

ここをクリックするとダウンロードのページにジャンプします。

画像1


すると登録画面が出てくるので、必要なことを書いていきます。

Virsion: のところはそのままでいいでしょう。
Name: に自分の名前をローマ字で入力します。
Organization: は会社や学校名を入力します。書かなくてもかまいません。
E-mail: 自分のメールアドレスを入力します。バージョンアップなどの情報が送られてきます。
Comments: 自己紹介などのコメントを英語で書きます。書かなくてもかまいません。

書き終わったらダウンロードボタンを押します。

きちんと登録されると下のようなページに変わります。

画像2

自分のOSによってダウンロードするものを選びます。


●ライフゲームで遊ぼう


NetLogoでは、人工生命の元祖といわれるプログラムも簡単に作ることができます。

まだコンピューターが大学の研究室や大きな会社にしかなかったころ、大ヒットしたゲームがありました。
人工生命の元祖ともいえるプログラムで、その名もライフゲームといいます。(人生ゲームではありません)
有能な研究者たちが、その謎を解こうと仕事や研究をそっちのけで熱中しました。そのために費やされた労力と、コストはお金に換算すると大変なものです。ルール自体は小学生でも理解で来るぐらい簡単なのですが、まったく予測できない複雑で多様な世界がひろがっていたのです。
どんなゲームかというと、まずセルという碁盤のようなマス目があります。それぞれのマス目は生、死のどちらかの状態になります。

ルール1 誕生
周りのマス目が3つ生きていればあたらしく誕生する

ルール2 生きる
周りの生きているマス目が2つか3つの場合は生き続ける

ルール3 死
周りの生きているマス目が1つまたは4つ以上のときは死ぬ

このルールをすべてのマス目に当てはめて繰り返すと、元のパターンから色々なパターンが生まれてきます。
もっとくわしいことはこちらをご覧ください。

では、インストールしたNetLogoで実際に動かしてみましょう。
プログラムを開くには上にある「file」メニューから「models library」を選びます

画像3

きちんと分類されたフォルダが出てくるので、

まずは「Computer Science」のなかの「Cellular Automata」をクリックして,その中の[life]を選びます。

画像4

Openボタンを押してファイルを開いてください。

●ライフゲームの遊び方


ファイルを開くとボタンと画面がでてきます。

まず「setup-brank」ボタンを押してセルをまっさらな状態にします。

次に「setup-random」ボタンを押してセルをランダムに生きてる状態にします。

画像5

では実際に動かしてみましょう。 動かすには「go-forever」ボタンを押します。 すると微生物が動いているような不思議な画面が現れます。バッと広がったかと思うと他の塊とぶつかって消えたり、全部死ぬか繰り返しで変化がなくなってしまうかと思うと意外としぶとく残ったりします。

何回か繰り返すと時々グライダーと呼ばれる斜めに動く形が現れたりします。
でも最終的にはすべて繰り返しか静止の状態になり変化がなくなってしまいます。
何種類の残る形と繰り返す形があるのか調べてみましょう。

画像6

見てるだけでは面白くないので、自分でスタートの状態を作ってみましょう。

自分で描くには「add-cells」ボタンを押してお絵かきをするように画面をクリックします。消すときは「remove-cells」ボタンを押して画面をクリックします。

動かすには先ほどと同じように「go-forever」ボタンを押します。 できるだけ少ない点の形からどれだけ長く続けることができるでしょうか?いろいろ試してみてください。 ここにいろいろな見本があります。

●ちょっと哲学

ライフゲームはどうでしたか?

人工生命というからにはもっとすごいものかと思った。
ルールも単純で、たしかにいろいろな変化が現れるけれど、生命はこんなに簡単なものではないし、本当の生命とはやっぱりかけ離れていると思うといった感じでしょうか。

しかし、ライフゲームは生命とは何かを考えるときに実に多くの示唆を与えてくれます。

ライフゲームはチューリングマシンという万能計算機として働くことが知られています。
つまり、計算可能なものは、すべてライフゲームの中で再現できるのです。

これは、もしすべての現象を数式で表現できるとしたら、無数のマス目があれば現実の世界をライフゲームの中に置き換えることができるということを意味します。

もしかしたら、むしろ映画にもなった「マトリクス」のように私たちの住んでいる世界こそライフゲームのマス目(マトリクス)の中に再現されたシミュレーションなのかもしれません。

神様はルールに従ってオセロをひっくり返しているだけです。

●運命はすでにきまっているのか

大昔から哲学者や学者は世界の根源は何かということを考えてきました。
ギリシャの哲学者タレスは、すべては水が変化したものだと考えましたし、中国の陰陽説では陰と陽の対立から世界が生まれると考えました。

現在では、すべて12種類の素粒子からできているということがしられています。

そのうちに究極の理論が考えられて、素粒子に働く力のなぞがすべて解けるかもしれません。

では、究極の理論ができて世界の状態が完全にわかったときに世界はすべて予測可能になるのでしょうか?

ライフゲームの世界では、ルールは完全にわかっていますし、偶然の働く余地はありません。
最初の状態さえ決まれば、すでにその後どう変化するかは、すべて決まっています。

でも、実際に動かしてみないと未来を知ることはできないのです。

●プログラムを見てみよう

人工生命をつくるにはプログラミングが必要です。
普通こういったプログラムを作るのには大変な時間と、知識が必要になるのですが、ネットロゴはたいへん手軽にプログラムを作ることができます。(それでも覚えることはいろいろありますが、英語の勉強にもなるので一石二鳥です)

プログラムの中身を見るには上のprocedureタブを押します。

画像7

すると英語の文章のような、よくわからない文がバーと出てきます。

プログラムというと難しそうですが、コンサートのプログラムなどと同じようにコンピュータにさせることを書いた手順書です。

コンピュータが理解できるのは0と1だけですが、人間にもわかりやすいように翻訳してくれるコンピュータ専用の言葉がいろいろあります。

スターロゴはロゴという教育用の言葉を元に作られているので、普通の英語の文に近く、順番に見て行けばそれほど難しくありません。

ライフゲームのプログラムは、プログラミングをやったことがある人が見ると、こんな短いプログラムで作れるのかとちょっと驚くと思います。

意味は大体下のような感じです。


patches-own [
living? ;; 生きているかどうか
live-neighbors ;; 隣のセルがいくつ生きているか 
];;パッチ変数の設定(パッチはセルのこと)
to setup-blank ;;setup-blankが呼び出された時
ask patches ;;パッチに対して
[ cell-death ] ;;cell-deathを実行する
end ;;終了
to setup-random ;;setup-randomが呼び出された時
ask patches ;;パッチに対して
[ ifelse random-float 100.0 < initial-density ;;もしinitial-densityが100までのでたらめの数より小さいとき
[ cell-birth ] ;;cell-birthを実行する
[ cell-death ] ];;cell-deathを実行する
end ;;終了
to cell-birth ;;cell-birthが呼び出された時
set living? true ;;living?をtrue(真)に設定する
set pcolor fgcolor ;;色をfgcolorに設定する
end ;;終了

to cell-death ;;cell-deathが呼び出されたら
set living? false ;;living?をfalse(偽)に設定する
set pcolor bgcolor ;;色をbgcololrに設定する
end ;;終了

to go ;;goが呼び出された時
if mouse-down? ;;もしマウスボタンが押されていたら
[ stop ] ;; 描くのをやめるまでストップする 
ask patches ;;パッチに対して
[ set live-neighbors count neighbors with [living?] ]
;;隣り合ったセルのうちliving?がtrue(真)のセルの数をlive-neighborsにセットする

ask patches ;;パッチに対して
[ ifelse live-neighbors = 3 ;;もしlive-neighborsが3だったら
[ cell-birth ];;cell-birthを実行する
[ if live-neighbors != 2
[ cell-death ] ] ];;それ以外の場合でlive-neighborsが2でなかったらcell-deathを実行する
end ;;終了

to add-cells  ;;add-cellsが呼び出された時
if mouse-down? ;;マウスボタンが押されていたら
[ ask patch-at mouse-xcor mouse-ycor 
[ cell-birth ] ];;マウスの場所のセルにsell-birthを実行する
end ;;終了

to remove-cells ;;remove-cellが呼び出された時
if mouse-down?  ;;マウスボタンが押されていたら
[ ask patch-at mouse-xcor mouse-ycor
[ cell-death ] ];;マウスの場所のセルにsell-deathを実行する
end ;;終了


ざっと見て行くと
to ○○

end

がひとまとまりになっていることに気がつきます。

○○はボタンや他のまとまりから呼び出されて実行されます。

●スターロゴの登場人物

スターロゴの世界の登場人物には

タートル(turtle)
パッチ(patch)
観測者(observer)

の3種類がいます。それぞれに命令を与えて、いろいろなモデル
を作ることができます。


タートル
タートルは亀なので早くは動けませんが、
あなたの命令どおりにスターロゴの世界を動き回ります。
普通のロゴの世界ではタートルは1匹ですが、スターロゴ
では何千匹のタートルを一度に動かすことができます。

画像8

パッチ

パッチはタートルが動き回るタイルのようなの地面です。
この一つ一つのパッチは、周りの情報を受け取り、他の
タートルやパッチに影響を与えて相互作用することが
できます。
ライフゲームのプログラムはパッチだけで作られています。

画像9

観測者(オブザーバー)

観測者は言ってみれば神様のようなものです。
タートルやパッチは自分の周りのことしかわかりませんが
観測者は全体の状況を知ることができて、モデルの
コントロールをします。

私たちは名前、性別、年齢などの属性を持っています。

名前 鈴木太郎
性別 男
年齢 43

タートルやパッチも同じように属性を持っています。

タートルが生まれつき持っている属性は7つあります。

xcor y座標

ycor x座標

color 色

heading 向き(0から360度)

breed  種族

shown? 見えるか見えないか(true false)

pendown? ペンが下りているか(true false)
{ペンが降りていると通った道に線が引けます。}


パッチは3つの属性をもっています。
xcor y座標

ycor x座標

patch-color(pc) 色

この属性は後から増やすことができます。

ライフゲームのプログラムの初めの部分

patches-own [living? live-neighbors];;パッチ変数の設定(パッチはマス目のこと)

はパッチの属性に
living? (生きているか)
live-neighbors (まわりのマス目がいくつ生きているか)
の二つを追加しています。

このようにいろいろ変化する属性の値のことを一般的に変数といいます。

パッチの中身を見るには右クリックをして
inspect patch _ _
を選びます。

どのパッチにも
リストに
living?
live-neighbors

の二つが入っているのがわかると思います。

画像10

最後に?マークがついている変数はtrue(真) false(偽)

の2種類の値しかもちません。

つくってみよう1 蜂の幼虫集め


ハチは体の大きさからはとても信じられないような
知性を持っています。

規則正しい六角形の蜂の巣なども、力学的にはもちろん
廃熱、幼虫の飼育、蜜の貯蔵などについても実に合理的
にできています。ハチの脳の大きさを考えると実に驚異的です。


 いろいろなハチの巣
(横浜市)

こういった巣作りなどの行動は、誰か全体を見て指示するリーダー
がいるわけではなくて、たくさんのハチが共同で働くことで
全体として目的を達成させています。


一匹一匹は少しの事しかできませんし、どこで誰が何をしているのか、全体の中で自分がどこにいるのかはよくわかりません。

それでも神様のように一匹のハチを超える存在はないのに、ナスカの地上絵のように大きなスケールで見ると一つの「形」が出来上がっています。

こういったことは細胞と私たちの関係についても、私たちと社会・会社の関係についても言えることです。

こんな風に同じたくさんの要素が集まって、全体として調和のとれた
行動をとることを「集団知」といいます。

「集団知」は実に不思議な現象ですが、よく観察すると意外と簡単なルールからできていることもよくあります。

ここでは「集団知」の例としてハチの幼虫集め行動のシミュレーションをつくってみましょう。


     蜂の幼虫集め行動


目標

    あっちこちに散らばっている幼虫を一箇所に集める
 
条件

・集める場所はどこでもよい(目印はない)
・みんな平等でリーダーはいない
・自分のいる場所の状況しかわからない(周りを見渡して目標に向かって歩くことはできない)
・一度に運べる幼虫は一匹だけ
・他の仲間とはコミュニケーションできない

普通に私たちが広場に散らばっているボールを一箇所に集めることを
考えると、つぎのような手順が必要だと思います。

1、落ちているボールを探す
2、落ちている所へいってボールを拾う
3、決まった目標(ボール置き場)にいく
4、ボールを置く

5、1へ戻る

この状況を人間に置き換えてちょっと想像してみましょう。

校庭にボールが散らばっています。
目隠しをして、耳栓をした人が50人ほど散らばっています。

そこで50人の人が動き回って校庭のどこかにボールを集めます。
ボールにぶつかることでボールを見つけることができます。

命令はスタート前に一回しかできません。
スタートしたらみんなが同じ命令に従って行動します。

一箇所に集めるには集める場所をみんなに教えなくてはいけませんし、自分の向きがわからないと目標に行くこともできません。

普通に考えるとちょっと不可能な課題のように思えます。

こういった問題を考えるときは、ゴールからではなく、まずできることから考えていくのが近道です。

タートルにできることは
 進む
 とまる
 向きを変える
 ボールを拾う
 ボールを置く

タートルがわかることは
 足元にボールがある
 足元にボールがない
 自分がボールを持っている
 自分がボールを持っていない

とこれだけです。

あとはどんなときに何をするのか組み合わせを考えればOKです。

まず、ボールを持っていないときはボールを捜さなくてはいけません。
目が見えないので、とりあえずボールにぶつかるまで歩きましょう。まっすぐに進むとずっと同じところを歩いてボールがいつまでも見つからないかもしれないので、でたらめに向きを変えながら歩きます。

動いているうちに、いつかはボールにぶつかるでしょう。
そしたら、移動させなくてはいけませんから、まずはボールを拾います。

ボールは拾えましたが、集める場所はわからないので動かすといっても、やはり、でたらめに動き回るしかありません。

ボールを集めるということは、ほかのボールのそばにボールを置くことです。
そこで他のボールを見つけたら、持っているボールを置くことにしましょう。
これで少なくても2つのボールを集めることができました。

「千里の道も一歩から」
これを繰り返して少しずつでもボールが集まれば、大きな集まりができそうです。

でもせっかく集めたボールも、また誰かが持っていっちゃうかもしれません。
集める場所も一箇所ではなくたくさんできそうです。

では本当にこの方法でうまくいくのか試して見ましょう。

第2回 続き 

マガジン 趣味としての人工生命づくり


記事はすべて無料で公開していますが、購入していただくと記事更新のペースが上がりそうな気がしますのでよろしくお願いいたします。

ここから先は

0字

¥ 100

この記事が参加している募集

つくってみた

この記事が気に入ったらサポートをしてみませんか?