第 9 章 真实案例介绍

本章将介绍一些通过Python设计与开发的科学计算应用、API/程序库和工具的例子。

即将介绍的Python应用主要涉及以下科学领域:

  • 专业领域硬件/软件

  • 气象学应用

  • 设计与建模

  • 高能物理应用

  • 计算化学

  • 生物学

  • 嵌入式系统

这些应用、工具和程序库涵盖社会、科学与商业领域,包括NGO应用、科学教育的软硬件、气象学应用等。还包括航空器的概念设计程序库、地震风险评估的应用以及生产制造过程中的能源利用率监控软件。除此之外,还有高能物理分析代码生成器、计算化学应用、盲音触觉识别系统、空中交通管制应用、节能灯嵌入式系统、船舶设计程序库以及分子建模工具包。

9.1 用Python开发的科学计算应用

Python是开发科学计算应用的主流语言,尤其适合开发那些低成本、高性能的应用。后面几个小节将介绍Python在这方面的应用、工具和产品。

9.1.1 “每个孩子一台笔记本”项目用Python开发界面

每个孩子一台笔记本(One Laptop per Child,OLPC)是麻省理工学院(MIT)发起的项目。这个项目得到了许多软硬件开发者的大力支持,并通过强大的Python社区实现了OLPC的使命。该项目背后的理念是开发装有创新性软硬件的、低价格教学用笔记本电脑。OLPC的使命简单且令人信服,就是通过一台安装了可以协作学习的软件和应用且低价格、低功耗的笔记本电脑,让贫穷的孩子获得教育的机会。这个使命的主要目标就是要生产和发布一台低成本、低功耗的笔记本OLPC XO。这台笔记本是由中国台湾的量子计算机公司(Quanta Computer)制造的。和其他笔记本不同的是,这台机器使用闪存,没用硬盘,而且安装Fedora的Linux发行版,还支持802.11s通信协议的无线网。XO笔记本的照片如下图所示。

{%}

图片来源:http://images.flatworldknowledge.com/lule/lule-fig13_004.jpg

Sugar是一个自由开源的桌面环境,主要用于交互式学习,它是XO系统的交互界面。Sugar没有桌面、文件夹和窗口的概念。它是从主视图开始,用户可以从主视图屏幕中选择不同的活动(activity)。Sugar里的应用都被称为activity1。activity包括应用以及共享和协作的能力。为了保存Sugar应用的状态和历史,Sugar开发了一个日志功能为用户恢复应用状态。日志会自动记录用户的会话任务,并提供了接口来按照日期恢复历史状态。每个activity都可以与内置的日志功能以及其他功能的接口进行对接,例如剪贴板。Sugar的activity都是全屏,一次只能运行一个程序。

1和Android系统类似。——译者注

Sugar可以支持不同的系统平台。

  • XO笔记本:XO笔记本以Sugar为默认界面。

  • CD启动盘和USB启动盘:Sugar也可以直接通过CD和USB启动。

  • Linux发行版的软件包:Sugar也是各种Linux发行版的软件包——也是一种桌面环境。

  • 虚拟镜像:Sugar可以通过虚拟机安装在Windows和苹果操作系统上2。

2也有Docker版本。——译者注

在Sugar中,Python可以开发各种各样的Sugar应用/activity。开发者可以使用Python扩展Sugar的功能,向里面增加新应用/activity。Sugar的主视图如下图所示。

{%}

图片来源:http://2.bp.blogspot.com/_PPJgknwAe5o/S_8kh3r1qII/AAAAAAAAAGk/qmJdLae1pQ8/s1600/2009-SugarLabs-Homeview.png

启动XO笔记本之后,它就可以自由地获取Python社区的强大支持。它还是一个开源软件,开发者可以理解和改善它。XO笔记本有一个高分辨率、易于阅读的显示屏,而且支持多种语言的电子书模式。XO笔记本的电子书模式如下图所示。

第 9 章 真实案例介绍 - 图3

图片来源:http://regmedia.co.uk/2008/01/16/ebook.jpg

