コンテンツにスキップ

コンピュータ・シミュレーションってなんだろう?

シミュレーションとは

シミュレーションを広辞苑で引くと「物理的・生態的・社会的等のシステムの挙動を、これとほぼ同じ法則に支配される他のシステムまたはコンピューターによって、模擬すること。」とあります。 モデル化には図形や物体、数式などが考えられますが、本講義ではコンピュータを用いた処理を念頭におきますので、数式のみを取り扱います。

本講義では、シミュレーションを以下の様に定義します。

シミュレーション

物理的・生態的・社会的等のシステムの挙動を、これとほぼ同じ法則に支配される他のシステムまたはコンピューターによって、モデル化すること。また、小さなモデルをたくさん解いたり、大規模かつ複雑なモデルを解くことで、ものごとのしくみを探ったり、科学的に現象を予測すること。

  • じゃんけん

たとえば、二人でじゃんけんを1000回したときに、何回勝てるか?ということを考えてみましょう。 フェアな状況で超人的な動体視力がない一般的な状況であれば、両者の出す手はランダムと考えられます。 もちろん、実際に1000回投げて見ても良いですが、何かしらのモデル(数式)を作ってそれを計算機で解くのが現代的でしょう。

  • リチャードソンのお天気工場

気象予測の分野では「リチャードソンのお天気工場」(リチャードソンの夢)という、シミュレーションの試みが知られています8。 これは、1922年にイギリスのLewis Fry Richardsonが提案した数値計算による気象予測の試みです。 この試みは、第一次世界大戦中に集めた欧州の水平200km間隔で鉛直5層の格子における気象データを用い、ある日の6時間後の予報を1か月以上かけて手計算で行うものでした。 用いた数値計算手法に難点があったため、計算結果は実際の結果(気圧)からは大きく外れたため、この試み自体は失敗に終りました。

リチャードソンは著書の中で「64,000人が大きなホールに集まり1人の指揮者の元で各格子の数値計算を行えば、実際の時間の進行と同程度の速さで予測計算を実行できる」と提案しました。 当時は十分に高速な計算機がなかったため人間が手計算をするあまり現実的でない提案でしたが、空間を格子に区切って、各格子をそれぞれ数値計算する様な考え方は、現在の天気予報でも利用されています。

Lewis Fry Richardson and his Forecast Factory - YouTube


"Weather Forecasting Factory" by Stephen Conlin, 1986 11

  • 弾道計算

弾道学は、主に大砲の弾丸の軌道計算や着弾地点を予測する学問で、古くから研究されています。 これらの計算には、大砲の発射角度や着弾地点との高低差、風の強さや方向、気温や湿度、気圧に加えて、弾丸の形状などいろいろな変数を考慮する必要があります。 下の図は、それらの変数をまとめたものです。これらをまとめた「射表」という表の作成には、微分方程式を解く必要があります。


弾道計算における代表的な変数3

これらをできるだけ早く解くことで防衛や被害の最小化に役立てることができます。 たとえば、以下の図に示す艦船用の砲射撃指揮装置は、1950年頃まで利用されていました。 アナログ回路で構成されていたため、非常に重く、大きさも人間よりも大きいものでした。 その他、航空機に搭載できるように小型化されたシステムも1940年頃から登場していたそうです。10 アナログ回路で構成されていたため、重量や大きさの観点から複雑すぎる計算はできず、一部の処理を簡略化したものでした。


左:アメリカ海軍のMk.63 砲射撃指揮装置の構造11  右:ボーイング B29に搭載されたGeneral Electric社製の射撃管制装置10

いろいろなシミュレーション

ここでは、参考書の1.2章「シミュレーションモデルの分類」をもとに、シュミレーションを分類してみます。 シミュレーションが利用される分野は多岐にわたっており、必ずしもすべてを網羅した絶対的な分類ではありませんが、シミュレーションの全体像を掴むには良いと思います。

対象分野による分類

シミュレーションモデルが対象とする分野に着目した分類

  • 自然現象のためのモデル:自然現象を予測・再現するモデル。たとえば、物体流体の運動生命活動、気象推理のモデルなどが挙げられる。モデルの作成には、物理や化学を中心とした自然科学の知識が必要。
  • 経営・経済のためのモデル:企業経営や組織の運営、あるいは経済分野に関する諸問題を考察するためのモデル。たとえば、損益分析、在庫分析、株価変動予測、市場均衡分析などが挙げられる。モデル作成には、会計学や経済理論がどの知識が必要。
  • 社会現象のためのモデル:社会現象解明予測するためのモデル。たとえば、人口推移、噂や伝染病などの伝搬が挙げられる。モデルの作成には、社会科学を核としつつも、対象分野によっては生命学、心理学など広い分野の知識が必要。

