利用simlab软件进行敏感性分析,对simlab生成的取样文件进行运行,之后生成simlab的模型输入文件。

# 敏感性分析 注意路径和文件名字
from pcse.fileinput import CABOFileReader
from pcse.fileinput import YAMLAgroManagementReader
from pcse.models import Wofost71_WLP_FD
from pcse.base import ParameterProvider
from pcse.fileinput import ExcelWeatherDataProvider
import datetime
import os
star=datetime.datetime.now()
# simlab输出的参数读取
para_dir = r'C:\Users\Administrator\Desktop\模型数据\SIMLAB_file'  #simlab输出文件的位置
data_dir = r'C:\Users\Administrator\Desktop\模型数据'  # 作物模型数据路径
weather_dir = r'C:\Users\Administrator\Desktop\气象数据'  # 气象数据路径
# 模拟的位置
lat = 34   #维度
lon = 111.5 #经度
# 更改参数列表
# 创建播种日期的字典
sow_date = dict(zip([i+1 for i in range(30)],[datetime.date(2018,10,i+1) for i in range(30)] ))
# 要改变的数据
change_data = {'TBASEM':0,'TEFFMX':1,'TDWI':2,'LAIEM':3,'RGRLAI':4,'SPAN':8,'TBASE':9,'CVL':15,'CVO':16,'CVR':17,'CVS':18,'Q10':19,'RML':20,'RMO':21,'RMR':22,'RMS':23,'PERDL':24,'CFET':27,'DEPNR':28,'RDI':29,'RRI':30,'RDMCR':31,'IFUNRN':32,'NOTINF':33,'SSI':34,'WAV':35,'SMLIM':36,'RDMSOL':37}
#  读取模型参数
weatherdataprovider = ExcelWeatherDataProvider(os.path.join(weather_dir, "NASA天气文件lat={0:.1f},lon={1:.1f}.xlsx".format(lat, lon)))
cropdata = CABOFileReader(os.path.join(data_dir,'WWH102.CAB'))
soildata = CABOFileReader(os.path.join(data_dir,'EC3.NEW'))
sitedata = {'SSMAX'  : 0.,'IFUNRN' : 0,'NOTINF' : 0,'SSI'    : 0,'WAV'    : 100,'SMLIM'  : 0.03,'CO2'    : 360,'RDMSOL'  : 120}
parameters = ParameterProvider(cropdata=cropdata, soildata=soildata, sitedata=sitedata)
#创建文档储存模型输出结果
with open(os.path.join(para_dir,'豫西模型输出结果加上管理.txt'),'a') as fp2:fp2.writelines(['1','\n','TSWO','\n','time = no','\n'])#打开simlab输出的文档with open(os.path.join(para_dir,'EFASTDOC3250_50.SAM'),'r') as fp:fp.readline() # 第一行number = fp.readline() #第二行为生成参数个数fp.readline() #变量个数fp.readline() #0  此后开始读参数fp2.write(str(number))for i in range(int(number)):sim_paraments = list(map(float,fp.readline().split('\t')[:-1]))# 更改参数for iterm,value in change_data.items():parameters[iterm] = sim_paraments[value]parameters['SLATB'][1]=sim_paraments[5]parameters['SLATB'][3]=sim_paraments[6]parameters['SLATB'][5]=sim_paraments[7]parameters['KDIFTB'][1]=sim_paraments[10]parameters['KDIFTB'][3]=sim_paraments[10]parameters['EFFTB'][1]=sim_paraments[40]parameters['EFFTB'][3]=sim_paraments[40]parameters['AMAXTB'][1]=sim_paraments[11]parameters['AMAXTB'][3]=sim_paraments[12]parameters['AMAXTB'][5]=sim_paraments[13]parameters['AMAXTB'][7]=sim_paraments[14]parameters['AMAXTB'][1]=sim_paraments[11]parameters['RDRRTB'][5]=sim_paraments[25]parameters['RDRRTB'][7]=sim_paraments[25]parameters['RDRSTB'][5]=sim_paraments[26]agromanagement = YAMLAgroManagementReader(os.path.join(data_dir,'wheat{}.agro'.format(int(sim_paraments[39]))))                                                    agromanagement[0][datetime.date(2018, 10, 1)]['CropCalendar']['crop_start_date']=sow_date[round(sim_paraments[38])]wf = Wofost71_WLP_FD(parameters, weatherdataprovider, agromanagement)wf.run_till_terminate()output = wf.get_summary_output()fp2.write(str(output[0]['TWSO']))fp2.write('\n')if i%100==0:print(i)
end=datetime.datetime.now()
print('运行完成,共用时{}'.format(end-star))

