3D 超平面は、線形合同ジェネレーターによって生成された数値を表すことができることを理解しています。しかし、各数値またはポイントの位置を決定する方法がわかりません。特に 3D キューブでは? つまり、ポイントに X、Y、Z の値が含まれている必要はありませんか?! 生成された数字の 1 つが「8」の場合はどうなりますか? それはただの「8」です...どうすればそのXYZを知ることができますか? (私が話していることを知っていることを願っています...画像を投稿できませんでした、申し訳ありません:/)
1 に答える
線形合同ジェネレーターから一連の 3 つの疑似乱数のバッチを生成し、各バッチの最初の数値を x 次元として使用し、次の数値を y 次元として使用し、最後の数値を z 次元として使用するとします。次に、3 つの疑似乱数の各バッチを xyz キューブにプロットします。n ( n > 3) の数のバッチを生成する場合も同様の議論が成り立ちますが、それらをハイパーキューブにプロットします。
これらの疑似乱数のそれぞれをbビットで生成していると仮定します。次に、(ハイパー)キューブを満たすために生成する必要がある2 nbの可能な数があります( bの典型的な値に対して、これは非常に大きな数になります)。ただし、ジェネレーターの周期が 2 nb未満の場合 (実際にはほとんどの場合そうです)、立方体 (またはn > 3 の場合はハイパーキューブ) 内のすべての使用可能なスペースを埋めることはできません。一部のスペースのみを埋めます。
さらに、塗りつぶされたスペースは、(ハイパー) キューブを通過する平面 (または、n > 3 の場合は超平面) に配置される場合があります。(ハイパー) 平面の間には、ジェネレーターが繰り返すために決して生成しない数値を表すスペースがあります。そのような数を生成することなく、そのサイクル。これは、疑似乱数が連続的に相関しているために発生します。この動作はどの次元でも見られますが、疑似乱数が配置される (超) 平面の数は次元nが大きくなるにつれて減少するため、 nが大きくなるにつれて動作がより明確になります。
これは、生成された疑似乱数をシミュレーションへの入力として使用する場合に特に問題になる可能性があります。これは、シミュレーションが、シミュレートされたモデルの結果よりも、疑似乱数の不完全性のアーティファクトである出力を生成する可能性があるためです。
線形合同ジェネレーターに関するウィキペディアの記事は優れています。
(例を追加するために編集)
これは、Python で実装された線形合同ジェネレーター (非常に貧弱なパラメーターを意図的に選択したもの) です。インデックスが偶数の疑似乱数は x 値に割り当てられ、奇数の疑似乱数は y 値に割り当てられます。
import matplotlib.pyplot as plt
def lcg (X, a, c, m):
return (a * X + c) % m;
x = []
y = []
X = 0
for i in range(1000):
X = lcg(X,43,5,256)
if i % 2 == 0:
x.append(X)
else:
y.append(X)
plt.scatter(x,y)
plt.show()
このスクリプトは、次の出力を生成します。
結果の (x,y) ペアはすべて少数の直線上にあり、線の間に現れるペアはジェネレーターによって生成されることはありません。同じことを 3 次元以上で行うと、ここで使用したよりも優れたパラメーターを持つジェネレーターが、2、3、またはn次元空間の直線、平面、または超平面上に位置する出力を生成する方法を確認できます。