時間表現による分類

シミュレーションモデルが前提とする時間の経過に着目した分類

  • 静的モデル:時間的な経過を考慮せずに定常状態での均衡を考察するモデル。たとえば、損益分岐点分析、線形、計画法、市場の均衡分析などが挙げられる。
  • 動的モデル:時間の経過とともに変化する対象の推移を観察するモデル。時間の経過携帯に応じて、連続変化モデルと時間経過モデルに分類される。
    • 連続変化モデル:時間の経過とともに連続的な変化する事象を表現するモデル。たとえば、絶対や流体の運動などが挙げられる。多くの場合、2進数表現のコンピュータを用いて、微小な等時間間隔での事象の発生変化を観察する事で、擬似的に連続モデルを表現する。
    • 離散変化モデル:離散的な時間間隔で受賞の発生と推移を観察するモデルである。たとえば、在庫の増減や待ち行列問題が挙げられる。時間変化ではなく、在庫の到着や引取りなどの変化を定期に事象を動的に捉えるモデルである。

事象発生の形態による分類

対象とする事象がどのように発生するかという形態に着目した分類

  • 決定的モデル:確率的要素や不確定要素を含まず、一連の条件から事象の発生変化が一意に決定されるモデル。たとえば、ニュートン力学に基づく物体の運動や人口変化などのモデルが挙げられる。
  • 確率的モデル:一つ以上の確率的要素を含み、事象の発生変化が確率的に定まるモデル。個々の事象そのものに規則性はないが、全体像としての分布によって事象発生がモデル化される。たとえば、コンピューター資源の配分、在庫問題、待ち行列、自然災害や噂の伝搬などのモデルが挙げられる。
  • カオスモデル:非周期で初期値に敏感に反応するため、将来の予測が不可能なモデル。たとえば、気象現象や心臓の鼓動などにカオスモデルが挙げられる。

シミュレーションとコンピュータ

シミュレーションとコンピュータは非常に密接な関係にあります。 より精度が高く現実的な現象をシミュレーションするために、シミュレーションに用いられるモデルも複雑化・大規模化しています。 そして、複雑で大規模なモデルを実用的な時間で計算するために、高い性能を持ったコンピュータが求められ続けています。

計算機の中身の構造をある方程式を解きやすいように改良したり、 逆に、数値計算の解法を計算機の構造に合わせて改良したりもします。 また、数値計算のためのプログラミング言語も登場しています。

  • 連続値である数を離散的に表す
  • 線形・非線形方程式の解を求める
  • 2つの値の間の値を推定する
  • 積分や微分を計算機を使って解く

コンピュータシミュレーションとは

コンピュータシミュレーションはその名の通り、シミュレーションをコンピュータで解くものです。 コンピュータで解くためには、コンピュータで解ける様に四則演算にする必要があります。 そのための数値解析の手法が数多く提案され、コンピュータの性能が向上するにともない、複雑かつ大規模なシミュレーションを行うことができるようになってきました。

本講義では、コンピュータシミュレーションを以下の様に定義します。

コンピュータシミュレーション

シミュレーションで導いたモデルを、数値解析の手法などを用いてコンピュータで解いていくこと

なお、コンピュータシミュレーションは、IT用語辞典バイナリには以下では、以下のように解説されています。

別名:計算機シミュレーション 【英】computer simulation コンピュータシミュレーションとは、何らかの現象をコンピュータでシミュレート(模擬試験)することである。

コンピュータシミュレーションでは、物理学や経済学など人の手では計算困難な複雑な事象をコンピュータを用いて模擬的に計算する。事象が変化する要素を変数として与え、様々な擬似的、かつ、仮説的状況を作り出すことで、理論や実験では得られない成果を生み出すことができる。

コンピュータシミュレーションは、非線形に代表されるような複雑系においては欠かせない存在になっている上、コンピュータの性能向上に伴い複雑で時間のかかる計算も瞬時に行えるようになってきており、研究分野や産業界では大きな期待が持たれている。

また、理化学研究所 計算科学研究センターの資料9には以下のように書かれています。


コンピュータ・シミュレーションの価値 『コンピュータ・シミュレーションでできること、わかること』 理化学研究所 計算科学研究機構

コンピュータシミュレーションの強みは、実験では再現できない状況の模擬や、可視化、予測といえるでしょう。

具体例

現代的なシミュレーションは、非常に大規模なものを高速に解く必要が出てきます。 例えば、数値流体力学や化学物理学などの分野で用いられる、自然科学シミュレーションは大規模になりがちな数値計算の1つです。 ここでは、スーパーコンピュータを用いて行われた数値計算の例を紹介します。

  • くしゃみと飛沫に関するシミュレーション

