农作物用水量预测及智能灌溉方法

更新时间:2023-05-10 22:57:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

农作物用水量预测及智能灌溉方法

摘要

随着水资源供需矛盾的日益加剧,发展节水型农业势在必行。本文首先基于历史数据建立了作物全生育期内水分生产函数模型以及全生育期内各阶段的蒸发蒸腾量与最终产量之间的优化作物水分生产函数模型,并以水分生产函数为理论依据,建立了不考虑降雨量和考虑降雨量的地区水稻的非充分灌溉制度的优化模型,解决供水量在各生育期(从分蘖到乳熟阶段)合理分配的问题,在水分利用效率、产量、经济效益三方面寻求了有效均衡,从而实现经济效益最大化。

针对问题一,结合表1中作物1的实测需水量与产量的对应数据以需水量x 为横轴,产量y 为纵轴拟合散点图图像,通过图像发现需水量x 与产量y 的图像变化规律近似符合二次函数图像,由此假设需水量x 与产量y 符合二次函数,从而以需水量为自变量、产量为因变量建立二次函数模型,并用题目中数据通过eviews8.0软件进行拟合和进一步验证,发现参数检验均显著且函数拟合优度R^2=1,故说明模型建立良好。

针对问题二,根据题设要求选取某类优化算法,寻求最优的作物水分生产函数模型,得到各阶段的蒸发蒸腾量与最终产量之间的关系。同时考虑了在建模、预测、控制、神经网络设计等方面都有成功应用的BP 神经网络模型和遗传程序设计方法重新构建了作物水分生产函数,并通过将两模型与附录中给出的机理模型进行误差比较,得出基于遗传程序设计所得出的优化模型误差最小,精度最高。

针对问题三,在非充分灌溉条件下,通过建立动态规划模型,来实现灌水资源在各阶段的合理分配。以各个生育阶段为阶段变量i ,以各个阶段的实际灌水量m i 为决策变量,以各个阶段初可供灌溉的水量q i 为状态变量,以q i +1=q i ?m i 为系统方程表示分配给第i+1个阶段到第n 个阶段的供水量,以q i =q 0作为初始

条件,以0≤q i ≤q 0、 m i n i ≤q 0、

0≤m i ≤q i 为决策约束,基于谨慎性的考虑,分别利用Jensen 模型和Blank 模型以单位面积实际产量Y a 与最高产量Y m 的比值最大化为目标函数,给出了总供水量分别为充分灌溉总水量的40%,60%,80%的情况下,供水量在各生育期(从分蘖到乳熟阶段)合理分配的方案。同时,比较两个模型得出的结果发现,Blank 模型在构成相对产量方面反应不如Jenson 模型灵敏,Jenson 模型更符合实际。

一、问题重述

随着水资源供需矛盾的日益加剧,发展节水型农业势在必行。智能灌溉是一种应用先进的信息技术实施精确灌溉,以农作物实际需水量为依据,提高灌溉精确度,实施合理的灌溉方法,可以较好提高水的利用率。据有关部门统计分析,我国灌区平均水利用系数(评价农业水资源利用、指导节水灌溉和大中型灌区续建配套及节水改造健康发展的重要参考指标)仅为0.45,说明节水仍有较大空间。

现对下面四个问题,分别给出作物全生育期内水分生产函数模型以及全生育期内各阶段的蒸发蒸腾量与最终产量之间的优化作物水分生产函数模型,从而有助于更好地实现对农作物的实际需水量的预测。同时以水分生产函数为理论依据,建立了不考虑降雨量和考虑降雨量的地区水稻的非充分灌溉制度的优化模型,解决供水量在各生育期(从分蘖到乳熟阶段)合理分配的问题,使得最大化作物产量的同时,灌溉总用水量最小,在水分利用效率、产量、经济效益三方面寻求了有效均衡,从而实现经济效益最大化。

问题1:基于表1中作物1实测需水量与产量的对应数据,建立该作物全生育期的水分生产函数的模型,即总产量与需水量之间的解析关系,给出详细求解过程及拟合效果。

问题2:基于表2中某地晚稻分蘖至乳熟各阶段受旱情况对产量影响的数据。利用附录中材料,选取某类优化算法,寻求最优的作物水分生产函数模型,得到各阶段的蒸发蒸腾量与最终产量之间的关系,并将所得结果与常见的机理模型作对比。

