2023年APMCM亚太赛(B题)玻璃温室中的微气候规则|亚太地区大学生数学建模竞赛 建模解析,小鹿学长带队指引全代码文章与思路

我是小鹿学长,就读于上海交通大学,截至目前已经帮200+人完成了建模与思路的构建的处理了~
让我们来看看亚太赛的B题!
在这里插入图片描述

完整内容可以在文章末尾领取!

问题重述

问题1:建立数学模型描述无作物玻璃温室内温度和风速的分布。在温室的横截面上,具体在高度为0.5米的位置,展示温度和风速的分布。

问题2:制定数学模型,描述种植了作物的玻璃温室内温度和风速的分布。在温室内部的两个横截面上呈现分布情况:一个在高度为0.5米处(对应植物冠层水平),另一个在高度为0.1米处(在作物冠层内部)。分析这些条件是否有利于作物的优化生长。

问题3:提供两种场景下的玻璃温室内温度和风速分布,并将其与问题2中的解决方案进行比较。在方案一中,将温暖空气出口速度从2m/s增加到3m/s。在方案二中,通过将温室风扇从1.3米降至1米的高度,降低其位置。

问题4:通过考虑温室风扇的数量、位置、风速、吹出温度、规格和不同作物的影响,研究进一步优化玻璃温室风扇设计的潜力。基于对这些因素的分析,提出改进建议。

问题一

当使用有限差分法进行数值求解时,可以按以下步骤详细建立问题1的数学模型:

  1. 网格划分: 将温室空间划分为网格,分别在空间和时间上进行离散化。定义温度 T T T和速度场 v \mathbf{v} v在每个网格点上的值。

  2. 离散化热传导方程: 使用隐式差分方法对热传导方程进行离散化。对于温度 T T T,差分形式可以表示为:

    ρ c p T i , j n + 1 − T i , j n Δ t = ∇ ⋅ ( k ∇ T ) \rho c_p \frac{T_{i,j}^{n+1} - T_{i,j}^n}{\Delta t} = \nabla \cdot (k \nabla T) ρcpΔtTi,jn+1Ti,jn=(kT)

    其中, i i i j j j是网格索引, n n n 是时间步数, Δ t \Delta t Δt是时间步长。

  3. 离散化Navier-Stokes方程: 使用隐式差分方法对Navier-Stokes方程进行离散化。对于速度场 v \mathbf{v} v,差分形式可以表示为:

    ρ ( v i , j n + 1 − v i , j n Δ t + ( v i , j n ⋅ ∇ ) v i , j n ) = − ∇ p i , j n + 1 + μ ∇ 2 v i , j n + 1 + ρ g \rho \left( \frac{\mathbf{v}_{i,j}^{n+1} - \mathbf{v}_{i,j}^n}{\Delta t} + (\mathbf{v}_{i,j}^n \cdot \nabla) \mathbf{v}_{i,j}^n \right) = -\nabla p_{i,j}^{n+1} + \mu \nabla^2 \mathbf{v}_{i,j}^{n+1} + \rho \mathbf{g} ρ(Δtvi,jn+1vi,jn+(vi,jn)vi,jn)=pi,jn+1+μ2vi,jn+1+ρg

  4. 压力-速度耦合: 使用压力-速度耦合算法(如SIMPLE算法)来耦合速度场和压力场。

  5. 边界条件: 根据问题描述,在温室的一侧,将边界条件设置为温室风扇为速度入口条件,吹出温暖空气。其他边界条件可以根据实际情况设置。

  6. 初始条件: 设置初始时刻的温度场和速度场。

  7. 迭代求解: 在时间和空间上进行迭代,根据离散化的方程组进行数值求解。

  8. 结果分析: 在每个时间步骤和空间位置上收集温度和风速的数据。特别关注在高度为0.5米的横截面上的分布情况。

  9. 后处理: 可以使用可视化工具绘制温度和风速的等温线图或矢量图,以更直观地理解温室内的气候条件。

import numpy as np
import matplotlib.pyplot as plt