COVID-19に関するシミュレーションの1つに、2020年度時点で計算性能が世界で最も高い理化学研究所のスーパーコンピュータ 富岳でマスクや飛沫の研究結果があります。 コロナ変異株、短時間で感染 スパコン富岳で計算 動画:朝日新聞デジタルでは、くしゃみを空気の流れとしてモデル化し、飛沫の飛ぶ距離や範囲を計算しています。飛沫と人間の様に、スケールが大きく異なる場合、小さい方を基準に計算しなければなりません。そのため、計算空間を非常に細かくする必要がでてきます。計算空間を細かくすることで飛沫などの微細な現象を解くことができますが、計算量が非常に大きくなってしまいます。最近では、計算空間の要素数が1000万を簡単に超えてしまいます。つまり、変数が1000万個(1000万元)の連立1次方程式を解かなければいけない、ということになります。


    n次元連立1次方程式


理化学研究所 計算科学研究センター スーパーコンピュータ 「富岳」6

  • 創薬に関するシミュレーション

コロナ薬を探せ あのスーパーコンピューター後継の挑戦 [新型コロナウイルス]:朝日新聞デジタルでは、分子動力学法を用いてタンパク質と新薬候補の結合度合いの計算について紹介されています。分子動力学法は、現在の最先端のスーパーコンピュータでも計算に非常に時間がかかります。理化学研究所が研究開発している、世界最高レベルの計算能力を持つ分子動力学法専用計算機 MDGRAPE-4Aでも、タンパク質と水分子からなる10万原子系のシミュレーションを24時間かけて1.1マイクロ秒間ほど進みます。1.1マイクロ秒というのはとてもすごい数字なのですが、まだまだもっと高速に計算をしたいというニーズがあります。


左図:分子動力学(MD)計算を用いた高精度シミュレーションの例2
右図:分子動力学法専用計算機 MDGRAPE-4A2

  • ENIAC

弾道計算のために開発された計算機に、1946年に完成した米国陸軍 弾道研究所のENIAC (Electronic Numerical Integrator and Computer) があります。 ENIACでは、17,468本の真空管が用いられ、プラグボードとスイッチでプログラムを外部から変更することでいろいろな計算を行える構造でした。 動作クロックは100KHzで、2つの10桁の数の加算に20クロック、乗算は10桁×10桁の場合で毎秒357回実行することができたそうです。 また、割り算とSQRTは毎秒35回実行することができそうです。 この計算速度はENIAC以前のHarvard Mark IやZuse Z3などと比較すると2桁かそれ以上速いもので、ENIACはこの時代のスーパーコンピュータでした5。 ENIACの消費電力は150kWと非常に大きく、80kWが真空管に、45kWが直流電源に、20kWが送風機に、5kWがパンチカードなどの補助装置し使用されていたそうです。

ENIACの制御パネル(左)とファンクションテーブル(右)。出典:ENIAC - Wikipedia
ENIACの制御パネル(左側)とファンクションテーブル(右側)
1946 ENIAC Computer History Remastered FULL VERSION First Large Digital Electronic Computer - YouTube

SMASH

シミュレーションと計算機、関連する分野の関係を整理したものに、SMASHと呼ばれる考え方があります。 SMASHは、米メリーランド大学のDavid Levermore教授が提唱しているもので、計算科学と計算機科学を以下の様な5つの階層に分けています。右に各階層の代表的な例を挙げています。

例えば、深層学習はModelingの部分に相当すると考えられます。そのモデル化手法は、Scienceの部分に応用が可能です。そして、深層学習を支えるAlgorithmには誤差逆伝播法があります。誤差逆伝播法を計算機で解くためには、それをプログラムに落とし込み、分散処理などの行うためのSoftwareの部分の知識が必要となります。また、プログラムを実行するHardwareとしてはCPUやGPU、そしてそれらを組み合わせた計算機システムの知識が必要となります。

どの部分が一番偉いということはありませんが、どの部分を専門として、どの部分までどう理解するべきかは、みなさんの今後の勉強や専門家としての立ち位置の整理に不可欠です。そして、情報科学だけでなく別の分野を知っている、ということは非常に大きな武器になります。

数値計算用プログラミング言語 julia

juliaは、数値計算や計算科学、数値解析を目的として開発された言語です。 数値計算に便利な組み込み型や組み込み関数が用意されています。 文法や使い勝手はPythonに似ていますが、計算速度はPythonより速いとされています。

2012年に公開された若い言語で、ダウンロードやインストールは非常に簡単で、すぐに使い始めることができます。 環境構築方法は、日本語マニュアルなどを参照してください。 本講義では、説明やサンプルプログラムのいくつかをjuliaで示します。

参考文献