问题3:基于已有材料对于非充分灌溉的描述,结合表2晚稻蒸发蒸腾量与产量数据,选择合适的作物水分生产函数(可以选择已得到的模型或者机理模型),建立该地区水稻的非充分灌溉制度的优化模型。在总供水量分别为充分灌溉总水量的40%,60%,80%的情况下,解决供水量在各生育期(从分蘖到乳熟阶段)合理分配的问题,应包含阶段变量、决策变量、状态变量、系统方程、目标函数、初始条件及约束条件等描述,最后给出求解方案。

问题4:结合表3列出的某地近年的降水资料。若进一步考虑该地区的降水量,重新构建非充分灌溉制度的优化模型,从而建立在各生育期合理分配水量方法,使得最大化作物产量的同时,灌溉总用水量最小。

二、问题分析

2.1问题1的分析

对于问题一,要结合表1中作物1的实测需水量与产量的对应数据,建立该作物全生育期的水分生产函数的模型。因此首先考虑的是利用题目中已有数据以需水量x为横轴,产量y为纵轴拟合散点图图像,通过图像找出需水量与产量的一些相关规律。根据拟合出的图像,我们发现需水量x与产量y近似抛物线图像,从而对需水量为自变量、产量为因变量建立二次函数模型,并用题目中数据通过eviews8.0软件进行拟合和进一步验证,发现参数检验均显著且函数拟合优度R^2=1,说明模型建立良好。

2.2问题2的分析

对于问题二,在第一题的基础上要求进一步考虑作物全生育期内各阶段的蒸发蒸腾量与最终产量之间的关系,通过选取某类优化算法,寻求最优的作物水分生产函数。考虑到各阶段蒸发蒸腾量和产量之间无法构建确定的相关关系函数,首先尝试采用BP神经网络模型,BP神经网络是一种基于误差反向传播算法算法的多层前向人工神经网络,可以实现输入和输出间的任意非线性映射,因此它在诸如函数逼近、模式识别、数据压缩等领域有着更加广泛的应用。

首先利用题目中给出的样本中的一部分训练出神经网络模型,并用剩余样本进行校验,检验神经网络模型的适用性。但考虑到BP神经网络模型可能会存在拟合精度不高、收敛慢等缺点。我们考虑同时使用另一种方法来建立最优的作物生长模型,遗传程序设计是一种自动化编程设计,擅长于模型结构的自动搜索,具有实用性强、精度高等优点,它是依据自然选择的原理和生物进化论,通过进化由树结构表示的计算机程序,在建模、预测、控制、神经网络设计、人工生命等方面得到了成功应用。因此我们考虑利用遗传程序建立作物水分生产函数模型。最后通过将遗传程序建立的作物水分生产函数与BP神经网络模型、Jensen模型和Blank模型进行拟合精度比较,从而寻求最优的作物水分生产函数。

2.3问题3的分析

针对问题三,我们要建立该地区水稻的非充分灌溉制度优化模型,以解决在非充分灌溉的情况下,供水量在各生育期(从分蘖到乳熟阶段)合理分配的问题,

因此这是一个典型的多阶段决策过程,可以采用动态规划模型求解。

动态规划是解决多阶段决策过程最优化的一种方法。对于每个互相联系的阶段都需要分别作出决策,各个阶段所确定的决策互相影响,这些决策构成一个策略,多目标阶段决策最优化就是要在允许选择的那些策略中间,选择一个最优策略,使在预定的标准下达到最好的效果。

本问题中,根据问题二中所给出的机理模型(Jenson 模型和Blank 模型)为作物的水分生产函数,可以建立以各个生育阶段为阶段变量i ,以各个阶段的实际灌水量m i 为决策变量,以各个阶段初可供灌溉的水量q i 为状态变量,以q i +1=q i ?m i 为系统方程表示分配给第i+1个阶段到第n 个阶段的供水量,以q i =q 0作为初始条件,以0≤q i ≤q 0、 m i n i ≤q 0、0≤m i ≤q i 为决策约束,以作物的相对产量最高作为目标函数的动态规划模型。在总供水量分别为充分灌溉总水量的40%,60%,80%的情况下,采取动态规划逆序算法进行求解即从最后一个阶段向前逆推计算,逐段找出最优分配路径。

