2023年亚太杯APMCM数学建模大赛B题玻璃温室小气候调控解题全过程文档及程序

2023年亚太杯APMCM数学建模大赛

B题 玻璃温室小气候调控

原题再现

  温室作物的产量受各种气候因素的影响,包括温度、湿度和风速[1]。其中,适宜的温度和风速对植物生长至关重要[2]。为了调节玻璃温室内的温度、风速等气候因素,在温室设计中常用带风机的通风系统,如图1所示。温室风机的位置和热风出口的速度影响着温室内速度场和温度场的分布和均匀性。因此,如何优化温室风机以获得合适的风速和温度,提高其均匀性,是当前玻璃温室设计中需要解决的重要问题。
在这里插入图片描述
  玻璃温室是密封放置在室内,不考虑外界因素,如温室门、通风、太阳辐射等环境因素。目前设计的玻璃温室尺寸为10m、3m、2m(长、宽、高),温室风机尺寸为0.5m、0.5m,位于温室左侧。温室风扇的中心位于地面上方1.3m处,如图2所示。温室风机侧的边界条件设为速度入口条件,水平方向吹40”暖风,平均风速2 m/s,温室外玻璃和底土设为墙体条件,主要通过对流换热和传导与整个温室进行能量交换[3],初始温度设为20”。在温室内种植作物时,必须考虑作物的冠层阻力。作物模型可以简化为一个尺寸为8m、2m、0.5m(长、宽、高)的多孔介质,放置在温室中心。温室内作物生长适宜风速为0.3-1m/s,适宜温度为23-26”。
在这里插入图片描述
  问题1:请建立无作物玻璃温室内温度和风速分布的数学模型。在0.5米高度的温室横截面上显示风速和温度分布。

  问题2:请建立种植作物的玻璃温室内温度和风速分布的数学模型。展示温室内两个横截面的风速和温度分布:一个在0.5米高度(作物冠层水平)处,另一个在0.1米高度(作物冠层内)。分析条件是否适合作物生长。

  问题3:请提供以下两种情况下玻璃温室内的温度和风速分布,并与第二个问题中给出的解决方案进行比较。在方案一中,将热风出口速度从2 m/s提高到3 m/s。在场景2中,通过将温室风扇从1.3 m移动到1 m来降低其位置。

  问题4:您的团队能否从温室风扇的数量、位置、风速、吹风温度、规格和不同作物等因素进一步优化玻璃温室的温室风扇设计。

整体求解过程概述(摘要)

  为了优化玻璃温室内的温度和风速分布,促进作物生长,本研究分阶段解决了四个关键问题。
  针对第一个问题,基于基本物理原理,利用Python和计算流体力学软件ANSYS Fluent建立了无作物条件下的数学方程。利用ANSYS Fluent数值模拟结果进一步验证了0.5 m处的温度和风速分布,其中一个指示器(𝑅)显示了重叠间隔,达到89。0.84%和0.93%。0.75%。
  对于问题二,我们通过添加代表作物的多孔介质区域来改进现有模型。考虑到其孔隙率和渗透率,与CFD软件计算结果相比,模拟温室内特定高度(0.5 m和0.1 m)的温度和风速分布的有效性达到89%以上。对作物生长的不适宜条件提出了初步要求。
  针对问题3中的两个场景,通过两种方法对相关参数进行调整,模拟单独改变风扇参数对两个目标场的影响。通过与问题2的结果比较,我们推断出增加冠层内的流速可以使冠层内的生活条件更加温暖,反之,风扇位置越低,根系越均匀。
  为了解决问题4,应用遗传算法对风机的数量、位置、速度和温度进行优化设计。通过长度放大、风扇数量和位置的限制以及马尔可夫链保证的收敛性,在保证作物舒适生存条件的前提下,可以得到相对随机的方案。分别给出了五风机和三风机两种方案。
  综上所述,本研究不仅建立了一个有效的模型来模拟玻璃温室内的环境条件,而且通过遗传算法对风扇的设计进行了优化,为温室设计和作物种植提供了科学的指导和优化解决方案。

