数理生物学演習bio-math10.biology.kyushu-u.ac.jp/~haenoh/compbio/10...セルオートマトン#...

24
数理生物学演習 10セル・オートマトン

Upload: others

Post on 30-Jan-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 数理生物学演習bio-math10.biology.kyushu-u.ac.jp/~haenoh/CompBio/10...セルオートマトン# (CA:Cellular#Automaton) • 生命現象によく見られる”自己組織化”を

数理生物学演習

第10回 セル・オートマトン  

Page 2: 数理生物学演習bio-math10.biology.kyushu-u.ac.jp/~haenoh/CompBio/10...セルオートマトン# (CA:Cellular#Automaton) • 生命現象によく見られる”自己組織化”を

本日の目標

•  パターンを作る  

•  セル・オートマトン  

•  ライフゲーム  

Page 3: 数理生物学演習bio-math10.biology.kyushu-u.ac.jp/~haenoh/CompBio/10...セルオートマトン# (CA:Cellular#Automaton) • 生命現象によく見られる”自己組織化”を

セルオートマトン  (CA:Cellular  Automaton)

•  生命現象によく見られる”自己組織化”を表現するために作られたモデル

•  格子状に並ぶ数値(セル)を、局所的ルールの下で変化させ続ける

•  単純さの割に面白い結果が出るので、プログラムの練習にはうってつけ!

Page 4: 数理生物学演習bio-math10.biology.kyushu-u.ac.jp/~haenoh/CompBio/10...セルオートマトン# (CA:Cellular#Automaton) • 生命現象によく見られる”自己組織化”を

セル・オートマトン Cellular  Automaton

セルの“状態”を,局所的なルールに従い更新してゆくことで,“計算”を行う離散的なモデル

1次元セル・オートマトン

仮定

•  セルが1次元的に並んでいる•  セルは状態“0”または“1”のいずれかをもつ•  セルは自身と近傍の状態により次のステップでの状態が決まる

ある時間でのセルの状態 時間発展を記録していく

Page 5: 数理生物学演習bio-math10.biology.kyushu-u.ac.jp/~haenoh/CompBio/10...セルオートマトン# (CA:Cellular#Automaton) • 生命現象によく見られる”自己組織化”を

初期条件と境界条件について

� 初期条件時間発展するシステムを計算する場合、「初期値の決め方」を考える必要がある。CAの場合、中央だけ「1」か、あるいは全部ランダムに割り振るなどすれば良い。

� 境界条件空間構造のあるシステムを計算する場合、「端の値の決め方」を考える必要がある。CAの場合、両端を常に「0」か、あるいは右端と左端が隣接しているという扱いにすれば良い。 周期境界条件

と呼ばれる。 (イメージ→)

Page 6: 数理生物学演習bio-math10.biology.kyushu-u.ac.jp/~haenoh/CompBio/10...セルオートマトン# (CA:Cellular#Automaton) • 生命現象によく見られる”自己組織化”を

1次元セル・オートマトン

状態“1”

状態“0”

遷移ルール(2近傍)

自分が状態0で、左隣が状態0で、右隣が状態0なら次は状態0になる。

i

i+1

時間

場所

j j-1 j+1

例1

i

i+1

時間

場所

j j-1 j+1

自分が状態0で、左隣が状態0で、右隣が状態1なら次は状態1になる。

Page 7: 数理生物学演習bio-math10.biology.kyushu-u.ac.jp/~haenoh/CompBio/10...セルオートマトン# (CA:Cellular#Automaton) • 生命現象によく見られる”自己組織化”を

1次元セル・オートマトン

状態“1”

状態“0”

遷移ルール(2近傍)

1 0 0 1 1 1 0 0

1×27+0×26+1×25+1×24+0×23+0×22+1×21+0×20=178 ルール178

•  一次元セルオートマトンのルールにはすべて名前が付いている

•  ルールを次のような表に書いたとき、次の時刻の内部状態を並べると二進数になっている。これを十進数に直したものがルールの名前になる。

•  隣り合う3つのセル(2x2x2)の状態によって次のセルの状態が決まる。8個の場合について、0か1か決めるので2^8=256通りのルールが考えられる。

Page 8: 数理生物学演習bio-math10.biology.kyushu-u.ac.jp/~haenoh/CompBio/10...セルオートマトン# (CA:Cellular#Automaton) • 生命現象によく見られる”自己組織化”を

