持续创造,加速成长!这是我参与「日新方案 10 月更文挑战」的第32天,点击查看活动概况

随机周游和有关数据的更多信息可视化

这本文是关于运用计算来处理问题的。到目前为止,咱们将注意力集中在能够经过确定性程序处理的问题上。假如程序在相同的输入上运转,则它发生相同的输出,则程序是确定性的。这样的计算十分有用,但显然不足以处理某些类型的问题。咱们日子的国际的许多方面只能准确地建模为随机进程.100假如一个进程的下一个状况能够依赖于某个随机元素,那么它就是随机的。随机进程的成果通常是不确定的。因而,咱们很少能对随机进程的作用做出明确的陈说。相反,咱们对他们或许做什么做出概率陈说。本文的其余大部分内容都触及构建有助于了解不确定状况的程序。其间许多程序将是仿真模型。

模仿模仿实在体系的活动。例如,图 10-11 中的代码模仿一个人进行一系列典当贷款付款。将该代码视为称为模仿模型的实验设备,它供给有关正在建模的体系或许行为的有用信息。除其他事项外,模仿被广泛用于猜测物理体系的未来状况(例如,50年后地球的温度),并替代过于昂贵,耗时或风险的实践国际实验(例如,税法改变的影响)。

请必须始终记住,仿真模型与一切模型相同,仅仅实践的近似值。咱们永远不或许保证实践体系的行为方式与模型猜测的方式相同。事实上,咱们通常能够十分坚信实践体系的行为不会彻底按照模型的猜测。例如,并非每个借款人都会准时支付一切典当贷款。一个常被引证的真理是“一切模型都是过错的,但有些模型是有用的。101

随机游走

1827年,苏格兰植物学家罗伯特布朗(Robert Brown)观察到悬浮在水中的花粉颗粒好像是随机漂浮的。他对后来被称为布朗运动的东西没有合理的解说,也没有企图用数学方法对其进行建模.12 1900年,路易斯巴舍利埃(Louis Bachelier)的博士论文《估测理论》(The Theory of Speculation)首次提出了这种现象的明晰数学模型。但是,由于这篇论文触及当时不光彩的金融市场了解问题,它在很大程度上被受人敬重的学者所忽视。五年后,年青的阿尔伯特爱因斯坦(Albert Einstein)将这种随机思维带到了物理学国际,其数学模型与Bachelier的数学模型几乎相同,并描述了怎么用它来确认原子的存在.103出于某种原因,人们好像以为了解物理学比赚钱更重要。 国际开端关注。时代当然不同了。布朗运动是随机游走的一个比如。随机游走被广泛用于模仿物理进程(例如,分散),生物进程(例如,DNA从异质双链体中置换RNA的动力学)和社会进程(例如,股票市场的运动)。

在本章中,咱们出于三个原因研讨随机游走:

随机游走本质上很风趣而且被广泛运用。它们为咱们供给了一个很好的比如,阐明怎么运用抽象数据类型和承继来构建程序,特别是模仿模型。

它们供给了一个机会来介绍 Python 的更多功能,并演示一些额外的技术生产地块。

酒鬼漫步

让咱们看一个实践触及步行的随机游走。一个醉酒的农人站在郊野中心,每一秒农人就朝一个随机的方向迈出一步。她(或他)在 1000 秒内与原点的预期间隔是多少?假如她走了很多步,她是有或许离原点越来越远,仍是更有或许一遍又一遍地徜徉回到原点,最终离她开端的当地不远?让咱们写一个模仿来找出答案。在开端规划程序之前,测验对程序要建模的状况发生一些直觉总是一个好主见。让咱们首要运用笛卡尔坐标勾勒出一个简略的状况模型。假定农人站在郊野里,草被神秘地剪成一张方格纸。进一步假定农人采纳的每个过程的长度为一,而且平行于 x 轴或 y 轴。

图 16-1 左边的图片描绘了一个站在田地中心的农人14。笑脸表明农人在一步后或许去过的一切当地。请注意,在一步之后,她总是离她开端的当地正好一个单位。让咱们假定她在榜首步时从她的初始方位向东徜徉。在她迈出第二步后,她离她最初的方位有多远?

随机周游和有关数据的更多信息可视化

看看右边图片中的笑脸,咱们看到,以 0.25 的概率,她会远离 o 个单位,概率为 o.25,她会远离 2 个单位,而概率为 o.5,她会远离 ✓2 个单位.105 所以,均匀而言,她走两步后会比走一步后更远。第三步呢?假如第二步是顶部或底部的笑脸,第三步将使农人一半时刻更接近原点,一半时刻更远。假如第二步是左笑脸(原点),第三步将远离原点。假如第二步是向右的笑脸,第三步将接近原点四分之一的时刻,更远的四分之三时刻。