9.1.2 ExpEYES——科学之眼

印度的大学联合加速中心(Inter University Accelerator Centre,IUAC)有一个项目是自制设备与创新物理实验(Physics with Homemade Equipment and Innovative Experiments,PHOENIX)。其主旨是要通过实验改善科学教育的质量。项目的主要目的就是开发低成本的实验设备。另一个分支项目是青年工程师与科学家实验(Experiments for Young Engineers and Scientists,ExpEYES),其重点是通过做实验学习知识。ExpEYES适合高中和更高年级的学生使用。满足其主要目标的设计是一个低成本的设备3。这个设备通过5 V的USB电源供电。

3单片机。——译者注

要使用ExpEYES,首先需要在电脑上安装驱动软件,然后通过USB线将它连接到电脑上。在它的两侧共有32个I/O接口可以连接外部信号。用户可以控制和监视设备的电压。要测量力量、气压、温度等信息,用户可以通过传感器将信息转换成电信号。例如,温度传感器会通过电压显示不同的温度值。ExpEYES的外观如下图所示。

第 9 章 真实案例介绍 - 图4

图片来源:http://expeyes.in/sites/default/files/images/diode-rectifier-photo.jpg

真正的学习过程需要不断地探索并动手实验。物理实验需要控制与测量不同的参数,例如加速度、电流、力、气压、温度、速度、电压等物理量。有时也需要自动测量一些快速变化的物理量(例如AC交流电压)。这些自动化测量技术需要计算机的参与。

用一个Python解释器和Python模块接入串行端口,这在任何电脑上运行ExpEYES都是必备的。设备驱动程序会识别USB端口,驱动会把USB端口作为应用程序的RS232端口。ExpEYES的通信部分用Python语言写的程序库处理。还有GUI程序可以支持每一个实验。用户还可以为新实验自行开发界面。ExpEYES可以通过CD光盘启动,也可以在Linux和Windows系统上安装。它是一款性价比很高的科学实验室,既轻便又很容易扩展。它可以支持大量的科学实验,从高中到研究生阶段都适用。

最新的ExpEYES版本是ExpEYES Junior。这版ExpEYES增加了一些新功能,早期版本的一些简单功能被移除了。它还可以和Android智能设备进行交互。ExpEYES Junior的界面如下图所示。

第 9 章 真实案例介绍 - 图5

图片来源:http://expeyes.in/sites/default/files/Experiments/Photos/half-wave.jpg

最初的软件是用C语言写的,很快就迁移到了Python上。这样的改变有两个好处。第一个好处是显著增强了ExpEYES开发GUI程序的能力。另一个好处是通过Python与硬件交互可以让实验的开发变得更简单。

9.1.3 Python开发的天气预测应用程序

通常,气象学家会将自己的预测结果与真实的天气进行比较,观察气象周期。这么做可以优化和改善模型的质量,模型需要收集真实的天气测量值的数据。ForecastWatch可以帮助气象学家们对比、观察、理解预测数据的准确性。它可以提供基础的分析和无偏的数据,从而改进预测效果。ForecastWatch不断地从多个气象数据源收集预测数据,然后根据真实情况为预测数据加上标签。它会对比美国和加拿大850多个观测点的预测值和实际值。温度、天气状况、降雨量和风力风向等指标的高低都会进行对比。ForecastWatch还可以生成月度统计值,并按照国家、州、地区进行不同区域的聚合。

ForecastWatch由以下四部分构成。

  • 获取预测的气象数据:这是一个预测数据解析器,它会从每个预测数据源的网络接口收集数据。它会先解析数据,然后把数据存入数据库,等待与真实数据做比较。

  • 获取实际测量的气象数据:这是一个真实数据解析器,它会从美国国家气象数据中心的国家气象服务平台收集真实气象数据。数据包括最高与最低温度、降雨量、重大气象事件。真实数据解析器会将数据存储到数据库,然后与预测数据对比评分,最后把分数保存下来。

  • 数据聚合引擎:对数据进行存储和评分之后,通过数据聚合引擎(data aggregation engine)按照不同的时间段(月度、年度、任意天数)、地点、数据源进行聚合。

  • 网络应用框架:最初,网页是用PHP设计的,后来用Python重新设计了。通过Python重新设计简化了网络开发过程,并可以与系统中的其他模块更好地衔接。Python网络应用框架是Quixote,可以开发纯Python的网络应用。