三、模型假设与前提条件

四、主要符号说明及名词解释

五、 模型建立与求解

5.1 问题1的模型建立与求解

5.1.1 模型的建立

根据表1中作物1的实测需水量与产量的对应数据,将实测需水量作为横轴,产量作为纵轴,通过eviews8.0软件输出散点图图像。

200

250

300

350400

450

500

X Y

图5-1实测需水量和产量的散点图图像

根据图5-1,可以发现散点图图像呈现如下特征:

1、当x <350时,y 随着x 的增加而增加

2、当350<x <400时,y 出现最大值

3、当400<x 时,y 随着x 的增加而减少

通过以上分析总结可以得到初步判断,图像符合二次函数图像特征,因此假设需水量和产量符合二次函数,并由此建立模型如下:

y =a x +b x 2+c

x 为实测需水量;y 为产量

5.1.2模型的求解

将表一有关输入量和输出量数据代入模型,通过eviews8.0软件对该一元二

次模型进行回归,输出结果如下:

Dependent Variable: Y

Method: Least Squares

Date: 05/21/16 Time: 17:24

Sample: 1 10

Included observations: 10

Variable Coefficient Std. Error t-Statistic Prob.

X 5.186257 0.000204 25424.73 0.0000

X^2 -0.006980 3.10E-07 -22482.97 0.0000

C -478.4724 0.032041 -14933.05 0.0000

R-squared 1.000000 Mean dependent var 430.7570

Adjusted R-squared 1.000000 S.D. dependent var 74.07824

S.E. of regression 0.006569 Akaike info criterion -6.969485

Sum squared resid 0.000302 Schwarz criterion -6.878710

Log likelihood 37.84743 Hannan-Quinn criter. -7.069066

F-statistic 5.72E+08 Durbin-Watson stat 2.663122

Prob(F-statistic) 0.000000

y=?478.4724+?0.006980x2+ 5.186457x

(-14933.05)(-22482.97) (25424.73)

5.1.3模型结果分析

(1)函数中a、b、c参数的t检验在1%的显著性水平下均显著:

p a<0.01,p b<0.01,p c<0.01

(2)拟合优度判定系数R2=1

拟合优度判定系数体现了回归模型中自变量的变异在因变量的变异中所占的比例,本模型中y的变异中完全都是由变量x的变化引起的,所有观测点都落在拟合的直线或曲线上,说明该模型建立良好。

5.2 问题2的模型建立与求解

由于BP神经网络可以实现输入和输出间的任意非线性映射,首先使用BP 神经神经网络进行拟合

5.2.1 BP神经网络建模

(1)训练、测试样本、输入输出因子确定以及参数调整

首先确定训练样本和测试样本,同时,为了对神经网络模型的参数进行调优,还设计了用于参数调优的样本。因此将已知的12条样本分为三部分,其中前8条样本作为训练样本,第9条样本作为参数调优的样本,最后两条样本用来对模型进行测试,验证其适用性。

为了确定输入因子,将作物生长四个阶段的蒸发蒸腾量封装为四维向量,作为输入,将产量作为输出。

本文使用feedforwardnet建立神经网络,其中的参数值隐层节点的个数,隐层节点的选择是一个比较复杂的问题,通常根据设计者的经验和多次试验来确定,本文对隐层节点的选择采用的方法是:使用其中一个样本进行参数调优。

首先对前8条数据进行训练,得到一个BP模型存在net中,然后使用第8条数据通过多次试验对参数进行寻优,得到最优的隐层节点数为6,。

最后使用得到的模型对最后两条数据进行验证得到如下图所示的预测结果,左图为预测结果,有图为实际数据,可以看到,误差很小。

虽然可以看到误差不大,但是由于本问题中的已知样本只有12条,验证样本只有两条,并不能严谨的说明这个模型的精度,因此,我们后面讲采用另一种方法来建立一个优化的作物生产水分函数模型。

5.2.2 基于遗传程序设计生成作物生产函数