好像醉汉走的步数越多,与原点的预期间隔就越大。咱们能够继续翔实地罗列各种或许性,或许能够对这个间隔怎么跟着步数的添加发生一种很好的直觉。但是,它变得越来越乏味,因而编写一个程序来为咱们履行此操作好像是一个更好的主见。

让咱们从考虑一些数据抽象开端规划进程,这些数据抽象或许对构建此模仿以及其他类型的随机游走的模仿有用。像平常相同,咱们应该测验创造与咱们企图建模的状况中出现的事物类型相对应的类型。三种显着的类型是方位、字段和醉酒。当咱们查看供给这些类型的类时,值得考虑每个类对它们答应咱们构建的模仿模型类型或许意味着什么。

让咱们从方位开端,图 16-2。这是一个简略的类,但它确实表现了两个重要的决议计划。它告诉咱们,模仿最多触及两个维度。这与上图一致。此外,由于为 delta_x 和 delta_y 供给的值能够是浮点数而不是整数,因而此类中没有关于醉汉或许移动的方向集的内置假定。这是非正式模型的推广,其间每个过程的长度为一,而且平行于 x 轴或 y 轴。类字段(图 16-2)也十分简略,但它也表现了值得注意的决议计划。它仅仅维护醉汉到方位的映射。它对方位没有约束,因而大概字段的巨细是无限的。它答应在随机方位将多个醉汉添加到字段中。它没有阐明醉汉移动的形式,也没有禁止多个醉汉占据同一方位或穿过其他醉汉占据的空间。

随机周游和有关数据的更多信息可视化

Eigure 16-3中的醉酒和Usual_drunk课程定义了醉汉在郊野中徜徉的方式。特别是,step_choices在Usual_drunk中的值引入了以下约束:

随机周游和有关数据的更多信息可视化

每个过程的长度为 1,平行于 X 轴或 Y 轴。由于函数 random.choice 返回它所传递的序列的随机选择成员,因而每种过程的或许性相同,而且不受前面过程的影响。稍后咱们将研讨具有不同行为的醉酒子类。

下一步是运用这些类来构建答复原始问题的模仿。图 16-4 包含此模仿中运用的三个函数。

随机周游和有关数据的更多信息可视化

函数步行模仿一次num_steps步。该函数sim_walks调用步行来模仿每个 num_steps 步的实验步行数。函数醉酒测验调用模仿步行来模仿不同长度的步行。

参数 d_class 的 sim_walks 归于类类型,在代码的榜首行中用于创立相应子类的醉酒。稍后,当从 Field.move_drunk 调用 drunk.take_step 时,将自动选择相应子类中的方法。

该函数drunk_test还有一个类型为 class 的参数 d_class。它被运用了两次,一次在调用模仿步行中,一次在榜首个打印语句中。在 print 语句中,内置类attribute_name_is用于获取具有类名的字符串。当咱们履行 drunk_test((10, 100, 1000, 10000), 100, Usual_drunk) 时,它打印

随机周游和有关数据的更多信息可视化

这是令人惊讶的,由于咱们之前开发的直觉是均匀间隔应该跟着步数的添加而添加。这或许意味着咱们的直觉是过错的,也或许意味着咱们的模仿有问题,或许两者兼而有之。

此时要做的榜首件事是对咱们已经以为知道答案的值运转模仿,并保证模仿生成的成果与预期成果匹配。让咱们测验零步(与原点的均匀、最小和最大间隔都应为 o)和一步(与原点的均匀、最小和最大间隔都应为 1)的步行。

当咱们运转 drunk_test((0,1)、100、Usual_drunk) 时,咱们得到了高度可疑的成果

随机周游和有关数据的更多信息可视化

零步的均匀间隔到底怎么或许超过8?咱们的模仿中必须至少有一个过错。经过一番调查,问题很显着。在sim_walks中,函数调用walk(f, Homer, num_trials)应该是walk(f, Homer, num_steps)。

这里的涵义很重要:在查看模仿成果时,始终要带上一些置疑情绪。首要问询成果是否经过气味测验(即是否合理)。而且始终对参数进行模仿 test106,您对成果应该是什么有很强的直觉。

当模仿的校对版别在咱们的两个简略案例上运转时,它会发生彻底预期的答案:

随机周游和有关数据的更多信息可视化

当在更长的步行中运转时,它打印Usual_drunk 10步的步行:

随机周游和有关数据的更多信息可视化

正如预期的那样,与原点的均匀间隔跟着步数的添加而添加。

现在让咱们看一下与原点的均匀间隔图,图 16-5。为了了解间隔的添加速度,咱们在图上放置了一条线,显现步数的平方根(并将步数添加到 100,000)。