这是一个纯Python的应用,通过Python开发了系统的所有四个模块,从有趣的Web界面到耗时的输入与输出数据收集模块,以及高性能的数据聚合引擎。开发者之所以选择Python,是因为它有大量的标准程序库,可以收集数据、分析数据,并将数据存储到数据库中。多进程程序库可以扩展解析器的功能,同时收集多个城市的数据。数据聚合引擎也是用Python开发的,通过数据库拉连接模块MySQLdb在MySQL里执行SQL语句,让输入程序存储预测和气象数据。

9.1.4 Python开发的航空器概念设计工具与API

这一节将分别介绍支持航空器概念设计的一个工具和一个API。首先将介绍VAMPzero工具,之后介绍pyACDT API。

德国宇航局(German Aerospace Centre,德语简称DLR)是德国国家航空、能量与运输研究机构。它的主要任务是进行航空与航天研究,并开发研究需要的工具软件。DLR用Python开发工具和API。

VAMPzero是航空器概念设计的软件工具。它帮助德国宇航局在航空器概念设计过程中攻坚克难,游刃有余。航空器设计的需求变化得非常快,因此它们需要一直使用最新的技术。VAMPzero的灵活性可以让用户轻松调整设计方案。VAMPzero使用主流的手册方法,具有高度扩展性。VAMPzero可以跟踪计算历史,并将数据导出为CPACS格式。利用VAMPzero设计一个新系统,包括外部尺寸、引擎、结构、系统和成本。VAMPzero是支持多学科环境的航空器概念设计的第一个开源工具。VAMPzero使用的编程语言是Python。其开发目的是打造一款可以快速完成航空器设计过程的工具。

pyACDT(Python aircraft conceptual design toolbox,Python航空器概念设计工具包)是一款由加拿大皇家军事学院的先进航空器设计实验室(Advanced Aircraft Design Lab)的科学家开发的框架。pyACDT是基于Python的面向对象框架,可以实现航空器的功能分析、定义、设计与优化。它用独立的模块分别表示概念设计阶段的几个主要的学科分析内容。这个框架通过面向对象编程的概念实现了各种航空器的组件、引擎、特征以及学科分析。pyACDT与不同学科关联的主要模块如下图所示。这个框架的设计可以让用户轻松地改变约束条件、设计变量、学科分析与目标函数。

{%}

9.1.5 OpenQuake引擎

全球地震模式(Global Earthquake Model)是由多个地区、国家和国际级的组织与众多个人开发者共同努力组建的世界地震风险计算与通信的统一开放标准。基金会是公私合作的,其几千会员通过不同的形式做贡献,可以是时间,也可以是知识。这个组织有不同的国际项目,如果一个人使用并测试了GEM的软件,总结项目结果,参加会议,就可以成为一个用户。GEM从事的活动至关重要,因为地震爆发的可能性与日俱增,世界上大部分地区都缺乏可靠的地震风险评估工具和数据。另外,人们也缺乏一套国际标准来对比不同的风险分析结果。如果想正确地理解地震的后果与行为,全球合作就显得更加可取了。GEM就是在这种背景下创建的。

GEM基金会的关注领域主要有以下几个。

  • 地震风险评估工具:主要任务是设计、开发、增强高质量的地震风险评估工具。

  • 地震风险信息:GEM也致力于引领地震数据收集与生成的方法和原则,以及地震风险分析模型。

  • 协同风险评估项目:GEM基金会的工作还包括发展并实施不同规模的协同风险评估项目。

  • 技术转移与能力开发:GEM还致力于地震风险评估的能力开发与知识传递。

