APP下载

结合Python的分析化学参数提取自动化

2018-07-19王海燕崔文超马海龙

吉林大学学报(理学版) 2018年4期
关键词:线程实例人工

王海燕, 崔文超, 李 闯, 马海龙

(1. 吉林师范大学 计算机学院, 吉林 四平 136000; 2. 吉林大学 理论化学研究所, 理论计算化学实验室, 长春 130021;3. 锐曼智能装备有限公司, 广东 深圳 518057)

Python[1]是一种面向对象的解释型计算机程序设计语言, 其源代码和解释器CPython遵循 GPL协议. 由于Python语言的语法简洁清晰, 且具有丰富及强大的库, 因此常被用于计算机相关的交叉学科研究中. Python也称为胶水语言, 因其能把用其他语言制作的各种模块(尤其是C/C++)轻松地联结在一起. Python常见的一种应用情形是快速生成程序的原型甚至是程序的最终界面.

分析化学的主要任务是鉴定物质的化学组成, 测定物质有关组分的含量, 确定物质的结构和存在形态及其与物质性质间的关系等, 主要包括定性分析、定量分析及结构和立体分析[2-3]. 在实现理论化学分析过程中, 经常需要提取[4-5]一些必要的参数进行辅助分析, 通常这些参数的获取都是人工进行干预的, 而实际情况下, 一些不确定因素会影响人工操作, 如人工输入的误差、人员脱离计算机的时间浪费等, 导致参数提取效率低下. 此外, 理论化学中数据的分析有时是指数级的, 人工操作效率低下.

针对上述问题, 本文将化学分析参数提取与Python实现自动化相结合, 提出一种自动化参数提取算法Wfnauto. 该算法借助Python中列表生成技术和线程模拟技术, 依次自动化提取所需参数, 规避了手工输入的误差以及人员脱离计算机的各种时间浪费. 为说明自动化Wfnauto算法的优势, 本文针对几类代表性wfn文件进行实验测试. 为说明算法的效率提升作用, 实验中将代表性wfn文件实例以不同数量为基数分成多个群组, 群组基数分别为1,5,10,20,40. 分别在手工状态和自动化状态下进行参数提取操作, 选取的实例均真实有效. 将这两种方法的求解效率进行对比的实验测试结果表明了自动化参数提取算法的优势, 进而证明Wfnauto算法能有效提升理论化学中数据分析的效率.

1 自动化参数提取算法

在理论化学分析过程中, 有些计算数值是指数级的, 人工完成化学参数的提取, 会基于人工特性, 掺杂许多不确定的因素, 且各提取过程的衔接部分也会因人工的参与而浪费大量时间. 如在执行multiwfn的过程后, 会根据提示输入选择计算的内容, 此时人员如脱离计算机, 计算机将接收不到任何指令, 只能等待, 导致极大的时间浪费. 因此, 参数提取的自动化[7]成为亟待解决的问题. 一方面, 让机器自动完成路径及文件名的预处理; 另一方面, 实现参数提取及录入的自动化.

1.2 自动化参数提取算法设计 通常情况下, 理论化学问题中的人工参数提取过程为: 首先, 确定欲处理的wfn文件, 并对其进行初始化; 然后, 依次在路径中找到这些wfn文件, 通过执行固定程序, 人工选择欲提取的参数. 如固体物质的生成焓问题, 要提取总表面积、表面正电势、表面负电势等参数. 常规的人工参数提取过程的框架描述如下, 循环n次执行.

1) 初始化wfn文件;

2) 运行multiwfn程序提取参数值;

3) 手工输入预处理文件路径及文件名;

4) 提取过程中手工输入欲提取参数;

5) 将结果输出到屏幕.

显然, 人工参数提取过程需要不断地人为参与, 从路径和文件名的确定到提取参数的指定, 都需要不断与计算机交互. 假设操作人员无人为错误, 也不会疲倦, 则这种不断交互提取的方式也亟待改变. 要实现去除衔接时间外更进一步的效率提升, 必须实现过程的自动化. Python中的列表生成技术和线程模拟技术恰好可实现此目的. 基于该技术的自动化参数提取算法Wfnauto框架描述如下:

1) 导入存放路径配置文件;

2) 运行multiwfn程序提取参数值;

3) 将结果输出到文件.

Wfnauto算法的执行过程如图1所示. 1) 首先确定相关实例文件路径, 并引入存放在固定路径下的配置文件; 其次获得当前目录下所有后缀为wfn的实例文件; 2) 由于需要依次处理相关文件, 所以借助Python“列表生成式”生成预处理实例文件列表; 3) 循环遍历所有文件, 依次提取欲处理参数; 4) 在依次处理完相应文件后, 打开存放输出结果的输出文件, 如果没有此文件, 则算法会自动创建; 5) 借助调用线程模拟调用Multiwfn程序, 并把输出结果存到刚打开的文件中; 6) 在线程结束后关闭相应文件.

