2024年美国大学生数学建模竞赛B题搜寻潜水器解题全过程文档及程序

发布于:2024-05-17 ⋅ 阅读:(62) ⋅ 点赞:(0)

2024年美国大学生数学建模竞赛

B题 搜寻潜水器

原题再现:

  希腊的一家公司 Maritime Cruises Mini-Submarines(MCMS)制造的潜水器能够载人到海洋的最深处。潜水器被移动到指定地点,并在不与主船相连的情况下部署。MCMS 现在希望利用他们的潜水器带领游客在爱奥尼亚海海底探险,寻找沉船残骸。不过,在此之前,他们需要制定安全程序,以防与主船失去联系和可能出现的机械故障包括潜水器失去推进力,从而赢得监管机构的批准。特别是,他们希望你们开发一个模型,以预测潜水器在一段时间内的位置。与在陆地或海面上的典型搜救不同,有缺陷的潜水器有可能被放置在海底或水下中性浮力点。它的位置还可能受到海流、海中不同密度和/或海底地理环境的影响。你们的任务是:
  定位——建立一个(多个)模型,预测潜水器在一段时间内的位置。
这些预测的不确定性有多大?。潜水器可定期向主船发送哪些信息,以在事故发生前减少这些不确定性?为此,潜水器需要哪些设备?
  准备——如果有的话,您建议公司在主机船上携带哪些额外的搜索设备,以便在必要时部署?您可以考虑不同类型的设备,但也必须考虑与这些设备的可用性、维护准备和使用相关的成本。如果有必要,救援船只可能需要携带哪些额外设备提供协助?
  搜索——建立一个模型,利用定位模型中的信息来建议设备的初始部署点和搜索模式,从而最大限度地缩短找到失联潜水器的时间。根据时间和累积搜索结果,确定找到潜水器的概率。
  推断——如何将你的模型扩展到其他旅游目的地,如加勒比海?如果多个潜水器在同一附近移动,你的模型将如何改变?

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

  潜水器的安全程序是其安全行驶的重要前提。为了更好地监测潜水器,我们开发并推广了潜水器位置预测模型。结合性能和成本考虑,我们确定了潜水器和主船应配备的设备。

  建立了基于微分方程的潜艇位置预报模型。该模型由电流扰动模型和水阻力模型两部分组成。其中,海流扰动模型主要考虑了海水环境中风、浪、流对潜水器的影响;水阻力模型从海水对潜水器的阻力出发。这两部分之间的动力学关系构成了模型的微分方程关系,求解的是得到潜水器位置与完成位置预测时间的关系。在此基础上,假设不确定性的原因,并确定潜水器应发送的信息和应配备的设备,以减少不确定性。
  根据潜艇位置预测模型所反映的环境特征,建立了基于EWM-TOPSIS的搜索设备评估模型,选取采购成本、维修使用成本、可用概率、搜救效率、环境因素感知度作为评估指标,最终确定主船上应配备的搜索设备为ROV、声纳系统、AUV,救援船应配备自动救生衣和雷达反射器辅助。
  在潜艇位置预测模型的基础上,建立了一种有效的潜艇定位模型。该模型采用改进的圆形搜索模型,并使用蒙特卡罗模拟研究潜水器的所有可能位置,初始部署点取决于模拟结果。根据圆形搜索模型的几何关系,推导了发现潜水器的概率随时间和累积搜索结果的函数关系。
  通过比较加勒比海和研究区的环境和动力特征之间的差异,推广潜艇位置预测模型,使该模型可以推广到其他海区;考虑到潜水器之间相互作用对潜水器速度的影响,使该模型可以推广到有多个潜水器的海区。

模型假设:

  为了简化问题,方便我们模拟实际情况,我们做了以下基本假设,每个假设都是正确的。
  •假设1:在我们的研究期间,爱奥尼亚海的海面保持稳定。
  理由:爱奥尼亚海位于地中海中部,北与亚得里亚海接壤,西与意大利的卡拉布里亚和西西里岛接壤,东与阿尔巴尼亚和许多希腊岛屿接壤,面积辽阔。因此,我们假设海域不会发生显著变化,并且潜水器和主船不会搁浅。

  •假设2:在研究期间,爱奥尼亚海的气候类型保持不变。
  理由:爱奥尼亚海的气候类型为地中海,受副热带高压和西风带的影响,海水盐度、气压和海水温度大致稳定,因此风的大小、洋流的强度和海水的密度大致相同。
  •假设3:在研究期间,爱奥尼亚海不会发生大型自然灾害。
  理由:地震、海啸和台风等大型自然灾害会极大地影响船舶和潜水器的运动,因此我们假设海洋平静,不会受到突发性自然灾害的影响。

  •假设4:潜水器上可忽略的人员质量。
  理由:人员质量对潜水器的影响是潜水器上的动载荷。动载荷的计算比较复杂。然而,对于在水中航行的潜水器,海水对潜水器的影响远大于潜水器中人员的影响。因此,我们假设人员的质量可以忽略,即人员对潜水器的影响可以忽略。

  •假设5:在研究期间,潜水器的体积保持一致。
  理由:潜水器的体积在很大程度上决定了潜水器的浮力和潜水能力、操纵性和可操纵性、承载能力和耐压性,在这种情况下,潜水器不是自支撑的,因此我们假设潜水器在研究期间不能改变其体积。

  •假设6:潜水器在水下航行时不受人类活动的影响。
  理由:海水能见度降低、海洋碎屑和各种人为产生的电磁场会影响潜水器的运行,因此我们假设潜水器的运行不会受到这些人为因素的干扰。

