2025数学建模国赛高教社杯A题思路代码文章助攻
代码+论文+降重+降AI率攻略下载:https://docs.qq.com/doc/DUUFYWEJja0ZXY1Na
题目核心分析
这道题的核心是解决一个动态、三维空间中的几何遮蔽与轨迹优化问题。我们需要在满足一系列动力学和战术约束的条件下,通过优化无人机(UAV)的飞行策略和烟幕弹的投爆时机,使得烟幕云团对特定来袭导弹的视线(Line of Sight, LOS)形成有效遮蔽,并最大化总遮蔽时间。
关键模型与公式:
-
坐标系:题目已给出,以假目标为原点 (0, 0, 0) 的三维笛卡尔坐标系。
-
导弹运动模型:导弹匀速直线飞向假目标。
-
导弹 M 的初始位置:\vec{P}_{M,0} = (x_{M,0}, y_{M,0}, z_{M,0})
-
飞行方向单位向量:\vec{d}_M = -\frac{\vec{P}_{M,0}}{||\vec{P}_{M,0}||}
-
t 时刻的位置:\vec{P}_M(t) = \vec{P}_{M,0} + v_M \cdot \vec{d}_M \cdot t,其中 v_M = 300 m/s。
-
-
无人机运动模型:无人机在接收任务后,等高、匀速、直线飞行。
-
无人机 F 的初始位置:\vec{P}_{F,0} = (x_{F,0}, y_{F,0}, z_{F,0})
-
飞行速度 v_F \in [70, 140] m/s,飞行方向(与x轴正向夹角)为 \theta_F。
-
t 时刻的位置:\vec{P}_F(t) = (x_{F,0} + v_F \cos(\theta_F) t, y_{F,0} + v_F \sin(\theta_F) t, z_{F,0})。
-
-
烟幕弹运动模型:脱离无人机后做平抛运动(受重力影响)。
-
投放时间 t_{drop},投放点位置 \vec{P}_{drop} = \vec{P}_F(t_{drop})。
-
投放时初速度等于无人机速度 \vec{v}_{drop} = (v_F \cos(\theta_F), v_F \sin(\theta_F), 0)。
-
自投放后经过时间 \Delta t,烟幕弹的位置: \vec{P}_{proj}(t_{drop} + \Delta t) = \vec{P}_{drop} + \vec{v}_{drop} \Delta t + (0, 0, -\frac{1}{2}g(\Delta t)^2) 其中 g \approx 9.8 \ m/s^2。
-
-
烟幕云团模型:起爆后形成球状云团,并匀速下沉。
-
起爆时间 t_{det},起爆点位置 \vec{P}_{det} = \vec{P}_{proj}(t_{det})。
-
起爆后经过时间 \Delta t' (即在 t = t_{det} + \Delta t' 时刻),云团中心位置: \vec{P}_{cloud}(t) = \vec{P}_{det} + (0, 0, -v_{sink} \cdot (t - t_{det})) 其中 v_{sink} = 3 m/s。
-
有效遮蔽区域:以 \vec{P}_{cloud}(t) 为中心、半径 R_{cloud} = 10 m 的球体。
-
有效遮蔽时段:[t_{det}, t_{det} + 20] s。
-
-
遮蔽条件判断:在 t 时刻,如果导弹到真目标上某点的连线被烟幕云团球体阻断,则形成有效遮蔽。
-
真目标:底面圆心 (0, 200, 0),半径 7m,高 10m 的圆柱体。为简化计算并保证覆盖,可将真目标近似为一个关键点,如圆柱体中心 \vec{P}_{TT} = (0, 200, 5)。
-
遮蔽条件:在时刻 t \in [t_{det}, t_{det} + 20],云团中心 \vec{P}_{cloud}(t) 到线段 \vec{P}_M(t)\vec{P}_{TT} 的距离小于等于云团半径 R_{cloud}。
-
点到直线的距离公式:令 \vec{A} = \vec{P}_M(t), \vec{B} = \vec{P}_{TT}, \vec{C} = \vec{P}_{cloud}(t),距离为: d(t) = \frac{||\vec{AC} \times \vec{AB}||}{||\vec{AB}||} \le R_{cloud}
-
问题1:固定策略下的遮蔽时长计算
建模思路: 这是一道正向模拟与计算题,没有优化环节。只需根据给定的参数,一步步计算出无人机、烟幕弹、烟幕云团和导弹的轨迹,然后在有效时间内判断遮蔽条件是否满足。
代码思路:
-
初始化: 定义M1和FY1的初始位置、速度向量。
-
M1初始位置 \vec{P}_{M1,0}=(20000,0,2000),速度大小 v_{M1}=300。计算其飞向原点的单位方向向量 \vec{d}_{M1} 和速度向量 \vec{v}_{M1}。
-
FY1初始位置 \vec{P}_{FY1,0}=(17800,0,1800),速度大小 v_{FY1}=120。其飞行方向朝向假目标,即 x 轴负方向,所以速度向量 \vec{v}_{FY1}=(-120, 0, 0)。
-
-
计算投放点: 无人机飞行 t_{drop} = 1.5 s 后投放。
-
投放点坐标 \vec{P}_{drop} = \vec{P}_{FY1,0} + \vec{v}_{FY1} \cdot t_{drop}。
-
-
计算起爆点: 烟幕弹投放后经过 3.6 s 起爆。
-
起爆总时刻 t_{det} = 1.5 + 3.6 = 5.1 s。
-
烟幕弹在空中飞行时间 \Delta t = 3.6 s。
-
起爆点坐标 \vec{P}_{det} = \vec{P}_{drop} + \vec{v}_{FY1} \cdot \Delta t + (0, 0, -\frac{1}{2}g(\Delta t)^2)。
-
-
遮蔽判断: 在时间区间 [t_{det}, t_{det}+20] (即 [5.1, 25.1]) 内进行判断。
-
建立一个循环或向量化计算,时间 t 从 5.1s 到 25.1s,步长设为足够小(如 0.01s)。
-
在每个时间步 t:
-
计算M1的位置 \vec{P}_{M1}(t) = \vec{P}_{M1,0} + \vec{v}_{M1} \cdot t。
-
计算真目标位置 \vec{P}_{TT}=(0, 200, 5)。
-
计算烟幕云团中心位置 \vec{P}_{cloud}(t) = \vec{P}_{det} + (0, 0, -3 \cdot (t - t_{det}))。
-
利用前述点到直线距离公式,计算 d(t)。
-
如果 d(t) \le 10,则当前时间步为有效遮蔽。
-
-
将所有有效遮蔽的时间步长累加,得到总有效遮蔽时长。
-
问题2:单无人机单弹的最优策略
建模思路: 这是一个非线性优化问题。决策变量是无人机的飞行方向和速度,以及烟幕弹的投放和起爆时机。目标是最大化问题1中计算的有效遮蔽时长。
-
决策变量 (Decision Variables):
-
无人机FY1的速度 v_{F1} \in [70, 140]。
-
无人机FY1的飞行方向角 \theta_{F1} \in [0, 2\pi)。
-
烟幕弹的投放时间 t_{drop} > 0。
-
烟幕弹从投放到起爆的延迟时间 \Delta t_{det} > 0。
-
-
目标函数 (Objective Function): \max \quad L(v_{F1}, \theta_{F1}, t_{drop}, \Delta t_{det}) 其中 L 是通过问题1的计算流程得到的有效遮蔽时长。
-
约束条件 (Constraints):
-
70 \le v_{F1} \le 140
-
t_{drop} > 0, \Delta t_{det} > 0
-
起爆点高度 z_{det} > 0 (防止地面爆炸)。
-
遮蔽应在导弹击中目标前发生,即 t_{det} < T_{impact},其中 T_{impact} 是M1到达 x=0 平面的时间。
-
代码思路: 直接求解这个复杂的非线性、非凸优化问题非常困难。应采用智能优化算法,如遗传算法 (Genetic Algorithm, GA) 或 粒子群优化 (Particle Swarm Optimization, PSO)。
-
定义适应度函数 (Fitness Function):
-
创建一个函数
calculate_shielding_duration(params)
,输入参数params
是一个包含四个决策变量 (v_{F1}, \theta_{F1}, t_{drop}, \Delta t_{det}) 的向量。 -
该函数内部完整实现问题1的计算逻辑,返回有效遮蔽时长。这个时长就是适应度值。
-
-
设置优化器:
-
选择一个优化库,如
scipy.optimize
(对于简单问题)、DEAP
(遗传算法) 或pyswarms
(粒子群)。 -
定义变量边界: 为每个决策变量设置一个合理的搜索范围。例如,v_{F1} \in [70, 140], \theta_{F1} \in [0, 2\pi], t_{drop} \in [0.1, 60], \Delta t_{det} \in [0.1, 20]。
-
设置算法参数: 如种群大小、迭代次数、交叉和变异概率等。
-
-
运行优化:
-
执行优化算法。算法将反复调用你的适应度函数,不断迭代寻找最优的决策变量组合。
-
优化结束后,输出使得遮蔽时间最长的策略参数,包括无人机飞行方向、速度、投放点和起爆点。投放点和起爆点坐标可以通过最优的策略参数计算得出。
-
问题3:单无人机三弹的最优策略
建模思路: 这是问题2的扩展,决策变量增加,且增加了投放时间间隔的约束。
-
决策变量:
-
无人机FY1的速度 v_{F1} 和方向 \theta_{F1} (整个过程只确定一次)。
-
三枚烟幕弹的投放时间 t_{drop,1}, t_{drop,2}, t_{drop,3}。
-
三枚烟幕弹的起爆延迟 \Delta t_{det,1}, \Delta t_{det,2}, \Delta t_{det,3}。
-
总计 2 + 3 + 3 = 8 个变量。
-
-
目标函数: 最大化三个烟幕云团产生的总遮蔽时间。注意,三个遮蔽区间可能会重叠,目标是最大化它们并集的总长度。 \max \quad \text{Length}(\bigcup_{i=1}^{3} \text{Interval}_i) 其中 \text{Interval}_i 是第 i 枚烟幕弹产生的有效遮蔽时间区间。
-
约束条件:
-
与问题2类似的约束。
-
新增约束:投放时间间隔至少为 1s。不失一般性,可设 t_{drop,1} < t_{drop,2} < t_{drop,3},则 t_{drop,2} \ge t_{drop,1} + 1 且 t_{drop,3} \ge t_{drop,2} + 1。
-
代码思路: 同样采用智能优化算法。
-
修改适应度函数:
-
函数
calculate_total_shielding_duration(params)
的输入params
是一个包含8个决策变量的向量。 -
函数内部: a. 根据 v_{F1}, \theta_{F1} 计算无人机的唯一飞行轨迹。 b. 循环3次,对每一枚弹: i. 根据 t_{drop,i} 计算投放点。 ii. 根据 \Delta t_{det,i} 计算起爆点和起爆时间。 iii. 计算该弹产生的有效遮蔽区间 [t_{start,i}, t_{end,i}]。 c. 对得到的三个区间 [t_{start,1}, t_{end,1}], [t_{start,2}, t_{end,2}], [t_{start,3}, t_{end,3}],计算它们并集的长度。这可以通过先排序,再合并重叠区间来实现。 d. 返回并集的总长度作为适应度。
-
-
执行优化:
-
使用与问题2相同的优化框架,但变量维度增加到8,并确保在优化过程中处理好投放间隔的约束(可以在生成新个体时就强制满足该约束)。
-
最终结果需整理成
result1.xlsx
要求的格式。
-
问题4:三无人机各一弹的最优策略
建模思路: 此问题涉及多智能体协同,但由于各无人机独立决策飞行路径,问题可以看作是并行地优化三个独立的“问题2”,但目标是联合目标。
-
决策变量:
-
对于每架无人机 FY1, FY2, FY3,都需要确定其飞行速度 v_{Fi}、方向 \theta_{Fi}、投放时间 t_{drop,i} 和起爆延迟 \Delta t_{det,i}。
-
总计 3 \times 4 = 12 个变量。
-
-
目标函数: 与问题3相同,最大化三个烟幕云团产生的总遮蔽时间并集的长度。 \max \quad \text{Length}(\bigcup_{i=1}^{3} \text{Interval}_i)
-
约束条件:
-
每架无人机都满足问题2的约束。
-
由于是不同无人机投放,没有1s间隔的限制。
-
代码思路: 依然是采用智能优化算法解决更高维度的优化问题。
-
修改适应度函数:
-
calculate_multi_uav_shielding(params)
的输入params
是一个12维向量。 -
函数内部: a. 将12个参数分解到3架无人机上(每架4个)。 b. 对每架无人机,独立计算其飞行、投放、起爆过程,并得到各自的有效遮蔽区间 [t_{start,i}, t_{end,i}]。 c. 计算三个遮蔽区间的并集长度。 d. 返回该长度作为适应度。
-
-
执行优化:
-
由于维度增加,可能需要调整智能优化算法的参数(如更大的种群、更多的迭代次数)以保证收敛。
-
将最终的最优策略结果存入
result2.xlsx
。
-
问题5:五无人机、三导弹的综合策略
建模思路: 这是最复杂的一题,是一个资源分配(任务规划)与轨迹优化相结合的复合问题。需要决定:
-
任务分配: 哪架无人机(或哪些)负责哪个导弹(或哪些)?
-
弹药分配: 每架被分配任务的无人机使用多少枚弹药(1到3枚)?
-
时空协同: 如何优化所有投放弹药的时空参数,以最大化对三个导弹的总遮蔽时间?
由于问题的复杂性,采用“一次性”完全优化的方法(例如一个包含几十个变量的GA)可能难以收敛到好的结果。建议采用分层或启发式的方法。
一种可行的分层启发式策略:
-
威胁评估与初步分配 (高层决策):
-
计算各导弹的“威胁时间窗口”。M1, M2, M3 的初始位置不同,它们到达关键区域(例如,能清晰分辨真假目标)的时间也不同。可以根据它们到真目标的距离来排序威胁等级。
-
根据无人机与各导弹飞行路径的“拦截”便利性进行初步匹配。例如,计算每架无人机到每条导弹-真目标视线的最短距离,距离近的无人机优先分配给对应导弹。
-
可以形成一个初步的分配方案,例如:FY1、FY2 负责 M1;FY4、FY5 负责 M2;FY3 负责 M3。
-
-
子问题优化 (中层决策):
-
将大问题分解为针对每个导弹的子问题。例如,针对 M1,我们现在的问题是:如何利用 FY1 和 FY2 的所有弹药(最多6枚),最大化对 M1 的遮蔽?
-
这个子问题本身仍然很复杂。可以进一步简化:
-
贪心策略: 优先使用“位置最好”的无人机(如FY1)的3枚弹药去解决 M1 的部分遮蔽窗口(调用问题3的模型),然后再用 FY2 的弹药去“补充”剩余的未遮蔽窗口。
-
协同优化: 建立一个针对 M1 的协同优化模型,决策变量包括 FY1 和 FY2 的飞行参数和所有6枚弹的投爆参数,然后用智能算法求解。
-
-
-
全局整合与迭代 (底层执行与反馈):
-
对每个导弹都执行上述子问题优化后,得到一个完整的策略。
-
计算该策略下的总目标函数值(对所有导弹的遮蔽时间并集求和)。
-
可以设计一个更高层的循环,尝试不同的初步分配方案(例如,使用模拟退火或GA来搜索最优的分配方案),并以子问题优化的结果作为评估分配方案好坏的依据。
-
代码思路:
-
顶层框架: 设计一个主程序,负责任务分配。可以先从一个基于距离的简单启发式分配开始。
-
中层优化模块: 实现一个通用的优化函数,例如
optimize_for_missile(missile_id, uav_list, ammo_counts)
。-
此函数接收一个导弹目标和分配给它的无人机及弹药数量。
-
内部构建并运行一个智能优化算法(如GA),其决策变量是所有相关无人机的飞行参数和所有弹药的投爆参数。
-
其适应度函数计算对指定
missile_id
的总遮蔽时长。
-
-
执行流程:
-
主程序根据分配策略,依次调用
optimize_for_missile
函数为 M1, M2, M3 规划策略。 -
收集所有规划结果,整合成最终的投放策略。
-
将结果存入
result3.xlsx
。
-
这个分层解耦的思路虽然可能不是全局最优解,但在有限的比赛时间内,它大大降低了问题的求解复杂度,更有可能得到一个高质量的可行解。