2023华为杯数学建模研赛A题B题C题D题E题F题思路代码成品分享

2022华为杯将于9.22开赛
思路贴将于早上发布~~
欢迎持续关注哦~

下文是2022年研赛E的思路示例

kou///qun
735249423

E题思路
问题1. 从机理分析的角度,建立不同放牧策略(放牧方式和放牧强度)对锡林郭勒草原土壤物理性质(主要是土壤湿度)和植被生物量影响的数学模型。

问题1可简化为放牧方式与放牧强度对土壤湿度与植被生物量的影响。

我们要构建的模型自变量为:
1、放牧方式:根据题干有全年连续放牧、禁牧、选择划区轮牧、轻度放牧、生长季休牧五种,其中禁牧与轻度放牧与放牧强度中的两项含义重复,因此不需要额外考虑;此外,策略对草原的影响强调的是时间上的影响,空间上的影响体现在草原的固有性质中,因此,作为自变量的放牧方式实际上只需要考虑两种:全年连续放牧以及分时放牧。为简化模型,该变量在模型中可作为一个比例系数体现。
2、放牧强度:该变量可以直接用一常数S表示,S为每平方米牧羊数。注意这里的“羊”只是一个牲畜单位,牛、马、骆驼=6羊,牛、马、骆驼的幼崽=3羊,羊羔=0.5羊。

模型的因变量为:
1、土壤湿度的变化:其中h表示湿度,而我们作为模型输出的是h随时间的变化,因此需要对时间做微分,植被量相同。
2、植被生物量的变化:其中w表示植被生物量。注意:植被生物量数据为附件15中的干重,不要与附件5、6、10中的数据混淆。

针对放牧强度对植被变化的影响可直接套用拓展阅读中的公式:

针对放牧强度对土壤湿度的影响可结合附件3土壤湿度、附件4土壤蒸发数据附件8降水、附件的数据。由于影响土壤湿度的因素只有土壤蒸发、降水以及放牧情况,因此去除土壤蒸发及降水影响(这两项由附件已知)后,剩下的就是放牧情况对土壤湿度的影响。

由附件15中的植被生物量数据结合刚刚提到的放牧与植物生长之间的关系式可以反推放牧情况,由此,我们可以得到放牧情况对土壤湿度的影响。

考虑到分时放牧,我们最后为模型输出加上一个比例系数即可。
问题2. 请根据附件3土壤湿度数据、附件4土壤蒸发数据以及附件8中降水等数据,建立模型对保持目前放牧策略不变情况下对2022年、2023年不同深度土壤湿度进行预测,并完成下表。

由于降水、蒸发量这些因素在一年里具有周期性,因此我们对1-12月的数据分别建模。以1月数据为例,预测土壤湿度的过程分为3步:
1、建立回归模型研究每年1月份湿度随土壤蒸发量与降水变化的关系;
2、用回归模型利用2012-2022年1月的土壤蒸发量和降水量预测2023年1月的降水量;
3、根据2023年1月的土壤蒸发量和降水量预测2023年1月的湿度。

注意:不要深度学习!不要深度学习!不要深度学习!这种数据量用CNN就是送人头!

问题3. 从机理分析的角度,建立不同放牧策略(放牧方式和放牧强度)对锡林郭勒草原土壤化学性质影响的数学模型。并请结合附件14中数据预测锡林郭勒草原监测样地(12个放牧小区)在不同放牧强度下2022年土壤同期有机碳、无机碳、全N、土壤C/N比等值,并完成下表。

这一小问非常简单,直接用附件14中的数据套用回归模型即可。针对每一项化学性质单独设计一个回归模型,分别调参。由于数据量与特征量有限,这里比较建议用决策树模型。

同问题2,不要深度学习!

问题4. 利用沙漠化程度指数预测模型和附件提供数据(包括自己收集的数据)确定不同放牧强度下监测点的沙漠化程度指数值。并请尝试给出定量的土壤板结化定义,在建立合理的土壤板结化模型基础上结合问题3,给出放牧策略模型,使得沙漠化程度指数与板结化程度最小。

问题4分为两个小问,其中第一小问沙漠化预测模型已在拓展阅读中第3条中详细给出,不再展开分析。现在看第2小问。
已知板结化公式为:

其中土壤湿度数据在附件3中,有机物含量在附件14中,容重在附件7中(是一个常量)。该模型可具体表示为:

这里主要是根据三个因素的影响程度确定三个系数之间的比例。题目所给数据没有衡量这一指标的明显特征,因此对系数的确定言之有理即可。

结合问题3中放牧策略对O的影响可进一步得到放牧策略对B的影响,再结合沙漠化程度预测模型可得到最佳放牧策略。

问题5. 锡林郭勒草原近10的年降水量(包含降雪)通常在300 mm ~1200 mm之间,请在给定的降水量(300mm,600mm、900 mm 和1200mm)情形下,在保持草原可持续发展情况下对实验草场内(附件14、15)放牧羊的数量进行求解,找到最大阈值。(注:这里计算结果可以不是正整数)

