Quantlibで乱数と準乱数の生成

メモ

乱数

//宣言
#include <ql/math/randomnumbers/mt19937uniformrng.hpp>
using namespace QuantLib;

//使い方
MersenneTwisterUniformRng generator(12345);//12345はseed
for (int i=0; i<N; i++) {
    randoms[i] = generator.next().value;
}

準乱数(Sobol)

21200次元まで生成可能。

//宣言
#include <ql/math/randomnumbers/sobolrsg.hpp>
using namespace QuantLib;
typedef std::vector<QuantLib::Real>QMCPoint;

//利用
QMCPoint qPoint;
SobolRsg sobol(N, 1);  //QMCの次元とseed(列の何番目から使うか)
QMCPoint qPoint = sobol.nextSequence().value;
for (int k=0; k<(int)qPoint.size(); k++) {
    qRandoms[k] = qPoint[k];
}