ウルフラムのクラス Wolfram  (1983)

クラス1セルの状態がすべて同じになり,変化が起こらない.

クラス2安定したパタンに落ち着き変化が周期的になる.

クラス3全体がランダムに振る舞う.

ただし,決定論的.

クラス4あるときは規則的なパタンを示し,あるとき

はランダムに振る舞う.

複雑系 カオスリミットサイクル平衡点

秩序安定

無秩序不安定

クラス4で“複雑さ”が最大になる生命現象はここにあるのかも?

Page 9: 数理生物学演習bio-math10.biology.kyushu-u.ac.jp/~haenoh/CompBio/10...セルオートマトン# (CA:Cellular#Automaton) • 生命現象によく見られる”自己組織化”を

ライフゲーム Conway’s  Game  of  Life

2次元のセル・オートマトンの特殊な場合

かなり,色々なパタンが観察できる

仮定

•  各セルは状態“生”と“死”をもつ•  誕生,生存,死亡のプロセスを経て,“生”と“死”の状態を更新する

•  8近傍のセルの状態により次の状態がきまる•  遷移ルールは誕生,維持,過疎,過密の4つ

8近傍中ちょうど3つが“生”ならば次のステップで“生”

誕生 過疎

過密 維持

8近傍中ちょうど2つが“生”ならば次のステップで更新なし

8近傍中“生”が1つ以下ならば次のステップで“死”

8近傍中“生”が4つ以上ならば次のステップで“死”

Page 10: 数理生物学演習bio-math10.biology.kyushu-u.ac.jp/~haenoh/CompBio/10...セルオートマトン# (CA:Cellular#Automaton) • 生命現象によく見られる”自己組織化”を

ライフゲームにみられるパタン

固定物体  still  life

振動子  oscillators

銃  guns

長寿  methuselahs 

ブリンカー

ブロック グライダー銃

ダイハード

Page 11: 数理生物学演習bio-math10.biology.kyushu-u.ac.jp/~haenoh/CompBio/10...セルオートマトン# (CA:Cellular#Automaton) • 生命現象によく見られる”自己組織化”を

情報処理センター講義室へ移動!

Page 12: 数理生物学演習bio-math10.biology.kyushu-u.ac.jp/~haenoh/CompBio/10...セルオートマトン# (CA:Cellular#Automaton) • 生命現象によく見られる”自己組織化”を

1次元セルオートマトン

//9-­‐1.    1次元セル・オートマトン

#include  <stdio.h>    int  main(void){      int  t,i;      int  cell[100];      int  tempcell[100];        FILE  *fp;      fp=fopen("CA.txt","w");        //配列の初期化

for(i=0;i<100;i++){          cell[i]=0;          tempcell[i]=0;      }        //初期条件

