2025年国赛高教社杯数学建模A题烟幕干扰弹的投放策略解题全过程文档及程序

2025年国赛高教社杯数学建模

A题 烟幕干扰弹的投放策略

原题再现

烟幕干扰弹主要通过化学燃烧或爆炸分散形成烟幕或气溶胶云团,在目标前方特定空域形成遮蔽,干扰敌方导弹,具有成本低、效费比高等优点。随着烟幕干扰技术的不断发展,现已有多种投放方式完成烟幕干扰弹的定点精确抛撒,即在抛撒前能精确控制烟幕干扰弹到达预定位置,通过时间引信时序控制起爆时间。
  现考虑运用无人机完成烟幕干扰弹的投放策略问题。具有长续航能力的无人机挂载某型烟幕干扰弹在特定空域巡飞,受领任务后,无人机投放烟幕干扰弹在来袭武器和保护目标之间形成烟幕遮蔽。每架无人机投放两枚烟幕干扰弹至少间隔1 s。烟幕干扰弹脱离无人机后,在重力作用下运动。烟幕干扰弹起爆后瞬时形成球状烟幕云团,由于采用特定技术,该烟幕云团以3 m/s的速度匀速下沉。据试验数据知,云团中心10 m范围内的烟幕浓度在起爆20s 内可为目标提供有效遮蔽。
  来袭武器为空地导弹,该型导弹飞行速度300 m/s。导弹的飞行方向直指一个为掩护某半径7 m、高10 m的圆柱形固定目标而专门设置的假目标。以假目标为原点,水平面为 𝑥𝑦 平面,真目标下底面的圆心为 (0,200,0)。警戒雷达发现来袭导弹时,3 枚导弹 M1、M2、M3分别位于 (20000,0,2000)、(19000,600,2100)、(18000,−600,1900);5 架无人机的位置信息分别为 FY1(17800,0,1800)、FY2(12000,1400,1400)、FY3(6000,−3000,700)、FY4(11000,2000,1800)、FY5(13000,−2000,1300)。
  在导弹来袭过程中,通过投放烟幕干扰弹尽量避免来袭导弹发现真目标。控制中心在警戒雷达发现目标时,立即向无人机指派任务。无人机受领任务后,可根据需要瞬时调整飞行方向,然后以70~140 m/s的速度等高度匀速直线飞行。每架无人机的航向、速度可不相同,但一旦确定就不再调整。
  为实现更为有效的烟幕干扰效果,需设计烟幕干扰弹的投放策略,主要包括无人机飞行方向、飞行速度、烟幕干扰弹投放点、烟幕干扰弹起爆点等。请建立数学模型,针对不同情形,分别设计烟幕干扰弹的投放策略,使得多枚烟幕干扰弹对真目标的有效遮蔽时间尽可能长。不同烟幕干扰弹的遮蔽可不连续。
  问题1 利用无人机FY1投放1枚烟幕干扰弹实施对M1的干扰,若FY1以120 m/s的速度朝向假目标方向飞行,受领任务1.5 s后即投放1枚烟幕干扰弹,间隔3.6 s后起爆。请给出烟幕干扰弹对M1的有效遮蔽时长。
  问题2 利用无人机FY1投放1枚烟幕干扰弹实施对M1的干扰,确定FY1的飞行方向、飞行速度、烟幕干扰弹投放点、烟幕干扰弹起爆点,使得遮蔽时间尽可能长。
  问题3 利用无人机FY1投放3枚烟幕干扰弹,实施对M1的干扰。请给出烟幕干扰弹的投放策略,并将结果保存到文件result1.xlsx中(模板文件见附件)。
  问题4 利用FY1、FY2、FY3等3架无人机,各投放1枚烟幕干扰弹,实施对M1的干扰。请给出烟幕干扰弹的投放策略,并将结果保存到文件 result2.xlsx 中(模板文件见附件)。
  问题5 利用5架无人机,每架无人机至多投放3枚烟幕干扰弹,实施对M1、M2、M3等3枚来袭导弹的干扰。请给出烟幕干扰弹的投放策略,并将结果保存到文件result3.xlsx中。

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

