Random 梅森捻线机:播种和;形象化
我正在使用我从下载的Mersenne Twister的C#实现。我有两个问题:Random 梅森捻线机:播种和;形象化,random,visualization,seeding,mersenne-twister,Random,Visualization,Seeding,Mersenne Twister,我正在使用我从下载的Mersenne Twister的C#实现。我有两个问题: 无论我如何给算法设定种子,它都不会通过,我的意思是,对于p值,我得到了相当多的1和0。此外,我对269个p值的测试结果为0。我不能很好地解释p值,但我认为结果中的一些1和0是坏消息 我被要求直观地展示这些数字的随机性。因此,我在生成数字时绘制它们,这看起来一点也不随机。下面是两个结果和结果的屏幕截图。正如您在第二个屏幕截图中所看到的,数字落在一些平行线上。我尝试了不同的算法将数字映射到点。它们都产生平行线,但角度不同
新点(number%\u canvaswitch,number%\u canvaswitch)
。正如您可能猜到的,视觉效果取决于窗体的宽度和高度,这是一个灾难性的结果新Guid()的数组。GetHashCode()
我错过了什么?我应该如何为算法设定种子?我怎样才能让它通过死硬派 虽然我无法回答您的第一点,但第二个问题与您如何计算要绘制的点有关。具体来说,
x = number % _canvasWidth;
y = number % _canvasHeight;
将为您提供一个“图案”,该图案在某种程度上对应于要绘制的窗口的纵横比。例如,如果\u canvasWidth
和\u canvasHeight
相等,则始终绘制一条对角线,因为x
和y
始终相同。那么,这种图形表示在这种情况下就不合适了
取RNG输出的N位,将一半用于x坐标,另一半用于y坐标,怎么样?对于那些超出窗口范围的位,您可能需要考虑两个选项:
如果目标是Linux环境,则比数学生成器要好得多,因为它们包含表示硬件活动的随机数。通过为每个x和y坐标生成一个新的随机数,可以轻松解决条纹点打印问题。尝试为x和y重复使用一个生成的数字基本上是过早的优化,但是如果你真的这样做了,请确保从数字中为每个数字提取不同的位;按原样,
x=n%宽度;y=n%高度
可以在图像中看到x和y之间的巨大相关性
<>我已经使用了各种C++ Mexne Twitter实现多年(最近的),并没有遇到任何困难(种子相关或其他)。这真是一个极好的发电机。谢谢你的回答。你关于宽度和高度相等的观察是非常正确的。我不知道我是怎么错过的:)下面是我如何开始映射的:var x=(int)(number&0xffff0000);变量y=编号&0x0000ffff;x=x%\u画布宽度;y=y%\u画布高度;这在某种程度上类似于您的解决方案;然而,我认为mod函数仍然会扭曲结果。仅供参考,此映射导致垂直平行线!您需要将x值向下移动;在位掩码之后,它们将驻留在数值输出的上两个字节中,这两个字节都将是大数字,可能会扭曲您的mod。当您将结果打印到屏幕上时,mod可能总是显示一些偏差。对于你正在尝试做的,我建议不要画大坐标(窗口外的坐标)或线性插值;但坐标仍然远离可见区域。如果我们说生成的int32数字的左两个字节的平均值是0x7FFF,那么它仍然远远超出了我在1280*1024分辨率的显示器上显示的值;因此,模型。您应该将数值从rng范围缩放到屏幕范围。。。这就是我所说的线性插值。这样,每个值都有一个合理的屏幕像素位置。感谢您的回复。有这么多的在线游戏网站正在使用Mersene Twister进行RNG:和-1:这是FUD。Mersenne twister算法产生非常好的随机数。这是Python的默认随机数算法。虽然从技术上讲是伪随机的,但它有一个荒谬的重复周期——大于可观测宇宙中粒子的数量。你的论点是没有根据的。你会把钱押在,比如说,一个使用了Mersenne Twister实现的21点网站上吗?一个实现是否能被正确和诚实地显示,这比插入随机数生成器要困难得多;但根据我在网上看到的情况,MT为大多数在线游戏提供商提供了服务。这里还有另一个例子:iTechLab在他们公认的算法上显示MT:使用两个数字进行绘图听起来像是第二个问题的解决方案,但出于某种原因,它让我感到内疚!我的意思是,对于用户,也许是审核员,每一点代表一个数字!根据你在机器翻译方面的经验,你通常是如何播种的?对顽固派有何评论?