本日の目標 パターンを作る セル オートマトン ライフゲーム

Similar documents
C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

PowerPoint Presentation

初めてのプログラミング

今回のプログラミングの課題 ( 前回の課題で取り上げた )data.txt の要素をソートして sorted.txt というファイルに書出す ソート (sort) とは : 数の場合 小さいものから大きなもの ( 昇順 ) もしくは 大きなものから小さなもの ( 降順 ) になるよう 並び替えること

次に示す数値の並びを昇順にソートするものとする このソートでは配列の末尾側から操作を行っていく まず 末尾の数値 9 と 8 に着目する 昇順にソートするので この値を交換すると以下の数値の並びになる 次に末尾側から 2 番目と 3 番目の 1

計算機シミュレーション

cp-7. 配列

memo

Microsoft Word - HOBO雨量専用説明書_v1.1.doc

FORTRAN( と C) によるプログラミング 5 ファイル入出力 ここではファイルからデータを読みこんだり ファイルにデータを書き出したりするプログラムを作成してみます はじめに テキスト形式で書かれたデータファイルに書かれているデータを読みこんで配列に代入し 標準出力に書き出すプログラムを作り

プログラミング実習I

スライド 1

プログラミング基礎

Microsoft PowerPoint - prog06.ppt

2 / 16 ページ 第 7 講データ処理 ブック ( ファイル ) を開く第 6 講で保存したブック internet.xlsx を開きましょう 1. [Office ボタン ] から [ 開く ] をクリックします 2. [ ファイルの場所 ] がデータを保存している場所になっている

Mapmakerfor の手順下絵を準備 作者の設定した大きさで作成する場合 下絵にする地図を挿入 トリミングと大きさの調整 大きさを調整した画像を保存 下絵を背景に設定 作成画面の大きさを調整 1 自分で用意した下絵を背景にする場合 下絵を背景に設定 作成画面の大きさを調整 画像が大きい場合シート

Microsoft PowerPoint - 04_01_text_UML_03-Sequence-Com.ppt

PowerPoint Presentation

C言語講座 ~ファイル入出力編~

文字はセルを超えて表示される エクセルで文字を入力すると 左図のようになります これを解消するには セルの書式設定 から変更する つまり セル B3 より右に何も入力されていない場合 には セル幅よりも長い文字を入力すると セルを飛 び越えて 一直線に表示されます セルの中に文字列を収めたい場合には

問題 2 < 支社別下半期実績表 > を完成させましょう 1.[B12]~[D12] セルを結合して中央揃えに設定しましょう (1)[B12]~[D12] セルを選択します (2)[ ホーム ] タブの [ 配置 ] グループにある [ セルを結合して中央揃え ] ボタンを選択します (3)3 つの

第9回 配列(array)型の変数

情報処理演習 B8クラス

プログラミング基礎

Microsoft PowerPoint - chap10_OOP.ppt

JavaプログラミングⅠ

PowerPoint プレゼンテーション

連立方程式の解法

C#の基本

目次 概要... 2 フォームレイアウトデザイナー機能の設定... 3 設定したフォームレイアウトデザイナーの確認...14 その他スタイルの設定...15 フォームレイアウトデザイナーをエクスポート...17 フォームレイアウトデザイナーをインポート...18 インポート時の制限事項...19 リ

プログラミング実習I

PowerPoint プレゼンテーション

Cプログラミング1(再) 第2回

書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf

エクセルの基礎を学びながら、金額を入力すると自動的に計算され、1年分の集計も表示される「おこづかい帳」を作りしょう