科学家们找到了GEM这个组织就可以为地震风险评估积累优秀的经验,创造共同的数据库,开发模型。GEM把大家的贡献汇集在网页版的OpenQuake工具箱中。世界各地的利益相关者都可以获取这个工具箱。OpenQuake引擎是用Python写的,工程师、财务专家、政府官员、科学家都可以用它们评估地震风险。

OpenQuake是一个网页版的风险评估工具,提供了计算、可视化、研究地震风险的一体化环境,可以捕获新数据,还能分享协同学习的结果。

OpenQuake有五个用于地震风险评估与缓解的不同方面的计算器。这些计算器的简介如下所示。

  • 地震风险计算器:这个计算器主要用于增强公众对地震风险的意识,以及作出合理的应急计划和管理。它可用来计算一组既定资产在一次地震中的损失和损失统计量。

  • 地震损失评估计算器:这个计算器用于评估不同类型资产在地震中可能受到的破坏程度。它可以评估一组资产中的某一项资产在地震中遭受的损害。

  • 基于概率事件的风险计算器:这个计算器主要用于计算一组资产在地震中可能遭受的总损失。可以通过概率论与数理统计方法对一组资产可能遭受的损失进行统计。

  • 基于PSHA的计算器:这个计算器的输出可以用来对不同地点的资产进行地震风险缓解优先级排序。计算器会计算单个资产的损失概率和损失统计。针对不同地点的资产的这些计算还可以作为资产间相对风险评估的依据。

  • 风险—收益率计算器:这个计算器用于对需要采取加固措施的不同地区进行优级先排序,以及找出对一个地区来说经济适用的抗震设计。它可以计算和评估针对某些建筑的改造或加固措施是否在经济上富有成效。

9.1.6 德国西马克公司的能源效率应用程序

德国西马克技术有限公司(SMS Siemag AG)是冶金工厂与轧钢领域的巨头。该公司的一部分业务是为客户改善其工厂的能源利用率,以及工厂对环境的影响。西马克把这部分业务称为生态模式(Eco Mode)。在这种模式下,在特定的时间里,不需要使用的设备会自动关闭或进入节能模式。这个自动化过程是通过Python写的软件实现的。这个Python写的软件可以测量并记录不同设备的能源消耗情况。然后,通过分析日志就可以知道不同操作模式下生产不同发电机组的能量消耗。

9.1.7 高能物理数据分析的自动代码生成器

大型强子对撞机(Large Hadron Collider,LHC)是世界上最大的粒子物理实验人造机器。这个机器的使命是验证粒子物理学理论并探索新粒子。这开启了高能物理的新纪元。

这是迄今为止最大的科学实验,主要介绍如下:

  • 将近100个国家参与其中

  • 大约有500个研究机构共同合作

  • 大约10 000个人从事或得益于该实验

  • 项目成本高达40亿欧元

  • LHC的隧道长度达到27千米

这个巨大的机器每年会产生10 PT的数据,单节点设备无法存储如此庞大的数据。为了解决这个问题,为此,CERN(欧洲粒子物理研究所)联合世界上几乎所有的高能物理研究机构,开发了一种网格计算环境。这个网格通过机构间的网络、共享的存储空间和电力构成巨大的并行处理系统。为了获得更高的性能,分析工作是在数据所在的系统上透明执行的。

在LHC的隧道中,有两个质子束循环对流。它们每25纳秒会在四个实验点进行对撞。撞击之后会产生许多粒子。其中有些是已知的粒子,有些可能是新的、未知的粒子。

如果要从对撞数据中抽取适当的信息,物理学家们需要为自己感兴趣的每一个物理量写代码。只有当物理量一次性运行通过时,代码才是有效的。但是,他们需要写很多这样的分析代码来扫描所有可能的新物理量。这些代码基本类似,大部分通过复制粘贴就可以搞定。通常这些代码可能容易出错,因此有许多代码需要调试与维护。