降水量影响湿度,进而影响板结度B,从而影响最佳放羊数。保持可持续发展的重要指标为造成的影响可逆,可以从这一点出发进行说明。

这里提供两种思路:
1、设置对照组,在禁牧的情况下沙漠化、板结化程度会如何变化,然后逐渐增大牧羊数量,直到抵消这种变化;
2、将沙漠化、板结化程度可容忍的最大值设为常量,牧羊数量不能使沙漠化与板结化程度超过这一常量。

问题6. 在保持附件13的示范牧户放牧策略不变和问题4中得到的放牧方案两种情况下,用图示或者动态演示方式分别预测示范区2023年9月土地状态(比如土壤肥力变化、土壤湿度、植被覆盖等)。

结合问题1、3、4中得到的模型,只要新的放牧策略比旧的更环境友好即可。在环境友好的情况下经济效益尽可能高(指尽可能多放几只羊)。如果无法满足条件可适当修改前面的模型。

E代码

第一问:

import xlrd
import decimal
import pandas as pd

获取植被生物量数据
f_name = ‘fujian15.xlsx’
data = xlrd.open_workbook(f_name)
table = data.sheets()[0]

放牧规模
S = [str(table.cell_value(i, 0)) for i in range(1, table.nrows)]

日期
date = [str(table.cell_value(i, 1)) for i in range(1, table.nrows)]

植被生物量
W = [str(table.cell_value(i, 3)) for i in range(1, table.nrows)]

s0 = S[0]
d0 = date[0]
w = 0
w_dir = []

for i in range(len(S)):
s = S[i]
d = date[i]
if s == s0 and d == d0:
w += float(W[i])
else:
w_dir.append({
    
    ‘s’: str(s0), ‘d’: str(d0), ‘w’: w})
w = 0
s0 = s
d0 = d

w_dir中存储了不同时间、不同放牧强度下的植被生物量
第二问:

本代码用的回归模型是随机森林
import xlrd
import numpy as np
from sklearn.ensemble import RandomForestRegressor
import pandas as pd
import warnings
warnings.filterwarnings(‘ignore’)

f_name = ‘q2.xlsx’
data = xlrd.open_workbook(f_name)
table = data.sheets()[0]
df = pd.DataFrame(columns=[‘10cm湿度’, ‘40cm湿度’, ‘100cm湿度’, ‘200cm湿度’]) # 存储最终结果

for mon in [0, 1, 2]: # 1~3月

蒸发量、降水量
x1 = [table.cell_value(i, 2) for i in range(mon * 11 + 1, mon * 11 + 12)]
x2 = [table.cell_value(i, 3) for i in range(mon * 11 + 1, mon * 11 + 12)]
X = np.array([x1, x2]).transpose()

不同深度的湿度
y1 = np.array([table.cell_value(i, 4) for i in range(mon * 11 + 1, mon * 11 + 12)]).flatten()
y2 = np.array([table.cell_value(i, 5) for i in range(mon * 11 + 1, mon * 11 + 12)]).flatten()
y3 = np.array([table.cell_value(i, 6) for i in range(mon * 11 + 1, mon * 11 + 12)]).flatten()
y4 = np.array([table.cell_value(i, 7) for i in range(mon * 11 + 1, mon * 11 + 12)]).flatten()

时间
t = np.array(range(len(x1))).reshape(-1, 1)
t_test = np.array(range(12)).reshape(-1, 1)

利用随机森林进行预测
regressor1 = RandomForestRegressor()
regressor1.fit(t, x1) # 蒸发量与时间关系模型
regressor2 = RandomForestRegressor()
regressor2.fit(t, x2) # 降水量与时间关系模型
regressor3 = RandomForestRegressor()
regressor3.fit(X, y1) # 10cm湿度预测模型
regressor4 = RandomForestRegressor()
regressor4.fit(X, y2) # 40cm湿度预测模型
regressor5 = RandomForestRegressor()
regressor5.fit(X, y3) # 100cm湿度预测模型
regressor6 = RandomForestRegressor()
regressor6.fit(X, y4) # 200cm湿度预测模型

预测未来蒸发量与降水量
第三问:

import xlrd
import numpy as np
from sklearn.ensemble import RandomForestRegressor
import pandas as pd
import warnings
warnings.filterwarnings(‘ignore’)

f_name = ‘q3.xlsx’
data = xlrd.open_workbook(f_name)
table = data.sheets()[0]
df = pd.DataFrame(columns=[‘plot’, ‘SOC’, ‘SIC’, ‘STC’, ‘N’, ‘C/N’]) # 存储最终结果

plots = np.array([table.cell_value(i, 1) for i in range(1, table.nrows)]).flatten()
plot = []
[plot.append(i) for i in plots if i not in plot]

print(plot)
for y in range(12): # 12个分区

时间
t = np.array(range(11)).reshape(-1, 1)


猜你喜欢

转载自blog.csdn.net/yeqianqian_/article/details/132860914