作物模型狂奔 Apsim 脚本并行思路

这里没图,去B站看看

整体思路:Python -》R -》Apsimx

0、准备工作

0.0 电脑环境

我用的Win10啦,Linux、Mac可能得自己再去微调一下。

PS:一直没上win11,因为win11 开始菜单用着实在难顶。
!在这里插入图片描述](https://img-blog.csdnimg.cn/direct/7758a7ad233946e89203f5fc5c9cc7b9.png)

0.1 安装Apsim 710

我这里ApsimNG 和 Apsim Classic 都有,用的多了发现NG好用,界面简洁,操作简单。

0.2 Python IDE

我用的Pycharm,个人感觉最好使的IDE,没有之一。

Python 解释器随便装个咯,我用的 Python 3.10 版本。

对于 Python,我其实也是个小白,只会写些小脚本,哈哈哈哈哈。

0.3 R IDE

继续用Pycharm,需要上 R环境插件。
PS:用过一天RStudio,感觉还是Pycharm顺手啊。尽管Pycharm R语言插件不支持绘图,这点坐等更新。对于 R,我其实还是个小白,这点代码全现百度现写的,哈哈哈哈哈。

R 解释器也随便装个咯,我用的 R 3.1.4 版本。

1、核心依赖包

1.1 rpy2(Python)

Python 环境下调用R包的依赖包。需要配一下R的环境变量,这里要注意哦,要不然会报错。

1.2 apsimx®

R环境下调用本地apsim的驱动包。(https://femiguez.github.io/apsimx-docs/apsimx.html)

2、Python部分编码思路

2.1 设置R环境变量

os.environ[‘R_HOME’] = ‘D:\application\R-4.1.3’

2.2 引包

import os
import pandas as pd
from pathlib import Path
from datetime import datetime
import rpy2.robjects as robjects

2.3 调用R部分编码

robjects.r’source’
apsimx_runner = robjects.r[‘apsimx_runner’]

result = apsimx_runner(2023, ‘mangshi’, ‘A’, param)

2.4 单线程

直接for,遍历就完了

for row in problems_parameters.values:
multi_run_func(row)

2.5 多进程

这里用的 进程池 ProcessPoolExecutor

pool = ProcessPoolExecutor(12)
for result in pool.map(multi_run_func, problems_parameters.values):
run_results.append(result)

3、R部分编码思路

3.1 函数封装

这里比较简单,封装了一个调用apsimx包的函数,留了接收作物模型参数的入口

apsimx_runner <- function (year, site.name, site.no, param) {}

3.2 函数体

apsimx 文件复制一个临时件,后续操作在这个临时文件上进行,不破坏原文件。

file.copy(ap_file.path, tmp_file.path)

设置气象数据

edit_apsimx(tmp_file.name, src.dir = tmp_file.dir, wrt.dir = tmp_file.dir, overwrite = TRUE, node = “Weather”, value = weather_file.path)

设置模型参数

edit_apsimx_replacement(file = tmp_file.name, src.dir = tmp_file.dir, wrt.dir = tmp_file.dir, overwrite = TRUE, node.string = p_path, parm = p_name, value = value, root = root, verbose = FALSE)

模型狂奔,这里用的Apsim NG

sim_result <- apsimx(tmp_file.name, src.dir = tmp_file.dir)

删除临时文件

file.remove(unlist(lapply(list.files(pattern = paste0(tmp_file.real_name, ‘.*’), path = tmp_file.dir), function(t) paste0(tmp_file.dir, ‘/’, t))))

返回结果

return(sim_result)
apsimx 包有使用demo,这里调用的几个函数都是根据demo调整的。

3.3 apsim classic

apsimx 包里 apsim 指代 Classic,apsimx 指代 NG

需要的话,自己研究下apsimx包里的apsim函数吧

3.4 R编码替代

上述代码可以在.R文件写好,然后在Python中调用;也可以直接写在Python代码里,这也是支持的。具体看rpy2的文档。

4、结果

4.1 格式

直接把结果接到list里

结果列表
数据项具体含义可以用 ApsimNg GUI 看看

4.2 耗时

跑一次大概10多秒,尽量开多进程或者多线程去跑,省点时间

欢迎各位道友关注、留言、私聊、交流病情。

如果需要的话去B站交流吧,平常不登CSDN

挂个小广告不会太过份吧~

需要指导的话,那就得让我挣点零花咯,嘿嘿。PS:不说虚的,程序狂奔才是最重要的。

Apsim classic 710、ApsimNg(ApsimX) 模型GUI运行、数据处理、脚本并行(R、Python)。

【闲鱼】https://m.tb.cn/h.5GmTkIi?tk=UcspW9B3gEY MF7997 「我在闲鱼发布了【apsim模型指导】」

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/686383.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

037-安全开发-JavaEE应用JNDI注入RMI服务LDAP服务JDK绕过调用链类

037-安全开发-JavaEE应用&JNDI注入&RMI服务&LDAP服务&JDK绕过&调用链类 #知识点&#xff1a; 1、JavaEE-JNDI注入-RMI&LDAP 2、JavaEE-漏洞结合-FastJson链 3、JavaEE-漏洞条件-JDK版本绕过 演示案例&#xff1a; ➢JNDI注入-RMI&LDAP服务 ➢JNDI注…

一文彻底搞懂MySQL主从同步

文章目录 1. 简介2. 基本原理3. 实现方式4. 常见的主从架构模式4.1 一主一从4.2 一主多从4.3 双M4.4 联级复制4.5 多主一从 5. 常见问题 1. 简介 MySQL主从同步是一种数据库复制技术&#xff0c;它可以将一台MySQL数据库&#xff08;称为主服务器&#xff09;的数据复制到另一…

阿里云香港服务器cn2速度测试和租用价格表

阿里云香港服务器中国香港数据中心网络线路类型BGP多线精品&#xff0c;中国电信CN2高速网络高质量、大规格BGP带宽&#xff0c;运营商精品公网直连中国内地&#xff0c;时延更低&#xff0c;优化海外回中国内地流量的公网线路&#xff0c;可以提高国际业务访问质量。阿里云服务…

YOLO v5项目实战 P5 解决运行detect文件时设置了--view-img但是显示不出来的问题

up主讲的实时显示目标检测后的图片的两种方法&#xff1a; &#xff08;1&#xff09;在下面的Terminal中输入下列命令&#xff1a; python detect.py --view-img &#xff08;2&#xff09;点击进入右上方的detect的Edit Configurations 然后在这个参数这里输入 --view img…

人工智能学习与实训笔记(八):百度飞桨套件使用方法介绍

人工智能专栏文章汇总&#xff1a;人工智能学习专栏文章汇总-CSDN博客 本篇目录 八、百度飞桨套件使用 8.1 飞桨预训练模型套件PaddleHub 8.1.1 一些本机CPU可运行的飞桨预训练简单模型&#xff08;亲测可用&#xff09; 8.1.1.1 人脸检测模型 8.1.1.2 中文分词模型 8.1…

自然语言编程系列(四):GPT-4对编程开发的支持

在编程开发领域&#xff0c;GPT-4凭借其强大的自然语言理解和代码生成能力&#xff0c;能够深刻理解开发者的意图&#xff0c;并基于这些需求提供精准的编程指导和解决方案。对于开发者来说&#xff0c;GPT-4能够在代码片段生成、算法思路设计、模块构建和原型实现等方面给予开…

《数字电子电路》 课程设计:十字路口红绿灯自动控制系统(上)(multisim仿真及PCB实现)

&#xff08;一&#xff09;前言 本系列文章就笔者在大二下学期进行《数字电子线路》课程设计的题目&#xff1a;十字路口红绿灯自动控制系统 进行详细的讲解&#xff0c;希望对读者有所帮助。 &#xff08;二&#xff09;目录 一、主要指标及要求 二、电路工作原理 1、工作原…

P15---总电磁转矩T

正弦波驱动模式工作的永磁同步电动机的总电磁转矩 T clear clc% 15页表达式 syms Omega theta E I e_A E*sind(theta) e_B E*sind(theta-120) e_C E*sind(theta-240)i_A I*sind(theta) i_B I*sind(theta-120) i_C I*sind(theta-240)P e_A*i_A e_B*i_B e_C*i_CT P/Om…

Unity设备分级策略

Unity设备分级策略 前言 之前自己做的设备分级策略&#xff0c;在此做一个简单的记录和思路分享。希望能给大家带来帮助。 分级策略 根据拟定的评分标准&#xff0c;预生成部分已知机型的分级信息&#xff0c;且保存在包内&#xff1b;如果设备没有被评级过&#xff0c;则优…

QKD安全攻击防御方案分析和分级评估研究报告

今天分享的是行业报告&#xff1a;《QKD安全攻击防御方案分析和分级评估研究报告》 &#xff08;内容出品方&#xff1a;量子信息网络产业联盟&#xff09; 报告共计&#xff1a;180页 来源&#xff1a;《见鹿报告》 前言 量子通信是量子信息科学的重要分支&#xff0c;它…

572. 另一棵树的子树

Problem: 572. 另一棵树的子树 文章目录 思路解题方法复杂度Code 思路 这个问题可以通过序列化树和KMP算法来解决。首先&#xff0c;我们将两棵树都序列化为一个字符串列表&#xff0c;然后使用KMP算法来检查第二棵树的序列化结果是否为第一棵树的子串。 解题方法 首先&#xf…

【大模型】0.5B的大模型通义千问1.5-0.5B-Chat来了!!

【大模型】0.5B的大模型通义千问1.5-0.5B-Chat来了&#xff01;&#xff01; 模型介绍训练细节Requirements拉取模型示例代码多轮对话测试输出示例资源占用参考 模型介绍 Qwen1.5是Qwen2的测试版&#xff0c;这是一个基于转换器的纯解码器语言模型&#xff0c;在大量数据上进行…

快速实现Python/Flask静默获取微信公众号OpenID的完整指南及代码

初步简介 初始授权请求&#xff1a;用户访问 /api/wx_api/get_wx_openid 路由时&#xff0c;服务器端会生成一个微信授权URL&#xff0c;该URL指向微信的授权页面&#xff0c;并包含了必要的查询参数&#xff08;如appid、redirect_uri、response_type、scope、state&#xff0…

位运算(一)

位运算注意事项 整形在计算机中是以补码的形式进行存储的&#xff0c;因此位运算也是在补码的基础上进行操作的。 复习&#xff1a;正数&#xff1a;原码反码补码 负数&#xff1a;反码原码取反(除符号位) 补码反码1 位运算~&#xff1a;按位取反&#xff08;在补码上按位取…

Shellcode免杀对抗(Python)

Shellcode Python免杀&#xff0c;绕过360安全卫士、火绒安全、Defender Python基于cs/msf的上线 cs 执行代码2种可供选择 执行代码 1&#xff1a; rwxpage ctypes.windll.kernel32.VirtualAlloc(0, len(shellcode), 0x1000, 0x40) ctypes.windll.kernel32.RtlMoveMemory…

HTTP 请求 400错误

问题 HTTP 请求 400错误 详细问题 客户端发送请求 public static UserInfo updateUserInfo(UserInfo userInfo) {// 创建 OkHttpClient 对象OkHttpClient client new OkHttpClient();// 创建请求体MediaType JSON MediaType.parse("application/json; charsetutf-8&…

代码随想录算法训练营第三十四天丨860.柠檬水找零、406. 根据身高重建队列、860. 柠檬水找零

860. 柠檬水找零 遇到顾客给20块的&#xff0c;优先拿10块的找给他。 class Solution:def lemonadeChange(self, bills: List[int]) -> bool:change {5: 0, 10: 0}for bill in bills:if bill 5:change[5] 1elif bill 10:if change[5] < 1:return Falsechange[5] - …

目标检测算法之YOLOv5的应用实例(医疗影像辅助诊断领域应用的详解)

在医疗影像辅助诊断领域,YOLOv5可以被应用于快速而准确地识别和定位医学影像中的关键结构,比如肿瘤、器官或病变区域。这有助于医生更有效地分析影像资料,提高诊断的准确性和效率。以下是一个使用YOLOv5在医学影像上进行病灶检测的基本代码示例: import cv2 import torch …

Java实现停车场收费系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 停车位模块2.2 车辆模块2.3 停车收费模块2.4 IC卡模块2.5 IC卡挂失模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 停车场表3.2.2 车辆表3.2.3 停车收费表3.2.4 IC 卡表3.2.5 IC 卡挂失表 四、系统实现五、核心代码…

sqlserver 子查询 =,in ,any,some,all的用法

在 SQL Server 中&#xff0c;子查询常用于嵌套在主查询中的子句中&#xff0c;以便根据子查询的结果集来过滤主查询的结果&#xff0c;或者作为主查询的一部分来计算结果。 以下是 、IN、ANY、SOME 和 ALL 运算符在子查询中的用法示例&#xff1a; 使用 运算符进行子查询&a…