为了解决这个问题,CERN的科学家们为高能物理社区提供了一个新方法——用Python开发了一个计算机辅助的软件工程包,来处理常用代码和算法以及自动生成分析代码。代码是由用户输入自动生成的,所以更高效,也更不易出错。由于分析代码是自动生成的,所以物理学家可以恰当地处理物理学部分。这个软件包的名字叫WatchMan,是一个用纯Python写成的面向对象框架。它可以让物理学家把精力集中在分析上,不需要担心分析代码,因为它可以根据用户的设置生成完整的分析代码。它是用CERN用Python开发的两个工具开发的:PyROOT(Python数据分析工具箱)和rootcint(Python和C++绑定系统)。WatchMan的处理流程如下图所示。

{%}

9.1.8 Python的计算化学应用

英国阿斯利康(AstraZeneca)是一家知名的医药公司,生产治疗恶性肿瘤、心血管疾病、肠胃病与其他感染病的药物,还有止疼药及治疗其他疾病的药物。通常,研发一款新药需要很长时间(通常是几十年)。最大的难题就是尽可能快速地从大量分子中找出可能制成良药的分子。

有一些技术可以预测分子的属性与行为。这些技术由计算化学家发明,用于确保分子对身体无毒害且稳定,可以完成既定的活动,而且可以自动消失。

这些技术的问题在于,光靠它们的结果还不够充分,化学家还需要完成真实的医学实验。必须在实验室里测试这些分子,观察它们的行为和反应。为了节省测试时间,用不同的计算模型来快速挑选最好的候选分子。

在阿斯利康加强药物鉴定过程之前,实验化学家和计算化学家在药物鉴定中是彼此依赖的。实验化学家不会接触许多计算技术,计算化学家应该帮助实验化学家用计算机预测数据,这个预测过程非常复杂。这种依赖关系既会影响计算化学家的工作效率,也会影响实验化学家的工作效率,因为计算化学家需要花大量的时间重复做同样的计算,没有精力开发新的预测技术。如果有某种技术可以让实验化学家自己用计算机进行预测,那么作业流程就可以得到改善,药物预测过程也会变得更加简单快捷。

Pierre Bruneau用Perl脚本设计了一款成功的网页版分析工具。这个工具使用了分子属性计算器工具Drone。阿斯利康利用了这个工具来增强其后端工具Drone,使得它更好管理、更具扩展性、更健壮。这个新的后端工具叫作PyDrone。

PyDrone(用Python开发的)添加了强大的显式异常处理和严格的类型检查功能,以增强Drone的稳定性。起初,在测试阶段,PyDrone会把那些原来在Drone里是隐式处理的异常都显式地抛出。开发者发现,这些异常识别出了之前没有处理过的新异常情况。新版本的代码增加了对这类异常的处理,提高了系统稳定性,因为越来越多的异常可以得到正确处理了。

为了提高PyDrone的扩展性,化学家们开发了一个规则库。这个规则库由一些属性提前计算好的数据缓存和属性名称构成,用于预测用户输入的函数名称。

这个规则库类似于Python的字典对象。用户请求一个属性时,它首先在缓存数据中寻找,如果找到了,就直接使用缓存数据;如果没找到,就调用相关函数进行计算。

这个结果会保留在规则库中以便下次使用。在新的预测过程中,开发者可以增加新函数到函数表中。通过这种方式,PyDrone就可以管理所有的函数,并预测用户输入的函数名称。

9.2 Python开发的盲音触觉识别系统

盲音触觉识别系统(Blind Audio Tactile Mapping System,BATS)为盲人提供地图。在这个软件发明之前,世界上没有盲人可以使用的地图。这个项目是由美国北卡罗来纳大学的一个研究小组发起的。开发语言使用Python,而不是Java和C++。一开始小组内部争论激烈,因为大家更熟悉Java和C++,对Python则了解不多。最终,研究小组还是做出了明智的决定,使用Python开发,因为Python有许多扩展程序库和模块,适合开发这类应用。

