Chandler@Berlin -29ページ目

Chandler@Berlin

ベルリン在住

p.60: Star discrepancy D_N^*

誤解を恐れずに言えば,Quasi-Monte Carlo 法は2つの矛盾した目標を達成しようとしている.

- 分布の不規則性(irregularity of distribution)を最小化する.
- aliasing 問題を避けるため regular な uniform sampling はしない.

分布の不規則性を最小化するには,不規則でないもの,つまり regular なuniform sampling を行えば良い.しかし,regular な uniform sampling ではaliasing の影響を受けてしまい,Monte-Carlo 法の利点がなくなってしまう.

この discrepancy は,irregularity of distribution を数値化する方法である.これはどれだけの integration error が起こりそうかを示す数値である.

Star discrepancy D_N^* は,discrepancy の一種で,これは原点を含む様々な形の box をサンプルした場合に,それらの box の area を間違えてしまう最大の値である.

1 次元の場合には,箱は線になるので,原点を含む様々な長さの線をサンプルすることに相当する.N 点でサンプルすると,Uniform に distribute しても1/(2N) 以下はサンプルできない.この場合には Sampling theory そのものなので問題はないが,高次元(s次元)になるとO((log(N)^s) /N) という話がある.

なぜ O((log(N)^s) /N) なのかは残念ながら私にはよくわからない.1 次元の場合には適用できないことも謎だ.どうやらややこしい証明があるということである.しかし,どんな分布になるのかは plot してみると図1 のようになっている.サンプル数が少ない場合や,高次元の場合にはエラーが大きいので傾向はわかるが,それだけしかわからないのは残念である.これは log(N)^s と N の増大の比だから,明らかという人もいらっしゃることであろうが,一度見てみたかった.

Chandler@Berlin-star discrepancy

これを Plot する program はここである.matlab/octave という言語で書いてある.
-----
%
% visualize star discrepancy
% Octave code: 2010 (C) Shitohichi Umaya
%
x = [10000:100:1000000];
s = 2
y1 = power(log(x), s)./x;
s = 3
y2 = power(log(x), s)./x;
plot(x,y1,"1;(log N)^s/N, s=2;", x,y2,"3;(log N)^s/N, s=3;")
-----

謝辞
Discrepancy に関する質問に答えて下さった Alexander K. に感謝する.
しばらく前の Template error の話の時に作っていたものは,Sierpinski の tetrahedron である.http://en.wikipedia.org/wiki/Sierpinski_triangle やっと今日プログラムが動いた.

このために今回は OpenMesh (http://www.openmesh.org ) という mesh をちょっと使ってみようと思って挑戦してみた.自分で作ったメッシュライブラリもあるが,結局私の場合には問題を解くのが主眼なので,良い FreeSoft があるならば,そっちを使う方がメッシュそのものをデバッグする必要がないだろうから良いと思う.

図 1 は OpenMesh でどのように Tetrahedron の頂点をconsistent に取得するかを示している.consistent に頂点を取得するという意味は,図1 の上図のO_{0,1,2,3} となるように頂点を得るにはどうするかということである.たとえば,Tetrahedron の 4つの頂点をとれたとしても,上図で O_1 と O_3 が入れ変わっているような状況では Sierpinski の tetrahedron を作るのに都合が悪い.

Chandler@Berlin-Figure 1
Figure 1: tetrahedron configuration


Chandler@Berlin-Figure 3
Figure2: creation rule 1
Chandler@Berlin-Figure 2
Figure 3: creation rule 2



実は私は本来これをどのようにべきかは知らないが,OpenMesh の mesh circulator が face から halfedge への対応を教えてくれるので,これに依存することにした.おそらくこれで良いと思うが.もっと良い方法があればcomment 下さい.ただし,入力が Tetrahedron なのかを最初に調べる必要がある.これも次のように circulator を使う.

1. 一つ面 f0 を選ぶ.

2. f0 の 1-ring neighbor の面を face face circulator で取得する.f0 と合わせて 4 つの面 (f0, f1, f2, f3) が得られる.もし,得られなかった場合には境界があったことになるが,Tetrahedron には境界はないので,これは tetrahedron ではない.

3. 全ての {f0, f1, f2, f3} についてその 1-ring neighbor がこの 4つのいずれかかを調べる.もし知らない face があればこれは tetrahedron ではない.(実際には f1, f2, f3 は f0 の circulator で得られたので,f0 に関しては調べる必要はない.)

consistent な頂点リストが得られれば,あとば,図 2 と図 3のルールを使って Siepenski の Tetrahedron を作成することができる.結果を OpenGL でrendering すると,以下の図のようになる.特に新しいわけでも,難しいものでもないのだが,久しぶりに mesh の program を書いて楽しかった.


Chandler@Berlin-Sierpinski 1 Chandler@Berlin-Sierpinski 2 Chandler@Berlin-Sierpinski 6



学会のスケジュールを図示するプログラムを以前から利用していたが,しばらく前に http://www.realtimerendering.com/ という blog で学会のスケジュール表という話の中で取り上げられてちょっとした議論があった.この表は,論文が reject された時に,一番近い投稿可能な学会はどこかということを一覧するのが便利である.この表では deadline と学会の開催時が time line 上で一覧できる.

議論の後,この表を作成するプログラムが,free software として公開された.ソースコードは http://code.google.com/p/gen-conference-schedule-table/ から download できる.

download して unit test のスクリプトを実行すると,以下のような図が表示される.html の image map も生成され,Web browser の中ではクリッカブルマップとなっている.(この blog の中ではそのように設定していない..)

Chandler@Berlin

Eurographics の会議の page がこういう図でできていたら嬉しい.
http://www.eg.org/EG/News/upcomingevents
http://confcal.vrvis.at/