オートマトン 形式言語及び演習 1. 有限オートマトンとは 酒井正彦 形式言語 言語とは : 文字列の集合例 : 偶数個の 1 の後に 0 を持つ列からなる集合 {0, 110, 11110,

Microsoft PowerPoint - ad11-09.pptx

Excelで血圧記録表を作成しょう!

ことばを覚える

Microsoft PowerPoint - kougi2.ppt

板バネの元は固定にします x[0] は常に0です : > x[0]:=t->0; (1.2) 初期値の設定をします 以降 for 文処理のため 空集合を生成しておきます : > init:={}: 30 番目 ( 端 ) 以外については 初期高さおよび初速は全て 0 にします 初期高さを x[j]

Microsoft PowerPoint - 09.pptx

6 シート見出しブックに入っている各シート名の名前が表示されます シートとは 表を作るための作業エリア 単にシートという場合はワークシートのことを指します シート上のセルにデータを入力しながら表を作っていきます シートには他にグラフシートもあります 7 数式バー現在操作の対象となっているセル内のデー

アクション講座 第1回目

スライド 1

コンピュータ工学講義プリント (7 月 17 日 ) 今回の講義では フローチャートについて学ぶ フローチャートとはフローチャートは コンピュータプログラムの処理の流れを視覚的に表し 処理の全体像を把握しやすくするために書く図である 日本語では流れ図という 図 1 は ユーザーに 0 以上の整数 n

Microsoft PowerPoint ppt

Microsoft Word - ExcelTable.docx

Microsoft PowerPoint - prog04.ppt

< 目次 > 1. 練習ファイルのダウンロード 表計算ソフト Excel の基本 Excel でできること Excel の画面 セル 行 列の選択 セルにデータを入力する ( 半角英数字の場合 )

講習No.1

格子点データの解析 1 月平均全球客観解析データの解析 客観解析データや衛星観測データのような格子点データは バイナリ形式のデータファイルに記録されていることが多いです バイナリ形式のデータファイルは テキスト形式の場合とは異なり 直接中身を見ることができません プログラムを書いてデータを読み出して

Microsoft PowerPoint - comprog11.pptx

Excel2013 ピボットテーブルを使った分析

Taro-⑪JS5シンガーソングライタ

データ構造

地域医療ビッグデータに触ってみよう ほぼハンズオンマニュアル

ガイダンス

Transcription:

数理生物学演習 第 10 回セル オートマトン

本日の目標 パターンを作る セル オートマトン ライフゲーム

セルオートマトン (CA:Cellular Automaton) 生命現象によく見られる 自己組織化 を表現するために作られたモデル 格子状に並ぶ数値 ( セル ) を 局所的ルールの下で変化させ続ける 単純さの割に面白い結果が出るので プログラムの練習にはうってつけ!

セル オートマトン Cellular Automaton セルの 状態 を, 局所的なルールに従い更新してゆくことで, 計算 を行う離散的なモデル 1 次元セル オートマトン 仮定 セルが 1 次元的に並んでいる セルは状態 0 または 1 のいずれかをもつ セルは自身と近傍の状態により次のステップでの状態が決まる ある時間での セルの状態 時間発展を記録していく

初期条件と境界条件について 初期条件 時間発展するシステムを計算する場合 初期値の決め方 を考える必要がある CAの場合 中央だけ 1 か あるいは全部ランダムに割り振るなどすれば良い 境界条件 空間構造のあるシステムを計算する場合 端の値の決め方 を考える必要がある CAの場合 両端を常に 0 か あるいは右端と左端が隣接しているという扱いにすれば良い 周期境界条件と呼ばれる ( イメージ )

1 次元セル オートマトン 遷移ルール (2 近傍 ) 状態 0 状態 1 例 1 場所 j-1 j j+1 場所 j-1 j j+1 時間 i i+1 時間 i i+1 自分が状態 0 で 左隣が状態 0 で 右隣が状態 0 なら次は状態 0 になる 自分が状態 0 で 左隣が状態 0 で 右隣が状態 1 なら次は状態 1 になる

1 次元セル オートマトン 遷移ルール (2 近傍 ) 状態 0 状態 1 一次元セルオートマトンのルールにはすべて名前が付いている ルールを次のような表に書いたとき 次の時刻の内部状態を並べると二進数になっている これを十進数に直したものがルールの名前になる 隣り合う 3 つのセル (2x2x2) の状態によって次のセルの状態が決まる 8 個の場合について 0 か 1 か決めるので 2^8=256 通りのルールが考えられる 1 0 1 1 0 0 1 0 1 2 7 +0 2 6 +1 2 5 +1 2 4 +0 2 3 +0 2 2 +1 2 1 +0 2 0 =178 ルール 178

ウルフラムのクラス Wolfram (1983) クラス 1 セルの状態が すべて同じになり, 変化が起こらない. クラス 2 安定したパタンに落ち着き変化が 周期的になる. クラス 4 あるときは規則的なパタンを示し, あるときはランダムに振る舞う. クラス 3 全体がランダムに振る舞う. ただし, 決定論的. 平衡点 リミットサイクル 複雑系 カオス 秩序 安定 クラス 4 で 複雑さ が最大になる 生命現象はここにあるのかも? 無秩序 不安定

ライフゲーム Conway s Game of Life 2 次元のセル オートマトンの特殊な場合 かなり, 色々なパタンが観察できる 仮定 各セルは状態 生 と 死 をもつ 誕生, 生存, 死亡のプロセスを経て, 生 と 死 の状態を更新する 8 近傍のセルの状態により次の状態がきまる 遷移ルールは誕生, 維持, 過疎, 過密の 4 つ 誕生 過疎 8 近傍中 ちょうど 3 つが 生 ならば 次のステップで 生 8 近傍中 生 が 1 つ以下ならば 次のステップで 死 維持 過密 8 近傍中 ちょうど 2 つが 生 ならば 次のステップで更新なし 8 近傍中 生 が 4 つ以上ならば 次のステップで 死

ライフゲームにみられるパタン 固定物体 still life ブロック 銃 guns グライダー銃 振動子 oscillators ブリンカー 長寿 methuselahs ダイハード

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

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; 関数 rule の定義 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; あまり賢い関数の定義の仕方ではない. 余裕のある人はもっと優れた実装方法を 考えてみてください.

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

周期境界条件 端 同士が張り合わされていると考える. プログラムを組むときも, この部分の処理は注意! 固定端 端 の値を与えて, 変動しないとする. 例えば, この端で常に状態 0

エクセルのヒント 1. データを貼付けた後 列の幅を調整してセルを正方形にする 表の左上の角を押して全選択をする 列 A と B の間をダブルクリック

ズームアウトして全体像を見る 示する この数字を 35 に変更

条件付き書式で値が 1 のセルだけ強調表示する あとは OK を押す

ライフゲーム 9-2. ライフゲームのプログラムを組んでみてください. 境界条件は周期を採用してください 格子のサイズは 50 50 で作ってください. 誕生 やるべきこと 初期条件の設定 状態遷移ルールの実装 境界条件の処理 結果の出力 過疎 8 近傍中 ちょうど 3 つが 生 ならば 次のステップで 生 8 近傍中 生 が 1 つ以下ならば 次のステップで 死 維持 過密 8 近傍中 ちょうど 2 つが 生 ならば 次のステップで更新なし 8 近傍中 生 が 4 つ以上ならば 次のステップで 死

二次元配列 n 個 データ型配列名 [m][n]; データ型 int とか double のこと m 個 0 1 2 n-2 n-1 0 1 2 m-2 m-1 配列名 [m-2][2] という名前のデータ型変数 m n 個のデータ型変数が作られるただし 要素の番号は 0 から始まる int x[2][4]; と宣言すると8 個のint 型変数 x[0][0] x[0][1] x[0][2] x[0][3] x[1][0] x[1][1] x[1][2] x[1][3] が作られる for(i=0;i<2;i++){ for(j=0;j<4;j++){ を使って初期化する

ライフゲーム ( ヒント ) いろいろな初期配置を試してみましょう 境界の部分は自分で行列を書いて確認しましょう // 配列の初期化 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;

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

お知らせ 次回は 6/29( 月 ) です

ライフゲーム i=1 48, j=1 48 はヒントにあるやり方で出来る i=0, j=0 i=49, j=49 i=0, j=1 48 50 i=0, j=49 i=1 48, j=49 50 i=49, j=49

スクリーンショットの取り方 1) shia + command + 4 を同時押し 2) 撮りたい範囲をドラッグする 3) デスクトップにファイルが出来て いるはず