# 温室参数
length = 10  # 温室长度 (m)
width = 3    # 温室宽度 (m)
height = 2   # 温室高度 (m)

# 空间和时间离散化
dx = 0.1     # 空间步长 (m)
dt = 0.1     # 时间步长 (s)
steps = 100   # 时间步数

# 网格大小
nx = int(length / dx) + 1
ny = int(width / dx) + 1

# 初始化温度场和速度场
T = 20 * np.ones((nx, ny))  # 初始温度场
u = np.zeros((nx, ny))      # x方向速度场
v = np.zeros((nx, ny))      # y方向速度场

# 模拟主循环
for n in range(steps):
    # 更新温度场
    Tn = T.copy()
    T[1:-1, 1:-1] = Tn[1:-1, 1:-1] + dt * (k * (Tn[2:, 1:-1] - 2*Tn[1:-1, 1:-1] + Tn[:-2, 1:-1]) / dx**2
                                         + k * (Tn[1:-1, 2:] - 2*Tn[1:-1, 1:-1] + Tn[1:-1, :-2]) / dx**2)
    
    # 更新速度场(简化为稳态流场)
    u[1:-1, 1:-1] = 2  # 假设稳态时x方向速度为常数
    v[1:-1, 1:-1] = 0  # 假设稳态时y方向速度为0
#完整版关注文末名片获取

问题二

当建立问题二的数学模型时,需要更加详细地考虑温室内有作物的情况。以下是更为详细的步骤:

  1. 热传导方程:

    • 模型形式: 使用三维热传导方程来描述温室内温度的演化,考虑作物对温室内热量的吸收和释放。
      ρ c p ∂ T ∂ t = ∇ ⋅ ( k ∇ T ) + Q c \rho c_p \frac{\partial T}{\partial t} = \nabla \cdot (k \nabla T) + Q_c ρcptT=(kT)+Qc
      其中, Q c Q_c Qc 表示作物产生的附加热源。

    • 附加热源 Q c Q_c Qc 作物的附加热源可以通过考虑作物的光合作用、呼吸作用以及其他代谢过程产生的热量来建模。

  2. 流体动力学方程:

    • 模型形式: 使用三维Navier-Stokes方程来描述温室内的空气流动,考虑作物对空气流动的阻力影响。
      ρ ( ∂ v ∂ t + v ⋅ ∇ v ) = − ∇ p + μ ∇ 2 v + ρ g − R c v \rho \left( \frac{\partial \mathbf{v}}{\partial t} + \mathbf{v} \cdot \nabla \mathbf{v} \right) = -\nabla p + \mu \nabla^2 \mathbf{v} + \rho \mathbf{g} - R_c \mathbf{v} ρ(tv+vv)=p+μ2v+ρgRcv
      其中, R c R_c Rc是与作物阻力有关的项。

    • 作物阻力 R c R_c Rc 作物的阻力可以通过模拟作物的结构、形态以及空气通过植物表面的阻力来获取。这可能需要借助植物生理学和流体力学的相关知识。

  3. 边界条件:

    • 温室边界: 考虑温室结构的边界条件,包括玻璃、底土等。
    • 温室风扇入口: 在风扇位置设置速度入口条件,模拟温暖空气的输入。
    • 作物表面: 考虑作物表面的热通量和阻力,这可能需要考虑植物的生长状态和气孔导度。
  4. 作物模型:

    • 热源模型: 考虑作物的生长模型,包括光合作用和呼吸作用,以确定作物释放或吸收的热量。
    • 阻力模型: 根据植物结构和形态,以及流体动力学的知识,建立作物对空气流动的阻力模型。
  5. 初始条件:

    • 初始温度场: 根据温室的初始条件,设置初始时刻的温度场。
    • 初始速度场: 设置初始时刻的速度场,考虑温室风扇的输入。
  6. 数值求解:

    • 离散化: 利用有限差分法将热传导方程和Navier-Stokes方程离散化。
    • 迭代求解: 迭代求解耦合的热传导方程和流体动力学方程,直至达到稳态或者所需的时间步数。
  7. 结果分析:

    • 温度和风速分布: 分析在温室内的不同位置,尤其是在作物冠层附近的温度和风速的分布。
    • 作物生长条件: 评估温室内的气候条件是否适合作物生长,根据所需的温度和风速范围进行分析。
  8. 后处理:

    • 可视化: 利用可视化工具绘制温度和风速的等温线图或矢量图,以更直观地理解温室内的气候条件。
