先週の内容: 科学シミュレーション...
TRANSCRIPT
2011年11月11日
2011年度 後期
仮想実験特論(第6回)システム情報科学府 情報学専攻 アドバンス科目 担当:高見 利也
1
授業計画と単位認定! 授業の予定
! 第1回: 仮想実験とは何か、授業の目的と計画、参考書など! 第2回~5回: 様々な分野のシミュレーション! 第6回~9回: シミュレーションの要素技術! 第10回~13回: 科学シミュレーションの実際! 第14回、15回: まとめなど
! 単位認定の基準! 出席点4割、レポート6割! 試験はなし
! レポートについて! 合計4回を予定。電子メールで提出すること。
2
先週の内容: 科学シミュレーション! 科学 (物理、化学、生物など) 分野のシミュレーションの目的
! 未知のもの・ことを発見するためのシミュレーション! 未知?:物質だけでなく、理論や計算手法、詳細な性質など
! 他の分野のシミュレーションと比較すると・・・! 比較的シンプルなシミュレーションが多い⇒ 検証の容易さと本質的な問題を明確にするため
! 逆に現実と完全に一致させようとするシミュレーションも⇒ 第一原理シミュレーション
! 出来るだけシナリオを想定しない。! シミュレーションプログラムの内容がわかる方が望ましい。
3
今日の内容
! 4回に渡ってシミュレーションの要素技術を解説する1回め。今回は、計算機と計算量、アルゴリズム。
! 内容は次の通り:! シミュレーションのために必要な計算機の知識! 浮動小数点計算の回数、計算量! 疑似乱数発生法! 高速アルゴリズムとその利用例「Quick Sort」「FFT」! 最適化問題と数値シミュレーション
4
計算機の知識(最低限必要なもの)! 基本的には計算機の利用者として最低限のことを理解していればよいが、特に大規模な計算や速度の限界まで性能を追求するにはハードウェアの知識もあると役に立つことがある。! CPU, Memory, Hard disk, Networkなどのハードウェア! OSやプログラミング言語などのソフトウェア
! Windows, Linux! FORTRAN, C/C++, Java, Perl, Python, Ruby, Shell
! 数値表現と数値計算の精度に関する知識(浮動小数点、丸め誤差)! 画面表示、画像フォーマットなどGraphic出力に関する知識! 並列計算(MPI, OpenMP)と性能評価(FLOPS, Gbps)の知識
5
計算機の性能評価! 様々な面で計算機の性能は評価されるが、シミュレーションの実施に必要なのは、計算速度、通信速度、データの読み書きの速度! 計算速度:1秒当たりの浮動小数点計算の回数で評価
! 単体CPUで、実効1GFlopsから16GFlops程度! 最新のGPUで、1TFlops程度
! 通信速度:単位時間当たりのデータ転送量、レイテンシで評価! 10GbEで10Gbps、InfiniBandも同じ程度だがレイテンシが小さい
! データの読み書き速度:! 最大で6Gbps (600MB/sec) 程度(シリアルATA3.0)
6
問題サイズと計算量
! 代表的なアルゴリズムの計算量! N ベクトル・N x N 行列計算:
! 内積 O(N)、行列ベクトル積 O(N2)、 行列積 O(N3)
! 密行列の固有値、行列式、LU分解 O(N3)、後退代入 O(N2)
! データサイズ N に対して! Bubble Sort O(N2)、Heap Sort、Quick Sort O(N log N)
! Fourier 変換 O(N log N)
7
ベクトル・行列計算の計算量! 内積: ⇒! 行列ベクトル積: ⇒! 行列積: ⇒! LU分解:本質的にGauss消去と同じ ⇒! 行列式:LU分解した行列の対角要素の積から計算 ⇒! 実対称行列の固有値計算
! 三重対角化(Householder変換):! 三重対角行列の固有値(QR法、二分法):
u · v =N!1!
k=0
ukvk
u = Av, uk =N!1!
j=0
Akjvj
A = BC, Aij =N!1!
k=0
BikCkj
O(N3)
O(N3)
O(N3)
O(N)
O(N)
O(N3)
O(N2)
8
疑似乱数について! シミュレーションでは、乱数列を利用することがある。! 再現性が重要なため、疑似乱数を使う。
! 一様乱数の生成には、線形合同法など様々なアルゴリズムがある! 最近では、メルセンヌ・ツイスター(松本眞、1996)
! GPUでも使えるアルゴリズムも提案されている! 正規乱数が必要な場合は、Box-Muller 法などを利用する
! α、βを (0,1] の一様乱数として、次の数を計算する:
http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/mt.html
!! log ! sin(2"#),
!! log ! cos(2"#)
9
Sortingアルゴリズム! 並べ替えアルゴリズムの例
! Bubble Sort: 配列上での順序交換! 比較の回数 N(N-1)/2 ⇒ O(N2)
! Heap Sort: Binary tree の利用! Delete, Insert ともに log N 回の操作! N Insert + N Delete の操作で完了⇒ O(NlogN)
! Quick Sort: 配列の二分割の繰り返し! 配列中の適当な値を pivot にして二分割! 深さは最悪 N、平均 logN ⇒ O(NlogN)
8 1 1 1 1 1 1
2 8 2 2 2 2 2
5 2 8 3 3 3 3
1 5 3 8 4 4 4
7 3 5 4 8 5 5
3 7 4 5 5 8 7
4 4 7 7 7 7 8
1
23
74 5 8
6 10 9
8 2 5 1 7 3 4
2 5 1 7 3 4 8
2 1 3 4 5 7 8
1 2 3 4 5 7 8
1 2 3 4 5 7 8
10
Heap Sort (1)! 次の完全二分木(complete binary tree)を考える
! 各 node は値を保持し、最大2個の child nodes を持つ! parent node の保持する値 ! child nodes の保持する値
! Insert 操作:! 最後に値を追加する! root に向かって緩和(parent より小さければ交換)
! Delete 操作:! root の保持する値を取り出し、最後の値と交換する! leaf に向かって緩和(小さい方の child を parent に)
11
Heap Sort (2)! Binary tree を1次元配列x[0], x[1], ..., x[N-1]として保持する
! x[k] の child は、x[2k+1] と x[2k+2]! 途中に空きがなければ、「tree の段数」 ! 1+log2N
! N Insert + N Delete で sort された値が取り出せる! 各 Insert / Delete 操作で緩和完了までの値の比較と交換は、最大で(「tree の段数」-1) 回だけですむ
! N Insert の計算量 ≈ O(N log2N)! N Delete の計算量 ≈ O(N log2N)
12
Sortingの速度! Bubble/Heap/Quick Sortの速度比較! プログラム: Perlで作成! データ: 一様乱数! 比較対象: sort コマンド
Bubble
QuickHeap
sortT
ime
(sec
)
Number of Data
0.001
0.01
0.1
1.0
10.0
100.0
10 100 1000 10000 100000
13
並べ替えの応用! 二次元膜の固有振動数(二次元ビリヤード問題)
! 境界で振幅ゼロという条件(Dirichlet条件)! 微小振動の仮定より線形波動のみ
! 境界が a x b の長方形の場合は?
! m, n (1, 2, ...)を決めると固有振動数が決まる。! 固有値統計
! 固有値列の性質や、固有値間隔の分布などを問題にする! 小さい順に並べ替え・unfold 操作 ⇒ 平均間隔1の分布に規格化
!!
!2
!x2+
!2
!y2
"f(x, y) = Ef(x, y)
f(x, y) = 0
f(x, y) = Cmn sin!m!x
a
"sin
!n!y
b
", E =
!m!
a
"2+
!n!
b
"2
14
量子力学との関連(固有値統計)! 長方形の剛体壁で囲まれた領域での量子粒子の運動
! 境界との弾性衝突でエネルギー保存 ⇒ ポテンシャル ! の壁! ハミルトニアン:
! ビリヤード系の固有値に対する Weylの公式(S: 面積、L: 境界長)
[a x b の長方形(Dirichlet B.C.)、S=ab、L=2(a+b)]
! Ref: Bohigas/Gianonni/Schmit ’84、Berry/Tabor ’77
V (q) =!
0 (within boundary)! (out of boundary)
H(p,q) =p2
2m+ V (q), p =
!!i! !
!x,!i! !
!y
"
N(E) ! S
4!E " L
4!
#E N(E) ! ab
4!E +
a + b
2!
"E
15
固有値の最近接間隔分布! 整数 (m, n) ⇒(sorting)⇒ 固有値列 {Ej} : ! unfolding (Weyl’s formula):! 隣接固有値間隔 Sj=N(Ej+1)-N(Ej)
! {Sj}の分布関数は?
N(E) ! ab
4!E +
a + b
2!
"E
Emn =!m!
a
"2+
!n!
b
"2
Nu
mb
er o
f E
igen
va
lues
unfolded Energy
0
10
20
30
40
50
60
70
80
90
100
0 20 40 60 80 100
P(S)
Spacing
0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
0.0 1.0 2.0 3.0 4.0 5.0
exp(-S)
16
FFTのアルゴリズム! フーリエ変換:! 離散フーリエ変換: ⇒
! N=2n の時:
⇒! 例 N=4:
f̃k =N!1!
j=0
fj exp"
2!i
Nkj
#O(N2)
!
"f̃k
#
$ =
!
%%"N !Nmatrix
#
&&$ · · ·
!
%%"N !Nmatrix
#
&&$
!
"fj
#
$
O(N)個程度のゼロでない要素を持つ行列をlog2N 回演算O(N log2 N)
!
""#
1 0 1 00 1 0 11 0 w2 00 1 0 w2
$
%%&
!
""#
1 0 1 01 0 w2 00 1 0 10 w 0 w3
$
%%& =
!
""#
1 1 1 11 w w2 w3
1 w2 w4 w6
1 w3 w6 w9
$
%%&w = e2!iN , w4 = 1
17
FFTの利用! Schrödinger 方程式の時間発展:! Fourier 変換:
⇒ ⇒
! 長方形領域の場合 ⇒これは、固有関数展開と同じ
! 代入すると、
すなわち、
i! d
dt!(r, t) = !"2!(r, t)
!(r, t) =!
"(k, t)eik·rdk
i! d
dt!(k, t) = |k|2!(k, t) !(k, t) = !(k, 0)e
|k|2i! t
!(r, t) =!
mn
"mn(t) sin"m#x
a
#sin
"n#y
b
#
i! d
dt!mn(t) = Emn!mn(t)
!mn(t) = !mn(0) exp!
Emnt
i!
"
18
最適化問題とシミュレーション! ある集合に特定の性質を持つ物があるかどうかを判定するには
! 多項式時間で判定が可能な P 問題! 非決定的計算により多項式時間で判定できる NP 問題
! 最適化問題の場合! 多項式時間で解けるアルゴリズムがない場合 NP 困難
! 近似解法、遺伝アルゴリズム、etc! シミュレーションの中には離散最適化問題を近似的に解いたり、モンテカルロ法を利用したりするものも存在するが、探索問題や離散アルゴリズムを効果的に取り込んだものは、まだ多くない。
19
参考資料
! 石岡圭一「スペクトル法による数値計算入門」東京大学出版会! 岩波講座 応用数学「離散最適化法とアルゴリズム」岩波書店
20