针对现代战场中无人机投放烟幕弹对来袭导弹实施主动遮蔽的多场景优化问题,本文构建了一套从基础运动学建模到多智能体协同优化的完整求解框架,实现了从单弹单机到多机多弹全维度、高精度的烟幕遮蔽效能分析与策略寻优,为复杂战场环境下的无人机烟幕干扰作战提供了理论支撑与方案参考。
  针对问题一,本文首先建立了导弹、无人机、烟幕弹及烟幕云团的全链路运动学模型,通过位置函数精准刻画了无人机匀速飞行、烟幕弹平抛运动与烟幕云团匀速下沉的动态过程。在此基础上,创新性地引入布尔函数对有效遮蔽状态进行定义,并严格证明了有效遮蔽时间区间的连续性,提出仅需判断目标圆柱上下底面圆周的遮蔽状态即可判定整体遮蔽效果,大幅提升了求解效率。结合二分查找法与圆周离散化采样,在保证精度的前提下求解得到单枚烟幕弹对导弹 M1 的有效遮蔽时长为1.3921 秒,同时通过不同采样点数的敏感性分析验证了模型的稳定性与高效性。
  针对问题二,本文以最大化单无人机单烟幕弹的有效遮蔽时长为目标,构建了包含无人机航向、速度、烟幕弹投放与起爆时间四维决策变量的非线性优化模型。通过对导弹 - 目标 - 烟幕云团的空间几何关系进行深度分析,明确了最优投放策略需使烟幕云团处于导弹与目标的关键视线路径上。采用多起点变步长搜索算法进行全局寻优,得到无人机以 136.3721m/s 的速度、5.1702° 航向飞行,在受领任务 0.8982s 后投放烟幕弹、间隔 0.0499s 起爆的最优策略,对应有效遮蔽时长为4.5879 秒。通过粒子群优化算法(PSO)进行交叉验证,两种算法结果相对误差仅为 0.01%,充分证明了模型与算法的可靠性。
  针对问题三,本文将场景拓展至单无人机投放多枚烟幕弹的协同干扰问题,建立了高维优化模型。该模型在单弹模型基础上,引入多枚烟幕弹的投放间隔约束,决策变量维度提升至 8 维,属于典型的多峰非线性优化问题。采用差分进化算法(DE)进行求解,在满足投放间隔不小于 1 秒的约束条件下,实现了三枚烟幕弹遮蔽时段的有效衔接,求解得到最大有效遮蔽时长为6.9365 秒,相关数据可通过附录文件result1.xlsx获取。
  针对问题四,本文聚焦多无人机单弹协同干扰任务,构建了三机协同优化模型。该模型突破单机优化的局限,引入多无人机对单枚导弹的联合遮蔽逻辑,提出基于预测拦截点的协同优化策略,通过将高维优化问题降维为单机子问题,大幅提升了求解效率。结合局部网格搜索对近似最优解进行精细化微调,最终求得三架无人机协同作用下的最大有效遮蔽时长为11.1265 秒,并通过差分进化算法验证了结果的准确性,两种算法求解结果误差仅为 4.46%,兼顾了求解效率与结果精度。
  针对问题五,本文面向多无人机多弹干扰多枚导弹的复杂场景,构建了大规模多机多弹优化模型。该模型决策变量维度高达 45 维,约束条件复杂,属于大规模组合优化问题。为此,本文提出分层优化策略,首先通过整数线性规划模型求解无人机 - 导弹的最优任务分配方案,将复杂问题分解为单导弹子问题进行求解,再通过多问题结果取交集得到全局最优解。求解得到多无人机协同干扰三枚导弹的总最大有效遮蔽时长为21.0782 秒,详细数据可参见附录文件result3.xlsx。

模型假设:

