第8回 - Morito Lab. 森戸研究室

最適化・シミュレーション演習
第8回 シミュレーションの種類
とモンテカルロ法
• 授業サポートページ
http://www.morito.mgmt.waseda.ac.jp/optsim/
• 数理計画による最適化と(離散事象型)シミュレーションに
関する演習を行う.使用するソフトウェアは,AMPL(+
GurobiまたはCPLEX),および,Simul8を想定している.
• 演習では,数理計画による最適化やシミュレーションの実践
的能力を身につけることを目指す。履修者は,Cを使用でき
る環境を有するPCを持参すること。受講者は,実験室にて,
演習で使用する C,AMPL,Simul8をダウンロードできる。
1
後半の主な内容(シミュレーション)
• 離散型シミュレーションの演習では,C,および,Simul8を用いて様々な待
ち行列系システム,離散事象システムのモデル化,実験の進め方,簡単
な分散減少法と結果の分析について学ぶ.さらに,シミュレーションを用
いた最適化の演習を行う.
•
第8回 11/20 シミュレーションの種類とモンテカルロシミュレーション
シミュレーションの種類,モンテカルロシミュレーション,一様乱数,C による円周率πの推定
• 第9回 11/27 Simul8によるシミュレーション
M/M/1,並列キャッシュマシンの並び方,レンタルビデオの本数
• 第10回 12/04 ラベル,リソース,シミュレーション実験の進め方と結果の表示・分析
• 第11回 12/11 やや複雑なSimul8のモデル,分散減少法
宅配ピザ屋のオーブン容量とバイク台数,分散減少法(円周率πの推定,M/M/1)
• 第12回 12/18 離散事象型シミュレーションの考え方とCによるM/M/1モデルの実装
事象,事象カレンダ,事象ルーチン,事象制御ロジック,単一サーバ待ち行列(M/M/1)モデ
ル実装の考え方
• 第13回 2015/01/08 CによるM/M/1モデルの実装 (ディスカッションと講評)
指数乱数など,実装,結果の分析,解析結果との比較
• 第14回 2015/01/15 シミュレーションを用いた最適化,まとめ
サーバー数の最適化,分散減少法(M/M/1,円周率πの推定)
• 第15回 未定 自作の最適化モデルとシミュレーションモデル,および,その分析
本日のトピックス
• いろいろな種類のシミュレーション
• 擬似乱数
– 乱数の発生方法
– 一様乱数
– 特定の分布に従う乱数
• モンテカルロ法(例:①定積分,②πの推定)
– 当たり外れのモンテカルロ
– 入門的モンテカルロ
3
いろいろなシミュレーション(その1)
• 連続型(continuous)シミュレーション
微分方程式や差分方程式で表現されるモ
デルのシミュレーション
• 離散型(discrete, または、離散事象型
discrete-event)シミュレーション
待ち行列型のモデルで表現されるシステム
のシミュレーション
– 銀行のキャッシュマシン、生協食堂、コールセ
ンター、病院、工場のショップ(ジョブショップ等、
電話、通信ネットワーク、...)
– 混雑現象のシミュレーション
• その他(モンテカルロシミュレーション、エー
ジェントシミュレーション等々)
4
いろいろなシミュレーション(その2)
• 確定的(deterministic)シミュレーション
– 連続型シミュレーションに多い
• 確率的(probabilistic, または、stochastic)シ
ミュレーション
– 離散型シミュレーションのほとんどは確率的シ
ミュレーション
– 計算機上で乱数(擬似乱数)を発生させて確率
的変動を再現する
5
擬似乱数
• シミュレーションで使用する乱数は、一見したと
ころはランダムにみえる、一定の生成方法に基
づく数列
• 再現可能であったり、一定の範囲で制御可能で
あることを活用
• なんらかの生成方法で擬似乱数列を生成し、
(多くの場合)それを一様乱数列に変換
• 一様乱数以外の、特定の分布(たとえば、正規
分布、指数分布、等)にしたがう乱数は、多くの
場合、一様乱数をもとに適当な方法で生成
⇒森戸・逆瀬川 2000
6
擬似乱数の作り方(その1)
• 二乗採中法
• 乗算合同法
𝑥n+1 =𝑎𝑥𝑛 (mod 𝑃)
– 𝑥𝑛 は0,1,2, . . . , 𝑃 − 1の𝑃通りしかない
– 𝑥0 , 𝑥1 , 𝑥2 , … と並べていくと、最初の𝑃 +
1個のなかに同じものが存在
– 𝑛番目の𝑥𝑛 と𝑚番目の𝑥𝑚 とが同じだと、
𝑥𝑛+1 と𝑥𝑚+1 、𝑥𝑛+2 と𝑥𝑚+2 、・・・は一致
– 周期性が存在 (周期が長ければ問題ない)
– 適正なパラメータ(𝑎, 𝑃)の選択
7
擬似乱数の作り方(その2)
• 混合合同法
𝑥n+1 =𝑎𝑥𝑛 + 𝑐(mod 𝑃)
– 𝑃 = 232 の場合、𝑐は任意の奇数、𝑎 − 1が4の倍数に
なるように選択することによって周期が𝑃となる
float urand (unsigned long *seed) {
static unsigned long a=77520261;
static float fm=.23283064E-9;
*seed *= a;
(*seed)++;
return ((*seed) * fm);
}
//森戸・逆瀬川2000,p.151
• M系列法、...
8
一様でない乱数の生成(その1)
関数関係を利用する方法
• 一定の分布にしたがう確率変数と一様分布にし
たがう確率変数の関係を利用する方法
• 正規乱数の場合(その1:___定理に基づく方
法)
– [0,1]の連続一様分布を12個加えて正規分布に変換
する → 標準正規変量𝑁(0, 12 )に変換
– 𝑎, 𝑏
𝑏−𝑎
(𝑏−𝑎)2
の連続一様分布:平均= ,分散=
2
12
• 正規乱数の場合(その2:Box-Muller法)
– 𝑢, 𝑣は0-1間の一様乱数のとき,以下の𝑥, 𝑦は独立な標
準正規分布にしたがう乱数
– 𝑥 =sin(2πu) −2 log 𝑣, 𝑦 =cos(2πu) −2 log 𝑣,
9
一様でない乱数の生成(その2)
逆変換法
• 特定の分布の累積分布関数
を𝐹(𝑥)とするとき、 𝐹(𝑥)の
逆関数𝐹 −1 (𝑥)と一様乱数𝑢
から𝐹 −1 𝑢 を求めて乱数と
する方法
• 指数乱数の場合
1
u
𝑭(𝒙)
– 平均𝑐の指数分布の分布関数
𝑥
(− 𝑐 )
𝐹(𝑥)=1-𝑒
– 𝐹 −1 𝑢 = −𝑐 log(1 − 𝑢)
𝒚 = 𝑭−𝟏 (𝒖)
10
C(またはC++)の乱数
• Cは、rand関数という 0 から RAND_MAX の区間
の疑似乱数を発生する関数を提供
– RAND_MAX は、標準ヘッダファイル stdlib.h の中に定
義あり
• 疑似乱数の初期値設定にはsrand関数を提供
• Rand関数は、混合合同法により乱数生成
• 特定の分布(一様乱数、正規乱数、指数乱数、
等)にしたがう乱数を生成するためには関数を自
作する必要あり
• 「rand関数は、”お手軽に”乱数を生成する方法である。しか
し、rand関数にはいくつかの問題があることが知られている
ために、この方法を研究などに使用することは推奨されない
ということに注意されたい。あくまでも導入のための”お手軽”
な方法である。」
11
C による一様乱数の生成
【書式】
#include <stdlib.h>
int rand(void);
【説明】
0~RAND_MAX の間の疑似乱数を返します。
乱数とは、要は「でたらめな値」ですが、コンピュータ内ではある規則にしたがって「で
たらめな値」を生成しています。これを擬似乱数と言います。
rand を使って発生させた擬似乱数は srand関数 で乱数の発生系列を変更しない限り、
実行のたびに同じ擬似乱数を発生します。下の使用例のプログラムを実行すると、
実行のたびに同じ繰返しで擬似乱数を発生します。
【引数】 なし
【戻り値】
0~RAND_MAX の間の疑似乱数。RAND_MAX は stdlib.h の中でマクロ定義されてい
ます。
12
C における乱数の初期値設定:srand
【書式】
#include <stdlib.h>
void srand(unsigned seed);
【引数】
unsigned seed : 擬似乱数の発生系列を変更する種。
同じ数値を設定すると同じ繰返しでrand関数
は擬似乱数を発生する。
【戻り値】 なし
「本当に」ランダム(時刻依存)にしたい場合
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int main(void)
{
int i,j;
/* 乱数系列の変更 */
srand((unsigned) time(NULL));
/* 1~100の擬似乱数を10個ずつ10行発生 */
for (i=1; i<=10; i++) {
for (j=0; j<10; j++) {
printf("%3d ",rand()%100+1);
}
printf("\n");
}
return 0;
}
13
モンテカルロ法
• 乱数を用いてモデルの解を求める技法の総
称で、別名、確率実験
• 実物による実験が不可能とか、解析的扱い
が困難であるような場合に有用
• 一般に相当の計算量を必要とするが、どのよ
うな問題に対してでも適用できるところが強み
• 広義の多重積分の評価と等価
14
基本的なモンテカルロ法
当たり外れ(hit or miss)のモンテカルロ
1
𝑓
0
• 𝐼=
𝑥 𝑑𝑥の評価例
• 𝑥 ∈ [0,1] 上で0 ≤ 𝑓(𝑥) ≤ c とし、
0≤ 𝑦 ≤ 𝑐, 0≤ 𝑥 ≤ 1の矩形領
域を考慮
𝒄
• [0,1]上の一様乱数αと[0,c]上
の一様乱数βの組(α,β)を繰り
返しN組生成
• 点(α,β)が関数𝑓(𝑥)の下側に
ある回数,すなわち,β≤f(α)と 𝟎
なる回数がMであれば,cM/N
が𝐼の推定値
𝟏
15
モンテカルロ法(その2)
入門的(introductory)モンテカルロ
• 𝐼=
1
𝑓
0
𝑥 𝑑𝑥の評価例
• [0,1]上の一様乱数
𝛼𝑡 (t=1,…,N)を生成
• 𝑁
𝑡=1 𝑓( 𝛼𝑡 )/𝑁が𝐼の推定
値
𝒄
𝟎
𝟏
16
授業内演習(宿題8.1)
• πの値を、
1 当たり外れのモンテカルロ
(2)入門的モンテカルロ
で推定しなさい。同じ「サンプルサイズ」に対し
て、どちらの方法の「精度」がよいと考えます
か?
• 授業時間中に少なくとも一方の方法でプログ
ラムを動かせるように!
• 授業中にプログラムができたか否かに関わら
ず宿題8.1を提出すること.
17
宿題8
(プログラム、結果、考察を提示すること)
• 宿題8.1
πの値を(1)当たり外れのモンテカルロ、(2)入門的モンテカ
ルロ、で推定し、どちらの方法が精度のよい推定結果を生
むか調べなさい。さらに、いずれかの方法(両方でもよい)
を想定して、サンプルサイズと結果の精度との間にどのよう
な関係があるか調べて、考察しなさい。
• 宿題8.2
さいころの目をシミュレートするプログラムを作成した上で
実行し、いくつかの基本的な方法を用いて、得られた結果
が妥当と考えられる(または、考えられない)ことを示しなさ
い。解答にあたっては、シミュレーション結果をExcelを用い
て分析してもよい。
• 提出の必要のない課題(後の演習で使用予定)
平均λの指数分布にしたがう乱数を生成する関数を作れ。
18
参考文献
[1]森戸晋,逆瀬川浩孝,システムシミュレー
ション,朝倉書店,2000.
[2]D.P.Kroese, T.Taimre, Z.I.Botev, Handbook of
Monte Carlo Methods, Wiley, 2011. (伏見正則,
逆瀬川浩孝監訳,「モンテカルロ法ハンドブッ
ク」,朝倉出版,2014)
[3]津田孝夫,モンテカルロ法とシミュレーショ
ン<改訂版>,培風館,1977.
19