一种将模型与R进行耦合交互的方法技术

技术编号:23982521 阅读:41 留言:0更新日期:2020-04-29 12:00
一种将模型与R进行耦合交互的方法,利用OpenMP(共享存储并行编程)构建“工作‑休眠循环框架”,控制模型与R平台交替工作与休眠,即模型工作时,R平台休眠等待,当模型执行完毕即进入休眠,而R平台开始工作;R平台结束后,发送指令启动模型运行,从而开始了一个新的工作循环,如此交替工作。本发明专利技术中将PEST输入模板和输出指令概念及模型运行功能实例化为模型线程,用户R函数和脚本实例化为R线程。此两个线程受上述“工作‑休眠循环框架”管理,以实现交互耦合。本发明专利技术方法的特点在于不接触模型源代码的情况下,实现了模型与R协同工作,模型就像是一个R函数一样可以在R平台自由调用,从而充分利用R平台的强大功能,实现参数优化、敏感性和不确定性分析及可视化等功能,极大地简化了模型反演和模拟分析操作,并提升了工作效率和用户体验。

A method of coupling model and R

【技术实现步骤摘要】
一种将模型与R进行耦合交互的方法
本专利技术属于地球环境科学领域,特别涉及一种将模型与R进行耦合交互的方法。
技术介绍
数学模型常被用于科学与工程的各个领域。数学模型的应用中,通常需要开展模型反演并观测模型的运行状况,这就涉及参数率定、敏感性分析、不确定性分析、运行状态与结果的可视化。开展模型反演(如模型参数率定)通常又需要一些外部算法,比如在环境科学模拟领域,将广泛应用的ShuffledComplexEvolution(SCE)Algorithm与模型结合起来。这个过程非常富有挑战性,通常需要理解模型结构和算法接口,掌握模型的源代码,并且需要大量编程工作将模型与算法对接起来以实现参数更新和模型迭代。比如著名的水文水质模型SWAT在建立参数自动优化时就是将用Fortran语言编写的SCE与SWAT模型对接才能实现,这个例子中优化算法和模型都是同一种编程语言(Fortran)所写。而如果模型和算法的编程语言不同,将带来非常大的困难。模型运行的关键是向模型提供输入参数或者输入文件,待模型运算完毕后,获得模型的输出结果。参数估计程序(PEST)是一款优秀的跨模型软件,可以独立于任何模型,并在不接触模型源代码的情况下,对任何模型运行进行控制和分析(例如参数优化、敏感性分析和不确定性分析)等操作。PEST用“输入模板”、“输出指令”和“控制文件”概念管理模型运行,其中“输入模板”用来指定输入文件中的特定参数;“输出指令”用以获取输出文件中的特定结果;而“控制文件”用以启动模型使其按既有方式运行,并执行指定功能(如参数优化和不确定性分析)。它成功避免了模型编写语言不同的弊端。但是,PEST中的优化算法是开发人员事先确定的,算法固定而缺乏灵活性。而且,PEST缺乏统计分析和图形输出功能。R是一个用于统计计算和统计制图的优秀软件,由于其免费、开源、开发便捷,功能强大的特点,在全球广受欢迎,集聚了众多的使用者和开发者,也汇集了众多的算法库(函数包),如FME、hydroPSO、hydro-mad等,实现了参数优化、敏感性分析、不确定性分析、统计分析和可视化等功能,形成了丰富的资源,具有极大的吸引力。但是,科学和工程领域里的大多数模型(尤其是大模型)是用汇编语言(C/C++和Fortran)编写,如何将这些非R编写的模型(如SWAT)和R结合起来应用,实现模型与R函数的通信和协同运行,是一个非常有应用前景但又富有挑战性的工作。现有技术介绍由于计算机编程语言发展的历史原因和开发者喜好,各种模型的编写语言不同,导致这些模型不能在R中直接运行,比如生态水文领域著名的SWAT、Century、EDCM等模型是用Fortran编写的,无法在R中直接工作。为了和R配合运行,此时有两种解决方案:第一是需要用R重新编写模型程序,由于模型往往比较复杂,重写模型需要用户对模型每一个细节非常了解,且精通R语言,编写的难度巨大,耗时耗力;而且转换为R语言后运行效率难以保证,风险较高。第二种解决方案是开发者不得不放弃简单易用的R语言,为了适应模型的编写语言,重新学习所需模型的编程语言,造成很大的学习成本,如果出现需要应用多个模型,模型是用多门语言编写的情况,那么用户付出的学习负担将更沉重,而且冒着模型语言执行效率不高的风险。现有技术缺点(1)第一种方案难度大,且耗时耗力,风险高。(2)第二种方案导致用户需要学习一门或多门编程语言,学习成本高,且一些模型无法实现可视化,用户体验较差。两种方案所需要的知识和技术成本都非常高,对于一般科学人员和工程师来讲难度非常大,不利于快速完成具体的业务需求。
技术实现思路
本专利技术的目的在于提供一种将模型与R进行耦合交互的方法,以解决上述问题。为实现上述目的,本专利技术采用以下技术方案:一种将模型与R进行耦合交互的方法,包括以下步骤:步骤1,利用OpenMP构建“工作-休眠循环框架”,此框架将同时启动两个线程(线程0和线程1),一个线程(比如,线程0运行模型)工作时,另外一个线程(线程1运行R)处于休眠等待状态;前者线程完成任务后即进入休眠,并唤醒后者线程工作。这样,两个线程交替实现了“工作-休眠”循环直至各自任务全部完成。步骤2,将PEST的“输入模板”和“输出指令”功能融入到“工作-休眠循环框架”,当框架启动时,会在两个线程上分别同时启动PEST和R,PEST首先以默认参数运行模型,并将结果传给R后进入休眠状态,R平台显示并分析模型输出结果;步骤3,当R平台需要调用模型时,会将模型参数和运行模型的指令发给“工作-休眠循环框架”,后者收到信息后,执行PEST的“输入模板”功能以编辑输入文件,将新参数写入输入文件,并执行模型,此时R平台休眠等待;步骤4,模型运行结束后,PEST通过其“输出指令”模块从输出文件中获取运算结果,运算结果作为特定输出变量,并将结果传递给R平台后进入休眠等待状态;此时R平台通过R函数计算模型误差、评价模型表现,并重新生成一组新参数再调用模型;如此反复,直至完成模拟分析(如参数优化、敏感性与不确定性分析及可视化等)功能;步骤5,用户使用R的各项功能对模型运算结果开展进一步的统计分析与可视化表达。进一步的,步骤2中,默认参数运行模型包括EDCM、SWAT等环境模型。进一步的,步骤3和步骤4中模型与R耦合交互运行具体包括以下步骤:1)将“工作-休眠循环框架”具体化为一个程序来实现;2)框架启动后,即利用OpenMP启动两个线程:线程0(模型线程)和线程1(R线程);模型线程利用模型默认的(或起始的)输入参数,并按照模型既有方式exe或者batch文件运行模型,完成后即进入休眠状态;R线程加载两类R函数:模型函数和用户自定义R脚本;模型函数用于模型线程与R线程通信;用户R脚本为用户定义的模型模拟分析过程(如参数优化、敏感性及不确定性分析等);3)当R脚本需要调用模型时,R的模型函数向模型线程传送启动信号和新参数,R线程随即进入休眠状态;4)模型线程被唤醒后,利用PEST“输入模板”函数向输入文件写入传来的新参数,并按照模型既有方式exe或者batch文件启动模型;模型运算完成后,模型线程使用PEST“输出指令”函数从输出文件中获取特定结果,并向R平台的模型函数发送结束信号和运算结果,模型线程随即进入休眠;5)R线程启动,根据返回的输出结果继续执行后续的分析运算过程,并决定是否继续运行模型;6)如需再次调用模型则继续进行步骤3至5;7)模型迭代完成后,用户继续使用R的各项功能对模型输出结果进行进一步分析和可视化表达,并结束整个过程。进一步的,模型迭代包括:参数优化、敏感性和不确定性分析。与现有技术相比,本专利技术有以下技术效果:本方法专利技术的关键是建立“工作-休眠循环框架”,此框架的作用是控制模型与R平台交替工作与休眠,即框架控制模型这一环节工作时,R平台休眠等待,当模型执行完毕后即进入休眠,此时R本文档来自技高网
...