主要的部分是改变的参数以及参数的特点使用不同的替换方式。

敏感性分析2.0

可以同时分析以最终目标为变量和中间过程变量的敏感性

from pcse.fileinput import CABOFileReader
from pcse.fileinput import YAMLAgroManagementReader
from pcse.models import Wofost71_WLP_FD
from pcse.base import ParameterProvider
from pcse.fileinput import ExcelWeatherDataProvider
import datetime
import os
import progressbar
import pandas as pd# simlab输出的参数读取
para_dir = r'C:\Users\Administrator\Desktop'  #simlab输出文件的位置
# 模拟的位置
lat = 34.5   #维度
lon = 112 #经度
# 更改参数列表
# sow_date = dict(zip([i+1 for i in range(30)],[datetime.date(2019,10,i+1) for i in range(30)] ))
change_data = {'TDWI':0,'LAIEM':1,'RGRLAI':2,'SPAN':6,'TBASE':7,'CVL':18,'CVO':19,'CVR':20,'CVS':21,'Q10':22,'RML':23,'RMO':24,'RMR':25,'RMS':26,'PERDL':35,'RDI':40,'RRI':41,'RDMCR':42}
#  读取模型参数
weatherdataprovider = ExcelWeatherDataProvider(os.path.join(para_dir, "NASA天气文件lat={0:.1f},lon={1:.1f}.xlsx".format(lat,lon)))
cropdata = CABOFileReader(os.path.join(para_dir,'BN207_1.CAB'))
soildata = CABOFileReader(os.path.join(para_dir,'EC3.NEW'))
sitedata = {'SSMAX'  : 0.,'IFUNRN' : 0,'NOTINF' : 0,'SSI'    : 0,'WAV'    : 20,'SMLIM'  : 0.03,'CO2'    : 360,'RDMSOL'  : 120}
parameters = ParameterProvider(cropdata=cropdata, soildata=soildata, sitedata=sitedata)
agromanagement = YAMLAgroManagementReader(os.path.join(para_dir,'wheatSA018.agro'))
#  创建文档储存模型数值结果
with open(os.path.join(para_dir,'1输出结果22218.txt'),'a') as fp3:fp3.writelines(['2', '\n', 'TSOW', '\n', 'TAGP','\n', 'time = no', '\n'])with open(os.path.join(para_dir,'输出结果生育期内22218.txt'), 'a') as fp2:fp2.writelines(['1', '\n', 'LAI', '\n', 'time = yes', '\n'])#  打开simlab输出的文档with open(os.path.join(para_dir, 'EFAST22218.sam'), 'r') as fp:fp.readline()  # 第一行number = fp.readline()  # 第二行为生成参数个数fp.readline()  # 变量个数fp.readline()  # 0  此后开始读参数fp2.write(str(number))fp3.write(str(number))for i in progressbar.ProgressBar()(range(int(number))):sim_paraments = list(map(float,fp.readline().split('\t')[:-1]))# 更改参数for items, value in change_data.items():parameters[items] = sim_paraments[value]parameters['SLATB'][1]=sim_paraments[3]parameters['SLATB'][3]=sim_paraments[4]parameters['SLATB'][5]=sim_paraments[5]parameters['KDIFTB'][1]=sim_paraments[8]parameters['KDIFTB'][3]=sim_paraments[9]parameters['EFFTB'][1]=sim_paraments[10]parameters['EFFTB'][3]=sim_paraments[11]parameters['AMAXTB'][1]=sim_paraments[12]parameters['AMAXTB'][3]=sim_paraments[13]parameters['AMAXTB'][5]=sim_paraments[14]parameters['AMAXTB'][7]=sim_paraments[15]parameters['TMPFTB'][1]=sim_paraments[16]parameters['TMPFTB'][3]=sim_paraments[17]parameters['FRTB'][1]=sim_paraments[27]parameters['FRTB'][9]=sim_paraments[28]parameters['FRTB'][13]=sim_paraments[29]parameters['FRTB'][15]=sim_paraments[30]parameters['FLTB'][1]=sim_paraments[31]parameters['FLTB'][5]=sim_paraments[32]parameters['FLTB'][7]=sim_paraments[33]parameters['FLTB'][9]=sim_paraments[34]parameters['FSTB'][1]=1 - sim_paraments[31]parameters['FSTB'][5]=1 - sim_paraments[32]parameters['FSTB'][7]=1 - sim_paraments[33]parameters['FSTB'][9]=1 - sim_paraments[34]parameters['RDRRTB'][5]=sim_paraments[36]parameters['RDRRTB'][7]=sim_paraments[37]parameters['RDRSTB'][5]=sim_paraments[38]parameters['RDRSTB'][7]=sim_paraments[39]# agromanagement[0][datetime.date(2019, 10, 1)]['CropCalendar']['crop_start_date']=sow_date[round(sim_paraments[50])]wf = Wofost71_WLP_FD(parameters, weatherdataprovider, agromanagement)wf.run_till_terminate()summary_output = wf.get_summary_output()output = wf.get_output()date=pd.date_range(start=summary_output[0]['DOE'], end=summary_output[0]['DOM'], freq='D')df = pd.DataFrame(output).set_index("day")df.index = pd.to_datetime(df.index, format='%Y/%m/%d')fp2.writelines(['RUN', ' ', str(i), '\n'])fp2.write(str(len(date)))fp2.write('\n')fp3.writelines([str(summary_output[0]['TWSO']), '\t', str(summary_output[0]['TAGP'])])fp3.write('\n')number = 0for j in date:number += 1fp2.writelines([str(number), ' ', str(df.loc[df.index == j, 'LAI'].iloc[0]), '\n'])

