Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
提出日:2014年5月10日
第一回課題
T2C_ (Twitter: @T2C_)
1
■課題内容
2 次元単体(今回は三角形)内の点の位置を探索する時、
Systematic 法と Monte Carlo 法、どちらが有利であるか。
三角形 ABC の 3 つの頂点までの距離の合計Lが最小となる点Xの探索を基に考察する。
■...
2
――――― 以下 ソースコード ―――――
Function Systematic()
Dim Ax, Ay, Bx, By, Cx, Cy As Double '座標
Dim Zx, Zy As Double '調べる点の座標
Dim N...
3
If p < 0 Then
p = -p
q = 1 - q
r = 1 - r
End If
Zx = p * Ax + q * Bx + r * Cx
Zy = p * Ay + q * By + r * Cy
dist1 = Sqr(...
4
○実行結果
試行回数は全て 400 回(20 * 20)で行った。
・正三角形
・二等辺三角形
・直角三角形
・鋭角な三角形
・ランダムに 3 頂点を生成した三角形
(1~10 までの一様な整数の乱数 ==RANDBETWEEN(1,10)...
5
・直角三角形
・鋭角な三角形(x 軸が長い)
・鋭角な三角形(y 軸が長い)
x y
A 0 0
B 1 0
C 0 3
頂点の座標
最小値
Lmin x y
3.8995 0.35 0.3
座標
x y
A 0 0
B 0 1
C 100...
6
・ランダムに 3 頂点を生成した三角形 ( 1 )
・ランダムに 3 頂点を生成した三角形 ( 2 )
・ランダムに 3 頂点を生成した三角形 ( 3 )
x y
A 3 10
B 5 2
C 8 8
頂点の座標
最小値
Lmin x y
...
7
・ランダムに 3 頂点を生成した三角形 ( 4 )
・ランダムに 3 頂点を生成した三角形 ( 5 )
・ランダムに 3 頂点を生成した三角形 ( 6 )
x y
A 8 8
B 6 4
C 9 2
頂点の座標
最小値
Lmin x y
7...
8
■Monte Carlo 法
○計算内容・概要
格子を形成し規則的に調べていく Systematic 法に比べ、こちらはランダムに図形内に点を生成し
その点からの距離を調べるアプローチを取るものである。
具体的には
1.三角形 ABC の頂...
9
Lmin = 999#
For i = 1 To N
rand1 = Rnd()
rand2 = Rnd()
rand3 = Rnd()
fact = 1 / (rand1 + rand2 + rand3)
rand1 = rand1 * ...
10
○実行結果
今回は Systematic 法に合わせる形で試行回数は全て 400 回で行った。
また調べる三角形も同様に
・正三角形
・二等辺三角形
・直角三角形
・鋭角な三角形
・ランダムに 3 頂点を生成した三角形
とし、サンプルとし...
11
・直角三角形
・鋭角な三角形(x 軸が長い)
・鋭角な三角形(y 軸が長い)
x y
A 0 0
B 1 0
C 0 3
頂点の座標
最小値 座標
Lmin x y
3.90018 0.392476 0.249627
x y
A 0 0
...
12
・ランダムに 3 頂点を生成した三角形( 1 )
・ランダムに 3 頂点を生成した三角形( 2 )
・ランダムに 3 頂点を生成した三角形( 3 )
x y
A 3 10
B 5 2
C 8 8
頂点の座標
最小値 座標
Lmin x y...
13
・ランダムに 3 頂点を生成した三角形( 4 )
・ランダムに 3 頂点を生成した三角形( 5 )
・ランダムに 3 頂点を生成した三角形( 6 )
x y
A 8 8
B 6 4
C 9 2
頂点の座標
最小値 座標
Lmin x y
...
14
■考察
まずは両方法における精度の高さを比較する。
今回の場合は Lmin の値が低い方がより精度が高い(○を記述)とする。
表1 Systematic と Monte Carlo の Lmin の値比較(試行回数 400 回)
上記の表...
15
一方で、出力手法に重みを置かずただ結果のみを採用する場合や、今回のシミュレーションにおいては
例えば大きな三角形の場合であると、Systematic 法よりも Monte Carlo 法の方が良いとも考えられる。
今回それを検証するため、...
16
○試行回数の変更
今回は一律で試行回数を 400 としたので、その事によって見えてこなかったものも恐らくあると考えら
れる。勿論闇雲に行えば良いと言うものでも無いので上述の通りその要素の選定にも技術を培っていく
必要性を感じ、実験や成果を...
Upcoming SlideShare
Loading in …5
×

Simulation_Report1

345 views

Published on

Systematic & Monte Carlo
on VBA (Excel)

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Simulation_Report1

  1. 1. 提出日:2014年5月10日 第一回課題 T2C_ (Twitter: @T2C_)
  2. 2. 1 ■課題内容 2 次元単体(今回は三角形)内の点の位置を探索する時、 Systematic 法と Monte Carlo 法、どちらが有利であるか。 三角形 ABC の 3 つの頂点までの距離の合計Lが最小となる点Xの探索を基に考察する。 ■Systematic 法 ○計算内容・概要 乱数的に求める Monte Carlo 法に比べ、こちらは線分を一定数に分割し図形内に格子を形成し、その交 点上からの各頂点への距離を順次求めてゆくアプローチを取る。 具体的には 1.まず線分 AB を n(指定した数値)等分し、n:n-i に内分する点を I とする 2.線分 IC を j(同じく指定した数値)等分し、j:j-i に内分する点を J とする 3.I、J をずらして行き JA+JB+JC を求める。最小値を保持して置き最後に出力 またこの場合であるとどうしても頂点 C に近づくにつれ点が集約され偏りが出る事が予想出来る為、今 回は一様に分布する方を実装し考察を行うこととした。 具体的には 1.上記と同じく AB を n:n-i に内分する点を I とする 2.線分 AC を j:j-i に内分する点を J とする 3.こうする事によって点 X の取りうる位置の幅が広がり、一様に格子を配置出来るので、その中で三 角形の部分を抽出する(三角形をはみ出した場合反転させるようにする) 4.上記と同じく I、J をずらして行き一定範囲内の AX+BX+CX の最小値を保持する とする。 以下に実際に実装した実装例としてソースコードを示す。 Microsoft Office Excel 2010 上で VBA を用いてプログラミングを行った。
  3. 3. 2 ――――― 以下 ソースコード ――――― Function Systematic() Dim Ax, Ay, Bx, By, Cx, Cy As Double '座標 Dim Zx, Zy As Double '調べる点の座標 Dim N As Double '試行回数 Dim L, Lmin As Double '最小の距離 Dim i, j As Integer '繰り返し制御 Dim p, q, r As Double ' Dim dist1, dist2, dist3 As Double '座標間の距離 Lmin = 1000# With Sheet1 '座標、試行回数読み込み Ax = .Cells(4, 2) Ay = .Cells(4, 3) Bx = .Cells(5, 2) By = .Cells(5, 3) Cx = .Cells(6, 2) Cy = .Cells(6, 3) N = Sqr(Cells(4, 5)) For i = 1 To N - 1 For j = 1 To N p = (N - i - j) / N q = i / N r = j / N
  4. 4. 3 If p < 0 Then p = -p q = 1 - q r = 1 - r End If Zx = p * Ax + q * Bx + r * Cx Zy = p * Ay + q * By + r * Cy dist1 = Sqr((Zx - Ax) ^ 2 + (Zy - Ay) ^ 2) dist2 = Sqr((Zx - Bx) ^ 2 + (Zy - By) ^ 2) dist3 = Sqr((Zx - Cx) ^ 2 + (Zy - Cy) ^ 2) L = dist1 + dist2 + dist3 If L < Lmin Then Lmin = L .Cells(4, 8) = Zx .Cells(4, 9) = Zy End If .Cells(5 + ((i - 1) * N) + j - 1, 11) = L .Cells(5 + ((i - 1) * N) + j - 1, 12) = Zx .Cells(5 + ((i - 1) * N) + j - 1, 13) = Zy Next j Next i .Cells(4, 7) = Lmin End With End Function ――――― ソースコード 終わり ―――――
  5. 5. 4 ○実行結果 試行回数は全て 400 回(20 * 20)で行った。 ・正三角形 ・二等辺三角形 ・直角三角形 ・鋭角な三角形 ・ランダムに 3 頂点を生成した三角形 (1~10 までの一様な整数の乱数 ==RANDBETWEEN(1,10) で生成 ) をサンプルとして与える。 ・正三角形 ・二等辺三角形 x y A 2 0 B 0 2 C 2.7321 2.7321 頂点の座標 最小値 Lmin x y 4.9021 1.656 1.556218 座標 x y A 0 0 B 4 0 C 2 3 頂点の座標 最小値 Lmin x y 6.4648 2 1.2 座標
  6. 6. 5 ・直角三角形 ・鋭角な三角形(x 軸が長い) ・鋭角な三角形(y 軸が長い) x y A 0 0 B 1 0 C 0 3 頂点の座標 最小値 Lmin x y 3.8995 0.35 0.3 座標 x y A 0 0 B 0 1 C 100 0 頂点の座標 最小値 Lmin x y 101 0 0 座標 x y A 0 0 B 1 0 C 0 100 頂点の座標 Lmin x y 101 0 0
  7. 7. 6 ・ランダムに 3 頂点を生成した三角形 ( 1 ) ・ランダムに 3 頂点を生成した三角形 ( 2 ) ・ランダムに 3 頂点を生成した三角形 ( 3 ) x y A 3 10 B 5 2 C 8 8 頂点の座標 最小値 Lmin x y 11.55 6.15 7.3 座標 x y A 6 8 B 1 4 C 2 3 頂点の座標 最小値 Lmin x y 7.5969 1.7 3.75 座標 x y A 3 1 B 8 6 C 7 10 頂点の座標 最小値 Lmin x y 11.224 7.65 6.15 座標
  8. 8. 7 ・ランダムに 3 頂点を生成した三角形 ( 4 ) ・ランダムに 3 頂点を生成した三角形 ( 5 ) ・ランダムに 3 頂点を生成した三角形 ( 6 ) x y A 8 8 B 6 4 C 9 2 頂点の座標 最小値 Lmin x y 7.9193 6.9 4.2 座標 x y A 7 8 B 10 8 C 8 9 頂点の座標 最小値 Lmin x y 3.6346 8.05 8.75 座標 x y A 8 5 B 7 3 C 3 3 頂点の座標 最小値 Lmin x y 6.2382 6.9 3.2 座標
  9. 9. 8 ■Monte Carlo 法 ○計算内容・概要 格子を形成し規則的に調べていく Systematic 法に比べ、こちらはランダムに図形内に点を生成し その点からの距離を調べるアプローチを取るものである。 具体的には 1.三角形 ABC の頂点と内部の点 X の位置ベクトルの関係を利用し、乱数を用いて 三角形内にランダムに点 X を配置する 2.L = AX + BX + CX を求める 3.これまでの最小値と比較し、最小となる L、Lmin を抽出し出力する 以下に実際に実装した実装例としてソースコードを示す。 Systematic法の実装時と同様にMicrosoft Office Excel 2010でVBAを用いてプログラミングを行った。 ――――― 以下 ソースコード ――――― Function montecarlo() Dim i, N, count As Integer '繰り返し制御 Dim Ax, Ay, Bx, By, Cx, Cy As Integer '頂点座標 Dim Zx, Zy As Double '生成した座標 Dim L, Lmin As Double '最小距離 Dim rand1, rand2, rand3, fact As Double '乱数用 Dim dist1, dist2, dist3 '距離用 Randomize With Sheet1 Ax = .Cells(3, 2) Ay = .Cells(3, 3) Bx = .Cells(4, 2) By = .Cells(4, 3) Cx = .Cells(5, 2) Cy = .Cells(5, 3) N = .Cells(3, 5)
  10. 10. 9 Lmin = 999# For i = 1 To N rand1 = Rnd() rand2 = Rnd() rand3 = Rnd() fact = 1 / (rand1 + rand2 + rand3) rand1 = rand1 * fact rand2 = rand2 * fact rand3 = rand3 * fact Zx = rand1 * Ax + rand2 * Bx + rand3 * Cx Zy = rand1 * Ay + rand2 * By + rand3 * Cy dist1 = Sqr((Ax - Zx) ^ 2 + (Ay - Zy) ^ 2) dist2 = Sqr((Bx - Zx) ^ 2 + (By - Zy) ^ 2) dist3 = Sqr((Cx - Zx) ^ 2 + (Cy - Zy) ^ 2) L = dist1 + dist2 + dist3 .Cells(i + 2, 11) = Zx .Cells(i + 2, 12) = Zy If L < Lmin Then Lmin = L .Cells(3, 7) = Lmin .Cells(3, 8) = Zx .Cells(3, 9) = Zy End If Next i End With End Function ――――― 以下 ソースコード終わり ―――――
  11. 11. 10 ○実行結果 今回は Systematic 法に合わせる形で試行回数は全て 400 回で行った。 また調べる三角形も同様に ・正三角形 ・二等辺三角形 ・直角三角形 ・鋭角な三角形 ・ランダムに 3 頂点を生成した三角形 とし、サンプルとして与える。比較のため座標も全く同様にした。 ・正三角形 ・二等辺三角形 x y A 2 0 B 0 2 C 2.73 2.73 頂点の座標 最小値 座標 Lmin x y 5.092643 1.480856 1.622925 x y A 0 0 B 4 0 C 2 3 頂点の座標 最小値 座標 Lmin x y 6.465358 2.054128 1.132372
  12. 12. 11 ・直角三角形 ・鋭角な三角形(x 軸が長い) ・鋭角な三角形(y 軸が長い) x y A 0 0 B 1 0 C 0 3 頂点の座標 最小値 座標 Lmin x y 3.90018 0.392476 0.249627 x y A 0 0 B 0 1 C 100 0 頂点の座標 最小値 座標 Lmin x y 100.8783 0.20888 0.404448 x y A 0 0 B 1 0 C 0 100 頂点の座標 最小値 座標 Lmin x y 100.8741 0.406212 0.232187
  13. 13. 12 ・ランダムに 3 頂点を生成した三角形( 1 ) ・ランダムに 3 頂点を生成した三角形( 2 ) ・ランダムに 3 頂点を生成した三角形( 3 ) x y A 3 10 B 5 2 C 8 8 頂点の座標 最小値 座標 Lmin x y 11.54894 6.010303 7.277972 x y A 6 8 B 1 4 C 2 3 頂点の座標 最小値 座標 Lmin x y 7.590946 1.727644 3.793848 x y A 3 1 B 8 6 C 7 10 頂点の座標 最小値 座標 Lmin x y 11.2357 7.614158 6.199017
  14. 14. 13 ・ランダムに 3 頂点を生成した三角形( 4 ) ・ランダムに 3 頂点を生成した三角形( 5 ) ・ランダムに 3 頂点を生成した三角形( 6 ) x y A 8 8 B 6 4 C 9 2 頂点の座標 最小値 座標 Lmin x y 7.920299 6.876857 4.171129 x y A 7 8 B 10 8 C 8 9 頂点の座標 最小値 座標 Lmin x y 3.637884 8.055263 8.704134 x y A 8 5 B 7 3 C 3 3 頂点の座標 最小値 座標 Lmin x y 6.246738 6.828555 3.264429
  15. 15. 14 ■考察 まずは両方法における精度の高さを比較する。 今回の場合は Lmin の値が低い方がより精度が高い(○を記述)とする。 表1 Systematic と Monte Carlo の Lmin の値比較(試行回数 400 回) 上記の表からわかる通り、試行回数 400 回における差異はそこまで認められず、 また各 Lmin の値を比較してわかる通り、Lmin の値自体にも、あくまで座標の値の大きさ、 つまり三角形の大きさとの比率で見て、ではあるが、大きな差は認められなかった。 ゆえに試行回数を増やしても圧倒的にどちらが有利と言い切れる差が出るとは断定し切れない事が予測 出来る。 しかし観点別に見ると若干ながら差異が出る。 実用上の観点から見ると、例えば乱数を用いた方法、つまり Monte Carlo 法の方は、 出力したデータと同じ出力データを再び出力出来ない、つまり再現性が低く、 また数理的な証明に利用する場合にその正当性の保証が大変難しくなると言う難点が予想出来る。 またその時々によって精度の良さが左右されるので、試行回数を十分大きくしなければ 大きな偏りが出る可能性が否定出来ない所もある事を今回より実践的に理解出来たと言える。 加えて今回は Monte Carlo 法を実装するに当たって一様性を持たせられなかったので、 どうしても頂点付近の点が少なくなる、つまりその点でも偏りが出てしまったが、 これが有利に働く可能性も否定はし切れないことが考えられる。このデータの偏りは恐らく中心極限定 理に拠るものでは無いだろうか。 Systematic Monte Carlo 正三角形 ○ 二等辺三角形 ○ 直角三角形 ○ 鋭角な三角形(x軸に長い) ○ 鋭角な三角形(y軸に長い) ○ ランダムな三角形(1) ○ ランダムな三角形(2) ○ ランダムな三角形(3) ○ ランダムな三角形(4) ○ ランダムな三角形(5) ○ ランダムな三角形(6) ○ 種類 方法 精度比較
  16. 16. 15 一方で、出力手法に重みを置かずただ結果のみを採用する場合や、今回のシミュレーションにおいては 例えば大きな三角形の場合であると、Systematic 法よりも Monte Carlo 法の方が良いとも考えられる。 今回それを検証するため、x 軸に極端に長い鋭角な三角形、y 軸に極端に長い鋭角な三角形を用いて 比較を行ったが、予測通り Monte Carlo 法の方が精度が高かった。これは Systematic で大きな三角形を 格子状に分割する際、そのマス目は試行回数と反比例するように巨大化し、より効率的な箇所も飛ばし て比較を行うためであることが考えられる。しかし予測ほど実測値に開きが出なかったので、この点に おいては議論の余地が大幅に残されているとし要検証であるだろう。 結論として、今回の実験では Systematic、Monte Carlo、どちらの手法も大きな差異は見受けられない が、実際に活用していく際に使い分けてゆく必要性を見つめることが出来た。 ■課題・今後の展望 今回の実験では、数え切れないほど多くの課題を残し、検証も大変に不十分であった。 しかし見えてくるものも多かったのでそれらに関しても考察・記述する。 ○三角形の種類の選定 今回、こういった実験に対し目測や予測の経験の無さ、不十分さを十二分に痛感した。 まずこういった場合どういう観点で枠組みを決めれば良いのかわからず、三角形の種類と、差異が出そ うな種を幾つか挙げるに留まったが、本来であれば考え得る限りの枠組みで検証してみるべきであった と感じた。その点で言えば x 軸のみ極端に大きい、y 軸のみ極端に大きい、などは非常に好例であったが 例えば乱数で頂点を生成するなどは不必要とまでは行かないが意義が不足している印象を受けた。 それは上述の通り乱数に拠って生成したものはその再現性やバラつきに拠って人間に取って意味を捉え 辛いという事実を背景とする。 ○速度やオーダの比較 今回はプログラムのソースコードに関して強く踏み込まなかったが、実際はソースコードの検証も非常 に有意義であり十分な必要性を持つと感じた。例えばそこから効率化や高速化の糸口を見付けられれば 広い範囲において応用が利くためである。今回に限って言えばアルゴリズムや目的はわかりつつ、数学 への不慣れから上手く自分の中でイメージ化や既存の知識との結び付けが難航した。今後こういった事 態に陥った時にどの様に対処するかは常に考え続けてゆくべき課題であると強く認識した。
  17. 17. 16 ○試行回数の変更 今回は一律で試行回数を 400 としたので、その事によって見えてこなかったものも恐らくあると考えら れる。勿論闇雲に行えば良いと言うものでも無いので上述の通りその要素の選定にも技術を培っていく 必要性を感じ、実験や成果をまとめる難しさの壁に当たった印象である。 ○他の検討方法・実装不足な箇所 今回実装できたのは一様な Systematic と一様でない Monte Carlo のみであり、また角度(∠AXB 等) の算出もわからず残ってしまった。また他の検討方法として、中心近くのみを探索する方法、それに関 連して明らかに違いそうな所を除去する方法、などが浮かんだが実装方法が浮かばず断念した経緯もあ る。これらはあって無駄、ということは無さそうなので、今回は期限までの時間の使い方を誤ったが 今後の挑戦課題として取り組んで行く次第である。 ○応用発展 今回は二次元平面上での実験であったが、応用させれば 3 次や更に高次元、複素平面上でも活用してい けるのではと考える。更にグラフ理論、取り分け思いついたのはダイクストラ法やベルマンフォード法 や A*法などのように経路探索、最短経路問題等にも有効でありそうなことである。 どの様に繋ぎ合わせるかはまだ道筋すら見えないが、壁にぶつかるだけでなくそう言った楽しみを見出 だせる実験であった。 ■結び 上述の通り種々新しい気付きもあったが、概ねは反省やそれに準ずる方向であったので、 これからの糧として行き、行く行くは取り組む研究に対する知識や技術、経験の集約に努めたい所であ る。 それから今回は珍しく参考にする物が授業内で扱ったプリントやノートのみであったので、 ネット上でも色々と調べることを試み、より多くの道への道標としたい。 今回は時間の見積もりを誤ってしまったので慢性的な時間不足と闘いながらの作成であったが、 次回以降は十分な時間と前条件(数学など)を以て形を問わず良質な成果発表を行えるように してゆく次第である決意の表明を以て本レポートの結びとする。

×