今週から春セメスターが始まりました。教授と相談した結果、研究と平行して分析モデルとシミュレーションのクラスを取ることに決めました。
これまで火木と2回講義がありましたがまだ1週目なのでシラバスと簡単な用語説明だけでした。
何を学ぶか
- コンピュータシステムとネットワークのモデルを評価するための分析とシミュレーションの手法
- 確率理論の基礎と確率分布が異なるキューイングシステムの開発
- シミュレーション結果の統計的な評価を含めたDES(Discrete-Event Simulation)およびモンテカルロ法の性質
というわけで、確率理論とか統計的とかモンテカルロ法とかちょっと難しそうな用語が沢山ですが、おいおいと学習していくのでしょう。
待ち行列
キューイングシステムというのはいわゆる待ち行列モデルをつかったシステムです。銀行窓口からネットワークにおけるパケット伝送までさまざまなところで使われています。この待ち行列ですが、λとμという2つのパラメータが使われます。
λはあるイベントが到着する分布(といえばいいのか、よくわかりませんがdistributionです)でμがそのサービスにかかる時間の分布です。銀行の窓口で言えば、人がどのように並び始めるかを決めるのがλで、窓口対応にかかる時間がμみたいな感じです。
教授が言うには、λはpoissonianでμはexponentialであるというのが基本的な仮定なのだそうです。何が何だかちんぷんかんぷんなんですがpoissonianというのはポアソン分布に沿ったもの。そしてexponentialというのは指数分布に沿ったものというのが調べてわかりました。
日本語でもわからん。うーん先行き不安になってきた。
とにかくとにかく、セメスターの最初は確率理論の公式やらなんやらを基礎からやってくれるということなのでそこできっちり理解することを目標にしようと思います。で、残りの半分でシステムの分析と評価という応用をやっていくとのことです。
シミュレーションとその評価
システムをシミュレーションを使って評価する際にとても重要である項目を教授は何度も強調していました。それは、
モデル作成
まずは評価対象のシステムをモデリングしなければなりません。前述のパラメータをどのようにして調べるか。そのパラメータに見合うイベント群を生成することができるか。この前提が間違っているといくらシミュレーションしても正しい結果がでません。
試行回数
たった1回シミュレートしただけではもちろん不十分ですが、何度もやったところで例えば生成されるイベントの出現頻度、タイミングが全く同じならば同じ結果しかでないことになるので、やはりこれも適切ではありません。パラメータの範囲に収まってかつランダム性があるようにイベントを調整しなければなりません。
評価手法
きちんとランダムな環境で何十回、何百回とシミュレーションを繰り返したとしましょう。その結果をどのように評価するのかが最も重要です。先ほどの銀行の例でお客さんの平均待ち時間が10分になるというシミュレーション結果がでたとします。この結果はどれくらい正確で、どれほど信頼性があるのか、というのが問題です。
平均はあくまで平均です。15分待つお客さんと5分待つお客さんが半分ずついても平均は10分になります。しかしこれで平均10分待つはずだと言われても困ります。正確さと信頼性はConfidence interval(信頼区間)とConfidence level(信頼水準)で測られます。
信頼区間というのはその平均がプラスマイナスどの程度に収まるかという範囲です。そして信頼水準というのはその信頼区間に実際の結果が収まる確率を示します。通常90%から95%を目標にします。
95%の確率で10±1分の待ち時間になるシステムと、10±5分の待ち時間になるシステムとでは当然前者のほうが信頼性が高いことになります。このようなシステムをうまくシミュレートすることができるでしょうか。
どう表現するか
教授は続けます。「たとえ有名なジャーナルに掲載されるような品質の論文でも、そこに示されてるグラフが正しく表記されていないものがある。しばしば執筆者やレビュアーもどのようにグラフを評価するのかわかっていないのが問題だ」
これまでの流れからわかるように、ただ平均をプロットしただけのグラフはその結果がどれほど正しいのか、信頼性があるのかを読み取るのが不可能です。時間に経つにつれてお客さんの待ち時間が増加する場合でも、その上限(upper-bound)と下限(lower-bound)がどの程度にどのような確率で収まるのかを示すことが重要です。
まとめ
今回は分析モデルとシミュレーションについてのイントロダクションをまとめました。
確率、統計、モデリング、シミュレーションとこれまで深く入り込んでこなかった分野に手を出してみるわけですが、今のところ結構面白そうだという感覚です。基本プログラミングが好きなので前半しっかりと基礎を学習して、後半のシステムモデル構築、シミュレーションのところをきっちりやり遂げたいと思います。
Comments
comments powered by Disqus