cell[50]=1;      for(i=0;i<100;i++){          fprinX(fp,"%d  ",cell[i]);      }      fprinX(fp,"\n");                    

         for(t=;t<100;t++){    //一番左,セル0    if(cell[99]==1){      if(cell[0]==1){      f(cell[1]==1){      tempcell[0]=1;      }      if(cell[1]==0)  {      tempcell[0]=0;      }    }      if(cell[0]==0){      if(cell[1]==1){      tempcell[0]=1;      }      if(cell[1]==0)  {      tempcell[0]=1;      }    }    }                      

   if(cell[99]==0){    if(cell[0]==1){      if(cell[1]==1){    tempcell[0]=0;    }    if(cell[1]==0)  {      tempcell[0]=0;    }    }    if(cell[0]==0){    if(cell[1]==1){      tempcell[0]=1;      }    if(cell[1]==0)  {    tempcell[0]=0;    }    }  }                              

 //中

for(i=1;i<99;i++){    if(cell[i-­‐1]==1){    if(cell[i]==1){    if(cell[i+1]==1){    tempcell[i]=1;    }    if(cell[i+1]==0)  {    tempcell[i]=0;    }    }    if(cell[i]==0){    if(cell[i+1]==1){    tempcell[i]=1;    }    if(cell[i+1]==0)  {    tempcell[i]=1;    }    }    }

関数ruleの定義

あまり賢い関数の定義の仕方ではない.余裕のある人はもっと優れた実装方法を考えてみてください.

Page 13: 数理生物学演習bio-math10.biology.kyushu-u.ac.jp/~haenoh/CompBio/10...セルオートマトン# (CA:Cellular#Automaton) • 生命現象によく見られる”自己組織化”を

1次元セルオートマトン

         

 if(cell[i-­‐1]==0){    if(cell[i]==1){    if(cell[i+1]==1){    tempcell[i]=0;    }    if(cell[i+1]==0)  {    tempcell[i]=0;    }    }    if(cell[i]==0){    if(cell[i+1]==1){    tempcell[i]=1;    }    if(cell[i+1]==0)  {    tempcell[i]=0;    }    }    }    }  

                 

   

 //一番右,99    if(cell[98]==1){    if(cell[99]==1){    if(cell[0]==1){    tempcell[99]=1;    }    if(cell[0]==0)  {    tempcell[99]=0;    }    }    if(cell[99]==0){    if(cell[0]==1){    tempcell[99]=1;    }    if(cell[0]==0)  {    tempcell[99]=1;    }    }    }                          

       if(cell[98]==0){    if(cell[99]==1){    if(cell[0]==1){    tempcell[99]=0;    }    if(cell[0]==0)  {    tempcell[99]=0;    }    }    if(cell[99]==0){    if(cell[0]==1){    tempcell[99]=1;    }    if(cell[0]==0)  {    tempcell[99]=0;    }    }    }                          

     /*-­‐-­‐-­‐-­‐情報の更新と出力-­‐-­‐-­‐-­‐-­‐-­‐*/          for(i0;i<100;i++){              cel[i]=tempcell[i];              fprinX(fp,"%d  ",cell[i]);          }          fprinX(fp,"\n");          /*-­‐-­‐-­‐-­‐-­‐情報の更新と出力ここま

で-­‐-­‐-­‐-­‐-­‐-­‐*/      }        fclose(fp);      return  0;  }

続き

ルール178

Page 14: 数理生物学演習bio-math10.biology.kyushu-u.ac.jp/~haenoh/CompBio/10...セルオートマトン# (CA:Cellular#Automaton) • 生命現象によく見られる”自己組織化”を

周期境界条件

 “端”同士が張り合わされていると考える.

プログラムを組むときも,この部分の処理は注意!

固定端

 “端”の値を与えて,変動しないとする.

例えば,この端で常に状態“0”

Page 15: 数理生物学演習bio-math10.biology.kyushu-u.ac.jp/~haenoh/CompBio/10...セルオートマトン# (CA:Cellular#Automaton) • 生命現象によく見られる”自己組織化”を

エクセルのヒント

1.データを貼付けた後、列の幅を調整してセルを正方形にする

表の左上の角を押して  全選択をする

列AとBの間を  ダブルクリック

Page 16: 数理生物学演習bio-math10.biology.kyushu-u.ac.jp/~haenoh/CompBio/10...セルオートマトン# (CA:Cellular#Automaton) • 生命現象によく見られる”自己組織化”を

ズームアウトして全体像を見る

•  示する

この数字を35に変更

Page 17: 数理生物学演習bio-math10.biology.kyushu-u.ac.jp/~haenoh/CompBio/10...セルオートマトン# (CA:Cellular#Automaton) • 生命現象によく見られる”自己組織化”を

条件付き書式で値が「1」のセルだけ強調表示する

あとはOKを押す

Page 18: 数理生物学演習bio-math10.biology.kyushu-u.ac.jp/~haenoh/CompBio/10...セルオートマトン# (CA:Cellular#Automaton) • 生命現象によく見られる”自己組織化”を

ライフゲーム

ライフゲームのプログラムを組んでみてください.

9-­‐2.

•  境界条件は周期を採用してください•  格子のサイズは50×50で作ってください.

やるべきこと•  初期条件の設定•  状態遷移ルールの実装•  境界条件の処理•  結果の出力

8近傍中ちょうど3つが“生”ならば次のステップで“生”

誕生 過疎

過密 維持

8近傍中ちょうど2つが“生”ならば次のステップで更新なし

8近傍中“生”が1つ以下ならば次のステップで“死”

8近傍中“生”が4つ以上ならば次のステップで“死”

Page 19: 数理生物学演習bio-math10.biology.kyushu-u.ac.jp/~haenoh/CompBio/10...セルオートマトン# (CA:Cellular#Automaton) • 生命現象によく見られる”自己組織化”を

