2.4 案例研究:渗透

到目前为止,我们已经学过的编程工具足以让我们解决所有重要问题。本节我们将研究并开发一个复杂程序来解决一个有趣的科学问题,并以此为案例来总结我们对方法和模块的学习。我们这样做的目的是结合具体问题,在解决各种挑战和困难的过程中,回顾我们所涵盖的基本要素,并展示一种可以广泛应用的编程风格。

在这个案例中,我们采用一种广泛适用的计算技术,称为蒙特卡罗模拟(Monte Carlo simulation),以研究一种称为渗透(percolation)的自然模型。“蒙特卡罗模拟”这一术语是指通过随机执行多次试验来评估未知量的计算技术,也被称为模拟(simulation)。前文中我们已经多次讨论并使用过这一技术,如赌徒破产问题和卡券收集问题。这一方法的核心理念不是建立一个完整的数学模型或者测量一个实验的所有可能的结果,而是依靠概率法则体现模型的规律。

在本节的案例研究中,我们将学习一部分渗透相关的模型,这个模型是许多自然现象的基础。但是我们不会太多关注模型本身,我们的重点是开发模块化程序来解决计算任务的过程。我们找出可以独立处理的子任务,并努力确定关键的基础抽象概念,并自问如下问题:有没有哪些已往的子任务可以用来帮助解决这个问题?那些子任务的基本特征是什么?具有这些基本特征的子任务能不能帮助解决其他问题?提出这样的问题带来巨大的益处,因为它们引导我们开发更容易创建、调试和复用的软件,以便我们能够集中精力解决问题的关键部分。

渗透 在一些系统中,局部结构间的相互作用暗示着全局性质。例如,电气工程师可能对由随机分布的绝缘材料和金属材料组成的复合材料感兴趣:哪一部分材料需要是金属的,则整块材料可以导电?又如,地质学家可能对上表面有水(或下表面有石油)的多孔景观感兴趣。在哪些条件下,水能够渗透到底部(或石油可以喷涌到地表)?科学家已经定义了一个抽象过程来模拟这种情况,这一过程被称为渗透(Percolation)。它已被广泛研究并被证明是一种准确而有效的模型,它的应用多得令人眼花缭乱,包括绝缘材料、多孔物质、森林火灾的蔓延、疾病传播和互联网研究。 ...

Get 计算机科学导论:跨学科方法 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.