import numpy as np
import matplotlib.pyplot as plt

# 温室参数
length = 10  # 温室长度 (m)
width = 3    # 温室宽度 (m)
height = 2   # 温室高度 (m)

# 空间和时间离散化
dx = 0.1     # 空间步长 (m)
dt = 0.1     # 时间步长 (s)
steps = 100   # 时间步数

# 网格大小
nx = int(length / dx) + 1
ny = int(width / dx) + 1

# 初始化温度场和速度场
T = 20 * np.ones((nx, ny))  # 初始温度场
u = np.zeros((nx, ny))      # x方向速度场
v = np.zeros((nx, ny))      # y方向速度场

# 模拟主循环
for n in range(steps):
    # 更新温度场#完整版关注文末名片
    Tn = T.copy()

问题三

问题三要求在考虑两种不同的情景下(场景一:增加温暖空气出口速度,场景二:降低温室风扇位置),比较它们与问题二中的情况的差异。以下是问题三的建模思路:

场景一:增加温暖空气出口速度

  1. 调整边界条件:

    • 将温暖空气出口速度从场景二中的值(例如2 m/s)增加到场景一的目标值(例如3 m/s)。
  2. 重新运行模型:

    • 使用问题二中已建立的数学模型,将边界条件中的温暖空气出口速度调整为新的目标值。
    • 对热传导方程和Navier-Stokes方程进行离散化,迭代求解,获取新的温度和风速分布。
  3. 结果分析:

    • 比较场景一的结果与问题二中的情况,特别关注温度和风速的变化,以及对作物生长条件的影响。
    • 分析温室内温度和风速分布的均匀性和稳定性。

场景二:降低温室风扇位置

  1. 调整边界条件:

    • 将温室风扇的位置从场景二中的值(例如1.3 m)降低到场景二的目标值(例如1 m)。
  2. 重新运行模型:

    • 使用问题二中已建立的数学模型,将边界条件中的温室风扇位置调整为新的目标值。
    • 对热传导方程和Navier-Stokes方程进行离散化,迭代求解,获取新的温度和风速分布。
  3. 结果分析:

    • 比较场景二的结果与问题二中的情况,关注温度和风速的变化,以及对作物生长条件的影响。
    • 分析温室内温度和风速分布的均匀性和稳定性。

综合分析:

  1. 比较场景一和场景二:

    • 对比场景一和场景二的温度和风速分布,分析它们在提高温暖空气出口速度和降低温室风扇位置方面的效果。
    • 考虑这些变化对温室内气候条件和作物生长的影响。
  2. 优化建议:

    • 基于比较结果,提出可能的优化建议,例如在不同情景下调整温暖空气出口速度和温室风扇位置,以改善温室内的气候条件。
import numpy as np
import matplotlib.pyplot as plt

# 温室参数
length = 10  # 温室长度 (m)
width = 3    # 温室宽度 (m)
height = 2   # 温室高度 (m)

# 空间和时间离散化
dx = 0.1     # 空间步长 (m)
dt = 0.1     # 时间步长 (s)
steps = 100   # 时间步数

# 网格大小
nx = int(length / dx) + 1
ny = int(width / dx) + 1

# 温度场和速度场
T = 20 * np.ones((nx, ny))  # 初始温度场
u = np.zeros((nx, ny))      # x方向速度场
v = np.zeros((nx, ny))      # y方向速度场