二次元配列

�  と宣言すると8個のint型変数    が作られる �  for(i=0;i<2;i++){

for(j=0;j<4;j++){ を使って初期化する

int x[2][4];x[0][0] x[0][1] x[0][2] x[0][3] x[1][0] x[1][1] x[1][2] x[1][3]

  0 1 2 … n-2 n-1

0            1            2            …            

m-2            m-1            

データ型  配列名[m][n];

n個

m個

m×n個のデータ型変数が作られる ただし、要素の番号は0から始まる

※データ型…intとかdoubleのこと

配列名[m-2][2] という名前の データ型変数

Page 20: 数理生物学演習bio-math10.biology.kyushu-u.ac.jp/~haenoh/CompBio/10...セルオートマトン# (CA:Cellular#Automaton) • 生命現象によく見られる”自己組織化”を

ライフゲーム(ヒント)

         //配列の初期化

for(i=0;i<50;i++){        for(j=0;j<50;j++){          cell[i][j]=0;          tempcell[i][j]=0;      }  }      //初期条件

for(i=0;i<50;i++){              for(j=0;j<50;j++){  

 if(i+j<50){      cell[i][j]=1;    }    }  

}    for(i=0;i<50;i++){    for(j=0;j<50;j++){  

       fprinX(fp,"%d  ",cell[i][j]);      }  

   fprinX(fp,"\n");    }  

   

   ・・・・・・・・・・・      

       for(i=1;i<49;i++){  for(j=1;j<49;j++){  live=0;  //8近傍の様子を確認

 if(cell[i-­‐1][j-­‐1]==1){    live++;    }    if(cell[i-­‐1][j]==1){    live++;    }    if(cell[i-­‐1][j+1]==1){    live++;    }    if(cell[i][j-­‐1]==1){    live++;    }    if(cell[i][j+1]==1){    live++;    }    if(cell[i+1][j-­‐1]==1){    live++;    }    if(cell[i+1][j]==1){    live++;    }  

 if(cell[i+1][j+1]==1){    live++;    }        //セルi,jの次の状態の決定

if(live<=1){    tempcell[i][j]=0;    }    if(live==2){    tempcell[i][j]=cell[i][j];    }    if(live==3){    tempcell[i][j]=1;    }    if(live>=4){    tempcell[i][j]=0;    }  }  }    

いろいろな初期配置を試してみましょう

境界の部分は自分で行列を書いて確認しましょう

Page 21: 数理生物学演習bio-math10.biology.kyushu-u.ac.jp/~haenoh/CompBio/10...セルオートマトン# (CA:Cellular#Automaton) • 生命現象によく見られる”自己組織化”を

ライフゲーム

エクセルを使ってアニメーションを表現しますが、 ちょっと設定が複雑なので、あらかじめファイルを用意しておきました。 ↓のページへ行き、”課題用エクセルファイル”をクリックして ダウンロードしてください。 http://bio-math10.biology.kyushu-u.ac.jp/~haenoh/CompBio2015 そのあと、”出力結果”のシートに結果を貼付けてください。

Page 22: 数理生物学演習bio-math10.biology.kyushu-u.ac.jp/~haenoh/CompBio/10...セルオートマトン# (CA:Cellular#Automaton) • 生命現象によく見られる”自己組織化”を

お知らせ

• 次回は6/29(月)です

Page 23: 数理生物学演習bio-math10.biology.kyushu-u.ac.jp/~haenoh/CompBio/10...セルオートマトン# (CA:Cellular#Automaton) • 生命現象によく見られる”自己組織化”を

ライフゲーム

50

50

i=1〜48, j=1〜48はヒントにあるやり方で出来る。

i=0,  j=0  

i=0,  j=49  

i=49,  j=49  

i=49,  j=49  

i=0,    j=1〜48

i=1〜48,    j=49

Page 24: 数理生物学演習bio-math10.biology.kyushu-u.ac.jp/~haenoh/CompBio/10...セルオートマトン# (CA:Cellular#Automaton) • 生命現象によく見られる”自己組織化”を

スクリーンショットの取り方

1)  shia  +  command  +  4  を同時押し

2)  撮りたい範囲をドラッグする

3)  デスクトップにファイルが出来ているはず