遗传程序设计是一种特殊的利用进化算法的机器学习技术,是在遗传算法的基础上加以延伸和扩展形成的一种新的演化算法,是一种自动化编程技术,它依据自然选择的原理和生物进化论,通过进化由树结构表示的计算机程序求解问题,具有适应性强、精度高的优点。采用基于遗传程序设计的方法实现函数自动建模只需要指定样本数据和精度要求即可获得回归表达式。本问题要根据给定的样本建立一个最优的作物水分生产函数模型,可以使用遗传程序设计来建立作物水分生产函数模型。

(1)遗传程序设计的具体步骤:

步骤一:确定目标函数。

设输入输出样本分别为:

X=x11,x12…x1m,x21,x22…x2m,… ,{x n1,x n2…x nm}

,Y={y1,y2,…,y n},设计的过程就是确定一个最佳的函数表达式

G( c , x 1 ,… , xm ) ,使得如下的误差表达式极小化

minf = ∑n |G( c, x k1,… , x km ) - y k|(1)

式中c为实常数。

步骤二:编码。确定终端集和函数集。其中,终端集的元素定义为变量x 和式(1)中的实常数c。由于本问题最终的目标是生成一个函数表达式,因此在本文中,函数集F的元素定义为算术操作{+,—,*,/}和初等函数{sin,cos,arctan,arcctg},具体的编码方案如下表所示。