【技术保护点】
1.一种将模型与R进行耦合交互的方法,其特征在于,包括以下步骤:/n步骤1,利用OpenMP共享存储并行编程构建“工作-休眠循环框架”,此框架将同时启动两个线程,线程0和线程1,一个线程工作时,另外一个线程处于休眠等待状态;前者线程完成任务后即进入休眠,并唤醒后者线程工作;/n步骤2,将PEST的“输入模板”和“输出指令”功能融入到“工作-休眠循环框架”,当框架启动时,会在两个线程上分别同时启动PEST和R,PEST首先以默认参数运行模型,并将结果传给R后进入休眠状态,R平台显示并分析模型输出结果;/n步骤3,当R平台需要调用模型时,会将模型参数和运行模型的指令发给“工作-休眠循环框架”,后者收到信息后,执行PEST的“输入模板”功能以编辑输入文件,将新参数写入输入文件,并执行模型,此时R平台休眠等待;/n步骤4,模型运行结束后,PEST通过其“输出指令”模块从输出文件中获取运算结果,运算结果作为特定输出变量,并将结果传递给R平台后进入休眠等待状态;此时R平台通过R函数计算模型误差、评价模型表现,并重新生成一组新参数再调用模型;如此反复,直至完成模拟分析功能;/n步骤5,用户使用R的各项功能对模型运算结果开展进一步的统计分析与可视化表达。/n...

【技术特征摘要】
1.一种将模型与R进行耦合交互的方法,其特征在于,包括以下步骤:
步骤1,利用OpenMP共享存储并行编程构建“工作-休眠循环框架”,此框架将同时启动两个线程,线程0和线程1,一个线程工作时,另外一个线程处于休眠等待状态;前者线程完成任务后即进入休眠,并唤醒后者线程工作;
步骤2,将PEST的“输入模板”和“输出指令”功能融入到“工作-休眠循环框架”,当框架启动时,会在两个线程上分别同时启动PEST和R,PEST首先以默认参数运行模型,并将结果传给R后进入休眠状态,R平台显示并分析模型输出结果;
步骤3,当R平台需要调用模型时,会将模型参数和运行模型的指令发给“工作-休眠循环框架”,后者收到信息后,执行PEST的“输入模板”功能以编辑输入文件,将新参数写入输入文件,并执行模型,此时R平台休眠等待;
步骤4,模型运行结束后,PEST通过其“输出指令”模块从输出文件中获取运算结果,运算结果作为特定输出变量,并将结果传递给R平台后进入休眠等待状态;此时R平台通过R函数计算模型误差、评价模型表现,并重新生成一组新参数再调用模型;如此反复,直至完成模拟分析功能;
步骤5,用户使用R的各项功能对模型运算结果开展进一步的统计分析与可视化表达。


2.根据权利要求1所述的一种将模型与R进行耦合交互的方法,其特征在于,步骤2中,默认参数运行模型包括EDCM、SWAT等环境领域模型。


3.根据权利要求1所述的一...

【专利技术属性】
技术研发人员:吴一平孙玉柱李汇文邱临静
申请(专利权)人:西安交通大学
类型:发明
国别省市:陕西;61

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1