PCSE.WOFOST敏感性分析程序相关推荐

  1. 作物生长模型WOFOST测试

    这里介绍农业种植专业的作物数学模型WOFOST 内容在网站上可找到.因为该模型是通用模型,原作者推出了python 版本. 为了核实其真实性本人进行了测试,测试原代码放在github上.更多智慧灌溉专 ...

  2. 编程精粹 --Microsoft编写优质无错C程序秘诀

    献给我的妻子Beth, 以及我的双亲Joseph和Julia Maguire ────为了他们的爱和支持 序 1986年,在为几家小公司咨询和工作了10年之后为了获得编写Macintosh应用程序的经 ...

  3. The Python Crop Simulation Environment 系列学习笔记(二)

    我是目录 使用自己的数据运行PCSE/WOFOST模型 Introduction Importing the relevant modules Reading model parameters Cro ...

  4. POCO C++库学习和分析 -- 序

    POCO C++库学习和分析 -- 序 1. POCO库概述: POCO是一个C++的开源库集.同一般的C++库相比,POCO的特点是提供了整一个应用框架.如果要做C++程序应用框架的快速开发,我觉得 ...

  5. 敏感性分析算法 程序_计算机程序设计艺术(TAOCP)精读笔记1 - 算法分析真正应该有的样子 Part 1...

    系列文章的导航链接: 张浩驰:<趣味算法>专栏所有文章分类 - 导航​zhuanlan.zhihu.com 下篇文章Part 2导航: 张浩驰:计算机程序设计艺术(TAOCP)精读笔记1 ...

  6. matlab 期权分析,matlab程序优化 (期权计算为例)

    首先我开始编写matlab程序的时候也不怎么注意它的效率问题,能出结果就行了,呵呵管那多干什么 不是给自己找事的.可是随着遇到的问题越来越复杂,matlab的计算时间越来越长,有时难以忍受, 就专向C ...

  7. Stealth-Persist混合内存系统中持久应用程序的体系结构支持

    文章目录 crash-consistent applications 崩溃一致性程序 摘要 一.引言 二.背景 A.新兴的非易失性存储器 B.混合主存储器(HMM) C.页面缓存策略 D. 目前的工业 ...

  8. WOFOST模型Matlab,一种WOFOST-PAR耦合模型建立方法与流程

    本发明涉及作物生长模型建立方法,具体涉及一种WOFOST-PAR耦合模型建立方法. 背景技术: 作物的生长发育研究中,涉及到不同地区,不同气候带的时间变异性,因此我们需要通过参数调节,来适应不同地区的 ...

  9. 2022年美国大学生数学建模竞赛C题贸易策略解题全过程文档及程序

    2022年美国大学生数学建模竞赛 C题 贸易策略 原题再现:   背景:   市场贸易者经常购买和销售股票,目标是最大化他们的总回报.针对每次购买和销售,经常会存在回报提成.两个案例是金子和比特币. ...