BATS使用的是北卡罗来纳大学的古代世界测绘中心(Ancient World Mapping Center)的地理信息数据文件。ArcView/ArcGIS是一种功能齐全的GIS软件,用于可视化、管理、创建和分析地理数据。一开始,研究小组开发了两个ASCII码文本文件,用于显示地图的地点信息和海拔。这些信息用1024×768的网格匹配系统中使用的显示触摸屏的分辨率。网格信息存储在Python数组中。数据会被压缩以适应BATS模型,然后存储在压缩文件中。程序将数据解压缩并加载成适当的数据结构,以完成快速启动。显示像素与文件内容之间有一一对应的关系。这个系统响应迅速,可以敏捷地捕捉用户的动作。不同的声音/视觉效果被用来表示不同地理特征,例如海洋和陆地。

BATS由两个主要的组件构成,分别是一个用户图形界面和一个数据管理器。数据管理器让用户可以通过图形界面管理数据。图形界面中有一个触摸板、一些数字按键和一个声音合成器。用户在触摸板上的动作可以通过wxPython捕捉到。wxPython里的鼠标动作事件可以对用户动作进行响应,这些事件会查询地理类型以及城市数据库的信息。wxPython可以用声音响应鼠标和键盘动作。BATS还使用微软的语音API。

wxPython是支持多平台的GUI开发API,可以让Python程序员通过类型丰富的用户界面和事件处理模式开发图形界面。

数据管理器通过三个数值数组存储不同的数据,并通过一个ODBC连接器连接微软Access数据库。这些数据包括海拔、土地类型和数据库对应的索引键值。这个键值用来查询Access数据库,获取对应城市位置上的具体信息。

9.2.1 TAPTools空中交通管制工具

开发通用的空中交通管制解决方案非常有挑战性,因为每个机场各具特色,如整体设计、管理规范和基础设施等各有差异。最主要的困难是每个客户的空中交通管制系统都是其自定义的界面。

Frequentis是在空中交通管理、公共安全和交通领域首屈一指的解决方案供应商。他们通过Python开发了TAPTools产品系列,用于空中交通管制的灯塔和机场工具。空中管理员通过这些工具控制跑道灯光和导航辅助设备,监控导航设备,并跟踪天气条件。

为每个用户开发一套全新的图形界面是非常单调和费时的任务。为了解决这个问题,Frequentis开发了一个设计图形界面布局的工具,叫PanView。这个工具可以设计和建立用户图形界面,在PanMachine软件中运行。这个软件运行在专门设计的硬件PowerPanel上面。用这些工具可以非常快速地开发界面原型。起初,PanView和PanMachine使用Lua语言。Lua可以用来连接用户界面与空中交通管制系统的各项功能。

和Python相比,Lua有许多问题。当产生错误的时候,它能提供的异常信息极少(不方便调试)。Lua也没有列表数据结构,而且标准库内容很少,不适合构建大程序。

芬兰民航局不仅想在PowerPanel上运行用户界面,而且还想在网络浏览器上使用。为了能在浏览器上运行程序,Frequentis用Java重写了PanMachine。由于Lua不能在Java下运行,Frequentis用Python重新实现了原来Lua的功能。他们使用了Python和Python的Java实现版本Jython。这样用户就可以在用Java实现的PowerPanel和PanMachine上运行用户界面了。在PowerPanel上面,Python用C语言实现,而Jython用Java实现,用于浏览器运行。之后,Frequentis用Python重写了Lua布局功能的代码。相比Lua,Python代码更加简洁,也更容易管理。

9.2.2 光能效率检测的嵌入式系统

加拿大Carmanah技术公司是太阳能LED照明市场的领头羊。它是多种用途照明设备的制造企业与供应商,包括机场照明、工业信号灯、海运、铁路、公路以及运输线使用的照明设备等。这家企业首先研发了海运导航用的自动供电与自主控制太阳能灯。目前,Carmanah的市场遍及全世界,尤其是一些特殊环境,如海洋、沙漠、北极等。这些年,电力照明设备为了满足自动供电与自主控制,变得越来越复杂。这些灯接收的有效太阳能比率会随着天气、季节、光的位置、太阳能板的角度以及其他属性的变化而变化。还有一些其他需求,例如灯需要支持可编程界面,对输入数据反馈不同的输出结果,通过无线网连接到控制中心,以及其他复杂的需求。

