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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 15
一方で、出力手法に重みを置かずただ結果のみを採用する場合や、今回のシミュレーションにおいては
例えば大きな三角形の場合であると、Systematic 法よりも Monte Carlo 法の方が良いとも考えられる。
今回それを検証するため、x 軸に極端に長い鋭角な三角形、y 軸に極端に長い鋭角な三角形を用いて
比較を行ったが、予測通り Monte Carlo 法の方が精度が高かった。これは Systematic で大きな三角形を
格子状に分割する際、そのマス目は試行回数と反比例するように巨大化し、より効率的な箇所も飛ばし
て比較を行うためであることが考えられる。しかし予測ほど実測値に開きが出なかったので、この点に
おいては議論の余地が大幅に残されているとし要検証であるだろう。
結論として、今回の実験では Systematic、Monte Carlo、どちらの手法も大きな差異は見受けられない
が、実際に活用していく際に使い分けてゆく必要性を見つめることが出来た。
■課題・今後の展望
今回の実験では、数え切れないほど多くの課題を残し、検証も大変に不十分であった。
しかし見えてくるものも多かったのでそれらに関しても考察・記述する。
○三角形の種類の選定
今回、こういった実験に対し目測や予測の経験の無さ、不十分さを十二分に痛感した。
まずこういった場合どういう観点で枠組みを決めれば良いのかわからず、三角形の種類と、差異が出そ
うな種を幾つか挙げるに留まったが、本来であれば考え得る限りの枠組みで検証してみるべきであった
と感じた。その点で言えば x 軸のみ極端に大きい、y 軸のみ極端に大きい、などは非常に好例であったが
例えば乱数で頂点を生成するなどは不必要とまでは行かないが意義が不足している印象を受けた。
それは上述の通り乱数に拠って生成したものはその再現性やバラつきに拠って人間に取って意味を捉え
辛いという事実を背景とする。
○速度やオーダの比較
今回はプログラムのソースコードに関して強く踏み込まなかったが、実際はソースコードの検証も非常
に有意義であり十分な必要性を持つと感じた。例えばそこから効率化や高速化の糸口を見付けられれば
広い範囲において応用が利くためである。今回に限って言えばアルゴリズムや目的はわかりつつ、数学
への不慣れから上手く自分の中でイメージ化や既存の知識との結び付けが難航した。今後こういった事
態に陥った時にどの様に対処するかは常に考え続けてゆくべき課題であると強く認識した。