无人机于投弹前保持匀速直线航行状态,烟幕弹投放后作理想平抛运动,全程忽略空气阻力干扰,运动学规律遵循经典刚体力学方程。
  来袭导弹全程保持恒定航速与直线航迹,定向奔赴虚假目标区域,不计大气阻力、动力衰减等环境扰动,将其抽象为三维空间质点,仅依托空间坐标完成运动刻画与几何求解。
  烟幕弹触发起爆后,快速形成规则球形遮蔽云团;云团水平坐标恒定不变,质心以固定下沉速率竖直匀速沉降,一旦触地即刻丧失遮蔽效能。
  简化烟幕物理特性,设定云团半径为恒定定值,摒弃气流扰动、粒子扩散、浓度衰减等动态因素;以导弹与目标间视线线段到云球球心的最短几何距离作为核心判定依据,当最小距离小于云团半径时判定为有效遮蔽,不考虑光波散射、衍射等光学效应。
  全域划定为无障碍开阔空域,排除建筑、地形等遮挡干扰,视线传播不受外界阻碍;模型严格遵循几何约束与物理边界条件,保障方程求解的合理性与解的唯一存在性。
  当无人机与真实目标保持远距离态势时,弱化目标实体轮廓的差异化影响,可适当简化目标形态约束,降低高维几何运算复杂度。
  面对多航线、多导弹协同来袭场景,遵循单烟幕单拦截原则,单枚烟幕云团仅可对单一导弹形成有效遮蔽,无法实现跨航线多目标同步干扰。

问题分析:

问题一的分析
  本问题核心在于探究导弹运动轨迹与球形烟幕云团之间的空间几何耦合关系。在烟幕云团有效作用周期内,通过实时解算导弹动态位置,精准判别导弹 --- 目标视线线段至烟团球心的最短距离是否小于遮蔽临界半径,统计满足有效遮蔽条件的连续时间区间,进而积分求解全域有效遮蔽总时长。依托物理运动规律,本问需依次完成四项核心工作:求解无人机投弹后烟幕弹起爆节点的空间坐标;构建来袭导弹匀速直线运动的时空方程,完整刻画其飞行航迹;推演烟幕云团沉降运动模型,限定其有效作用时域与空间边界;建立几何距离判别准则,结合数值解析与仿真遍历方式,定量求解有效遮蔽持续时长。整体而言,问题一属于典型的空间几何仿真与边界判别类问题,可结合连续运动方程与时间离散化遍历方法,完成高精度数值求解。

问题二的分析
  相较于问题一固定飞行参数的设定,问题二放开无人机飞行速度、航向角度、投弹时刻与起爆延迟等关键控制变量,在给定性能约束区间内开展参数优化,以实现单枚烟幕弹遮蔽效能最大化。本问优化逻辑包含两大核心要点:结合无人机机动范围与烟幕弹抛射运动约束,划定烟幕弹起爆落点的可行域空间,建立控制变量与起爆点位的映射关系;依托导弹与目标的固定空间方位,构建视线传输截面几何模型,解析烟幕遮挡的临界条件,量化推演理论遮蔽时长上限。完整求解流程为:界定起爆点可行约束范围、搭建跨目标视线几何分析模型、遍历优选最优起爆时空参数,最终实现遮蔽时长极值求解。综上,问题二本质为带多约束的非线性几何优化问题,通过调控无人机飞行与投爆时序参数,优选烟幕布设位置,实现对来袭导弹的长效遮蔽干扰。

问题三的分析
  问题三聚焦单机多弹协同干扰场景,以单架无人机为载体,合理规划飞行姿态、航行参数与多枚烟幕弹的分时投放、延时起爆策略,依托多烟团时序衔接与空间互补,实现全域遮蔽时长最大化。结合题干空间布局特征,无人机与来袭导弹处于同一平面体系,方位决策维度大幅简化;同时远距离态势下目标外形影响可合理忽略,遮蔽判别准则沿用前文几何判定体系,并增设多弹投放时间间隔等强约束条件。具体求解思路为:明确高维决策变量组成,确立以总遮蔽时长最大化为核心的优化目标;构建多实体联动运动仿真模型,复现无人机、导弹及多组烟幕云团的动态演化规律;引入差分进化等智能优化算法,在多重约束边界内全局搜寻最优投放组合方案。由此可知,问题三属于强约束条件下的动态仿真高维优化问题,重点解决多武器时序协同与资源调配的最优决策。

