主要内容

このページの翻訳は最新ではありません。ここをクリックして,英语の最新版を参照してください。

准乱数の生成

準乱数列

準乱数発生器 (QRNG)は、単位超立方体のきわめて一様な標本を生成します。準乱数発生器は、超立方体の一様な分割のサブキューブごとに、生成された点の分布と点を均等に配置した分布の間の“不一致”を最小化します。その结果,准乱数発生器は,生成された准乱数列の初期セグメント内で体系的に “穴” を満たします。

一般的な疑似乱数発生法で说明した疑似乱数列とは异なり,准乱数列は多くのランダム统计検定に失败します。しかし,真のランダムの近似はその目的ではありません。准乱数列は,初期のセグメントがこの行动を指定の密度まで近似させる方法により,均一に空间を満たします。

准乱数発生器の适用例としては,次のようなものがあります。

  • 準モンテカルロ法 (QMC)モンテカルロ法は,闭形式解なしで难しい多次元积分を评価するためにしばしば使用されます。准モンテカルロ法は准乱数列を使用して,この技术の收束プロパティを改善します。

  • 空白を埋める実験计画。多くの実験設定において、すべての要因設定で測定を行うことは費用がかかり、不可能です。準乱数列は効率的で一様なサンプリングの設計空間を提供します。

  • グローバルな最适化。最适化アルゴリズムは一般的に初期値の近傍で局所的な最适値を见つけます。初期値の准乱数列を使用することにより,グローバルな最适値検索は,すべての局所的な最小の引き込み领域を一様にサンプリングします。

例:スクランブル,リープおよびスキップの使用

単纯な1次元の数列で1〜10の整数を生成するとします。この基本的な数列の最初の3つの点は[1,2,3]です。

それでは、跳过、およびがどのように機能するかを見ていきましょう。

  • - スクランブルは,さまざまな方法のいずれかで点を入れ替えますこの例では,スクランブルによって,数列が1,3,5,7,9,2,4,6,8,10に変换されます。最初の3つの点は[1,3,5]になりました。

  • 跳过-跳过値は,无视する最初の点の数を指定します。この例では,跳过の値を2に设定します。数列は5,7,9,2,4,6,8,10になり,最初の3つの点は[5,7,9]になります。

  • -値は,1回ごとに无视する点の数を指定します。この例でを 1.に、跳过を2に设定すると,数列の点は1つおきに使用されます。この例では,数列は5,9,4,8になり,最初の3つの点は[5,9,4]になります。

准乱数の点集合

统计和机器学习工具箱™关数は,以下の准乱数列をサポートします。

  • ハルトン列。关数haltonsetによって生成されます。この列は,异なる主要ベースを使用して,ユニット间隔のより细かい一様な分割を次元ごとに连続して形成します。

  • ソボル列。关数sobolsetによって生成されます。この列は,2の基底を使用して,ユニット间隔のより细かい一様な分割を连続して形成し,さらに,次元ごとに座标を并べ替えます。

  • ラテン超方格列。关数lhsdesignによって生成されます。不一致を最小化するという意味では準乱数ではありませんが、この列は実験計画に役立つスパースな一様標本を生成します。

准乱数列は正の整数から単位超立方体までの关数です。応用で役立てるには,数列の初期"点集合"を生成しなければなりません。点集合はサイズÑ行d列の行列です。ここで,正は点の数であり,dはサンプリングされている超立方体の次元です关。数haltonsetsobolsetは,指定の准乱数列のプロパティで点集合を构成します。点集合の初期セグメントは,haltonsetクラスとsobolsetクラスのメソッドによって生成されます。ただし,かっこによるインデックス付けを使用すると,点の生成とアクセスをより一般的に行うことができます。

准乱数列を生成する方法が原因で,それらは,特に初期セグメントとより高次の次元内に不适当な相关关系を含む可能性があります。この问题に対处するため,多くの场合,准乱数の点集合では数列内の値を“スキップ”“リープ”または“スクランブル”します。关数haltonsetおよび关数sobolsetを使用すると、準乱数列の跳过プロパティとプロパティの両方を指定できます。また,haltonsetクラスおよびsobolsetクラスのメソッドを使用すると,さまざまなスクランブル方法を适用できます。また,スクランブルは一様性を改良しながら,相关关系を减少します。

准乱数の点集合の生成

この例では,haltonsetを使用して 2.次元 哈尔顿準乱数点集合を構築する方法を説明します。

haltonsetオブジェクトP.を作成し,シーケンスの最初の1000个の値をスキップし,101番目ごとの点を保持します。

rng默认%为了再现性P = haltonset(2,“跳过”,1E3,'飞跃',1E2)
P =哈尔顿点集在2个维度(89180190640991分)性状:跳过:1000飞跃:100 ScrambleMethod:无

オブジェクトP.は指定の準乱数列のプロパティをカプセル化します。点集合は有限です。跳过およびプロパティと、点集合インデックスのサイズにおける限界により長さが決まります。