设计与开发这种灯具,还需要结合电力、电子、机械与光学等多个专业的知识。每个灯都是用运行在微控制器上的嵌入式软件程序进行控制。这类灯具都可以进行自动控制,并且根据客户需求完成特定的功能。

通常,嵌入式系统的组件都需要具备稳定性高、能耗低、体积小的特点。为了实现这些需求,人们发明了微处理器这种特殊的处理器芯片。这些微处理器是把CPU、内存和外围设备集成在一块能耗极低的芯片上。除了要把嵌入式程序写入微处理器的ROM中,在开发与维护阶段,还有一些函数需要使用台式机或笔记本电脑来完成。

现在假如有一个嵌入式系统需要在普通系统上编译,目标代码已经加载到微处理器里了。类似的情况还有,在设备维护时,需要添加额外的硬件才能对已经部署好的设备进行异常检测,例如需要一台笔记本电脑来运行诊断工具。Python的许多特性都非常适合进行嵌入式系统开发。这些特性包括Python程序的简洁短小、自动内存管理、简单强大的面向对象特性等。

Carmanah技术公司在嵌入式系统开发周期的若干关键阶段中采用Python。例如,通过Python程序控制软件开发过程、压力测试和单元测试、设备模拟器,等等。

9.3 Python开发的科学计算程序库

在Python里,有许多程序库可以应用于多个领域。这些程序库既可以应用于商业领域,也可以进行科学计算。下面的内容就是介绍一些应用于科学计算领域的程序库。

9.3.1 Tribon公司的船舶设计API

Tribon Solutions公司4长期致力于船舶计算机辅助设计与建模解决方案。其业务重心是改善船舶应用的整体效率。Tribon软件集可以支持船舶建造的整个生命周期。这就需要高度并发的过程配合建造需求。他们为从事船舶设计与建造的人开发了一个中央资料库和单点信息源。这个模型被称为产品信息模型(Product Information Model,PIM)。这些人可以是设计师、材料管理者、制造团队的成员、策划人以及其他涉及整个建造过程的相关人员。

42004年被AVEVA集团收购。——译者注

一般情况下,船舶设计方案都是独一无二的,但是设计师的关注点是通过标准化和数据驱动设计检验流程以降低成本。这个过程由供应商决定,因供应商不同的设计原则、管理规范和标准、设备和设施的条件而变化。Tribon公司可以让供应商根据自己的需求解决这些问题。Tribon公司开发了一套简单易用、平台独立、可扩展、可嵌入的API。

Tribon公司因为Python的许多优秀特性而选择了它,例如可扩展和可嵌入、没有许可证费用、平台独立。Tribon公司的解决方案不会受到Python版本升级的影响。他们的客户用API开发的应用是平台独立的,因此可以移植到不同的平台上运行,而不会出现任何问题,也不需要修改代码。这些解决方案将部分设计过程的周期从几周缩短到了几天,而且改善了设计的整体质量。这是因为设计、计算和其他过程都自动化了。他们把该产品命名为Tribon Vitesse。

9.3.2 分子建模工具箱

分子建模工具箱(Molecular Modeling Toolkit,MMTK)是在生物分子系统中对分子进行建模与仿真的Python程序库。这是用Python和C语言开发的开源程序库。生物分子仿真通常都需要很长时间,一般都要几周。仿真过程中需要利用复杂的数据结构描述生物分子。之所以选择Python和C语言,是因为这两者一个是效率高的解释型语言,一个是性能好的编译型语言。对于复杂的、高性能仿真需求,这是一对好组合。

之所以选择Python而不是TCL和Perl,是因为其具有许多优秀特性,比如可以与编译型语言整合、丰富的第三方程序库、面向对象编程范式以及代码的可读性。