问题四的分析
  问题四突破单机作业模式,拓展至多无人机分布式协同遮蔽场景,依托三架无人机初始站位的空间差异化分布,天然形成导弹航迹近端、中段、远端三段覆盖格局。各无人机最优起爆点位分别对应导弹不同飞行阶段,多组烟幕有效作用时段相互独立、无明显重叠,分段优化结果具备可累加、可整合的特性。基于该特性,可将高维耦合的多智能体协同问题拆解为三组独立的单机优化子问题,分别求解各空域最优投爆策略,再对分段遮蔽时段进行拼接整合,弱化高维运算压力。整体求解逻辑分为:按导弹航程完成空域区位划分;分区独立构建遮蔽判定模型并求解局部最优方案;统筹整合多机遮蔽时段,按需微调起爆时序,压缩遮蔽空窗区间。综上所述,问题四是典型的空间分区并行优化与时序协同整合问题,依靠降维拆解与分布式寻优思路,高效求解多机协同遮蔽最优策略。

问题五的分析
  问题五为全场景综合优化模型,整合五架无人机、多枚烟幕弹药与多批次来袭导弹的复杂对抗体系,任务规模与约束复杂度大幅提升。多目标来袭背景下遵循单烟团单目标遮蔽原则,进一步加剧了资源分配与任务规划难度;同时决策变量维度陡增,高维耦合特性极易引发维度灾难,全局直接寻优计算成本极高、可行性不足。因此,本问核心难点不再局限于单一轨迹与点位优化,而是面向多智能体、多约束、强耦合复杂系统,完成任务拆解、资源分配与全局协同。标准化求解路径为:量化评估模型维度规模与计算瓶颈,论证全局联合优化的局限性;引入贪心分层分解策略,按作战单元与拦截目标完成分组降维,拆解为若干低维可解子问题;分步完成各子模型优化求解,通过时段并集运算、任务匹配规则整合局部最优解,输出全局协同方案;对比不同分解策略的遮蔽覆盖率与资源利用率,完成方案合理性校验。

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

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

部分程序代码(完整论文以及代码请联系博主):

python 复制代码
import numpy as np

# ===================== 常量定义 =====================
G = 9.81                  # 重力加速度 (m/s^2)
DELTA_T_DEFAULT = 0.001   # 默认仿真时间步长 (s)
CLOUD_RADIUS = 10.0       # 烟幕云团有效半径 (m)
CLOUD_DURATION = 20.0     # 烟幕有效持续时间 (s)
SINK_SPEED = 3.0          # 烟幕下沉速度 (m/s)
# ======================================================


def compute_explosion_position(
    uav_init: tuple,
    uav_speed: float,
    uav_direction: np.ndarray,
    release_time: float,
    fuse_time: float
) -> tuple[float, np.ndarray]:
    """
    计算烟幕弹起爆时刻与空间位置(考虑平抛运动)
    :param uav_init: 无人机初始坐标 (x, y, z)
    :param uav_speed: 无人机飞行速度
    :param uav_direction: 无人机飞行方向向量
    :param release_time: 投放时刻
    :param fuse_time: 引信延时
    :return: (起爆时刻, 起爆点坐标)
    """
    # 方向向量单位化
    dir_vec = np.array(uav_direction, dtype=float)
    if np.linalg.norm(dir_vec) == 0:
        raise ValueError("无人机方向向量不能为空")
    dir_unit = dir_vec / np.linalg.norm(dir_vec)

    # 无人机初始位置
    uav_init = np.array(uav_init, dtype=float)
    # 投放点位置
    release_pos = uav_init + dir_unit * uav_speed * release_time
    # 起爆时刻
    explosion_time = release_time + fuse_time

    # 平抛运动:水平匀速 + 竖直自由落体
    horizontal_disp = dir_unit * uav_speed * fuse_time
    explosion_xy = release_pos[:2] + horizontal_disp[:2]
    z_drop = 0.5 * G * fuse_time ** 2
    explosion_z = max(release_pos[2] - z_drop, 0.0)

    explosion_pos = np.array([explosion_xy[0], explosion_xy[1], explosion_z])
    return explosion_time, explosion_pos