を使用して,基数反転スクランブルを适用します。

P =加扰(P,'RR2'
P =哈尔顿点集在2个维度(89180190640991分)性状:跳过:1000飞跃:100 ScrambleMethod:RR2

を使用して、最初の 500点を生成します。

X0=净(p,500);

これは、以下の式と等価です。

X0 = P(1:500,:);

またはかっこインデックスを使用してP.にアクセスするまで,点集合X0.の値はメモリ内で生成され,格纳されません。

準乱数の本質を理解するために、X0.における2次元の散布図を作成します。

散射(X0(:,1),X0(:,2),5,'r')轴广场标题(“{\ BF准随机散射}”

图中包含一个轴。标题为{\bf准随机散点}的轴包含散点类型的对象。

これを关数兰特が生成した一様な疑似乱数の散布と比较します。

X =兰特(500,2);散射(X(:,1),X(:,2),5,'B')轴广场标题('{\ BF均匀随机散布}'

图中包含一个轴。标题为{\bf均匀随机散布}的轴包含散布类型的对象。

准乱数の散布は,疑似乱数の散布が凝集しないため,より一様になります。

统计という意味では,准乱数は一様过ぎ,従来のランダムの検定には合格しません。たとえば,kstestで行うコルモゴロフ·スミルノフ検定は,点集合が一様でランダムな分布をもっているかどうかを検查するために使用されます。兰特が生成したような一様な疑似无作为标本に対して缲り返し実行すると,検定はP.値の一様な分布を生成します。

nTests = 1E5;sampSize = 50;PVALS =零(nTests,1);为了测试= 1:nTests X =兰特(sampSize,1);并[h,PVAL] = kstest(X,[X,X]);PVALS(测试)= PVAL;结尾直方图(PVALS,100)H = findobj(GCA,'类型''修补');Xlabel('{\它p}  - 值')伊拉贝尔(“测试的数量”

图包含轴。轴包含类型的直方图的一个目的。

一様な準乱数標本に対して検定を繰り返し実行すると、結果はまったく異なります。

P = haltonset(1,“跳过”,1E3,'飞跃',1e2);p=扰码(p,'RR2');nTests=1e5;样本大小=50;PVALS=0(nTests,1);为了测试= 1:nTests X = P(测试:试验+(sampSize-1),:);并[h,PVAL] = kstest(X,[X,X]);PVALS(测试)= PVAL;结尾直方图(PVALS,100)xlabel('{\它p}  - 值')伊拉贝尔(“测试的数量”

图包含轴。轴包含类型的直方图的一个目的。

小さいP.値では,データが一様に分布される帰无仮说が疑わしくなります。仮说が真である场合は,P.値の約 5% が 0.05を下回ることが予測されます。結果は明白に一貫しており、仮説に挑むのは無理です。

準乱数ストリーム

关数qrandstreamによって生成される准乱数の“ストリーム”は,特定のサイズの点集合ではなく,一连の准乱数出力を生成するために使用されます。クライアントの応用が间欠的にアクセスできる不定サイズの准乱数のソースを必要としている场合,ストリームは兰特などの 伪RNGと同じように使用されます。タイプ (ハルトンかソボル)、次元、跳跃、跳跃、攀爬などの準乱数ストリームのプロパティは、ストリームが構成されるときに設定されます。

実行中、アクセスは異なりますが、準乱数ストリームは本質的に非常に大きな準乱数の点集合です。準乱数ストリームの"状態"は、次にストリームから取得する点のスカラー インデックスです。qrandstreamクラスのqrandメソッドを使用して,现在の状态から开始するストリームから点を生成します。重启メソッドを使用して,状态を1にリセットします。点集合とは异なり,ストリームはかっこインデックスをサポートしません。

準乱数ストリームの生成

この例では,准乱数の点集合から标本を生成する方法を示します。

haltonsetを使用して准乱数点集合P.を作成し,缲り返し点集合测试にインデックスを増加し,异なる标本を生成します。

P = haltonset(1,“跳过”,1E3,'飞跃',1e2);p=扰码(p,'RR2');nTests=1e5;样本大小=50;PVALS=0(nTests,1);为了测试= 1:nTests X = P(测试:试验+(sampSize-1),:);并[h,PVAL] = kstest(X,[X,X]);PVALS(测试)= PVAL;结尾

qrandstreamを使用して,点集合P.に基づく准乱数ストリーム问:を構成し、ストリームがインデックスへの増加に対応するようにすることで、同じ結果が得られます。

P = haltonset(1,“跳过”,1E3,'飞跃',1e2);p=扰码(p,'RR2')q=qrandstream(p);NTEST=1e5;sampSize=50;PVALS=0(NTEST,1);为了测试= 1:nTests X = qrand(Q,sampSize);并[h,PVAL] = kstest(X,[X,X]);PVALS(测试)= PVAL;结尾

关连するトピック