是一个看似简单的练习:拿出一个随机的电话号码。选择一个序列中的七个数字,以便每个数字均等地出现,并且选择一个数字不会影响下一个数字。奇怪的是,你不能。(但是,不要把我的话:研究可追溯到20世纪50年代透露有数学非随机的我们,即使我们不承认它。)

python猜数字游戏窗口化(计算机如何以及为何滚动加载的骰子)(1)

不要刻意。计算机也不会很好地产生随机性。他们不应该:计算机软件和硬件运行在布尔逻辑上,而不是概率上。麻省理工学院概率计算项目的负责人维卡什·曼辛格(Vikash Mansinghka)表示:“计算文化以确定性为中心。”

但是计算机科学家希望程序能够处理随机性,因为有时这就是一个问题所需要的。多年以来,一些人开发了新颖的算法,尽管它们本身不会生成随机数,但却提供了巧妙而有效的方式来使用和操纵随机性。麻省理工学院(Mansinghka)小组的最新成果之一就是将在8月的在线国际人工智能与统计会议上展示一种称为快速加载骰子滚轮(FLDR)的算法。

抽象引导科学和数学领域的有前途的想法。与我们一起旅行并加入对话。

简而言之,FLDR使用随机序列完美地模拟了加载模具的滚动。(或者是加重的硬币,或者是经过操纵的卡片组。)“它显示了如何将完全随机的抛硬币变成有偏差的抛硬币,” 新奥尔良大学的数学家彼得·比尔霍斯特说。Bierhorst没有为这项研究做出贡献,但是将FLDR成功的前提描述为“令人信服”。

python猜数字游戏窗口化(计算机如何以及为何滚动加载的骰子)(2)

FLDR不会让您在“垄断”中占优势,也不会增加您在拉斯维加斯掷骰子桌上的机会。但是它的创造者说,它提出了一种将随机数集成到软件和硬件中的方法,这些软件和硬件是确定性的。纳入这种不确定性将有助于机器做出人性化的预测,并更好地模拟依赖于诸如气候或金融市场等概率的现象。

随机性是一个比看起来棘手的概念。在没有可辨认模式的随机数序列中,每个数字都有相同的出现概率。例如,Pi本身不是一个随机数,但是pi的数字被认为是这种随机方式(数学家称之为“正常”):从0到9的每个整数都出现相同的次数。

即使您可以在Google中找到“随机数生成器”,也无法获得纯粹的随机性。当今的处理器,搜索引擎和密码生成器使用“伪随机”方法,这些方法对于大多数用途而言都足够接近。它们是根据复杂的公式生成的,但是从理论上讲,如果您知道该公式,则可以预测序列。

科学家尝试将实际随机性植入机器至少已有80年的历史。(在此之前,随机数来自旧的备用容器,如掷骰子,从混匀的袋子中拾取的编号球或其他机械练习。1927年,统计学家对人口普查数据进行采样,从而得出了40,000个随机数字的表格。)

麻省理工学院的维卡什·曼辛格(Vikash Mansinghka)表示,新型快速装填骰子辊可以帮助科学家将概率纳入确定性计算机中。

早期的随机数来源是物理机器。第一台产生随机数的机器是英国统计学家莫里斯·乔治·肯德尔(Maurice George Kendall)和伯纳德·巴宾顿·史密斯(Bernard Babington Smith)的发明,他们于1938年对此进行了描述。该机器被放置在一个黑暗的房间里,在其中将磁盘分成10个相等的楔形碎片标记为0到9。当某人以不规则的间隔轻敲按键时,短暂的霓虹灯或火花将照亮磁盘,使其看起来像定格,只有一个数字可见。后来的另一台名为Ernie的机器改为在氖管中使用信号噪声。从1957年开始,它选择了英国中的中奖号码。

Bierhorst说,最近,对于真正的随机序列,计算机科学家必须研究自然现象,例如宇宙背景辐射或量子系统的不可预测行为。他说:“自然界中存在可以利用的随机过程,这确实是不可预测的。” “向左或向右闪避的电子事先甚至都不知道它将要做什么。”

但是随机性只能带您走远。到1940年代后期,物理学家开始生成随机数以适应给定的概率分布。这样的工具(滚动加载模具的理论版本)可以更准确地用于模拟现实情况,例如交通流或化学反应。1976年,计算机科学家唐纳德·克努斯(Donald Knuth)和安德鲁·姚(Andrew Yao)提出了一种算法,该算法可以使用一串随机数来生成任何加权结果数组的随机采样。曼辛卡(Mansinghka)实验室的博士生Feras Saad说:“这是有史以来最省时的算法。”

不幸的是,Saad说,该算法做出了一个折衷方案,这是计算机科学家所熟知的:许多快速运行的应用程序使用大量内存,而使用较少内存的应用程序则可能需要很长的运行时间。Knuth和Yao的算法属于第一类,使其优雅但对于任何实际使用而言都占用大量内存。

但是去年春天,萨阿德发现了一个聪明的解决方法。他意识到,当芯片上的权重加起来等于2的幂时,该算法在时间和内存上都是有效的。因此,对于六面骰子,假设将数字1到6滚动的几率的加权分别为1、2、3、4、5和1。这意味着例如滚动1的概率为1/16,滚动2的概率为2/16。由于权重之和等于2 16的幂为2 4,因此该系统的算法在时间和内存上都很有效。

麻省理工学院的博士生Feras Saad帮助设计了一种新算法,该算法可以高效,准确地模拟加载的模具的滚动。

但是,假设权重取值为1、2、3、2、4、2,总和为14。由于14的乘方不是2的幂,因此Knuth-Yao算法需要更多的内存。Saad意识到他可以包括一个额外的权重,以便它们总和为2的幂。在这种情况下,他将简单地添加另一个假设的面孔-一个权重为2,以便权重加起来为16。如果算法选择了一个的原始面孔,该值被记录。如果选择了多余的面孔,则该值将被丢弃,然后再次运行该算法。

这是提高FLDR效率的关键,使其成为仿真中的强大工具:与原版通常需要的大量内存相比,额外的滚动所需的额外内存量很小。

FLDR使Knuth-Yao算法高效,并提出了改善广泛应用的方法。气候变化模拟,作物产量预测,粒子行为模拟,金融市场模型,甚至是核武器地下爆炸的探测都取决于加权概率分布中的随机数。随机数也构成了保护通过互联网发送的数据的加密方案的骨干。

曼辛卡说,FLDR还可以帮助研究人员找到将概率整合到计算机处理器中的方法,这是他在麻省理工学院实验室工作的重点。该算法可以帮助告知软件库和新的硬件体系结构的设计,可以生成随机数并以有效的方式使用它们。这将与我们过去使用的确定性布尔型机器大相径庭。

python猜数字游戏窗口化(计算机如何以及为何滚动加载的骰子)(3)

他说:“我们很可能将随机性集成到软件和硬件的构建块中。”

,