def run_greenhouse_model(air_outlet_velocity, fan_position):
    # 重新运行模型的相关代码

    # 假设有一个函数 update_boundary_conditions,用于更新边界条件
    def update_boundary_conditions():
        # 在这里根据参数更新边界条件
        pass

    # 模拟主循环
    for n in range(steps):
        # 更新边界条件
        update_boundary_conditions()

        # 更新温度场
        Tn = T.copy()
        # TODO: 添加热传导方程的离散化更新步骤

        # 更新速度场(简化为稳态流场)
        u[1:-1, 1:-1] = 2  # 假设稳态时x方向速度为常数
        v[1:-1, 1:-1] = 0  # 假设稳态时y方向速度为0

    # 返回结果
    return T, u, v

问题四

  1. 优化目标的确定:

    • 目标函数: 定义一个目标函数,例如最大化温室内作物的生长速率。这可以是基于作物生长模型和生理学原理的函数,考虑温度、湿度、光照等因素。
  2. 决策变量的选择:

    • 温室风扇数量: 将温室内风扇的数量作为决策变量,表示在温室内使用的风扇数量。
    • 风扇位置: 将风扇的位置(可能是三维坐标)作为决策变量,以确定最佳的位置布局。
    • 风速和吹出温度: 将风扇的风速和吹出温度作为决策变量,以找到最优的环境控制策略。
  3. 约束条件的建立:

    • 技术和物理约束: 考虑温室的物理尺寸、风扇的技术规格等作为约束条件。
    • 作物需求: 考虑作物的生长需求,包括适宜的温度范围、湿度等作为约束条件。
  4. 建立模型:

    • 整合模型: 将问题二和问题三中建立的温室模型进行整合,加入温室风扇的影响,包括风速分布、温度分布等。
    • 作物生长模型: 将作物的生长模型与温室模型整合,以更全面地考虑作物的生长需求。
  5. 数学优化模型:

    • 目标函数形式化: 将优化目标和决策变量形式化为一个数学优化问题,例如最大化一个生长速率的函数。
    • 约束条件: 将技术、物理和生长需求的约束条件形式化为数学约束。
    • 求解器选择: 选择适当的数学优化求解器,可能是线性规划、非线性规划或进化算法等。
  6. 模型求解和分析:

    • 求解模型: 使用选定的数学优化方法对模型进行求解,找到最优的决策变量组合。
    • 分析结果: 分析最优解对各个变量的影响,了解最优解对温室环境和作物生长的改善效果。
  7. 灵敏性分析:

    • 参数敏感性: 进行灵敏性分析,评估模型对输入参数的敏感性,以了解最优解对于参数变化的鲁棒性。
  8. 优化结果的解释:

    • 建议: 解释最优解,提出对于温室风扇设计的具体建议,包括风扇数量、位置、风速和吹出温度等。
  9. 验证和实施:

    • 验证: 验证优化结果的可行性,可能需要通过实际试验或模拟验证。
    • 实施: 在实施优化方案时,监测实际效果,并进行必要的调整。
from scipy.optimize import minimize
import numpy as np

# 假设问题四的目标函数为最大化作物生长速率
def objective_function(decision_variables):
    # 在这里调用你的模型,并返回一个优化目标,例如作物生长速率
    # decision_variables 包含温室风扇的数量、位置、风速和吹出温度等决策变量
    # 这里仅作为示例,需要根据实际模型进行修改
    return -1 * your_growth_rate_model(decision_variables)

# 定义约束条件
def constraint_1(decision_variables):
    # 示例:温室风扇数量不能超过上限
    return total_fans - np.sum(decision_variables[0:number_of_fans])

# 更多约束条件的定义...

# 定义初始决策变量的猜测值
initial_guess = np.array([1, 2, 3, 4, ...])

# 定义优化问题
optimization_problem = {
    
    
    'type': 'maximize',
    'fun': objective_function,
    'x0': initial_guess,
    'constraints': [
        {
    
    'type': 'ineq', 'fun': constraint_1},
        # 更多约束条件的添加...
    ],
}

更多内容可以点击下方名片详细了解,让小鹿学长带你冲刺亚太赛夺奖之路!
敬请期待我们的努力所做出的工作!记得关注 鹿鹿学长

猜你喜欢

转载自blog.csdn.net/Tech_deer/article/details/134569476
今日推荐