用户在使用MMTK的时候会觉得它是一个纯Python库,因为其C语言部分是利用Python的C语言扩展包写的。这部分代码只用在时间与性能要求高的地方。例如,交互能量评估是一个时间密集型函数,能量最小化和生物分子动力学是需要花很长时间进行反复迭代计算的过程;它们都需要非常高的性能。这些函数都通过C语言实现,这样可以避免Python过多的资源消耗。另外,MMTK还使用了Python的数值分析包、LAPACK(线性代数包)和NetCDF程序包。MMTK也支持内存共享的并行计算(用多线程)以及分布式并行计算(用MPI)。

MMTK在设计时非常注重自身的扩展性。用户不需要修改原代码,即可增加新的函数、专业术语和数据类型。MMTK借助外部工具实现可视化功能,VMD和PyMOL程序包也被整合在里面。通常,用户都是通过Python脚本使用MMTK。然而,有一些程序支持图形用户界面,如DomainFinder和nMOLDYN。

MMTK主要由三种类型的类构成。第一种类型是表示原子与分子的类,以及管理生物分子和其他内容的数据库的类。一般的分子类还有一个子类用来表示生物分子,例如DNA、蛋白质、RNA。第二种(也是很重要的)类型用于实现各种交互能量计算机制。第三种类型实现数据输入与输出相关功能。代码支持多种文件格式的输入输出功能,包括许多主流的文件格式,以及基于NetCDF的自定义MMTK格式。MMTK的文件是可移植的,并且是可执行文件的形式。由于它们是可执行文件,因此体积小,而且可以快速接入。

9.3.3 标准Python程序包

除了上面介绍的那些,Python还有许多具有专业用途的工具、API和应用,可以在PyPI的网站http://pypi.python.org里看到。里面有几千个专业用途的程序包(绝大多数都是用Python开发的)。其应用范围涉及大量的科学、商业与计算领域。这些程序包涉及的领域包括生物信息、健康医疗、地理空间数据分析、仪器仪表、工程、数学等。这个网站还维护了一个按类型划分的程序包列表。涉及科学与工程领域的程序包如下所示。

  • fluiddyn:研究流体力学的Python框架。

  • DeCiDa:Python的设备与电路数据分析工具。

  • python-vxi11:Python的VXI-11驱动,用于控制企业内网连接的设备。

  • pygr:Python图形数据库工具,主要用于生物信息学产品。

  • Brainiac:Python关于人工智能系统的组件集合,每个组件都可以单独使用。

  • pyephem:计算天体运行位置的Python程序包。

  • PyMca:X射线荧光分析的Python工具箱。

  • openallure:Python的声音与视觉对话系统。

  • BOTEC:天体物理学与轨道力学模拟器。

  • pyDGS:基于小波变换的数字粒度分析。

  • MetagenomeDB:基因序列和注释数据库。

  • biofrills:分子序列分析的生物信息学工具。

  • python-bioformat:生命科学数据读写文件格式。

  • psychopy_ext:一个针对神经科学和心理学实验的框架,能够快速进行可重复设计、分析与画图。

  • Helmholtz:创建神经科学数据库的框架。

  • pysesa:一个致力于在空间域和频率域中提供通用的Python框架的开源项目,目的是让点云数据和其他地理空间数据的统计分析变得科学直观。

  • nitime:神经科学数据的时间序列分析。

  • SpacePy:空间科学的分析工具。

  • Moss:神经影像学与认知科学的统计工具。

  • cclib:计算化学的解析器与算法工具。

  • PyQuante:Python量子化学程序包。

  • phoebe:恒星和行星系统的物理学工具。

  • mcview:高能物理事件仿真的三维/图像事件查看器。

  • yt:天体物理学仿真的分析与可视化工具箱。

  • gwpy:引力波天文学的Python程序包。

9.4 小结

本章介绍了用Python开发的一些专门用于科学计算领域的真实应用、程序库和工具。我们介绍了Python在许多不同领域的应用,如软硬件开发(像OLPC和ExpEYES),以及照明设备中用Python进行嵌入式系统开发。也介绍了Python在计算化学与生物分子建模领域的应用。最后还介绍了Python在科学与其他领域中的计算机辅助建模的案例。

下一章将介绍科学计算应用与API开发过程中的最佳实践,尤其是Python开发的最佳实践。