Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Random 梅森捻线机:播种和;形象化_Random_Visualization_Seeding_Mersenne Twister - Fatal编程技术网

Random 梅森捻线机:播种和;形象化

Random 梅森捻线机:播种和;形象化,random,visualization,seeding,mersenne-twister,Random,Visualization,Seeding,Mersenne Twister,我正在使用我从下载的Mersenne Twister的C#实现。我有两个问题: 无论我如何给算法设定种子,它都不会通过,我的意思是,对于p值,我得到了相当多的1和0。此外,我对269个p值的测试结果为0。我不能很好地解释p值,但我认为结果中的一些1和0是坏消息 我被要求直观地展示这些数字的随机性。因此,我在生成数字时绘制它们,这看起来一点也不随机。下面是两个结果和结果的屏幕截图。正如您在第二个屏幕截图中所看到的,数字落在一些平行线上。我尝试了不同的算法将数字映射到点。它们都产生平行线,但角度不同

我正在使用我从下载的Mersenne Twister的C#实现。我有两个问题:

  • 无论我如何给算法设定种子,它都不会通过,我的意思是,对于p值,我得到了相当多的1和0。此外,我对269个p值的测试结果为0。我不能很好地解释p值,但我认为结果中的一些1和0是坏消息
  • 我被要求直观地展示这些数字的随机性。因此,我在生成数字时绘制它们,这看起来一点也不随机。下面是两个结果和结果的屏幕截图。正如您在第二个屏幕截图中所看到的,数字落在一些平行线上。我尝试了不同的算法将数字映射到点。它们都产生平行线,但角度不同!这就是我为这些屏幕截图将数字映射到点的方式:
    新点(number%\u canvaswitch,number%\u canvaswitch)
    。正如您可能猜到的,视觉效果取决于窗体的宽度和高度,这是一个灾难性的结果
  • 以下是我尝试为算法植入种子的几种方法:

  • 用户输入。我输入一些数字作为int数组为算法播种
  • 由算法本身生成的随机数
  • 新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:使用两个数字进行绘图听起来像是第二个问题的解决方案,但出于某种原因,它让我感到内疚!我的意思是,对于用户,也许是审核员,每一点代表一个数字!根据你在机器翻译方面的经验,你通常是如何播种的?对顽固派有何评论?