图1 Wfnauto算法过程Fig.1 Process of Wfnauto algorithm

2 人工方法与自动化方法实验比对

为证明Wfnauto自动化参数提取方法的优越性, 本文将其与人工参数提取方法进行对比. 实验环境如下: 在Pentium(R) Dual-Core处理器E6700的Lenovo机上完成, 主频为3.20 GHz, 内存为2.00 GB.

将所有实例文件分成不同个数的组, 一方面观察组内相同数量时, 自动化参数提取方法Wfnauto较人工参数提取方法的优势; 另一方面观察每组数量变化情况下, 自动化参数提取方法Wfnauto自身的变化规律. 实验过程针对理论化学研究中常用的40个wfn实例文件对象进行统计分析, 选择下列典型实例: 2-pyridoxine_2-aminopyridine.wfn,Al.wfn,acetic_acid.wfn,acrolein.wfn和Ar.wfn等. 所有实验均在同一台机器上完成. 考察CPU运行时间(单位ms)[8], 并对效率提升比例进行分析.

本文假设人工参数提取实验是在操作人员不离开计算机的前提下, 即设定为“零间隔浪费”的人工执行提取操作, 实际情况下会有间隔浪费, 执行时间远大于表中人工提取时间.

2.1 组内相同数量比较 本文实验依次将40个问题实例划分为不同个数的组, 在此基础上, 观察组内数量相同时, 自动化参数提取方法Wfnauto较人工参数提取方法的优势. 首先选择将问题实例5个一组进行比较, 计算问题执行的CPU运行时间, 对比每组中5个实例人工方法运行时间总和与自动化方法运行时间总和的差别. 为降低误差, 实验选择6次测试的平均值, 比较结果列于表1.

表1 每组5个实例时两种算法运行时间(ms)的比较

由表1可见, 每组实例的自动化参数提取方法均比人工参数提取方法在时间效率上有大幅度提升. 这主要是因为Wfnauto借助Python列表生成式罗列生成相关列表, 过程中通过isfile的判断, 将listdir中的文件类型锁定为wfn, 然后借助线程subprocess自动化模拟参数提取的过程, 这里线程处理的对象是join(Python中communicate的处理对象). 这些技术使参数的提取准确而快速, 与人工参数提取方法相比显然有更大优势.

8组实例的效率提升百分数如图2所示. 由图2可见, 每组实例的提升效率均在15%以上, 平均效率提升为24.09%. 表明引入自动化参数提取方法显著提升了分析化学参数提取的效率, 且该提升值还未考虑人工参数提取方法人员浪费的时间, 即假设操作人员在无缝时间衔接的方式下工作, 显然这种浪费是不可避免的, 实际的效率提升百分数还要更高.

为进一步证明自动化参数提取过程的效率提升作用, 组内继续扩大实验数量, 选取10个实例一组进行实验, 两种方法所用时间对比结果如图3所示. 由图3可见, 在每组10个实例的情况下, 自动化参数提取方法Wfnauto比人工参数提取方法用时显著缩短, 再次证明了Wfnauto算法的优势.

图2 效率提升百分数比较Fig.2 Comparison of percentage of efficiency promotion

图3 每组10个实例时两种方法的运行时间对比Fig.3 Comparison of running time of two algorithms in each group of 10 instances

图4 不同数量分组效率比较Fig.4 Efficiency comparison of different number of groups

2.2 组内不同数量比较 将每组10个实例文件的Wfnauto执行结果与每组5个实例的Wfnauto执行结果进行对比, 结果如图4所示. 由图4可见, 每组10个实例高于每组5个实例的平均效率提升能力, 即在Wfnauto算法下, 随着分组内实例文件个数的增多, 自动化参数提取方法自身效率不断提升. 这是由于组内实例文件数量的增多, 促使线程内单批处理能力增强, 进而使总体提取时间缩短、效率提升幅度更大.

综上所述, 本文提出了一种自动化参数提取算法Wfnauto, 算法借助Python的列表生成技术和线程模拟技术, 显著提高了参数的提取效率.

猜你喜欢

线程实例人工
人工3D脊髓能帮助瘫痪者重新行走?
基于C#线程实验探究
人工,天然,合成
人工“美颜”
基于国产化环境的线程池模型研究与实现
线程池调度对服务器性能影响的研究*
新型多孔钽人工种植牙
完形填空Ⅱ
完形填空Ⅰ
Java的多线程技术探讨