模型假设:

  (1) 空气可以看作是一种不可压缩的流体,在任何时候都可以在热平衡中均匀地混合。
  (2) 温室玻璃与土壤之间的传热主要是对流和传导,忽略了热辐射。
  (3) 温室内没有附加热源,只有风机吹入的热、稳定、均匀的空气。
  (4) 忽略空气的湍流效应。
  (5) 作物实际体积占作物长方体总体积的50%。
  (6) 多孔介质颗粒的直径,这里我们假设它是作物高度的一半。

问题分析:

  如问题重述中所述,计算温度场和风速场时应考虑对流换热、传导和空气动力学。因此,为了清晰地显示温室内不同高度的两个特征,我们将长方体温室划分为有限数量的网格点,并应用能量守恒定律对温室内网格点的速度和温度进行Python传递。为了验证Python结果的准确性,我们进一步在计算流体力学软件ANSYS-Fluent中建立了三维模型。通过Python建立的数学模型与ANSYS数值模拟结果的一致性,验证了所建数学模型优化参数的可靠性。

模型的建立与求解整体论文缩略图

在这里插入图片描述

全部论文及程序请见下方“ 只会建模 QQ名片” 点击QQ名片即可

部分程序代码:

function  money =  sumd_money(way,freight,M,b)

   index = unique(way);  
   money = sum(freight(index)); 

    for i = 1:b 
        money = money + M(way(i),i);  
    end
end

function way1 = gen_new_way(way0, s, b)
% way0:
        index =  randi([1, b],1) ; 
        way1 = way0;  % 将原来的方案赋值给way1
        way1(index) = randi([1, s],1);  % 将way1中的第index本书换一个书店购买   
end

clear; clc   
% 导入书的价格
% 这个数据文件里面保存了两个矩阵:
[s, b] = size(M);  % s
T0 = 1000;   % 初始温度
T = T0; % 迭代中温度会发生改变,第一次迭代时温度就是T0
k_total= 1000;  % 最大迭代次数
Lk = 300;  % 每个温度下的迭代次数
yita = 0.95;  % 温度衰减系数
way0 = randi([1, s],1,b); % 在1-s这些整数中随机抽取一个1*b的向量,表示这b本书分别在哪家书店购买
zhong_way = way0; %用来做中间计算
zhong_money = sumd_money(way0,freight,M,b);%zhong_money用来储存数值,sumd_money为函数计算,在上面可以看到,freight是快递费矩阵

for iter = 1 : k_total  % 外循环, 我这里采用的是指定最大迭代次数
    for i = 1 : Lk  %  内循环,在每个温度下开始迭代
        money0 = sumd_money(way0,freight,M,b); % 调用我们自己写的sum_money函数计算这个方案的花费
        way1 = gen_new_way(way0,s,b);  % 调用我们自己写的gen_new_way函数,也在上面
        money1 = sumd_money(way1,freight,M,b); % 计算新方案
        if money1 < money0    % 如果新方案小于当前方案
            way0 = way1; % 更新当前方案为新方案
            zhong_way = [zhong_way;way1]; % 将新找到的way1添加到中间结果中
            zhong_money = [zhong_money; money1];  % 将新找到的money1添加到中间结果中
        else
            p = exp(-(money1 - money0)/T); % 根据Metropolis准则计算一个概率
            if rand(1) < p   % 生成一个随机数和这个概率比较,如果该随机数小于这个概率
                way0 = way1;  % 更新当前方案为新方案
            end
        end
    end
    T = yita*T;   % 温度下降       
end


[best_money, ind] = min(zhong_money);  
min_way = zhong_way(ind,:); 
disp('最佳的方案是:'); disp(min_way)
disp('此时最优值是:'); disp(best_money)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值