ガンベル分布サンプリング; Gumbel Distribution Sampling
概要
ガンベル分布とは以下の式で表現される確率分布。なんからの確率分布に従う複数の確率変数\(X\)の最大値が従う確率分布である。
$$f(x)=\frac{1}{\beta} exp \left(- \frac{x-\lambda}{\beta} \right) exp \left( -exp \left(- \frac{x-\lambda}{\beta} \right) \right) $$
ソースコード
namespace ExRandom.Continuous {
public class GumbelRandom : Random{
readonly MT19937 mt;
readonly double beta, lambda;
public GumbelRandom(MT19937 mt, double beta = 1, double lambda = 0) {
if(mt == null) {
throw new ArgumentNullException();
}
if(!(beta > 0)) {
throw new ArgumentException();
}
this.mt = mt;
this.beta = beta;
this.lambda = lambda;
}
public override double Next() {
double u = mt.NextDouble_OpenInterval01();
return lambda - beta * Math.Log(-Math.Log(u));
}
}
}
関連項目
メルセンヌ・ツイスタ
各種確率分布サンプリング基本クラス