IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> The Python Crop Simulation Environment 系列学习笔记(一) -> 正文阅读

[Python知识库]The Python Crop Simulation Environment 系列学习笔记(一)

作者:recommend-item-box type_blog clearfix

PCSE:Python 作物模拟环境


PCSE(Python Crop Simulation Environment)是一个用于构建作物模拟模型的 Python 包,特别是在瓦赫宁根(荷兰)开发的作物模型。PCSE 提供了实施作物模拟模型的环境、读取辅助数据(天气、土壤、农业管理)的工具以及模拟物候、呼吸和蒸散等生物物理过程的组件。PCSE 还包括已在世界范围内广泛使用的WOFOST和LINTUL3作物模拟模型的实现。例如,WOFOST 已在 MARS 作物产量预测系统中实施,该系统在操作上用于欧洲及其他地区的作物监测和产量预测。

最初,在瓦赫宁根开发的模型通常是使用 FORTRAN 或 FORTRAN 仿真环境 (FSE) 编写的。两者都是非常好的工具,但它们已经有些过时,并且难以与当今可用的许多优秀工具(XML、数据库、Web 等)集成。像许多其他软件包一样,开发 PCSE 是为了促进我自己的研究工作。我想要一些更容易使用、更具交互性和更灵活的东西,同时仍然实现 FSE 的合理计算方法。出于这个原因,PCSE 是用 Python 开发的,成为用于科学目的的重要编程语言。

传统上,瓦赫宁根的作物模拟模型已经提供,包括完整的源代码。PCSE 也不例外,其源代码是开放的,并在欧盟公共许可证下获得许可。PCSE 在 Python 2.7+ 和 3.2+ 上运行,并且对生物物理过程的实现具有不错的测试覆盖率。

PCSE的背景


在Python的作物模拟环境是因为需要重新实现在瓦格宁根中开发的作物模拟模型开发。许多瓦赫宁根作物模拟模型最初是在 FORTRAN77 或使用FORTRAN Simulation Translator (FST) 开发的。尽管这种方法产生了具有高数值性能的高质量模型,但用 FORTRAN 编写的模型的固有局限性也越来越明显:

  • 模型的结构通常相当单一,并且不同的部分非常紧密地耦合在一起。用另一种模拟方法替换模型的某些部分并不容易。
  • 这些模型依赖于难以更改的基于文件的 I/O。例如,在 FORTRAN 中与数据库的接口很复杂。
  • 一般来说,对于像 FORTRAN 这样的低级语言,简单的事情已经需要多行代码,而且很容易出错,尤其是在开发或改编软件方面经验有限的农学家和作物科学家。

为了克服上述许多限制,开发了 Python 作物模拟环境 (PCSE)。它为开发模拟模型以及许多作物模拟模型的实现提供了环境。PCSE 是用纯 Python 代码编写的,这使得它更灵活、更容易修改和扩展,允许轻松连接数据库、图形用户界面、可视化工具和数字/统计包。PCSE 有几个有趣的功能:

  • 在纯 Python 中实现,核心系统在 Python 标准库之外有少量依赖。
  • 模块化设计允许您使用简单但强大的方法在模块之间通信变量,从而相对快速地添加或更改组件。
  • 与 FST 类似,它通过明确分离参数、速率变量和状态变量来强制执行良好的模型设计。此外,PCSE 负责模块初始化、变化率的计算、状态变量的更新以及完成模拟所需的操作。
  • 输入/输出与仿真模型本身完全分离。因此,PCSE 模型可以轻松读取和写入文本文件、数据库和科学格式,例如 HDF 或 NetCDF。
  • 程序模块的内置测试确保系统的完整性

为什么选择 Python

PCSE 首先是从科学需要中发展起来的,以便能够快速适应模型和测试想法。在科学领域,由于其清晰的语法和易用性,Python 正迅速成为实现算法、可视化和探索性分析的工具。另一个优点是 Python 的 C 实现可以很容易地与用 FORTRAN 编写的例程接口,因此许多 FORTRAN 例程可以被用 PCSE 编写的仿真模型重用。

存在许多用于数值分析(例如 NumPy、SciPy)、可视化(例如 MatPlotLib、Chaco)、分布式计算(例如 IPython、pyMPI)和与数据库接口(例如 SQLAlchemy)的软件包。此外,对于统计分析,可以通过 Rpy 或 Rserve 建立与 R-project 的接口。即使像 Google 和 YouTube 这样的大公司也是 Python 的重度用户,MicroSoft 在其 .NET 框架 (IronPython) 中实现了 Python,而 ESRI 在其地理信息系统 (ArcGIS) 中使用 Python 作为主要脚本语言。最后,Python 是一种开源解释型编程语言,几乎可以在任何硬件和操作系统上运行。

鉴于上述考虑,很快就认识到 Python 是一个不错的选择。尽管 PCSE 是为科学目的而开发的,但它已经在生产环境中用于某些任务。

PCSE 的历史

在 4.1 版本之前,PCSE 被称为“PyWOFOST”,因为其主要目标是提供 WOFOST 作物模拟模型的 Python 实现。然而,随着系统的发展,很明显该系统可用于实施、扩展或混合(裁剪)仿真模型。因此,名称“PyWOFOST”变得过于狭窄,选择了名称 Python Crop Simulation Environment 以模拟 FORTRAN Simulation Environment (FSE)。

PCSE 的局限性