最新文章

  1. JavaScript之面向对象学习三原型语法升级
  2. mysqlbinlog flashback 使用最佳实践
  3. xp mysql字符集与乱码_解决MYSQL中文乱码问题三种方法
  4. linux_redhat_线程后台运行方法
  5. C++实现 简单 单链表
  6. 【Spark Summit East 2017】可扩展性机器学习的特征哈希
  7. java火焰纹章攻略女神之剑_《火焰纹章风花雪月》白云之章-女神再生仪式图文攻略...
  8. 聚类热图分类注释_Python可视化matplotlibamp;seborn15-聚类热图clustermap(建议收藏)...
  9. main,tmain,winmain()等函数——UNICODE - sensensen - 博客园
  10. DE17 Finding Particular Solutions via Fourier Series
  11. eclipse 启动服务后,部署的文件一直是旧的文件的原因分析
  12. 学python lesson3
  13. java memcached delete_Memcached删除/Delete数据
  14. 全网最详细黑苹果安装教程,轻松打造Win10+黑苹果双系统,一看就懂。
  15. 百度云满速下载原理与方法
  16. StarRocks从入门到精通系列四:表设计
  17. magisk安装失败_俄罗斯官改MIUI MiRoom安装刷入教程
  18. html css视频播放器,jQuery和CSS 3定制HTML 5视频播放器
  19. GFP_ATOMIC or GFP_KERNEL 区别
  20. 红米联通版刷机包 MIUIV6 扁平化 精简 稳定 流畅 省电 长用版

热门文章

  1. locust压测工具【学习】
  2. css卷轴动画小程序,CSS动画|JavaScript动画|小程序动画
  3. 【控制仿真】基于matlab flocking算法多智能蜂拥控制仿真【含Matlab源码 1955期】
  4. 基于 java springboot+layui+jquery实现二手物品网站系统
  5. for do done循环语句
  6. RK3399平台开发系列讲解(内核调试篇)2.7、USB Debugging工具usbmon使用介绍
  7. python编程超市购物系统_python面向过程编程小程序- 模拟超市收银系统
  8. linux 内核round-robin scheduler代码,用LVS构架负载均衡Linux集群系统 linux lvs
  9. (15.1.22.2)Guitar-Structure
  10. 兰海说成长|孩子不爱做作业怎么办?