表中的编码值为1则对应x i中的某一个。函数G( c , x 1 ,… , xm 问题的解。在遗传程序设计中,当运算符集全部采用双目运算时,使用典型的二叉树的结构进行编码。

在数据结构中通过树的遍历,可以方便的将层次结构转换为线性序列。如下图所示的个体的遍历结果为(x*y+z)/(x-z)

步骤三:群体初始化

设群体规模为N,即一共产生N颗树,产生初始群体的N课树的每一刻的过程如下:

先从初始元素集合(运算符集合操作数集)中选择一个元素,如果是操作符,则结束;如果是运算符,则作为根节点,继续选择元素。重复上述过程,直至形成一个完整的二叉树或者知道满足终止条件。这样就生成了一个初始个体。

步骤四每一代群体的解码和适应度评价

将上一代生成的表达式带入式(1)中,可以得到每个个体所对应的目标函数值f i ,i =1,2,…,N ,把f i 按从小到大排序,排在最前面的几个个体作为优秀个体。定义排序后第i 个父代个体的适应度函数值

F i =1∕ f i ×f i +0.001

步骤五:对群体的进化操作。进化操作分为:选择、交叉、变异三个阶段。其中选择操作取比例选择的方式,则父代个体i 的选择概率为:

s i =F i ∕ F i N

i =1

令p(0)=0,P i = s k i k =1,i=1,2,…,N 。

生成一个[0,1]区间的均匀随机数u,若 u 在 [p ( i - 1) , p ( i ) ] 中 ,则第 i 个个体被选中。为增强持续全局搜索的能力 ,把最优秀的 5个父代个体直接复制为子代个体。

交叉操作就是在两棵父代个体树上随机产生两个交叉点 ,然后交换以这两个交叉点为根节点的子树。

变异操作就是在选得的个体中随机产生一个变异点 ,然后以变异点为根节点 ,将其以下的子树(包括变异点 )按照步骤 3的方式随机产生一棵子树 来代替。

在进化操作中,在产生每一个子代的时候,以上的三个操作都按照一定的概率来执行。假设选择操作的概率是p s ,交叉操作的概率是p c ,那么变异操作执行的概率就是1?p s ?p c ,产生一个 [0, 1] 区间上的均匀随机数 u ,若 u ≤ ps 则进行选择操作 ,若 ps < u ≤ ( ps + pc ) 则进行交叉操作 ,若 u > ( ps + pc ) 则进行变异操作。如此反复进行 N - 5次 , 完成 1次进化迭代。因为有5个直接赋值为子代了,所以只需要对剩下的N-5个个体进行进化操作。

步骤六:记录最佳的个体 ,并把子代群体作为新的父代群体 ,转入步骤 4,如此反复演化 ,直至进化迭代次数大于预设值 ,或目标函数值达到预设值 ,结束算法的运行。此时得到的最佳个体即为最终结果。

(2)基于遗传程序设计生成作物水分生产函数

1,对实验数据的标准化处理

题目中给出了作物各处理蒸发蒸腾量及产量的数据,为了便于后面对数据的处理,首先对数据进行标准化处理。

根据表格中的数据可知,作物共有4个生长阶段,设各阶段的潜在腾发量为 E Tm j , j = 1, 2,… , 4 , mm; 作物的潜在产量为 Ym , kg /hm2。通过非充分灌溉试验得到作物 N 组实际腾发量 E Ta i j , i = 1, 2,… , N , j = 1, 2,… , 4 , mm 和实际产量 Ya i , i = 1, 2,… , N , kg /hm2。将 N 组实际腾发量和

实际产量的数据按下述公式作标准化处理。

x ij = ETa ij / E Tm j i = 1, 2,… , N , j = 1, 2,… , 4 (4)

yi = Ya i /Ym i = 1, 2,… , N(5)

式中xij , yi——处理后的作为训练样本的输入和输出,均为比值,无量纲。

将非充分灌溉处理(处理1~11)下的各阶段实际腾发量和实际产量按式( 4)、( 5)作标准化处理,分别得到矩阵X 和Y。

X=0.7643

0.7265

0.9041

0.86400.73860.7517

0.78980.68080.7181

0.81400.85730.7864

0.8920

0.8656

0.8758

0.69680.75300.7271

0.88910.68400.8803

0.82740.57660.7763

0.9487

0.9136

0.7468

1.00980.87090.7673

0.99600.81560.7271

0.74510.76340.8087

0.86700.8086

0.87850.9177

0.66880.8233

0.75940.6868

Y=

0.8065

0.6411

0.8561

0.6382

0.7733

0.7466

0.8888

0.8462

0.7111

0.7111

利用标准化处理之后的样本,利用遗传程序设计进行模型的自动寻优,最终得到最优的函数表达式。

将标准化之后得到的样本数据作为训练样本进行训练,得到了如下所示的作物生产函数:

对函数表达式的精度测量可以通过以下误差函数来衡量:

E rr=E rr

i

N

i=1=

f X i?Y m?y i?Y m

y i?Y m

N

i=1

=

f X i?y i

y i

N

i=1

式中,E rr为相对绝对误差和;E rr

i

为第i组样本的相对绝对误差;X i=(x i1,x i1,…,x i t,)为第i组输入样本的向量表示;f X i为由遗传程序计算的第i组实际输出值;y i为第i组理想输出值;Y m为作物潜在产量,kg/hm2。误差越小,拟合的精度越高。

将得到的模型和乘法模型以及加法模型都使用上式所示的误差函数来衡量模型的拟合程度,得到如下图所示的的误差情况:

从图中可以看出:遗传算法的误差不是很理想,虽然BP网络的误差最小,但这并不能说明这个算法最优,因为BP模型是使用前8条数据进行训练,所以误差最小。(这段里面关于BP网络的误差遗传模型的误差要改)

5.3问题3的模型建立与求解

5.3.1 模型建立

1、阶段变量:上述4个生育阶段为阶段变量i,i=1,2,…,n,n=4

2、决策变量:各个阶段的实际灌水量m i,i=1,2,…,n,n=4

3、状态变量:各个阶段初可供灌溉的水量q i,i=1,2,…,n,n=4

4、系统方程:q i+1=q i?m i,表示分配给第i+1个阶段到第n个阶段的供水量

5、阶段指标函数:g i(m i)=(ET ai

ET mi )

i

λi,表示供水量m

i分配给第i个阶段获得的效

6、初始条件:q i=q0

7、约束条件:①状态约束:0≤q i≤q0

②决策约束:0≤m i≤q i

m i

n

i

≤q0

8、目标函数:

①利用Jensen模型以单位面积实际产量Y a与最高产量Y m的比值最大化为目标,即:

F1=max Y a

Y m

=max?

ET ai

ET mi

ni

λi

n

i

②利用Blank模型,以单位面积产量实际产量Y a与最高产量Y m的比值最大化为目标,即:

F2=max Y a

m

=max A i

ET ai

mi ni

λi

n

i

5.3.2 模型求解

(一)模型求解方法

本模型为具有一个状态变量和一个决策变量的动态规划问题,采用动态规划逆序算法求解

逆推关系式为:f i q i=max ET ai

ET mi i

λi

?f i+1q i+1,i=1,2,…,n?1

f n q n=max

m n

ET an

ET mn n

λn

,i=n

即由i=n开始,由后向前依次逆推,逐阶段求出最优决策和过程的最优值 ,直到最后求出f1(q1)即得到问题的最优解。

动态规划逆序算法程序框图如下:

(二)模型已知数据

根据表2中所给的已知信息,由处理编号0的数据知,在充分灌溉的时候,由各个生育期(从分蘖到乳熟阶段)的充分灌溉水量加总得到充分灌溉时总水量为474(mm)(根据题设将蒸发蒸腾量理解为灌水量)。

因此问题转化为需考虑总供水量在以下三种情况下的合理分配方案:

①总供水量q0=474*40%=189;

②总供水量q0=474*60%=284;

③总供水量q0=474*80%=379;

根据表2,在充分灌溉的时候,由各个生育期(从分蘖到乳熟阶段)的充分灌溉水量和最终产量,可以得到

ET m1=148.1,ET m2=111.8,ET m3=124.1,ET m3=89.4,Y m=7138.5

(三)模型求解结果

A: F1为目标函数时:

①q0=0.4Q=474*40%=189

MATLAB运行结果如下表:

m1=31,m2=104,m3=32,m4=22;

Y a

=41.05%,Y a=7138.5*41.05%=2930.35425

Y m

第一阶段分配水量31mm,第二阶段分配水量104mm,第三阶段分配水量32mm,第四阶段分配水量22mm,产量为2930.35425(kg/hm2)

②q0=0.6Q=474*60%=284

MATLAB运行结果如下表:

m1=62,m2=111,m3=66,m4=45

Y a

=64.95%,Y a=7138.5*64.95%=4636.45575

Y m

第一阶段分配水量62mm,第二阶段分配水量111mm,第三阶段分配水量66mm,

第四阶段分配水量45mm,产量为4636.45575 (kg/hm2)

③q0=0.8Q=474*80%=379

MATLAB运行结果如下表:

m1=96,m2=111,m3=102,m4=70

Y a

=83.77%,Y a=7138.5*83.77%=5979.92145

Y m

第一阶段分配水量96mm,第二阶段分配水量111mm,第三阶段分配水量102mm,第四阶段分配水量70mm,产量为5979.92145(kg/hm2)

B: F2为目标函数时

①q0=0.4Q=474*40%=189

MATLAB运行结果如下表:

m1=0,m2=111,m3=78,m4=0

Y

a

=Y a=7138.5*73.73%=5263.21

Y m

第一阶段分配水量0mm,第二阶段分配水量111mm,第三阶段分配水量78mm,第四阶段分配水量0mm,产量为(kg/hm2)

②q0=0.6Q=474*60%=284

MATLAB运行结果如下表:

m1=0,m2=111,m3=124,m4=49

Y

a

=a=7138.5*87.6%=6253.33

Y m

第一阶段分配水量0mm,第二阶段分配水量111mm,第三阶段分配水量124mm,第四阶段分配水量49mm,产量为(kg/hm2)

③q0=0.8Q=474*80%=379

MATLAB运行结果如下表:

m1=0,m2=111,m3=124,m4=144

Y

a

=Y a=7138.5*94.05%=6713.76

Y m

第一阶段分配水量0mm,第二阶段分配水量111mm,第三阶段分配水量124mm,第四阶段分配水量144mm,产量为(kg/hm2)

5.3模型结果分析

通过动态规划逆序算法在Matlab软件中的实现,我们分别得出了Jensen 模型和Blank模型在不同灌水量条件下的水量最优配置方案:

将结果和已知材料中的机理模型敏感系数进行联合分析后,发现得出的结果和原模型基本符合,在非充分灌溉条件下要达到产量最大化,灌水量需主要集中在第二第三敏感系数较大即对产量影响较大的两个阶段,可以基本认同该分配方案。

而进一步将两模型得出的方案相比较,发现由于Jensen模型参数比Blank 模型的参数对产量的敏感度更高,因此Jensen模型下的分配方案更为合理,Blank模型下三次所得出的分配方案都直接忽略了第一阶段的影响即分配灌水量为零,这与实际情况并不完全符合,实际情况下出于保守性考虑,担心突发性的干旱气象因素、人为破坏因素等,一般不会选择第一阶段零灌水。

本文来源:https://www.bwwdw.com/article/ehwe.html

Top