PCSE也有它的局限性,其实有几个:

  • 速度:灵活性是有代价的;PCSE 比用 FORTRAN 或其他编译语言编写的等效模型慢得多。
  • PCSE 中的模拟方法目前仅限于具有固定每日时间步长的矩形(Euler)积分。尽管如果需要,模块的内部时间步长可以做得更细粒度。
  • 没有图形用户界面。然而,用户界面的缺乏可以通过将 PCSE 与pandas包和Jupyter notebook一起使用来部分弥补 。PCSE输出可以很容易地转换为pandas DateFrame ,可在Jupyter notebook显示图表。

安装 PCSE


要求和依赖

PCSE 正在使用 Python 2.7.14 和 python 3.6.5 在 Ubuntu Linux 14.04 和 Windows 7 上开发。由于 Python 是一种独立于平台的语言,因此 PCSE 在 Linux、Windows 或 Mac OSX 上同样有效。在安装 PCSE 之前,Python 本身必须安装在您的系统上,PCSE 对其他 python 包有许多依赖项,如下所示:

Numpy >= 1.6
SQLalchemy >= 0.8
PyYAML >= 3.11
xlrd >= 0.9.3
xlwt >= 1.0.0
pandas >= 0.20
requests >= 2.0.0
traitlets-pcse == 5.0.0.dev

设置你的Python环境

为 PCSE 设置 Python 环境的一种便捷方法是通过Anaconda python 发行版。创建引导 PCSE 的专用虚拟环境。我们将创建的虚拟环境不仅包含 PCSE 的依赖项,还包含许多其他有用的包,例如IPythonPandasJupyter notebook。这些包也将用于入门部分。

安装和测试 PCSE

安装 PCSE 的最简单方法是通过 python 包索引 ( PyPI )。如果您有兴趣在自己的脚本中使用 PCSE 提供的功能,但对修改或贡献 PCSE 本身不感兴趣,则从 PyPI 安装最有用。从 PyPI 安装是使用包安装程序pip 完成的,它在 python 包索引中搜索一个包,下载并安装到你的 python 环境中:

pip install pcse

为了测试 PCSE 包,我们需要启动 python 并导入 pcse:

import pcse
pcse.test()

在这里插入图片描述

如果模型输出与预期输出匹配,则测试将报告“OK”,否则将产生错误。

实例入门


安装完成,使用一些示例开始建模。这些示例目前侧重于应用 WOFOST 和 LINTUL3 作物模拟模型,但将来可能会在 PCSE 中提供其他作物模拟。

本章使用**start_wofost()**连接到演示数据库,该数据库包含西班牙南部网格位置(网格 31031)的气象数据、土壤数据、作物数据和管理数据。

初始化 PCSE/WOFOST 模型

%matplotlib inline
import sys, os
import pcse
import pandas
import matplotlib
matplotlib.style.use("ggplot")
import matplotlib.pyplot as plt
print("This notebook was built with:")
print("python version: %s " % sys.version)
print("PCSE version: %s" %  pcse.__version__)
import warnings
warnings.filterwarnings("ignore")
This notebook was built with:
python version: 3.7.9 (default, Aug 31 2020, 07:22:35) 
[Clang 10.0.0 ] 
PCSE version: 5.4.2

让我们开始一个 WOFOST 对象,用于模拟 2000 年在西班牙南部的一个位置(网格 31031)在自由排水的土壤(mode=‘wlp’)的限水条件下的冬小麦(crop = 1):

wofost_object = pcse.start_wofost(grid=31031, crop=1,year=2000,mode='wlp')
type(wofost_object)
<class 'pcse.models.Wofost71_WLP_FD'>

成功初始化了一个 PCSE/WOFOST 对象,该对象处于初始状态并等待进行一些模拟。我们现在可以以1天为例推进模型状态。

wofost_object.run()

也可以指定模拟天数:

wofost_object.run(days=10)

获取有关状态和速率变量的信息

可以使用PCSE 对象上的get_variable()方法检索有关计算模型状态或比率的信息。例如,反演当前模型状态下的叶面积指数,您可以执行以下操作:

wofost_object.get_variable('LAI')
>0.28708095263317146
wofost_object.run(days=25)
wofost_object.get_variable('LAI')
>1.5281215808337203

表明 11 天后 LAI 值为 0.287。再经过25天,LAI 增加到 1.528。该get_variable方法可以反演模型中定义的某个地方的任何状态或速率变量。最后,我们可以通过让模型结束,因为作物成熟或收获日期。

wofost_object.run_till_terminate()

接下来,我们在模拟的每个时间步长(“output”)反演模拟结果:

output = wofost_object.get_output()

利用pandas库收拾一下结果

import pandas as pd
df = pd.DataFrame(output)
df.to_excel("wofost_results.xls")

最后,我们可以在作物周期结束时查看这些结果:

ummary_output = wofost_object.get_summary_output()
msg = "Reached maturity at {DOM} with total biomass {TAGP} kg/ha and a yield of {TWSO} kg/ha."
print(msg.format(**summary_output[0]))
summary_output
[{'CTRAT': 22.457536342947606,
'DOA': datetime.date(2000, 3, 28),
'DOE': datetime.date(2000, 1, 1),
'DOH': None,
'DOM': datetime.date(2000, 5, 31),
'DOS': None,
'DOV': None,
'DVS': 2.01745939841335,
'LAIMAX': 6.132711275237731,
'RD': 60.0,
'TAGP': 15261.752173534584,
'TWLV': 3029.3693107257263,
'TWRT': 1546.990661062695,
'TWSO': 7179.8046078262705,
'TWST': 5052.578254982587}]

在这里插入图片描述

总结


本期内容主要介绍了PCSE: The Python Crop Simulation Environment基本知识、安装流程以及入门实例。


参考文献:
[1] https://pcse.readthedocs.io/en/stable/

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-08-12 16:33:29  更:2021-08-12 16:33:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/26 1:16:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计