Forums

什么是赔率? (随机数)

开始了 maxmaxfield. 3 months ago20篇回复最新回复3个月前66意见

我将在Arduino的随机()函数上写一列短栏。请记住,我是一个交易的硬件设计师,所以我正在通过软件斗争。此外,在与少数嵌入的朋友交谈后,我的印象是其中一些人使用了很多随机数,而其他人则很少使用它们 - 如果al全部 - 那似乎在中间似乎有很多人(你同意吗? )。

我还发现关于我新的随机数的各种各样的事情,例如c / c ++ rand()函数返回0到rand_max之间的整数值的事实,其中rand_max大小可以(讽刺)随机变化从一台机器到另一台机器。相比之下,Excel中的rand()函数生成0到1之间的实数 - 此函数也是易失性的,因此每次打开该电子表格时它会产生不同的值。

所以......我想知道你是否有任何有趣的知识块或琐事,你会关心随机数的主题?

[]
回复 JMS_NH.2月1日,2021年

好家伙。 “随机”数字通常是误解的话题。以下是我最佳的地方,我可以提高您对伪随机数发电机(PRNG)的理解:

- 数值食谱 (chapter 7)

- Knuth的“计算机编程艺术”(Vol 2 SeminumeriCAL算法)

我知道PRNG的至少一个其他关键参考,但我不能想到它的头顶。

对于任何严肃的应用,应避免内置rand()函数。如果你读了 //en.cppreference.com/w/cpp/numeric/random/r... it says

rand() 不推荐用于严重的随机数生成需求。 建议使用C ++ 11's 随机数生成 更换rand()的设施。 (自C ++ 11) 

现代随机数发电机包括:

- //en.wikipedia.org/wiki/Mersenne_Twister

//en.wikipedia.org/wiki/Xorshift 和相关的发电机 - Sebastian Vigna有一个 良好的摘要以及它们与其他发电机的比较

- PCG.

之一 乔治马斯加利亚一篇我发现真的有洞察力,但我记不起了哪一个, 不幸的是,他的FSU网站被删除后被删除。


另一个重要点是您真的需要了解您需要的是“随机”数字的消费者。他们是否应该统一产生?或者像高斯这样的其他分布?你关心统计随机性缺陷吗?您是否关心加密随机性 - 也就是说,没有任何信息可以从过去生成的数字中获得未来生成的数字?他们是否需要是“真实”的随机数,在这种情况下,必须使用硬件源来收集熵?

这是一个半措施可能是危险的主题。

[]
回复 maxmaxfield.2月1日,2021年

“这是一个半场可能危险的一个话题。”我完全同意 - 我只是用它们来控制围绕我的12x12 ping pong球阵列徘徊的像素 //www.youtube.com/channel/UCQVqp_L4hKqF1uZ3t...  在我的专栏中,我一定要注意,如果您将它们用于严重应用程序,您必须真正知道您在做什么。并且感谢所有的参考。


[]
回复 maxmaxfield.2月1日,2021年

您是否知道任何涉及RNG和/或其使用问题的有趣故事?

[]
回复 Waydan.2月2日,2021年2月2日

我记得从NPR的行星钱上的一个有趣的故事,了解使用糟糕的随机数发生器的破解老虎机。

//www.npr.org/sections/money/2017/05/24/529865107/episode-773-slot-flaw-scofflaws

[]
回复 maxmaxfield.2月2日,2021年2月2日

我忘记了这一点 - 感谢您提醒我 - Max

[]
回复 Gregha04756.2月1日,2021年

对于它的价值来说,“数字配方”书籍包括关于随机数生成的一章。

[]
回复 JMS_NH.2月1日,2021年

你打败了我,这是我去的第一个地方。更多在另一个评论中,我正在写作直接回复。

[]
回复 maxmaxfield.2月1日,2021年

谢谢greg.

[]
回复 DKWATSON.2月1日,2021年

为兴趣,我曾经使用基于扑克牌甲板加密算法。在第二次世界大战期间使用这种方法,因为士兵经常携带卡,并且不太可能被认为是间谍。使用桥梁的甲板播种,经常在世界各地的报纸上发表。重要的是每个参与者在每块甲板中都能保持相同的顺序来加密/解密。如果抓住,他们可以简单地分散甲板,它将是(几乎)无法重建它。根据使用消息本身作为新密钥的算法,每次使用甲板都会重新洗牌。如果内存服务(不是保证),这被称为“纸牌”,可以谷歌作用。在上下文中,如果您在开始时间(即,大爆炸)以来每秒处理独特的桥手(所有52张牌),那么您还不会通过可能的组合来一半。似乎有一些rng可能有空间。

