乱数によるPath生成の作業は、いくつかの土台となるパーツとコンセプトを、ひとつに取り纏めたものです。我々のライブラリーの中での実装方法は、さらにいくつかのプログラミングのテクニックをそれに加えたものです。(PathGeneratorクラス)を構築していくかについて、説明します。Generator)。1の間で一様分布する乱数)。Sobolが最も有名です。RNGをいつ、どの様なケースで使えばよいのかについて、概観します。このような情報は(さらにモンテカルロ法に関する様々な事柄については)私よりも、もっとうまく説明している文献が多数ありますので、それらを参考にして下さい。インターフェースを示しますが、あまり興味をそそるようなものではありません。};これらのクラスのメソッドは、読者の方が予想されるであろう通りの内容です。)メソッドが用意されています。)メソッドが用意されています。)でもよかったと思います。goto命令文のように誤解される危険性があります。(weight)の値も保持します。Samplingを使った場合。Samplingはモンテカルロシミュレーションの収束速度を上げる為に、特定の範囲、例えばオプションの行使価格付近に集まった乱数について加重をかけるようなテクニック。RNGはすべて同一ウェイトのサンプルを返すようになっています。RNGの説明は以上です。この部分は最も生の原材料であり、ここから加工を加えていく必要があります。(WrappersやCombinatorsと呼ばれるクラスを使います。Decoratorパターンの実装と言ってもかまいません)によって為されて行きます。Decoratorクラスが必要です。ひとつ目は、1つだけの乱数ではなく、乱数の集合が必要になります。N個の乱数が必要になります。(注:そもそも、準乱数列の生成方法がそういうものです。与えられた次元数に合わせて、分布からの乖離が最も小さくなるように乱数を揃えるからです。RNGについても、一個一個生成された乱数をひとまとめにして、それを返せるようにしたいと思います。(訳注:ガウス分布、すなわち正規分布となる乱数)です。ガウス乱数を生成する方法はいくつかありますが、どの方法でも、すべてのケースで最善な方法という事ではありません。Rejectionテクニックを使うように、必要なMの個数が生成ごとに変化するような場合)。逆関数を使って一様乱数からガウス乱数を導出する方法でしょう。QuantLibライブラリーの中では、基本的にこの方法を使っています。Templateの引数として取るよう実装されています。この関数には解析解が存在しないため、近似式を使っています。通常のケースでは、ライブラリーの中で提供されている近似式で十分ですが、計算速度よりも正確さが必要であったり(あるいはその逆であったり)する様な場合には、その関数を自分が必要とする関数に入れ替えてもかまいません。};この時点ですでに、読者の方は、以上のプログラムの枠組みに対して、心地よくないと感じ始めたかもしれません。RNGのインスタンスを作るのに3つの選択肢があり、そこから2つを選んでいます。Template引数を持たざるを得なくなるのではないかと。それについては、あと数ページ我慢して下さい。後の章で、QuantLibライブラリーがその問題をどのように軽減しようとしているか説明します。sequenceを持ち、乱数のコピーを避けるため都度新しい乱数を生成してデータを埋めています。そのことによって、そのようなクラスのインスタンスが、他の異なるスレッドとシェアされる事を防いでいます。マルチスレッド環境におけるQuantLibの持つ問題点がすべてこのように対応できていたならば、私は大変な幸せ者です。RNGが含まれることになりました。どこかの段階で、おそらくそちらのインターフェースに変更するでしょうが、いつ、どのようにしてやるかは、まだ決まっていません。今あるプログラムコードを捨てて標準ライブラリーに変更するかもしれません。今あるクラスのインターフェースだけを変更して今のプログラムコードを残す事もできます。Adaptorsを使って2つのインターフェースを提供する事もできます。QuantLibライブラリーの全面的なバージョン変更の時まで待たなければならないでしょう。2002.<ライセンス表示>QuantLibのソースコードを使う場合は、ライセンス表示とDisclaimerの表示が義務付けられているので、添付します。