def compute_block_intervals_for_event(
    missile_init: tuple,
    decoy_pos: tuple,
    missile_speed: float,
    target_pos: tuple,
    event: dict,
    delta_t: float = None
) -> list[tuple[float, float]]:
    """
    计算单个烟幕事件对导弹-目标视线的有效遮蔽时间区间
    :return: 有效遮蔽时间段列表 [(t1_start, t1_end), ...]
    """
    if delta_t is None:
        delta_t = DELTA_T_DEFAULT

    # 提取无人机参数
    uav_init = event["uav_init"]
    uav_speed = event["uav_speed"]

    # 计算飞行方向
    if "uav_direction" in event and event["uav_direction"] is not None:
        uav_dir = np.array(event["uav_direction"], dtype=float)
    else:
        heading_point = event.get("heading_point", decoy_pos)
        heading_point = np.array(heading_point, dtype=float)
        heading_vec = heading_point - np.array(uav_init, dtype=float)
        heading_vec[2] = 0.0
        norm = np.linalg.norm(heading_vec)
        if norm < 1e-9:
            raise ValueError("航向点与无人机位置重合,无法计算方向")
        uav_dir = heading_vec / norm

    release_t = event["release_time"]
    fuse_t = event["fuse_time"]

    # 计算起爆点
    explosion_time, explosion_pos = compute_explosion_position(
        uav_init, uav_speed, uav_dir, release_t, fuse_t
    )

    # 导弹运动学
    missile_init = np.array(missile_init, dtype=float)
    decoy_pos = np.array(decoy_pos, dtype=float)
    target_pos = np.array(target_pos, dtype=float)

    missile_dir_vec = decoy_pos - missile_init
    dist_decoy = np.linalg.norm(missile_dir_vec)
    if dist_decoy < 1e-9:
        raise ValueError("导弹初始位置不能与假目标重合")
    missile_dir_unit = missile_dir_vec / dist_decoy
    missile_vel = missile_dir_unit * missile_speed
    missile_total_time = dist_decoy / missile_speed

    # 仿真时间窗口
    t_start = explosion_time
    t_end = explosion_time + CLOUD_DURATION
    t_end = min(t_end, missile_total_time)

    if t_start >= t_end - 1e-6:
        return []

    # 时间序列
    times = np.arange(t_start, t_end + delta_t, delta_t)

    # 导弹位置
    M = missile_init + missile_vel * times.reshape(-1, 1)

    # 烟幕云团位置(水平不动,竖直下沉)
    dt_exp = times - explosion_time
    z_cloud = np.clip(explosion_pos[2] - SINK_SPEED * dt_exp, 0.0, None)
    P = np.column_stack([
        np.full_like(z_cloud, explosion_pos[0]),
        np.full_like(z_cloud, explosion_pos[1]),
        z_cloud
    ])

    # 点到线段距离计算
    AB = target_pos - M
    AP = P - M
    AB_sq = np.sum(AB ** 2, axis=1)
    AB_sq = np.maximum(AB_sq, 1e-9)
    param = np.sum(AP * AB, axis=1) / AB_sq

    # 叉乘求直线距离
    cross = np.cross(AP, AB)
    dist_line = np.linalg.norm(cross, axis=1) / np.sqrt(AB_sq)

    # 线段距离
    dist_seg = dist_line.copy()
    dist_seg[param < 0.0] = np.linalg.norm(AP[param < 0.0], axis=1)
    dist_seg[param > 1.0] = np.linalg.norm(P[param > 1.0] - target_pos, axis=1)

    # 遮蔽判定
    blocked = dist_seg < CLOUD_RADIUS

    # 提取连续遮蔽区间
    intervals = []
    active = False
    t0 = None

    for i, val in enumerate(blocked):
        if val and not active:
            active = True
            t0 = times[i]
        elif not val and active:
            active = False
            intervals.append((float(t0), float(times[i - 1])))

    if active and t0 is not None:
        intervals.append((float(t0), float(times[-1])))

    return intervals


