シミュレーション論 Ⅱ 第7回 シミュレーションの構築
Excelによるライフゲームの作成 Excelを用いて、2次元セルオートマトンの代表例である「ライフゲーム」を作成する
ライフゲームの概要 各セルには「生」「死」の2状態がある 各セルは自分と周囲の計9セルの状態によって生死が決定される 生死のルール: 誕生 誕生 死んでいるセルの周囲に3つの生きているセルが あれば次の世代では生きる(誕生する)。 維持 生きているセルの周囲に2つか3つの生きている セルがあれば次の世代でも生き残る。 死亡 上以外の場合には次の世代では死ぬ。
ライフゲームの作成(1) Excelの全てのセルを選択し、「書式」→「列」→「幅」で「2」とする(正方形のセルを作る)
ライフゲームの作成(2) B2~U21、X2~AQ21に20×20の枠を作成し、左側の枠に全て「0」を入力する
ライフゲームの作成(3) 右側の枠に左側の枠の次ステップの状態を記述する 0を死、1を生とし、ルールに従って生死を決定する X2セルに以下のように入力する =IF(SUM(A1:C3)=3,1,IF(AND(B2=1,SUM(A1:C3)=4),1,0)) 自分と周囲の計9セルで3セル生きていれば生、自分が生で周囲9セルで4セル生きていれば生、それ以外は死
ライフゲームの作成(4) 入力できたら右側の枠内全てにドラッグでコピー 枠線をコピーしたくないときは右下に出るボックスをクリックして「書式なしコピー」を選ぶとよい
ライフゲームの作成(5) 「マクロ」を用いて更新作業をおこなう 左枠の状態から次ステップの状態を右枠で計算→ 左枠へコピー この操作をマクロによって自動化する 「表示」→「ツールバー」→「Visual Basic」を選択 「セキュリティ」をクリックして「セキュリティレベル」を「中」にしておく 「コントロール ツールボックス」ボタンを押す
ライフゲームの作成(6) ツールボックスの「コマンドボタン」をクリックし、適当な位置に貼り付ける
ライフゲームの作成(7) コマンドボタンを右クリックし、「プロパティ」を選ぶ (オブジェクト名)を「更新ボタン」、Captionを「更新」とする(できたらプロパティは閉じる)
ライフゲームの作成(8) 「Visual Basic」ツールバーの赤丸を押し、操作の記録をおこなう(マクロの記録) 「マクロ名」は「更新」とする 「右枠内全て(X2~AQ21)をコピー」→「B2セルを右クリック」→「形式を選択して貼り付け」→「値」→「X1セルをクリック」 以上ができたら四角い停止ボタンを押して記録を終了する
ライフゲームの作成(9) 「Visual Basic」ツールバーの「デザインモード」ボタンが押されていることを確認し、コマンドボタン(更新ボタン)をダブルクリックする 空白になっている「End Sub」の前に「更新」と記入 デザインモード ボタン
ライフゲームの作成(10) デザインモードのウインドウを閉じ、Visual Basicツールバーの「デザインモード」ボタンを押して終了させる 左枠の適当な位置に「1」をいくつか入力し、「更新」ボタンを押して動くかどうか確認してみよう
ライフゲームの作成(11) 左枠内を選択し、「書式」→「条件付き書式」でセルに色をつける フォントの色とセルのパターンを「0」のとき白、「1」のとき青とする
ライフゲームの作成(12) コントロールツールバーから「コマンドボタン」を選び、もう1つボタンを作成する 右クリック→「プロパティ」とし、 (オブジェクト名)を「クリアボタン」、Captionを「クリア」とする(できたらプロパティは閉じる)
ライフゲームの作成(13) 「Visual Basic」ツールバーの「デザインモード」ボタンが押されていることを確認し、クリアボタンをダブルクリックする 空白になっている「End Sub」の前に「クリア」と記入
ライフゲームの作成(14) ウインドウ左側の「標準モジュール」をダブルクリックし、「Module 1」をダブルクリックして開く 既にある「End Sub」の後に以下のように書く Sub クリア() Range(“B2:U21") = 0 End Sub
ライフゲームの作成(15) デザインモードのウインドウを閉じ、Visual Basicツールバーの「デザインモード」ボタンを押して終了させる 左枠の適当な位置に「1」をいくつか入力し、「クリア」ボタンを押して全て「0」に戻るか試してみよう
ライフゲームの作成(16) 以上でほぼ完成 適当に1を入力し、更新ボタンを何度か押して実行してみよう
様々な初期値で試してみよう 以下のような初期値で試してみよう
シミュレーションの構築 今回は各自でやりたいシミュレーションのモデルを構築します。 対象・目的の決定 モデルの作成 (講義でおこなったものを中心に、やってみたい シミュレーションを考えてください) ↓ モデルの作成 (図的モデル→数式モデル) 手法および使用ツールの決定 (モンテカルロ法、差分方程式の使用、ExcelかC言語か) 詳しいモデルの作成と仮計算 (どのような結果が出そうか、手作業で簡単な計算)
シミュレーションの対象と目的 各自でおこなうシミュレーションの対称と目的を決定してください 配布資料にシミュレーションの対象と目的を分かりやすくまとめて記述してください 【例】 待ち行列、在庫問題、二分法や遺伝的アルゴリズムによる最適解探索、線形計画法、セルオートマトン、囚人のジレンマ、動的モデル(人口増加・預金残高・捕食者-被食者の関係)など これまで講義で習ったことをもとに、やってみたいシミュレーションを考えてください ※ もちろん各自でオリジナルの課題を作成しても構いません
図的モデルの作成 シミュレーションの対象が決まったら、シミュレーションに必要な要素およびそれらの相互関係を抽出し、モデル化をおこなってください 図的モデルを利用して分かりやすく記述し、シミュレーション全体の流れや要素同士の関連を明確にしてください 図的モデルの種類: ブロック線図、フローチャート、動的モデル図など
図的モデルの種類(1) ブロック線図 対象を構成する要素間に信号が流れる様子を図で表したモデル 要素は長方形のブロック、信号の入出力は矢印のついた枝、信号の加え合わせ点は円記号で表す(加え合わせは正負の記号で表す)
ブロック線図の例 例)鍋に入っている水をバーナーで沸かし、温度を測ってある一定の温度に保つ自動制御 構成要素:バーナー、鍋の湯、温度計 ※このように出力を入力側に戻すことをフィードバックという
図的モデルの種類(2) フローチャート プログラムなどの処理の流れを表現するのによく使われる 処理の内容、条件分岐などを用いる
動的モデルの図的表現 動的モデルの図的表現には様々なものがあるが、例として以下のようなものを挙げておく
動的モデルの図的表現(2) 変化の速さが蓄積量に比例する現象 銀行預金の残高計算 携帯電話利用者数の増加 など 例:銀行預金残高の図的モデル
数式モデルの作成 図的モデルをもとにシミュレーションに必要な数式を作成し、記述してください 言葉で表現しても、変数を定義して使っても構いません 【例】ヒーターによる湯温調整 変化後の水温 = 現在の水温 + 水温調整 水温調整=(設定温度-測定した水温)×ヒーター能力×時間間隔 測定した水温=(5×時間間隔)前の水温
シミュレーション手法と使用ツール モデルが完成したら、どのような手法を使うのか、どのようなツールを利用するのかについて記述してください 実際に自分が作成できるものを念頭において記述してください 【例】 モンテカルロ法を使用 Excelを用いて作成 C言語によるプログラム など
モデルの仮計算 全てが終了したら、数式モデルにいくつか数値を代入して簡単な仮計算をおこなってください シミュレーション結果どのような変化をするのか、数式モデルが間違っていないか、どのパラメータを変化させれば結果が変わるのか、などをあらかじめチェックしておいてください ※ 実施にあたっては同じモデルを使って「様々な場合のシミュレーション」をおこなってください。そのためにどのパラメータを変化させるか、などについても考えておいてください
第7回のレポート 作成したモデルの概要(箇条書きの文章および図的モデル)を出席カードに書いて提出してください。 次回もノートPCを使用します。 次回は今回作成したモデルをもとにシミュレーションを実施し、その内容をもとに中間レポートを作成してもらいます。 (中間レポートの提出は後日) ノートPCをお持ちでない方は自宅または情報演習室でシミュレーションの作成取りかかっておいてください (次回はレポート作成および分からないところの質問にあてます)