Random 线性同余生成器的三维表示是如何工作的?

Random 线性同余生成器的三维表示是如何工作的?,random,3d,Random,3d,我知道3D超平面可以表示由线性同余生成器生成的数字。但我不知道它是如何确定每个数字或点的位置的。尤其是在3D立方体中?我的意思是,一个点不一定要有X,Y和Z的值才能存在吗?!如果生成的其中一个数字是“8”,该怎么办?只是“8”。。。我怎么会知道XYZ的呢?(我希望你知道我在说什么…无法发布图像,抱歉:/)假设你从线性同余生成器中按顺序生成三个伪随机数的批次,并使用每个批次中的第一个数字作为x维,下一个作为y维,最后一个作为z维,然后,您可以在x-y-z立方体中绘制每批三个伪随机数。对于生成n(n

我知道3D超平面可以表示由线性同余生成器生成的数字。但我不知道它是如何确定每个数字或点的位置的。尤其是在3D立方体中?我的意思是,一个点不一定要有X,Y和Z的值才能存在吗?!如果生成的其中一个数字是“8”,该怎么办?只是“8”。。。我怎么会知道XYZ的呢?(我希望你知道我在说什么…无法发布图像,抱歉:/)

假设你从线性同余生成器中按顺序生成三个伪随机数的批次,并使用每个批次中的第一个数字作为x维,下一个作为y维,最后一个作为z维,然后,您可以在x-y-z立方体中绘制每批三个伪随机数。对于生成n(n>3)个数字的批处理,也有一个类似的参数,除非您将它们绘制在超立方体中

假设您正在生成每个具有b位的伪随机数。然后,必须生成2nb可能的数字来填充(超)立方体(对于任何典型的b值,这将是一个非常大的数字)。但是,如果生成器的周期小于2nb(出于实际目的,这种情况几乎总是如此),它将不会填充多维数据集中的所有可用空间(如果n>3,则为超多维数据集)。它只会填满部分空间

更重要的是,填充的空间可能位于穿过(超)立方体的平面(或超平面,如果n>3),其中(超)平面之间的空间表示生成器永远不会生成的数字,因为生成器重复其循环而从未生成这样的数字。这是因为伪随机数是串行相关的。在任何维度上都可以看到这种行为,但是伪随机数所在的(超)平面的数量随着维度n的增加而减少,因此随着n的增大,这种行为变得更加明显

当使用生成的伪随机数作为模拟的输入时,这可能是一个特殊的问题,因为模拟随后可以生成的输出更多地是伪随机数缺陷的产物,而不是模拟模型的结果

维基百科上的文章非常好

(编辑以添加示例)

这里是一个用Python实现的线性同余生成器(故意选择了非常糟糕的参数)。索引为偶数的伪随机数分配给x值,索引为奇数的伪随机数分配给y值

导入matplotlib.pyplot作为plt
def lcg(X、a、c、m):
返回(a*X+c)%m;
x=[]
y=[]
X=0
对于范围(1000)内的i:
X=lcg(X,43,5256)
如果i%2==0:
x、 附加(x)
其他:
y、 附加(X)
plt.散射(x,y)
plt.show()
此脚本生成以下输出:


您可以看到,生成的(x,y)对都是在少量直线上找到的,并且出现在直线之间的对永远不会由生成器生成。同样的事情也可以在三维或更高的空间中进行,以查看参数比我在这里使用的更好的生成器如何仍然生成位于2、3或n维空间中的直线、平面或超平面上的输出。

非常感谢您的详细回答!:)请您也解释一下,如果n>3,数字是如何在超立方体中绘制的?欢迎来到堆栈溢出!很乐意帮忙。如果答案对你有用,请向上投票(点击上方三角形)。如果它解决了您的问题,请勾选它,表示您已接受答案。这样别人就不会花时间回答一个已经得到满意回答的问题。很抱歉,我才意识到这是你的回答!!!我以为这是网站的自动功能哈哈:P我试着投票给你,但网站不让我,因为我想我的分数太少了?也许吧。你至少应该能够接受答案——事实上,接受答案会增加你的声誉得分。好吧!那么,我应该/可以问一下,如果新问题中的n>3,如何确定xyz(或更多)?