if __name__ == "__main__":
    # ===================== 测试场景 =====================
    missile_init_pos = (20000, 0, 2000)
    decoy_target = (0, 0, 0)
    missile_vel = 300
    real_target = (0, 200, 0)

    # 单个烟幕事件
    smoke_event = {
        "uav_init": (17800, 0, 1800),
        "uav_speed": 120,
        "heading_point": (0, 0, 1800),
        "release_time": 1.5,
        "fuse_time": 3.6
    }

    print("========== 烟幕遮蔽仿真计算 ==========")
    print(f"导弹初始位置: {missile_init_pos}")
    print(f"假目标: {decoy_target}")
    print(f"真目标: {real_target}")
    print(f"导弹速度: {missile_vel} m/s\n")

    # 计算起爆点
    exp_time, exp_pos = compute_explosion_position(
        smoke_event["uav_init"],
        smoke_event["uav_speed"],
        np.array(smoke_event["heading_point"]) - np.array(smoke_event["uav_init"]),
        smoke_event["release_time"],
        smoke_event["fuse_time"]
    )

    print(f"起爆时刻: {exp_time:.2f} s")
    print(f"起爆坐标: ({exp_pos[0]:.1f}, {exp_pos[1]:.1f}, {exp_pos[2]:.1f})")

    # 计算遮蔽区间
    blocks = compute_block_intervals_for_event(
        missile_init_pos, decoy_target, missile_vel, real_target, smoke_event
    )

    print(f"\n遮蔽区间: {[(round(s, 2), round(e, 2)) for s, e in blocks]}")
    if blocks:
        total_block_time = sum(e - s for s, e in blocks)
        print(f"总有效遮蔽时长: {total_block_time:.4f} 秒")

    print("\n========== 计算完成 ==========")
全部论文及程序请见下方" 只会建模 QQ名片" 点击QQ名片即可
相关推荐
一只小小的土拨鼠11 小时前
2026年华中杯大学生数学建模挑战赛ABC(华中杯数学建模)参赛思路与解题策略全解析(详细解题思路和论文+完整项目代码+全套资源)
数学建模
一只小小的土拨鼠11 小时前
2026年深圳杯&东三省数学建模联赛历年命题规律与硬核备赛指南
数学建模·深圳杯
超级码力66620 小时前
【Latex第三方文档类standalone】standalone类介绍及应用
算法·数学建模·信息可视化
做cv的小昊1 天前
【TJU】研究生应用统计学课程笔记(4)——第二章 参数估计(2.1 矩估计和极大似然估计、2.2估计量的优良性原则)
人工智能·笔记·考研·数学建模·数据分析·excel·概率论
武帝为此1 天前
【相关性分析综述】
人工智能·数学建模
武帝为此1 天前
【特征选择方法】
算法·数学建模
AI科技星2 天前
灵魂商数(SQ) · 全域数学统一定义【乖乖数学】
算法·机器学习·数学建模·数据挖掘·量子计算
张祥6422889042 天前
导数与微分有啥区别
算法·数学建模
AC赳赳老秦2 天前
OpenClaw与Notion联动:自动同步工作任务、整理笔记,实现高效管理
运维·人工智能·python·数学建模·自动化·deepseek·openclaw