数理生物学演習bio-math10.biology.kyushu-u.ac.jp/~haenoh/compbio/10...セルオートマトン#...
TRANSCRIPT
![Page 1: 数理生物学演習bio-math10.biology.kyushu-u.ac.jp/~haenoh/CompBio/10...セルオートマトン# (CA:Cellular#Automaton) • 生命現象によく見られる”自己組織化”を](https://reader033.vdocuments.pub/reader033/viewer/2022041708/5e465580315cc32c05548003/html5/thumbnails/1.jpg)
数理生物学演習
第10回 セル・オートマトン
![Page 2: 数理生物学演習bio-math10.biology.kyushu-u.ac.jp/~haenoh/CompBio/10...セルオートマトン# (CA:Cellular#Automaton) • 生命現象によく見られる”自己組織化”を](https://reader033.vdocuments.pub/reader033/viewer/2022041708/5e465580315cc32c05548003/html5/thumbnails/2.jpg)
本日の目標
• パターンを作る
• セル・オートマトン
• ライフゲーム
![Page 3: 数理生物学演習bio-math10.biology.kyushu-u.ac.jp/~haenoh/CompBio/10...セルオートマトン# (CA:Cellular#Automaton) • 生命現象によく見られる”自己組織化”を](https://reader033.vdocuments.pub/reader033/viewer/2022041708/5e465580315cc32c05548003/html5/thumbnails/3.jpg)
セルオートマトン (CA:Cellular Automaton)
• 生命現象によく見られる”自己組織化”を表現するために作られたモデル
• 格子状に並ぶ数値(セル)を、局所的ルールの下で変化させ続ける
• 単純さの割に面白い結果が出るので、プログラムの練習にはうってつけ!
![Page 4: 数理生物学演習bio-math10.biology.kyushu-u.ac.jp/~haenoh/CompBio/10...セルオートマトン# (CA:Cellular#Automaton) • 生命現象によく見られる”自己組織化”を](https://reader033.vdocuments.pub/reader033/viewer/2022041708/5e465580315cc32c05548003/html5/thumbnails/4.jpg)
セル・オートマトン Cellular Automaton
セルの“状態”を,局所的なルールに従い更新してゆくことで,“計算”を行う離散的なモデル
1次元セル・オートマトン
仮定
• セルが1次元的に並んでいる• セルは状態“0”または“1”のいずれかをもつ• セルは自身と近傍の状態により次のステップでの状態が決まる
ある時間でのセルの状態 時間発展を記録していく
![Page 5: 数理生物学演習bio-math10.biology.kyushu-u.ac.jp/~haenoh/CompBio/10...セルオートマトン# (CA:Cellular#Automaton) • 生命現象によく見られる”自己組織化”を](https://reader033.vdocuments.pub/reader033/viewer/2022041708/5e465580315cc32c05548003/html5/thumbnails/5.jpg)
初期条件と境界条件について
� 初期条件時間発展するシステムを計算する場合、「初期値の決め方」を考える必要がある。CAの場合、中央だけ「1」か、あるいは全部ランダムに割り振るなどすれば良い。
� 境界条件空間構造のあるシステムを計算する場合、「端の値の決め方」を考える必要がある。CAの場合、両端を常に「0」か、あるいは右端と左端が隣接しているという扱いにすれば良い。 周期境界条件
と呼ばれる。 (イメージ→)
![Page 6: 数理生物学演習bio-math10.biology.kyushu-u.ac.jp/~haenoh/CompBio/10...セルオートマトン# (CA:Cellular#Automaton) • 生命現象によく見られる”自己組織化”を](https://reader033.vdocuments.pub/reader033/viewer/2022041708/5e465580315cc32c05548003/html5/thumbnails/6.jpg)
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) • 生命現象によく見られる”自己組織化”を](https://reader033.vdocuments.pub/reader033/viewer/2022041708/5e465580315cc32c05548003/html5/thumbnails/7.jpg)
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) • 生命現象によく見られる”自己組織化”を](https://reader033.vdocuments.pub/reader033/viewer/2022041708/5e465580315cc32c05548003/html5/thumbnails/8.jpg)
ウルフラムのクラス Wolfram (1983)
クラス1セルの状態がすべて同じになり,変化が起こらない.
クラス2安定したパタンに落ち着き変化が周期的になる.
クラス3全体がランダムに振る舞う.
ただし,決定論的.
クラス4あるときは規則的なパタンを示し,あるとき
はランダムに振る舞う.
複雑系 カオスリミットサイクル平衡点
秩序安定
無秩序不安定
クラス4で“複雑さ”が最大になる生命現象はここにあるのかも?
![Page 9: 数理生物学演習bio-math10.biology.kyushu-u.ac.jp/~haenoh/CompBio/10...セルオートマトン# (CA:Cellular#Automaton) • 生命現象によく見られる”自己組織化”を](https://reader033.vdocuments.pub/reader033/viewer/2022041708/5e465580315cc32c05548003/html5/thumbnails/9.jpg)
ライフゲーム 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) • 生命現象によく見られる”自己組織化”を](https://reader033.vdocuments.pub/reader033/viewer/2022041708/5e465580315cc32c05548003/html5/thumbnails/10.jpg)
ライフゲームにみられるパタン
固定物体 still life
振動子 oscillators
銃 guns
長寿 methuselahs
ブリンカー
ブロック グライダー銃
ダイハード
![Page 11: 数理生物学演習bio-math10.biology.kyushu-u.ac.jp/~haenoh/CompBio/10...セルオートマトン# (CA:Cellular#Automaton) • 生命現象によく見られる”自己組織化”を](https://reader033.vdocuments.pub/reader033/viewer/2022041708/5e465580315cc32c05548003/html5/thumbnails/11.jpg)
情報処理センター講義室へ移動!
![Page 12: 数理生物学演習bio-math10.biology.kyushu-u.ac.jp/~haenoh/CompBio/10...セルオートマトン# (CA:Cellular#Automaton) • 生命現象によく見られる”自己組織化”を](https://reader033.vdocuments.pub/reader033/viewer/2022041708/5e465580315cc32c05548003/html5/thumbnails/12.jpg)
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) • 生命現象によく見られる”自己組織化”を](https://reader033.vdocuments.pub/reader033/viewer/2022041708/5e465580315cc32c05548003/html5/thumbnails/13.jpg)
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) • 生命現象によく見られる”自己組織化”を](https://reader033.vdocuments.pub/reader033/viewer/2022041708/5e465580315cc32c05548003/html5/thumbnails/14.jpg)
周期境界条件
“端”同士が張り合わされていると考える.
プログラムを組むときも,この部分の処理は注意!
固定端
“端”の値を与えて,変動しないとする.
例えば,この端で常に状態“0”
![Page 15: 数理生物学演習bio-math10.biology.kyushu-u.ac.jp/~haenoh/CompBio/10...セルオートマトン# (CA:Cellular#Automaton) • 生命現象によく見られる”自己組織化”を](https://reader033.vdocuments.pub/reader033/viewer/2022041708/5e465580315cc32c05548003/html5/thumbnails/15.jpg)
エクセルのヒント
1.データを貼付けた後、列の幅を調整してセルを正方形にする
表の左上の角を押して 全選択をする
列AとBの間を ダブルクリック
![Page 16: 数理生物学演習bio-math10.biology.kyushu-u.ac.jp/~haenoh/CompBio/10...セルオートマトン# (CA:Cellular#Automaton) • 生命現象によく見られる”自己組織化”を](https://reader033.vdocuments.pub/reader033/viewer/2022041708/5e465580315cc32c05548003/html5/thumbnails/16.jpg)
ズームアウトして全体像を見る
• 示する
この数字を35に変更
![Page 17: 数理生物学演習bio-math10.biology.kyushu-u.ac.jp/~haenoh/CompBio/10...セルオートマトン# (CA:Cellular#Automaton) • 生命現象によく見られる”自己組織化”を](https://reader033.vdocuments.pub/reader033/viewer/2022041708/5e465580315cc32c05548003/html5/thumbnails/17.jpg)
条件付き書式で値が「1」のセルだけ強調表示する
あとはOKを押す
![Page 18: 数理生物学演習bio-math10.biology.kyushu-u.ac.jp/~haenoh/CompBio/10...セルオートマトン# (CA:Cellular#Automaton) • 生命現象によく見られる”自己組織化”を](https://reader033.vdocuments.pub/reader033/viewer/2022041708/5e465580315cc32c05548003/html5/thumbnails/18.jpg)
ライフゲーム
ライフゲームのプログラムを組んでみてください.
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) • 生命現象によく見られる”自己組織化”を](https://reader033.vdocuments.pub/reader033/viewer/2022041708/5e465580315cc32c05548003/html5/thumbnails/19.jpg)
二次元配列
� と宣言すると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) • 生命現象によく見られる”自己組織化”を](https://reader033.vdocuments.pub/reader033/viewer/2022041708/5e465580315cc32c05548003/html5/thumbnails/20.jpg)
ライフゲーム(ヒント)
//配列の初期化
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) • 生命現象によく見られる”自己組織化”を](https://reader033.vdocuments.pub/reader033/viewer/2022041708/5e465580315cc32c05548003/html5/thumbnails/21.jpg)
ライフゲーム
エクセルを使ってアニメーションを表現しますが、 ちょっと設定が複雑なので、あらかじめファイルを用意しておきました。 ↓のページへ行き、”課題用エクセルファイル”をクリックして ダウンロードしてください。 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) • 生命現象によく見られる”自己組織化”を](https://reader033.vdocuments.pub/reader033/viewer/2022041708/5e465580315cc32c05548003/html5/thumbnails/22.jpg)
お知らせ
• 次回は6/29(月)です
![Page 23: 数理生物学演習bio-math10.biology.kyushu-u.ac.jp/~haenoh/CompBio/10...セルオートマトン# (CA:Cellular#Automaton) • 生命現象によく見られる”自己組織化”を](https://reader033.vdocuments.pub/reader033/viewer/2022041708/5e465580315cc32c05548003/html5/thumbnails/23.jpg)
ライフゲーム
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) • 生命現象によく見られる”自己組織化”を](https://reader033.vdocuments.pub/reader033/viewer/2022041708/5e465580315cc32c05548003/html5/thumbnails/24.jpg)
スクリーンショットの取り方
1) shia + command + 4 を同時押し
2) 撮りたい範囲をドラッグする
3) デスクトップにファイルが出来ているはず