问题重述:

  我们的任务是预测潜水器的位置随时间的变化,潜水器不是自支撑的,并且在功率耗尽时不能自动调节其行驶速度或实现上下行为。因此,有缺陷的潜水器通常固定在海底或中性浮力点。有了这样的边界条件,问题可以转化为以下四个部分:

  •开发一个模型,预测潜水器随时间的位置,研究其不确定性,并探索潜水器应发送的信息和应配置的设备。

  •确定主船应携带的搜索设备和特殊情况下救援船应携带的救援设备。

  •根据潜水位置的预测模型,探索设备的初始部署点和搜索模式,以尽量减少定位时间和发现潜水器的概率,并将其作为时间和累积搜索结果的函数。

  •将模型扩展到加勒比海和其他海域以及多个移动潜水器。

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

在这里插入图片描述
在这里插入图片描述

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

代码:(文档not free)

clc
dt=1
x=0;
y=0;
z=0;
vx=0;
vy=0;
vz=0;
%XRD=rand(1,1440);%用来改方向的
XRD=rand(1,1440)*2-1;
YRD=rand(1,1440)*2-1;
VX=[];
VY=[];
VZ=[];
X1=[];
Y1=[];
Z1=[];
R=[];
i_1=1
for t=[1:dt:1440]
    X=XRD(i_1);
    Y=YRD(i_1);
    Wx=5*X;
    Wy=5*Y;
    ax=1.8*(Wx-vx)-0.2*vx;%具体系数请自己计算
    ay=1.6*(Wy-vy)-0.2*vy;%具体系数请自己计算
    az=0.2*(10-0.5*z)-0.2*vz;%具体系数请自己计算
    vx=vx+ax*dt;
    vy=vy+ay*dt;
    vz=vz+az*dt;
    x=x+vx*dt;
    y=y+vy*dt;
    z=z+vz*dt;
    r=x*x+y*y;
    VX(end+1)=vx;
    VY(end+1)=vy;
    X1(end+1)=x;
    Y1(end+1)=y;
    Z1(end+1)=z;
    R(end+1)=r;
    i_1=i_1+1;
end
X2=X1*60;%*60是单位修正
Y2=Y1*60;%单位修正
Z2=Z1;
T=1:dt:1440;
plot(X2,Y2)
%plot(T,R)
%scatter(X1,Y1)
%scatter(T,R)





# 潜水艇轨迹预测模型
def submarine_trajectory(t, state):
    # 简化的动力学模型,需要根据实际情况修改
    x, y, z, vx, vy, vz = state
    dxdt = vx
    dydt = vy
    dzdt = vz
    dvxdt = f_x(x, y, z, t)
    dvydt = f_y(x, y, z, t)
    dvzdt = f_z(x, y, z, t)
    return [dxdt, dydt, dzdt, dvxdt, dvydt, dvzdt]
 
# 搜救设备部署模型
def search_device_motion(t, position, v_s, epsilon_i, theta_i):
    # 简化的搜索设备运动模型,需要根据实际情况修改
    dxdt = v_s * epsilon_i * np.cos(theta_i)
    dydt = v_s * epsilon_i * np.sin(theta_i)
    dzdt = 0
    return [dxdt, dydt, dzdt]
 
# 搜救时间模型
def rescue_time_model(T, search_device_positions, submarine_trajectory):
    # 计算在给定时间内找到潜水艇的概率
    P_T = 1
    for position in search_device_positions:
        P_i_T = search_device_detection_probability(T, position, submarine_trajectory)
        P_T *= P_i_T
    return 1 - P_T
 
# 搜救概率模型
def update_rescue_probability(previous_probability, search_device_detection_probability):
    # 贝叶斯更新搜救概率
    updated_probability = previous_probability * search_device_detection_probability
    updated_probability /= np.sum(updated_probability)
    return updated_probability


import numpy as np
from scipy.integrate import odeint
 
# 多目标轨迹预测模型
def multi_submarine_trajectory(states, t):
    # 具体的动力学模型,根据目标个数修改
    num_targets = len(states) // 6
    dx = np.zeros_like(states)
    for i in range(num_targets):
        idx = slice(i*6, (i+1)*6)
        dx[idx] = submarine_trajectory(states[idx], t)
    return dx
 
# 多目标搜索设备部署模型
def multi_search_device_motion(positions, t, v_s, epsilon, u):
    # 具体的搜索设备运动模型,根据目标个数修改
    num_targets = len(positions) // 3
    dp = np.zeros_like(positions)
    for i in range(num_targets):
        idx = slice(i*3, (i+1)*3)
        dp[idx] = search_device_motion(positions[idx], t, v_s, epsilon, u[:, i])
    return dp
 
# 多目标搜救时间模型
def multi_rescue_time_model(T, search_device_positions, multi_submarine_trajectory):
    # 计算在给定时间内找到潜水艇的概率,根据目标个数修改
    num_targets = len(search_device_positions) // 3
    P_T = 1
    for i in range(num_targets):
        idx = slice(i*3, (i+1)*3)
        P_i_T = search_device_detection_probability(T, search_device_positions[idx], multi_submarine_trajectory[idx])
        P_T *= P_i_T
    P_T = 1 - P_T
    return P_T
 
# 多目标搜救概率模型
def multi_update_rescue_probability(previous_probability, search_device_detection_probability):
    # 贝叶斯更新搜救概率,根据目标个数修改
    num_targets = len(previous_probability)
    updated_probability = previous_probability * search_device_detection_probability
    updated_probability /= np.sum(updated_probability)
    return updated_probability
 
# 示例的搜索设备检测概率模型
def search_device_detection_probability(T, position, submarine_trajectory):
    # 简化的检测概率模型,需要根据实际情况修改
    # 假设设备在时间 T 内能够探测到潜水艇
    return 0.8
全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可