高校「情報Ⅰ」単語帳 - 実教出版「最新情報Ⅰ」 - モデル化とシミュレーション
モデリング 【モデル化】 ⭐⭐⭐
ある物体や事象について、着目している特徴や同種の複数の対象に共通する重要な性質を抽出し、些末な細部は省略あるいは簡略化した抽象的な模型を作成すること。
科学や工学、ビジネス、IT関連では特にシステム設計やシミュレーションなどの分野において、取り扱う対象から目的に照らして不要な側面を捨象して、その構造や構成要素、対象間の関係や互いに及ぼす作用などを模式的に表した模型(モデル)を作り、図表や数式、データ集合、データ構造、人工言語(モデリング言語)などを用いて定義することをモデリングという。
モデルを作成することで、対象をデータや情報の集合としてコンピュータシステム内で取り扱ったり、シミュレーションなどを通じてその振る舞いや状態を解析し、現実に起きている現象を説明したり、特定の条件下での振る舞いを予測することができるようになる。様々な分野で一般的に行われる営みであり、具体的な手法や手順なども分野ごとに異なる。
3DCGにおけるモデリング
3次元コンピュータグラフィックス(3DCG)の制作・編集過程の一つで、点や線、平面や曲面、単純な形の立体(の全体や一部分)などを組み合わせ、望みの立体物の外形(3Dモデル)を形作る工程をモデリングという。
立体物の表現方式として最も一般的な「サーフェスモデル」では、空間上に定義した点と点を結ぶ線分を組み合わせて多角形(ポリゴン)を構成し、これを貼り合わせて立体を構成する。外から見える表面だけを整える「ハリボテ」のような構成法で、ゲームなどでは内部の質量などの情報が不要であるため多用される。
一方、3次元CADなどでは、このような直線的な図形に加えて、球や楕円体、円柱、円錐、特定の方程式で表される曲面などを組み合わせ、表面の一部が滑らかな曲面の立体を定義できるものもある。工業製品の設計やシミュレーションなどに用いるシステムでは、立体を中身の詰まった物体のように扱う「ソリッドモデル」が用いられることもある。
パラメータ 【パラメタ】
媒介変数、補助変数、母数、引数、設定値などの意味を持つ英単語。ITの分野では、ソフトウェアやシステムの挙動に影響を与える、外部から投入されるデータなどのことをパラメータということが多い。
関数やソフトウェア、機械など何らかの仕組みに対して外部から与える値のことで、内部の構造や処理手順などが同じでも、与えるパラメータによって出力や挙動を変化させることができる。
関数のパラメータ
プログラミングでは、関数やメソッドなどが呼び出し元から渡された値を受け取るために宣言された変数のことをパラメータという。「仮引数」(formal argument)と呼ばれることもある。
関数やメソッドの定義の先頭などで、括弧で括って変数名を列挙するなどして宣言することが多い。呼び出し側で関数などに引き渡す値などは「引数」(argument)あるいは「実引数」(actual argument)と呼ばれる。
URLパラメータ
WebブラウザなどがWebサーバに送信するデータを、送信先を指定するURLの末尾に特定の形式で表記したものを「URLパラメータ」(リクエストパラメータ/クエリ文字列)という。
URLの末尾に「?」(クエスチョンマーク)を付け、続けて「名前=値」の形式で引き渡す内容を記述したもので、ブラウザ側からサーバ側にデータを送って何らかの処理を行わせ、Webページの内容に反映させることができる。「&」を挟んで複数の名前と値の組を連結することもできる。
Webページに入力フォームを設置する場合、form要素のmethod属性を「get」に設定するとHTTPのGETメソッドで内容が送信され、フォームの入力内容はURLパラメータとしてURLの末尾に連結されてWebサーバに伝達される。その際、日本語文字などはURLを構成する文字として使用できないため、文字コードの値と「%」(パーセント記号)を組み合わせたURLエンコードという特殊な記法に変換される。
他の分野でのパラメータ
数学では媒介変数のことをパラメータという。例えば、平面座標上の点(x,y)の移動が、いずれも時間tの関数 x=f(t) y=g(t) によって表されるような場合に、tを媒介変数あるいはパラメータという。変数をパラメータの式によって表すことを媒介変数表示という。
ビデオゲームの分野では、数値で示される能力や性能などをパラメータという。「主人公のヒットポイント」のようにプレイの進行に従って変化する能力値(ステータス)のことを指す場合と、「薬草を使うと15ポイント回復する」のように開発時に決定された各種の固定値を指す場合がある。
ゲーム開発では、プログラムがある程度完成した後にテストプレイしながら各種の値を決定あるいは変更していく工程を「パラメータ調整」という。同じ仕組みのゲームでもパラメータによってプレイしたときの感想が大きく異なるため重要な作業である。
シミュレーション 【シミュレート】 ⭐⭐⭐
現実の対象や現象から特徴的な要素を抽出してモデル化し、模擬的に実践・再現すること。科学技術の分野では現象の理解や予測、人工物の開発や改良などによく応用される。
「顧客の反応をシミュレーションする」といったように日常の場面でも模擬的な予測や再現をシミュレーションということがあるが、一般的にはコンピュータによる数値計算や情報処理を用いて複雑な物理現象や人工物の振る舞いなどを再現する「コンピュータシミュレーション」(computer simulation)を指すことが多い。綴りから分かるように「シュミレーション」は誤記である。
シミュレーションは実物による実験が様々な理由により不可能・困難な場合、あるいは長い期間や多くの費用を要する場合などに、これを簡易に代替する手法として実施される。対象の振る舞いや生じる現象への理解を深めたり、対象を扱う技能の教育・訓練を行なったり、対象が人工物の場合は結果を元に修正や改良を行ったりする。
対象にまつわるありとあらゆる要素を正確に模倣することは不可能で、多くの場合は無意味でもあるため、対象の性質や挙動を代表する要素を絞り込んで単純化したモデルを用いて計算などを行なう。モデルがよく対象を表していれば正確なシミュレーションができるが、誤りや粗さがあれば精度の低いシミュレーションにしかならない。
ある対象のシミュレーションを行うことに特化した機器やソフトウェア、システムなどを「シミュレータ」(simulator)という。特に乗り物や機械の挙動を再現するシミュレータがよく知られ、自動車を模倣する「ドライブシミュレータ」や航空機を模倣する「フライトシミュレータ」は運転・操縦の訓練にも用いられる。
モンテカルロ法 【Monte Carlo method】 ⭐
数値計算手法の一つで、乱数を用いた試行を繰り返すことにより近似解を求める手法。確率論的な事象についての推定値を得る場合を特に「モンテカルロシミュレーション」と呼ぶ。名称の由来はカジノで有名なモナコ公国のモンテカルロ地区である。
ある事象をモデル化した数式や関数があるとき、その定義域に含まれる値をランダムにたくさん生成して実際に計算を行い、得られた結果を統計的に処理することで推定値を得ることができる。数式を解析的に解くのが困難あるいは不可能な場合でも数値的に近似解を求めることができる。
例えば、円周率を求める場合、-1から1までの間に含まれるランダムな値を2つ生成し、これを平面上の点の座標に見立てて原点(0,0)からの距離を計算する。距離が1以下ならその点は原点を中心とする半径1の円に含まれ、1を超えていれば点は円の外にある。
この計算を何度も繰り返し行い、n回試行した結果k個の点が円に含まれていたら、円に接する正方形の面積2×2=4を用いて円周率(この円の面積に等しい)は 4k/n と推定できる。確率論の大数の法則により、試行を増やせば増やすほど解の精度は高まり、試行回数を無限大に向かって増やしていけば真の値からの誤差は0に収束していく。
コンピュータでモンテカルロ法の計算を行う場合、値が毎回異なり分布が完全にランダムな真の乱数列を得るには専用のハードウェア乱数生成器が必要になるため、規則性の無さは乱数とほぼ変わらないが、一定の計算手順によって確定論的に算出される疑似乱数を用いることが多い。疑似乱数は再現可能なため第三者による検証などがしやすいという利点がある。
歴史
第二次大戦中、米ロスアラモス国立研究所で原子爆弾開発計画に従事していた核物理学者のスタニスワフ・ウラム(Stanislaw Ulam)がこの手法の原型を考案し、同僚の数学者ジョン・フォン・ノイマン(John von Neumann)が戦後、自らが開発したばかりの最初期の電子式コンピュータ「ENIAC」で実際に計算を行い、その有効性を実証した。
この計算手法は軍事機密としてコードネームが与えられることになったが、二人の同僚の物理学者ニコラス・メトロポリス(Nicholas Metropolis)が、ウラムの叔父がモナコのモンテカルロにあるカジノで借金を抱えた話に着想を得てモンテカルロ法という名称を考案し、これが採用されたと伝わる。賭け事にまつわる何かから考案された手法というわけではない。
キュー 【待ち行列】 ⭐
最も基本的なデータ構造の一つで、要素を入ってきた順に一列に並べ、先に入れた要素から順に取り出すという規則で出し入れを行うもの。窓口などの順番を待つ人の行列をモデル化したものとも言える。
待ち行列は先頭が常に最も古い要素になるデータ構造で、新しい要素は必ず末尾に追加される。取り出すときは常に先頭の最も古い要素から取り出される。このように先に入れたものほど先に取り出される管理方式を「FIFO」(First-In First-Out:先入れ先出し)という。
実装上は、待ち行列のために確保された記憶領域の中ですべての要素が到着順に並ぶとは限らず、実際の位置や順序とは別に到着順や末尾の位置などの情報を内部的に記録・管理する手法が用いられることが多い。人間の行列のように要素が取り出されるたびに残りのすべての要素の物理的な位置を隣(一つ前)に移動させるのは非効率だからである。
バリエーションとして、列の両端から要素の追加や取り出しを行える「両端キュー」(double-ended queue)や、追加する要素に優先度を設定して、優先度の高いものから取り出すようにする「優先度付きキュー」(priority queue)などがある。
一方、「先に足された要素ほど後に取り出される」(末尾から順に取り出す)という規則で要素の出し入れを管理するデータ構造は「スタック」(stack)と呼ばれる。そのような管理方式を「LIFO」(Last-In First-Out:後入れ先出し)あるいは「FILO」(First-In Last-Out:先入れ後出し)という。
要素の出し入れ
待ち行列に要素を追加する操作を「エンキュー」(enqueue)、取り出す操作を「デキュー」(dequeue)という。エンキューされた要素は待ち行列の末尾に追加され、キューの要素数は1増加する。
デキューを指示すると待ち行列の先頭の要素が取り出され、その要素はキューから取り除かれる。先頭から2番目にあった要素(2番目に古かったデータ)が新しい先頭になり、キューの要素数は1減少する。
キューイング (queuing/queueing)
待ち行列を用いて要素の管理を行うことを「キューイング」(queuing)という。キューイングは機器間やプログラム間など独立に動作する二つの主体の間で非同期にデータの受け渡しを行う手法としてよく用いられる。システム間で汎用的にデータを受け渡しするシステムを「メッセージキュー」(message queue)という。
例えば、コンピュータからプリンタにデータを伝送する速度とプリンタがデータを紙に印刷する速度では、後者のほうが圧倒的に遅い。伝送と印刷を同時に行おうとするとコンピュータ側はほとんどの時間待たされることになり無駄であるため、印刷データを一旦待ち行列に保管し、プリンタの処理の進み具合に応じて専用の制御プログラムが少しずつデータを伝送する手法が用いられる。