[]
回复 maxmaxfield.2月1日,2021年

这是我听说过的第一个 - 非常有趣 - 感谢分享。

[]
回复 ve3id2月1日,2021年

有趣的是你应该提及托里塔伊。我沉迷于纸牌,或“耐心”,因为它被称为英语世界。 Linux中的标准游戏是kpat。

在我的岁月里,我注意到了一个奇怪的事情。有一次,在温彻斯特坠毁之前,我连续8000次获奖游戏。我正在滚动,大部分时间都在80-85举行的动手下,大约三到四个百分之一到80次移动。

更换磁盘后,我继续在相同的一般举例中获取。

然后我搬到了一个不同的CPU。看来,当时,我被处理的手要艰难,我很少在不到100次移动中得到它。我罕见的是,我会把它放在90以下,也许是一个或两个%。在去年只有一次,我在不到80岁的时间里得到了它。

在我看来,创造交易的随机者受处理器数量的影响 - 最初我只有一个,搬到了两个,现在8。

我没有时间尝试任何实验来证明这一点,我也是一个硬件男人。

顺便说一句,我只在等待编译,sysgen或下载时放置。当然,当我缺光地使用Windows进行更改!

[]
回复 马修eshleman.2月1日,2021年

今天我会做愚蠢的回应:

//xkcd.com/221/


//dilbert.com/strip/2001-10-25

对于严肃的信息:

//www.random.org/

:-)

此致,

马修

//covemountainsoftware.com/



[]
回复 maxmaxfield.2月1日,2021年
我知道迪尔弗特 - 我应该猜到的XKCD会有些东西可以说 - 感谢链接到rancy.org .org
[]
回复 国际委员会2月1日,2021年

我在我的博客中发布了一次Arduino谜语:如果您在0到1,431,655,765的范围内生产批次和大量(伪)随机数,其中的百分比将落在0到715,827,883之间 (这是上一半的一半)? ;-)


此外,在2015年回到2015年,我在实施Arduino的随机()函数时发现了一个错误;如果将其发送值0,则它根本没有。我报告说,但它没有固定 - 至少在我厌倦了检查之前。

[]
回复 maxmaxfield.2月1日,2021年

你的问题 - 我的膝盖反应将是50% - 但我猜你要解释我的方式:-)

重新播种0无效 - 这表明Arduino正在使用线性反馈移位寄存器(LFSR)来产生其随机数 - 当它是有意义的,因为这在内存和时钟周期方面是低影响的。告诉我更多...

[]
回复 JMS_NH.2月1日,2021年
哎哟,LFSRS吮吸一般的PRNG来源;它们对单个随机位非常好。作为PRNG,连续值之间存在过多的相关性。
[]
回复 maxmaxfield.2月1日,2021年
我以为选择抽头点以确保最大位移合理效果很好
[]
回复 JMS_NH.2月1日,2021年

否,选择多项式(硬件实现中的点点)作为原始多项式,只允许您确保LFSR是最大长度序列(2 ^ N - 1覆盖除零之外的所有状态模式)。

样品之间的相关性是一个单独的问题,无论使用多项式,都会吸吮。任何PRNG都很重要,是一个独立的和相同分布的(IID)随机样本的良好来源。

看 //www.dianjingline.icu/showarticle/1121.php

[]
回复 国际委员会2月1日,2021年

实际上,正确的价值是绝望的 不是 50% - it's actually 2/3 所产生的数字低于中点。这是由Modulto Operator的粗心使用引起的。 Arduino的随机()首先在0到RAND_MAX的范围内生成随机整数,然后返回剩余部分将其除以用户请求的最大值。 

想象一下,你把所有数字拿到0-6(包容性),你把所有剩下的人划分到4.这将给你0,1,2,3,0,1,2 - 你看到结果“3 “有一半的机会出现在任何其他号码!同样的原则在我的谜语中工作,只是在更大的范围内。

关于随机(),我不记得它是否使用LFSR或其他方法,但是任何一种方式都是有问题的种子。在“常规”C ++中,他们通过隐式地切换到另一种种子来考虑它,如果我记得正确。但与Arduino一起,他们完全忽略了请求;意思是,如果你用0重新种子几次,你将无法获得相同的序列! [编辑:现在使用测试程序检查,这个问题仍然没有修复]

[]
回复 maxmaxfield.2月1日,2021年
我刚刚证实了这一点 - 最大