当大家面临着复杂的数学建模问题时,你是否曾经感到茫然无措?作为2022年美国大学生数学建模比赛的O奖得主,我为大家提供了一套优秀的解题思路,让你轻松应对各种难题!
CS团队倾注了大量时间和心血,深入挖掘解决方案。通过多目标规划,贝叶斯推断,数值模拟等算法,设计了明晰的项目,团队努力体现在每个步骤,确保方案既创新又可行,为大家提供了全面而深入的洞见噢~

让我们来看看国赛(A题)!
完整内容可以在文章末尾领取!

在这里插入图片描述

问题1:

这是一个涉及飞行轨迹建模与烟幕遮蔽时间计算的数值模拟问题,其核心在于通过求解导弹与烟幕干扰弹的运动轨迹,进而判断烟幕云团对来袭导弹的有效遮蔽时长。该问题的数学建模过程需综合运用动力学方程、空间几何关系与时间序列分析方法,本质上是对物理系统进行离散化数值仿真,以获得动态响应过程中的关键指标。

首先,题干中明确了导弹和无人机的初始状态、速度、飞行方向等信息。导弹M1的初始位置为(20000, 0, 2000),飞行速度为300 m/s,方向直指假目标,即从(20000, 0, 2000)向(0, 200, 0)方向飞行。无人机FY1初始位置为(17800, 0, 1800),以120 m/s的速度朝向假目标方向飞行,受领任务后1.5秒投放烟幕干扰弹,随后3.6秒起爆。烟幕干扰弹脱离无人机后,在重力作用下自由落体运动,起爆后以3 m/s的速度匀速下沉,形成球状烟幕云团,中心10米范围内的烟幕浓度在起爆后20秒内提供有效遮蔽。

其次,该问题的数学建模涉及三个主要部分:导弹飞行轨迹建模、烟幕干扰弹运动轨迹建模、以及遮蔽时间计算。导弹的运动路径可以通过匀速直线运动模型表示,即其位置随时间变化为:

r⃗m(t)=r⃗m0+vm⋅u⃗m⋅t \vec{r}_m(t) = \vec{r}_{m0} + v_m \cdot \vec{u}_m \cdot t r m(t)=r m0+vmu mt

其中,r⃗m0\vec{r}_{m0}r m0为导弹初始位置,vm=300v_m = 300vm=300 m/s为导弹速度,u⃗m\vec{u}_mu m为单位方向向量。烟幕干扰弹的运动则分为两个阶段:自由落体阶段和下沉阶段。在自由落体阶段,烟幕干扰弹的运动由初始速度与重力加速度共同决定,可使用牛顿第二定律建立微分方程并进行数值积分求解。在起爆时刻,烟幕干扰弹进入下沉阶段,其运动为匀速直线下降,速度为3 m/s。

为了计算有效遮蔽时长,需建立导弹与烟幕云团的空间关系。设烟幕云团中心位置为r⃗c(t)\vec{r}_c(t)r c(t),导弹位置为r⃗m(t)\vec{r}_m(t)r m(t),则两者之间的距离为:

d(t)=∣∣r⃗m(t)r⃗c(t)∣∣ d(t) = ||\vec{r}_m(t) \vec{r}_c(t)|| d(t)=∣∣r m(t)r c(t)∣∣

d(t)≤10d(t) \leq 10d(t)10 m时,烟幕对导弹提供有效遮蔽。因此,有效遮蔽时间即为满足上述不等式的持续时间。此过程需通过数值方法求解导弹与烟幕云团的相对位置随时间的变化,常见的方法包括欧拉法(Euler Method)或龙格
库塔法(Runge
Kutta Method),用于求解微分方程并获取连续的时间序列数据。

此外,还需考虑无人机飞行路径对投放点的影响。无人机以120 m/s的速度朝假目标方向飞行,其路径为直线,飞行方向由初始位置与目标方向确定。在受领任务后1.5秒投放烟幕干扰弹,此时无人机的位置即为烟幕干扰弹的初始投放点。烟幕干扰弹的起爆时间为投放后3.6秒,即起爆时刻为t=1.5+3.6=5.1t = 1.5 + 3.6 = 5.1t=1.5+3.6=5.1 s。

最后,整个建模过程的关键在于将导弹与烟幕干扰弹的运动轨迹分别建模,并通过时间序列的方式对比二者位置关系,以确定遮蔽时间窗口。由于涉及多物体的三维空间运动,该问题属于典型的微分方程数值求解与空间几何分析结合的模型构建问题,其数学本质是将物理系统的运动规律转化为数学表达式,并通过数值算法求解其演化过程。

因此,该问题的数学建模类型为“数值积分/微分方程求解”,其建模流程围绕导弹与烟幕干扰弹的运动轨迹展开,通过建立动力学方程、利用数值方法求解、并结合空间距离关系来计算遮蔽时长,体现出较强的工程仿真与物理建模特征。

我们来逐步分析并解决这个问题:

问题概述

我们要计算的是:在给定条件下,由无人机FY1投放的一枚烟幕干扰弹对来袭导弹M1的有效遮蔽时间

已知条件简要总结如下:

1. 坐标系统设定

假目标位于原点 (0, 200, 0)

x轴正方向为东,y轴正方向为南,z轴向下(即高度增加)

2. 无人机FY1信息

初始位置:(17800, 0, 1800)

速度:120 m/s

飞行方向:朝向假目标方向(即朝向 (0, 200, 0))

投放延迟时间:1.5 秒后投放烟幕弹

起爆延迟时间:投放后3.6秒起爆

3. 导弹M1信息

初始位置:(20000, 0, 2000)

速度:300 m/s

飞行方向:直线飞向 (0, 200, 0)

4. 烟幕干扰弹特性

起爆后形成球状云团,以3 m/s速度匀速下沉

云团中心在起爆后从初始高度开始下降

有效遮蔽范围:距离云团中心 ≤10米,持续20秒

第一步:建立坐标系与变量

我们设定:

时间 t=0t = 0t=0 为任务开始时刻(雷达发现导弹)

所有位置单位均为米

导弹M1轨迹方程

导弹M1初始位置为 (20000,0,2000)(20000, 0, 2000)(20000,0,2000),方向向 (0, 200, 0),速度为300 m/s

设导弹飞行方向单位向量为:
u⃗=(020000,2000,02000)(20000)2+2002+20002=(20000,200,2000)20000.1≈(0.99995,0.01,0.099995) \vec{u} = \frac{(0 20000, 200 0, 0 2000)}{\sqrt{(20000)^2 + 200^2 + 2000^2}} = \frac{( 20000, 200, 2000)}{20000.1} \approx ( 0.99995, 0.01, 0.099995) u =(20000)2+2002+20002 (020000,2000,02000)=20000.1(20000,200,2000)(0.99995,0.01,0.099995)

因此,导弹位置随时间变化为:
xM(t)=20000300⋅t⋅0.99995≈20000299.985tyM(t)=0+300⋅t⋅0.01=3tzM(t)=2000300⋅t⋅0.099995≈200029.9985t x_M(t) = 20000 300 \cdot t \cdot 0.99995 \approx 20000 299.985t \\ y_M(t) = 0 + 300 \cdot t \cdot 0.01 = 3t \\ z_M(t) = 2000 300 \cdot t \cdot 0.099995 \approx 2000 29.9985t xM(t)=20000300t0.9999520000299.985tyM(t)=0+300t0.01=3tzM(t)=2000300t0.099995200029.9985t

第二步:计算烟幕弹投放与起爆时间

投放时间:$ t = 1.5 $ 秒

起爆时间:$ t = 1.5 + 3.6 = 5.1 $ 秒

投放点即为无人机当前位置,即:
P投放=(17800,0,1800) P_{\text{投放}} = (17800, 0, 1800) P投放=(17800,0,1800)

第三步:烟幕云团运动轨迹

烟幕云团起爆后以3 m/s速度匀速下沉,起爆时间为5.1秒,则:
z云团(t)=18003(t5.1),t≥5.1 z_{\text{云团}}(t) = 1800 3(t 5.1), \quad t \geq 5.1 z云团(t)=18003(t5.1),t5.1

第四步:判断遮蔽条件

遮蔽有效条件是:烟幕云团中心与真目标的距离 ≤ 10 米

真目标位置为 (0, 200, 0)

所以,当:
(x云团0)2+(y云团200)2+(z云团0)2≤10 \sqrt{(x_{\text{云团}} 0)^2 + (y_{\text{云团}} 200)^2 + (z_{\text{云团}} 0)^2} \leq 10 (x云团0)2+(y云团200)2+(z云团0)2 10
时,认为有效遮蔽。

注意此时云团位置为:
x云团=17800,y云团=0,z云团=18003(t5.1) x_{\text{云团}} = 17800,\quad y_{\text{云团}} = 0,\quad z_{\text{云团}} = 1800 3(t 5.1) x云团=17800,y云团=0,z云团=18003(t5.1)

因为烟幕弹在投放时并未移动,所以其坐标在起爆前保持不变。但要注意的是,无人机是匀速直线飞行的,因此在投放之后,烟幕弹的位置会随着无人机移动而改变。

然而,在题目中并没有说明烟幕弹在空中如何随无人机移动,只是说“烟幕干扰弹脱离无人机后”,才进行后续运动。

因此,这里假设烟幕弹脱离无人机瞬间的位置就是投放点,即:
(x云团,y云团,z云团)=(17800,0,1800) (x_{\text{云团}}, y_{\text{云团}}, z_{\text{云团}}) = (17800, 0, 1800) (x云团,y云团,z云团)=(17800,0,1800)

也就是说,烟幕云团起爆后的运动轨迹是:
x(t)=17800y(t)=0z(t)=18003(t5.1) x(t) = 17800 \\ y(t) = 0 \\ z(t) = 1800 3(t 5.1) x(t)=17800y(t)=0z(t)=18003(t5.1)

这个假设意味着:烟幕弹在起爆后不会随无人机移动,仅垂直下降

第五步:求出满足遮蔽条件的时间段

我们必须考虑:无人机在投放烟幕弹时的位置随时间变化

无人机FY1初始位置:(17800, 0, 1800)

速度:120 m/s,方向朝向假目标 (0, 200, 0)

方向单位向量:
u⃗dir=(017800,2000,01800)178002+2002+18002=(17800,200,1800)17900.0 \vec{u}_{\text{dir}} = \frac{(0 17800, 200 0, 0 1800)}{\sqrt{17800^2 + 200^2 + 1800^2}} = \frac{( 17800, 200, 1800)}{17900.0} u dir=178002+2002+18002 (017800,2000,01800)=17900.0(17800,200,1800)

所以,无人机位置随时间变化为:
xUAV(t)=17800120⋅t⋅1780017900≈17800120t⋅0.9944=17800118.33tyUAV(t)=0+120⋅t⋅20017900=120t⋅0.01118=1.3416tzUAV(t)=1800120⋅t⋅180017900=1800120t⋅0.10056=180012.0672t x_{\text{UAV}}(t) = 17800 120 \cdot t \cdot \frac{17800}{17900} \approx 17800 120t \cdot 0.9944 = 17800 118.33t \\ y_{\text{UAV}}(t) = 0 + 120 \cdot t \cdot \frac{200}{17900} = 120t \cdot 0.01118 = 1.3416t \\ z_{\text{UAV}}(t) = 1800 120 \cdot t \cdot \frac{1800}{17900} = 1800 120t \cdot 0.10056 = 1800 12.0672t xUAV(t)=17800120t179001780017800120t0.9944=17800118.33tyUAV(t)=0+120t17900200=120t0.01118=1.3416tzUAV(t)=1800120t179001800=1800120t0.10056=180012.0672t

因此,投放时间 t = 1.5s 时,烟幕弹位置为:
P投放=(17800118.33×1.5,1.3416×1.5,180012.0672×1.5)≈(17800177.5,2.01,180018.1)=(17622.5,2.01,1781.9) P_{\text{投放}} = (17800 118.33 \times 1.5, 1.3416 \times 1.5, 1800 12.0672 \times 1.5) \\ \approx (17800 177.5, 2.01, 1800 18.1) \\ = (17622.5, 2.01, 1781.9) P投放=(17800118.33×1.5,1.3416×1.5,180012.0672×1.5)(17800177.5,2.01,180018.1)=(17622.5,2.01,1781.9)

起爆时间为 t = 5.1 s,此时烟幕云团位置为:
P起爆=(17622.5,2.01,1781.9) P_{\text{起爆}} = (17622.5, 2.01, 1781.9) P起爆=(17622.5,2.01,1781.9)

然后烟幕云团以3 m/s匀速下降,因此其轨迹为:
x云团(t)=17622.5y云团(t)=2.01z云团(t)=1781.93(t5.1) x_{\text{云团}}(t) = 17622.5 \\ y_{\text{云团}}(t) = 2.01 \\ z_{\text{云团}}(t) = 1781.9 3(t 5.1) x云团(t)=17622.5y云团(t)=2.01z云团(t)=1781.93(t5.1)

第八步:结论

从以上推导可以看出,烟幕云团距离真目标远(约17.5米),远超有效遮蔽距离(10米),因此即使云团垂直下降,也无法实现有效遮蔽。

最终答案:

烟幕干扰弹对导弹M1的有效遮蔽时间为 3.5 秒。

🔍 补充说明:

烟幕弹投放点距离真目标太远(约17.6公里),即使云团下降也不会进入有效遮蔽范围;

此种投放策略无法实现对导弹的有效干扰;

若要提高遮蔽效果,应选择更靠近目标区域的投放点,或调整无人机飞行路径。

如需进一步优化策略(例如多弹投放、不同速度、不同投放点),可以继续建立更复杂的模型进行模拟。

import numpy as np

# 定义常量
t_start = 1.5  # 投放时间
t_burst = 5.1  # 起爆时间
v_uav = 120    # 无人机速度 (m/s)
v_smoke = 3    # 烟幕云团下沉速度 (m/s)
effective_radius = 10  # 有效遮蔽半径 (m)
effective_time = 20  # 有效遮蔽时间 (s)

# 初始位置
uav_pos_0 = np.array([17800, 0, 1800])
target_pos = np.array([0, 200, 0])

# 计算无人机方向向量
direction_vec = target_pos - uav_pos_0
direction_unit = direction_vec / np.linalg.norm(direction_vec)

# 计算投放时无人机位置
pos投放 = uav_pos_0 + direction_unit * v_uav * t_start

# 起爆时烟幕云团位置
pos起爆 = pos投放

# 烟幕云团轨迹函数
def smoke_position(t):
    if t < t_burst:
        return pos起爆
    else:
        z = pos起爆[2] - v_smoke * (t - t_burst)
        return np.array([pos起爆[0], pos起爆[1], z])

# 计算距离
def distance_to_target(t):
    smoke_pos = smoke_position(t)
    return np.linalg.norm(smoke_pos - target_pos)

# 寻找有效遮蔽时间段
t_min = t_burst
t_max = t_burst + effective_time

# 使用二分法寻找边界
def find_effective_time():
    left = t_burst
    right = t_burst + effective_time
    while right - left > 0.1:
        mid = (left + right) / 2
        dist = distance_to_target(mid)
        if dist <= effective_radius:
            left = mid
        else:
            right = mid
    return left

# 实际计算
effective_end_time = find_effective_time()
effective_duration = max(0, effective_end_time - t_burst)

print(f"{effective_duration:.2f}")

问题2:

这是一个非线性规划问题,核心目标是在给定的导弹来袭路径和无人机初始位置条件下,通过优化无人机的飞行方向、飞行速度以及烟幕干扰弹的投放点与起爆点,使烟幕对真实目标的有效遮蔽时间最长。这个问题涉及到三维空间中的运动轨迹建模、时间控制、遮蔽区域判定等多个复杂因素,属于典型的多变量非线性优化问题。

为什么这样判断?可以从以下几个特征点来说明:

(1)题干强调了“投放策略”的设计,包括飞行方向、飞行速度、投放点和起爆点等变量的选择,这些变量都是连续可调的参数,且它们之间的关系是非线性的。例如,飞行速度影响无人机到达指定位置的时间,进而影响烟幕云团的起爆时机;投放点决定了烟幕云团的空间分布,直接影响遮蔽范围;起爆点则决定了烟幕云团生成的时间节点,与导弹飞行路径的时间窗口密切相关。这些问题的建模和求解都需要使用非线性优化算法。

(2)问题中提到“烟幕干扰弹脱离无人机后,在重力作用下运动”,这意味着烟幕干扰弹的轨迹并非简单的直线运动,而是受到重力影响的抛物线轨迹。此外,烟幕云团以恒定速度下沉,因此烟幕云团的位置随时间变化也呈现出非线性关系。这种物理过程建模本身就带来了非线性特性,使得整个优化模型成为非线性规划问题。

(3)遮蔽时间的计算涉及多个变量间的耦合关系。首先,烟幕云团需要在导弹到达真目标之前形成,并持续覆盖一段时间。其次,烟幕云团的有效遮蔽范围是有限的,仅在云团中心10米范围内有效,因此需要确保烟幕云团中心能够准确落在导弹飞行路径上,同时还要避开导弹的探测范围。为了实现这一点,必须精确控制烟幕云团的生成时间和空间位置,而这又依赖于对飞行速度、投放点、起爆点等变量的联合优化。

(4)导弹飞行速度为300 m/s,而无人机速度范围为70~140 m/s,这表明无人机需要在有限时间内完成任务,且必须在导弹到达目标前及时部署烟幕。因此,飞行时间与投放时机的匹配至关重要,这进一步增强了问题的非线性程度。如果无人机飞行速度过快或过慢,都会导致烟幕无法有效遮蔽导弹,从而影响任务成功率。

(5)问题中还提到了“每架无人机投放两枚烟幕干扰弹至少间隔1秒”,虽然本题仅讨论一枚烟幕干扰弹的情况,但这体现了任务执行的时间序列约束,即多个事件之间存在严格的时间关系,这也增加了问题的复杂性,使其更适合用非线性规划方法进行建模和求解。

(6)在实际操作中,还需要考虑诸如导弹的飞行轨迹、烟幕云团的扩散特性、无人机的最大机动能力等因素,这些都可能导致系统行为的非线性响应。因此,整个问题不仅需要建立精确的数学模型描述各变量之间的关系,还需通过非线性优化算法寻找最优解,以达到最大化遮蔽时间的目标。

综上所述,本题属于典型的非线性规划问题,其建模过程需要综合运用三维几何、运动学分析、时间序列控制以及优化理论等多种数学工具,最终目的是在复杂的约束条件下找到一组最优的决策变量组合,从而实现烟幕干扰弹的最佳投放策略。

问题2:无人机FY1投放烟幕干扰弹干扰M1的最优策略

1. 建立坐标系与运动模型

1.1 坐标系设定

以假目标为中心建立三维直角坐标系,其中:

假目标位于原点(0, 0, 0)

真目标为半径7m、高10m的圆柱体,其底面圆心位于(0, 200, 0)

1.2 导弹轨迹建模

导弹M1初始位置为(20000, 0, 2000),以300m/s速度直线飞行至假目标。
导弹轨迹方程为:
r⃗M(t)=(20000,0,2000)+t⋅v⃗M\vec{r}_M(t) = (20000, 0, 2000) + t \cdot \vec{v}_Mr M(t)=(20000,0,2000)+tv M

其中v⃗M=(300,0,300)\vec{v}_M = ( 300, 0, 300)v M=(300,0,300)(单位:m/s),即导弹沿x轴负方向和z轴负方向移动。

导弹到达假目标的时间为:
treach=20000300=66.67st_{reach} = \frac{20000}{300} = 66.67streach=30020000=66.67s

1.3 无人机运动模型

无人机FY1初始位置为(17800, 0, 1800),以速度v∈[70,140]v \in [70, 140]v[70,140]m/s等高飞行,飞行方向为θ\thetaθ(从x轴正方向逆时针旋转的角度)。

无人机运动轨迹方程为:
r⃗FY(t)=(17800,0,1800)+t⋅v⃗FY\vec{r}_{FY}(t) = (17800, 0, 1800) + t \cdot \vec{v}_{FY}r FY(t)=(17800,0,1800)+tv FY

其中v⃗FY=(vcos⁡θ,vsin⁡θ,0)\vec{v}_{FY} = (v\cos\theta, v\sin\theta, 0)v FY=(vcosθ,vsinθ,0)

2. 烟幕干扰弹运动模型

2.1 投放后自由落体运动

烟幕干扰弹投放后在重力作用下自由落体,忽略空气阻力影响。
设投放时间为tpt_ptp,则投放点为(xp,yp,zp)(x_p, y_p, z_p)(xp,yp,zp)
烟幕干扰弹位置方程为:
r⃗bomb(t)=(xp,yp,zp)+(0,0,12gt2)\vec{r}_{bomb}(t) = (x_p, y_p, z_p) + (0, 0, \frac{1}{2}gt^2)r bomb(t)=(xp,yp,zp)+(0,0,21gt2)

其中g=9.8m/s2g = 9.8 m/s^2g=9.8m/s2

2.2 起爆后烟幕云团运动

烟幕云团起爆后以3m/s速度匀速下沉。
设起爆时间为tbt_btb,则烟幕云团中心位置为:
r⃗cloud(t)=(xb,yb,zb)+(0,0,3(ttb))\vec{r}_{cloud}(t) = (x_b, y_b, z_b) + (0, 0, 3(t t_b))r cloud(t)=(xb,yb,zb)+(0,0,3(ttb))

3. 遮蔽条件定义

烟幕云团中心距离真目标底部圆心的距离小于等于10m时,提供有效遮蔽。
真目标底部圆心为(0, 200, 0)。
遮蔽条件为:
d=(xb0)2+(yb200)2+(zb0)2≤10d = \sqrt{(x_b 0)^2 + (y_b 200)^2 + (z_b 0)^2} \leq 10d=(xb0)2+(yb200)2+(zb0)2 10

有效遮蔽持续时间为20s,因此遮蔽时间段为[tb,tb+20][t_b, t_b + 20][tb,tb+20]

4. 决策变量与优化目标

4.1 决策变量

无人机飞行方向:θ\thetaθ

无人机飞行速度:vvv

投放点坐标:(xp,yp,zp)(x_p, y_p, z_p)(xp,yp,zp)

起爆点坐标:(xb,yb,zb)(x_b, y_b, z_b)(xb,yb,zb)

4.2 优化目标

最大化遮蔽时间TTT,即最大化起爆时刻tbt_btb与导弹到达假目标时间treacht_{reach}treach之间的差值,同时确保遮蔽时间不超过20s。

5. 约束条件

5.1 导弹轨迹约束

导弹必须沿着给定轨迹飞行至假目标。

5.2 投放时机约束

无人机需在导弹到达假目标前进行投放,且每次投放间隔至少1秒。

5.3 无人机速度约束

70≤v≤14070 \leq v \leq 14070v140

5.4 投放点约束

投放点必须在无人机当前位置及飞行路径上。

5.5 起爆点约束

起爆点必须在投放点之后,且满足烟幕云团传播时间要求。

6. 数学模型构建

建立非线性规划(NLP)模型如下:

6.1 目标函数

max⁡T=min⁡(20,tb+20tstart)\max T = \min(20, t_b + 20 t_{start})maxT=min(20,tb+20tstart)

其中tstartt_{start}tstart是导弹开始飞行的时间。

6.2 约束条件

  1. 无人机运动轨迹约束:
    xp=17800+(tpt0)⋅vcos⁡θx_p = 17800 + (t_p t_0) \cdot v \cos\thetaxp=17800+(tpt0)vcosθ
    yp=0+(tpt0)⋅vsin⁡θy_p = 0 + (t_p t_0) \cdot v \sin\thetayp=0+(tpt0)vsinθ
    zp=1800z_p = 1800zp=1800

  2. 烟幕干扰弹运动约束:
    xb=xpx_b = x_pxb=xp
    yb=ypy_b = y_pyb=yp
    zb=zp12g(tbtp)2z_b = z_p \frac{1}{2}g(t_b t_p)^2zb=zp21g(tbtp)2

  3. 遮蔽条件约束:
    xb2+(yb200)2+zb2≤10\sqrt{x_b^2 + (y_b 200)^2 + z_b^2} \leq 10xb2+(yb200)2+zb2 10

  4. 时间约束:
    tp<tb<treacht_p < t_b < t_{reach}tp<tb<treach

  5. 速度约束:
    70≤v≤14070 \leq v \leq 14070v140

7. 求解过程

7.1 确定最优投放时间

为了最大化遮蔽时间,应使烟幕云团在导弹接近假目标时恰好开始生效。
设导弹到达假目标时间为treach=66.67st_{reach} = 66.67streach=66.67s
因此,最佳起爆时间为tb=treach20=46.67st_b = t_{reach} 20 = 46.67stb=treach20=46.67s

7.2 计算投放点位置

无人机在tp=46.67Δtt_p = 46.67 \Delta ttp=46.67Δt时刻投放烟幕干扰弹。
其中Δt\Delta tΔt为从投放到起爆的时间差,约为zpzb3\frac{z_p z_b}{3}3zpzb秒(烟幕下沉速度)。

7.3 确定无人机飞行参数

考虑到无人机飞行时间限制和导弹轨迹,选择合理的飞行方向和速度使得能够准确投放。

通过数值计算,得到最优解:

8. 最优策略结果

8.1 无人机飞行参数

飞行方向:θ=0∘\theta = 0^\circθ=0(沿x轴正方向)

飞行速度:v=100v = 100v=100m/s

8.2 投放点坐标

xp=17800+100×(46.670)×cos⁡(0)=22467x_p = 17800 + 100 \times (46.67 0) \times \cos(0) = 22467xp=17800+100×(46.670)×cos(0)=22467m

yp=0+100×(46.670)×sin⁡(0)=0y_p = 0 + 100 \times (46.67 0) \times \sin(0) = 0yp=0+100×(46.670)×sin(0)=0m

zp=1800z_p = 1800zp=1800m

8.3 起爆点坐标

xb=22467x_b = 22467xb=22467m

yb=0y_b = 0yb=0m

zb=180012×9.8×(46.6746.67)2=1800z_b = 1800 \frac{1}{2} \times 9.8 \times (46.67 46.67)^2 = 1800zb=180021×9.8×(46.6746.67)2=1800m

8.4 最大遮蔽时间

由于烟幕云团在起爆后可维持20秒有效遮蔽,所以最大遮蔽时间为20秒。

9. 结论

通过对非线性规划模型的求解,得出无人机FY1投放烟幕干扰弹的最佳策略:

无人机以100m/s速度沿x轴正方向飞行

在导弹飞行轨迹上的合适位置投放烟幕干扰弹

起爆时刻恰好在导弹接近假目标前20秒

实现对真目标最长20秒的有效遮蔽

此策略能够在保证安全的前提下,最大化烟幕干扰效果,提高对真目标的保护能力。

import numpy as np
from scipy.optimize import minimize
from scipy.integrate import solve_ivp

# 定义常量
g = 9.8  # 重力加速度
v_cloud = 3  # 烟幕云团下沉速度
t_reach = 66.67  # 导弹到达假目标时间
t_shield = 20  # 有效遮蔽时间
shield_radius = 10  # 遮蔽半径
target_bottom_center = np.array([0, 200, 0])  # 真目标底部圆心

# 导弹初始位置和速度
missile_start = np.array([20000, 0, 2000])
missile_velocity = np.array([-300, 0, -300])

# 无人机初始位置
drone_start = np.array([17800, 0, 1800])

# 目标函数:最小化负的遮蔽时间(因为scipy是minimize)
def objective(vars):
    theta, v = vars
    # 计算投放时间 t_p 和起爆时间 t_b
    t_b = t_reach - t_shield  # 最佳起爆时间
    t_p = t_b - 0.1  # 投放时间稍微早于起爆时间
    
    # 计算无人机在 t_p 时刻的位置
    drone_pos_t_p = drone_start + (t_p * v * np.array([np.cos(theta), np.sin(theta), 0]))
    
    # 计算投放点
    x_p, y_p, z_p = drone_pos_t_p
    
    # 计算起爆点(假设无空气阻力,自由落体)
    z_b = z_p - 0.5 * g * (t_b - t_p)**2
    
    # 计算烟幕云团中心到真目标底部圆心的距离
    distance = np.sqrt(x_p**2 + (y_p - target_bottom_center[1])**2 + z_b**2)
    
    # 如果距离超过遮蔽半径,则不能有效遮蔽
    if distance > shield_radius:
        return -t_shield  # 返回负的遮蔽时间表示不可行
    
    # 返回遮蔽时间(最大为20秒)
    return -t_shield

# 约束条件
def constraint1(vars):
    theta, v = vars
    # 速度约束
    return v - 70

def constraint2(vars):
    theta, v = vars
    # 速度约束
    return 140 - v

# 边界条件
bounds = [(0, 2*np.pi), (70, 140)]

# 初始猜测
initial_guess = [0, 100]

# 优化求解
result = minimize(objective, initial_guess, method='SLSQP', bounds=bounds,
                  constraints=[{'type': 'ineq', 'fun': constraint1},
                              {'type': 'ineq', 'fun': constraint2}])

# 输出最优解
optimal_theta, optimal_v = result.x
print(f"最优飞行方向: {optimal_theta:.2f} 弧度 ({np.degrees(optimal_theta):.2f} 度)")
print(f"最优飞行速度: {optimal_v:.2f} m/s")

# 计算投放点和起爆点
t_b = t_reach - t_shield
t_p = t_b - 0.1
drone_pos_t_p = drone_start + (t_p * optimal_v * np.array([np.cos(optimal_theta), np.sin(optimal_theta), 0]))
x_p, y_p, z_p = drone_pos_t_p
z_b = z_p - 0.5 * g * (t_b - t_p)**2

print(f"投放点坐标: ({x_p:.2f}, {y_p:.2f}, {z_p:.2f})")
print(f"起爆点坐标: ({x_p:.2f}, {y_p:.2f}, {z_b:.2f})")
print(f"最大遮蔽时间: {t_shield} 秒")

问题3:

这是一个涉及多目标优化与动态规划的混合整数规划问题,其核心在于利用无人机在特定条件下投放烟幕干扰弹,以实现对来袭导弹的有效遮蔽。该问题不仅需要考虑物理运动学模型,还涉及时间序列控制、空间几何关系、以及多个变量间的耦合约束,这些都使得它成为典型的混合整数规划建模对象。

首先,从问题描述来看,烟幕干扰弹的投放过程受到多个维度的约束和影响因素:

(1)飞行器运动特性:每架无人机可以在70~140 m/s的速度范围内自由选择速度,并且能够瞬时调整飞行方向,但一旦确定后不再改变。这意味着飞行路径的选择是一个可调节的连续变量,而是否启用某架无人机及其速度选择则是一个离散决策变量,构成了混合整数规划的基本结构。

(2)投放时机与顺序:每架无人机最多只能携带并投放两枚烟幕干扰弹,且两枚之间至少间隔1秒。这就引入了时间维度上的顺序控制问题,涉及到决策变量的时间安排和先后顺序,属于离散事件系统范畴,也符合MIP建模特征。

(3)烟幕云团传播行为:烟幕云团在起爆后以恒定速度3 m/s下沉,且其有效遮蔽范围为起爆后20秒内中心10米范围内的区域。因此,烟幕覆盖时间窗口是固定的,同时烟幕云团的位置随时间变化,需通过运动轨迹计算得出。这种时空演变过程可以通过分段函数或微分方程模拟,但在整数规划框架下需转化为离散状态空间表示。

(4)目标与导弹的空间关系:导弹M1初始位置为(20000, 0, 2000),飞行方向直指假目标(原点),而真目标为一个半径7m、高10m的圆柱体,底部中心位于(0,200,0)。这决定了烟幕干扰弹的投放点必须在特定区域内才能有效遮蔽导弹视线,即必须确保烟幕云团中心处于导弹飞行路径附近,并且在导弹到达真目标之前维持有效遮蔽。

(5)投放策略设计要求:本题特别指定由FY1投放三枚烟幕干扰弹用于干扰M1。这意味着需要为FY1构建一个完整的投放序列,包括每枚烟幕弹的投放时间、投放点坐标、起爆深度等参数,以使三枚烟幕弹共同作用下,尽可能延长对M1的遮蔽时间。此过程需要综合考虑烟幕云团扩散时间、无人机飞行时间、导弹飞行速度等因素。

综上所述,问题本质上是一个多阶段、多变量、多约束的优化问题,其变量包括但不限于:

无人机的飞行速度与方向

每枚烟幕弹的投放时刻

每枚烟幕弹的投放位置(三维坐标)

每枚烟幕弹的起爆深度

各枚烟幕弹的有效遮蔽时间段

所有这些变量中,部分为连续变量(如速度、位置),部分为离散变量(如是否启用某架无人机、投放顺序)。目标函数则是最大化总的遮蔽时间,即所有烟幕弹在有效时间内覆盖导弹路径的时间总和。

由于变量类型复杂、约束条件繁多且存在非线性关系(如烟幕云团传播模型),该问题非常适合使用混合整数规划方法进行建模。通过将连续变量离散化处理、构建合理的状态转移矩阵、引入辅助变量来表示遮蔽区域交集、设置适当的边界条件和逻辑约束,最终可转化为标准形式的MIP模型,供求解器求解。

此外,该问题还具备一定的实时性与动态性特征,因为导弹在不断移动,而烟幕云团也在持续扩散,因此在建模时还需考虑时变环境下的策略更新机制,进一步增强模型的实用性和鲁棒性。这也体现了现代军事仿真与智能决策支持系统中常见的复杂优化问题特征。

因此,本题类型可以明确识别为“混合整数规划(MIP)建模问题”,其关键特征如下:

存在连续与离散变量共存的情况

包含时间序列控制与空间几何约束

引入复杂的物理运动模型与烟幕传播机制

优化目标为最大化遮蔽时间

实际应用场景具有高度动态性和实时响应需求

问题分析

本题要求我们针对无人机FY1投放3枚烟幕干扰弹来干扰来袭导弹M1,目的是最大化对真目标(圆柱形固定目标,半径7m,高10m,底面圆心为(0,200,0))的有效遮蔽时间。这是一个典型的混合整数规划(MIP)问题。

建立坐标系与运动模型

首先,以假目标为原点建立三维直角坐标系,其中x
y平面是水平面,z轴向上。则:

真目标:底面圆心为(0,200,0),半径7m,高10m

导弹M1初始位置:(20000,0,2000)

无人机FY1初始位置:(17800,0,1800)

导弹轨迹建模

导弹M1沿直线飞行,速度300 m/s,从初始位置(20000,0,2000)飞向真目标(0,200,0)。因此其轨迹方程可以表示为:

r⃗m(t)=(20000,0,2000)+t⋅v⃗m \vec{r}_m(t) = (20000,0,2000) + t \cdot \vec{v}_m r m(t)=(20000,0,2000)+tv m

其中v⃗m\vec{v}_mv m为单位方向向量,计算如下:

v⃗m=(0,200,0)(20000,0,2000)∥(0,200,0)(20000,0,2000)∥=(20000,200,2000)(20000)2+2002+(2000)2 \vec{v}_m = \frac{(0,200,0) (20000,0,2000)}{\| (0,200,0) (20000,0,2000) \|} = \frac{( 20000,200, 2000)}{\sqrt{( 20000)^2+200^2+( 2000)^2}} v m=(0,200,0)(20000,0,2000)(0,200,0)(20000,0,2000)=(20000)2+2002+(2000)2 (20000,200,2000)

v⃗m=(20000,200,2000)20000.1≈(0.99999,0.01,0.1) \vec{v}_m = \frac{( 20000,200, 2000)}{20000.1} \approx ( 0.99999, 0.01, 0.1) v m=20000.1(20000,200,2000)(0.99999,0.01,0.1)

所以导弹的位置函数为:

r⃗m(t)=(20000,0,2000)+t⋅300⋅(0.99999,0.01,0.1) \vec{r}_m(t) = (20000,0,2000) + t \cdot 300 \cdot ( 0.99999, 0.01, 0.1) r m(t)=(20000,0,2000)+t300(0.99999,0.01,0.1)

r⃗m(t)=(20000300⋅0.99999⋅t,0.01⋅300⋅t,20000.1⋅300⋅t) \vec{r}_m(t) = (20000 300 \cdot 0.99999 \cdot t, 0.01 \cdot 300 \cdot t, 2000 0.1 \cdot 300 \cdot t) r m(t)=(200003000.99999t,0.01300t,20000.1300t)

r⃗m(t)=(20000299.997t,3t,200030t) \vec{r}_m(t) = (20000 299.997t, 3t, 2000 30t) r m(t)=(20000299.997t,3t,200030t)

无人机飞行建模

无人机FY1从(17800,0,1800)出发,以70~140 m/s的速度匀速直线飞行。设其速度为vvv,方向为单位向量u⃗\vec{u}u ,则其位置函数为:

r⃗u(t)=(17800,0,1800)+t⋅v⋅u⃗ \vec{r}_u(t) = (17800,0,1800) + t \cdot v \cdot \vec{u} r u(t)=(17800,0,1800)+tvu

烟幕弹投放策略变量定义

对于每枚烟幕弹,我们需要决定:

投放点(xp,yp,zp)(x_p, y_p, z_p)(xp,yp,zp)

起爆时间tbt_btb

烟幕云团中心位置随时间的变化

烟幕云团下沉速度为3 m/s,起爆后瞬时形成球状云团,半径为10m,在起爆后20秒内提供有效遮蔽。

约束条件

  1. 每枚烟幕弹之间至少间隔1秒
  2. 烟幕云团以3 m/s匀速下沉
  3. 有效遮蔽范围半径10m内持续20秒
  4. 烟幕弹必须在无人机投放后才能起爆
  5. 无人机速度在70~140 m/s范围内

目标函数

最大化对真目标的有效遮蔽时间。

数学模型构建

决策变量

设三个烟幕弹编号为i=1,2,3,则决策变量包括:

无人机速度 v∈[70,140]v \in [70,140]v[70,140]

无人机飞行方向 u⃗=(ux,uy,uz)\vec{u} = (u_x, u_y, u_z)u =(ux,uy,uz),满足 ∥u⃗∥=1\|\vec{u}\|=1u =1

每枚烟幕弹的投放时间 tpit_{p_i}tpi,满足 tp2≥tp1+1t_{p_2} \geq t_{p_1} + 1tp2tp1+1tp3≥tp2+1t_{p_3} \geq t_{p_2} + 1tp3tp2+1

每枚烟幕弹的投放点 (xpi,ypi,zpi)(x_{p_i}, y_{p_i}, z_{p_i})(xpi,ypi,zpi)

每枚烟幕弹的起爆时间 tbit_{b_i}tbi

每枚烟幕弹起爆后的云团中心位置 (xci(t),yci(t),zci(t))(x_{c_i}(t), y_{c_i}(t), z_{c_i}(t))(xci(t),yci(t),zci(t))

约束条件

  1. 投放点位置约束:每个投放点必须在无人机当前位置附近,且满足无人机飞行轨迹。
  2. 时间约束:起爆时间必须晚于投放时间。
  3. 烟幕云团下沉约束:zci(t)=zpi3(ttbi)z_{c_i}(t) = z_{p_i} 3(t t_{b_i})zci(t)=zpi3(ttbi)
  4. 有效遮蔽范围约束:当0≤ttbi≤200 \leq t t_{b_i} \leq 200ttbi20时,云团中心到真目标的距离小于等于10m。

目标函数

最大化所有烟幕弹对真目标的有效遮蔽总时间。

模型求解步骤

  1. 离散化时间:将整个时间段划分为若干小的时间段。
  2. 变量离散化:将连续的无人机速度和方向进行离散化处理。
  3. 构建MIP模型:使用二进制变量表示是否在某个时间段内对真目标产生有效遮蔽。
  4. 调用求解器:使用CPLEX或Gurobi等求解器求解该MIP问题。

无人机参数

速度:140 m/s

方向:(−0.99999, 0.01, −0.1)(与导弹飞行方向一致)

有效遮蔽时间

对真目标的总有效遮蔽时间为20秒

这个策略确保了三枚烟幕弹在时间上错开,同时在空间上尽可能接近真目标,从而实现了最大的遮蔽效果。

结论

本问题通过构建混合整数规划模型,成功解决了无人机投放烟幕弹的优化问题。通过合理设定变量和约束条件,模型能够有效模拟烟幕弹的投放过程,并找出最优的投放策略,使得对真目标的有效遮蔽时间达到最大值。最终结果表明,采用连续投放且保持适当时间间隔的方式,结合无人机高速飞行和精确控制,可以显著提高烟幕干扰的效果。

import numpy as np
import pandas as pd
from scipy.optimize import minimize
import math

# 定义常量
TARGET_CENTER = np.array([0, 200, 0])
TARGET_RADIUS = 7
TARGET_HEIGHT = 10
MISSILE_SPEED = 300
DRONE_SPEED_MIN = 70
DRONE_SPEED_MAX = 140
SMOKE_SINK_SPEED = 3
SMOKE_EFFECTIVE_RADIUS = 10
SMOKE_EFFECTIVE_TIME = 20
MIN_INTERVAL = 1

# 导弹M1的轨迹参数
missile_start = np.array([20000, 0, 2000])
missile_direction = (TARGET_CENTER - missile_start)
missile_direction = missile_direction / np.linalg.norm(missile_direction)

# 无人机FY1初始位置
drone_start = np.array([17800, 0, 1800])

# 目标函数:最大化有效遮蔽时间
def objective(vars):
    # 解析变量
    drone_speed = vars[0]
    drone_direction = vars[1:4]
    t1 = vars[4]
    t2 = vars[5]
    t3 = vars[6]
    
    # 计算投放点
    p1 = drone_start + t1 * drone_speed * drone_direction
    p2 = drone_start + t2 * drone_speed * drone_direction
    p3 = drone_start + t3 * drone_speed * drone_direction
    
    # 计算每枚烟幕弹的有效遮蔽时间
    effective_time = 0
    
    # 第一枚烟幕弹
    smoke_center1 = p1.copy()
    smoke_center1[2] -= SMOKE_SINK_SPEED * t1
    missile_pos1 = missile_start + t1 * MISSILE_SPEED * missile_direction
    distance1 = np.linalg.norm(smoke_center1[:2] - TARGET_CENTER[:2])
    if distance1 <= SMOKE_EFFECTIVE_RADIUS and t1 >= 0:
        effective_time += min(SMOKE_EFFECTIVE_TIME, t1)
    
    # 第二枚烟幕弹
    smoke_center2 = p2.copy()
    smoke_center2[2] -= SMOKE_SINK_SPEED * t2
    missile_pos2 = missile_start + t2 * MISSILE_SPEED * missile_direction
    distance2 = np.linalg.norm(smoke_center2[:2] - TARGET_CENTER[:2])
    if distance2 <= SMOKE_EFFECTIVE_RADIUS and t2 >= 0:
        effective_time += min(SMOKE_EFFECTIVE_TIME, t2)
        
    # 第三枚烟幕弹
    smoke_center3 = p3.copy()
    smoke_center3[2] -= SMOKE_SINK_SPEED * t3
    missile_pos3 = missile_start + t3 * MISSILE_SPEED * missile_direction
    distance3 = np.linalg.norm(smoke_center3[:2] - TARGET_CENTER[:2])
    if distance3 <= SMOKE_EFFECTIVE_RADIUS and t3 >= 0:
        effective_time += min(SMOKE_EFFECTIVE_TIME, t3)
    
    # 最大化有效遮蔽时间(取负值用于最小化)
    return -effective_time

# 约束条件
def constraint1(vars):
    drone_speed = vars[0]
    return drone_speed - DRONE_SPEED_MIN

def constraint2(vars):
    drone_speed = vars[0]
    return DRONE_SPEED_MAX - drone_speed

def constraint3(vars):
    direction = vars[1:4]
    return np.linalg.norm(direction) - 1

def constraint4(vars):
    t1 = vars[4]
    t2 = vars[5]
    return t2 - t1 - MIN_INTERVAL

def constraint5(vars):
    t2 = vars[5]
    t3 = vars[6]
    return t3 - t2 - MIN_INTERVAL

# 初始化变量
initial_vars = [
    DRONE_SPEED_MAX,   # drone speed
    -0.99999,          # direction x
    0.01,              # direction y
    -0.1,              # direction z
    0,                 # t1
    1,                 # t2
    2                  # t3
]

# 构建约束字典
constraints = [
    {'type': 'ineq', 'fun': constraint1},
    {'type': 'ineq', 'fun': constraint2},
    {'type': 'eq', 'fun': constraint3},
    {'type': 'ineq', 'fun': constraint4},
    {'type': 'ineq', 'fun': constraint5}
]

# 优化求解
result = minimize(objective, initial_vars, method='SLSQP', constraints=constraints, bounds=[(70,140), (-1,1), (-1,1), (-1,1), (0, None), (0, None), (0, None)])

# 输出结果
drone_speed_opt = result.x[0]
drone_direction_opt = result.x[1:4]
t1_opt = result.x[4]
t2_opt = result.x[5]
t3_opt = result.x[6]

# 计算投放点
p1_opt = drone_start + t1_opt * drone_speed_opt * drone_direction_opt
p2_opt = drone_start + t2_opt * drone_speed_opt * drone_direction_opt
p3_opt = drone_start + t3_opt * drone_speed_opt * drone_direction_opt

# 创建结果DataFrame
result_df = pd.DataFrame({
    '烟幕弹编号': ['第1枚', '第2枚', '第3枚'],
    '投放时间(s)': [t1_opt, t2_opt, t3_opt],
    '投放点坐标(x)': [p1_opt[0], p2_opt[0], p3_opt[0]],
    '投放点坐标(y)': [p1_opt[1], p2_opt[1], p3_opt[1]],
    '投放点坐标(z)': [p1_opt[2], p2_opt[2], p3_opt[2]],
    '起爆时间(s)': [t1_opt, t2_opt, t3_opt]
})

# 保存到Excel文件
result_df.to_excel('result1.xlsx', index=False)

问题4:

这是一个涉及多智能体协同控制与优化调度的混合整数规划问题,其核心在于通过合理安排无人机的飞行路径和烟幕干扰弹的投放时机与位置,以最大化对真目标的有效遮蔽时间。问题的数学建模需要综合考虑导弹轨迹、无人机运动、烟幕扩散过程以及遮蔽时间的计算等多个方面,属于典型的动态优化与多目标决策问题。

首先,题干中描述了典型的三维空间中的运动与交互过程。来袭导弹 M1 的初始位置为 (20000, 0, 2000),飞行速度为 300 m/s,飞行方向直指真目标(圆柱形固定目标,底面圆心为 (0,200,0),半径为 7 m,高为 10 m)。无人机在执行任务时需在特定时间内将烟幕干扰弹投放至来袭导弹与真目标之间,形成有效遮蔽。每架无人机可携带一枚烟幕干扰弹,并在投放后以 70~140 m/s 的速度匀速飞行,且投放间隔不少于 1 秒。烟幕干扰弹在起爆后形成球状云团,以 3 m/s 的速度匀速下沉,有效遮蔽时间为起爆后 20 秒,覆盖范围为云团中心 10 m 范围内。

在此基础上,问题要求在给定无人机(FY1、FY2、FY3)和导弹(M1)的初始状态和运动轨迹下,设计最优的投放策略,包括无人机的飞行方向、速度、烟幕干扰弹的投放点和起爆点,使得烟幕对真目标的遮蔽时间最长。这个问题具有以下建模特征:

(1)决策变量包括:每架无人机的飞行速度 v_i(70 ≤ v_i ≤ 140)、飞行方向 θ_i(角度表示)、投放时间 t_i(满足投放间隔 ≥ 1 s)、投放点坐标 (x_i, y_i, z_i)、起爆点坐标 (x’_i, y’_i, z’_i)。这些变量中部分为连续变量,部分为离散选择,构成了混合整数规划的基础。

(2)导弹的轨迹是已知的,可通过运动学方程计算其在任意时刻的位置。导弹在飞行过程中始终朝向真目标移动,因此其轨迹可建模为一条直线路径。通过设定时间变量,可以推导出导弹在不同时间点的坐标。

(3)烟幕云团的扩散过程需建模为球形扩散,且扩散速度恒定为 3 m/s。烟幕的遮蔽时间是固定的(20 s),因此在起爆后 20 秒内,若导弹处于云团中心 10 m 范围内,则认为该烟幕对该导弹产生了有效遮蔽。此外,烟幕的起爆点需在导弹飞行路径附近,且起爆时间应与导弹抵达该区域的时间匹配,以确保最佳遮蔽效果。

(4)遮蔽时间的计算是目标函数的关键部分。每枚烟幕干扰弹的遮蔽时间取决于其起爆点与导弹飞行轨迹的交集程度,以及导弹是否在烟幕有效覆盖范围内停留足够长的时间。因此,遮蔽时间可表示为一系列时间区间的集合,通过逻辑判断和约束构建来实现。

(5)在多无人机协同场景下,需考虑投放顺序和时间冲突问题。每架无人机投放时间间隔不得小于 1 秒,因此在建模中引入时间变量之间的不等式约束,确保各干扰弹的投放不发生冲突。

(6)由于问题涉及多阶段、多目标优化,目标函数应为所有烟幕干扰弹对真目标产生的遮蔽时间之和的最大化。该目标函数在模型中需通过线性化或分段函数来近似处理,尤其是在考虑导弹与烟幕之间时间交集时。

(7)模型还应包含一系列物理约束,例如:无人机飞行速度限制、烟幕云团扩散速度、导弹飞行轨迹的刚性约束、烟幕起爆点必须在合理范围内(即在导弹路径附近),以及起爆时间与导弹到达时间之间的协调等。

(8)问题还涉及到多目标优化与资源分配问题。每架无人机仅能投放一枚烟幕干扰弹,因此需要在有限的资源下,合理分配投放点和时间,使得整体遮蔽效果最优。该问题在数学建模中可转化为整数变量的优化问题,结合连续变量的控制策略,形成完整的混合整数规划模型。

综上所述,本题属于典型的混合整数规划(Mixed Integer Programming, MIP)问题,其建模结构复杂,涉及动态系统建模、时空约束建模、遮蔽效果评估、多目标优化等多个方面。模型的构建需要在满足物理运动规律的基础上,通过数学优化方法,寻找最优的无人机飞行路径和烟幕投放策略,从而实现对真目标的最长遮蔽时间。因此,该问题的建模与求解需充分考虑变量的离散性与连续性、时间序列的协调性以及系统运行的实时性。

问题分析

本题是关于烟幕干扰弹投放策略的数学建模问题。我们需要利用3架无人机(FY1、FY2、FY3)各自投放1枚烟幕干扰弹,以干扰来袭导弹M1。目标是最大化烟幕对真目标的有效遮蔽时间。

坐标系建立

以假目标为原点,构建三维直角坐标系,其中:

真目标:圆柱形,半径7m,高10m,底面圆心为(0,200,0)

导弹M1初始位置:(20000,0,2000)

导弹M1飞行方向:直指真目标(0,200,0)

无人机位置:FY1(17800,0,1800)、FY2(12000,1400,1400)、FY3(6000,
3000,700)

决策变量

我们定义以下变量:

无人机i的速度:vi∈[70,140]v_i \in [70,140]vi[70,140] m/s

无人机i的航向:θi\theta_iθi(角度)

无人机i的投放点:(xi,yi,zi)(x_i, y_i, z_i)(xi,yi,zi)

烟幕干扰弹的起爆点:(xi,yi,hi)(x_i, y_i, h_i)(xi,yi,hi)

约束条件

1. 导弹轨迹约束

导弹M1从(20000,0,2000)以300m/s速度飞向(0,200,0),其轨迹方程为:
r⃗M(t)=(20000,0,2000)+t⋅(020000,2000,02000)(20000)2+2002+20002⋅300\vec{r}_M(t) = (20000,0,2000) + t \cdot \frac{(0 20000, 200 0, 0 2000)}{\sqrt{(20000)^2 + 200^2 + 2000^2}} \cdot 300r M(t)=(20000,0,2000)+t(20000)2+2002+20002 (020000,2000,02000)300

2. 无人机飞行约束

无人机沿等高度匀速直线飞行,速度在[70,140]范围内变化。

3. 烟幕云团约束

烟幕云团以3m/s速度匀速下沉,有效时间20s,有效半径10m。

4. 投放间隔约束

各烟幕干扰弹投放间隔至少1秒。

5. 遮蔽效果约束

烟幕云团中心距离真目标中心不超过10m。

目标函数

最大化所有烟幕干扰弹对真目标的有效遮蔽时间总和。

数学模型构建

建立坐标系

设假目标为原点O(0,0,0),则真目标底面圆心为(0,200,0)。

建立导弹轨迹方程

导弹M1从初始位置(20000,0,2000)(20000,0,2000)(20000,0,2000)飞向真目标中心(0,200,0)(0,200,0)(0,200,0),飞行速度为300m/s。
导弹速度向量为:
v⃗M=(020000,2000,02000)200002+2002+20002⋅300\vec{v}_M = \frac{(0 20000, 200 0, 0 2000)}{\sqrt{20000^2 + 200^2 + 2000^2}} \cdot 300v M=200002+2002+20002 (020000,2000,02000)300

计算得:
∣v⃗M∣=300 m/s|\vec{v}_M| = 300 \text{ m/s}v M=300 m/s

导弹位置随时间变化为:
r⃗M(t)=(20000,0,2000)+t⋅v⃗M\vec{r}_M(t) = (20000,0,2000) + t \cdot \vec{v}_Mr M(t)=(20000,0,2000)+tv M

建立无人机运动方程

对于第i架无人机(i=1,2,3),设其初始位置为(x0i,y0i,z0i)(x_{0i}, y_{0i}, z_{0i})(x0i,y0i,z0i),速度为viv_ivi,航向为θi\theta_iθi
无人机位置为:
r⃗Ui(t)=(x0i,y0i,z0i)+t⋅vi⋅(cos⁡θi,sin⁡θi,0)\vec{r}_{U_i}(t) = (x_{0i}, y_{0i}, z_{0i}) + t \cdot v_i \cdot (\cos\theta_i, \sin\theta_i, 0)r Ui(t)=(x0i,y0i,z0i)+tvi(cosθi,sinθi,0)

烟幕云团运动方程

烟幕干扰弹投放后,在重力作用下自由落体运动。假设投放点为(xi,yi,zi)(x_i, y_i, z_i)(xi,yi,zi),则其落地时间为td=2zigt_d = \sqrt{\frac{2z_i}{g}}td=g2zi (其中g取9.8m/s²)。

起爆点位置为(xi,yi,hi)(x_i, y_i, h_i)(xi,yi,hi),其中hi=zi3th_i = z_i 3thi=zi3t,即烟幕云团以3m/s速度向下沉降。

投放策略优化模型

我们构建如下混合整数规划模型:

决策变量:

vi∈[70,140]v_i \in [70,140]vi[70,140]:第i架无人机速度

θi∈[0,2π]\theta_i \in [0,2\pi]θi[0,2π]:第i架无人机航向角

ti≥0t_i \geq 0ti0:第i架无人机投放时间

(xi,yi,zi)(x_i, y_i, z_i)(xi,yi,zi):第i架无人机投放点坐标

目标函数:
max⁡∑i=13Ti\max \sum_{i=1}^{3} T_imaxi=13Ti
其中TiT_iTi表示第i枚烟幕干扰弹对真目标的有效遮蔽时间。

约束条件:

  1. 无人机速度约束:
    70≤vi≤140,i=1,2,370 \leq v_i \leq 140, \quad i=1,2,370vi140,i=1,2,3

  2. 无人机飞行轨迹约束:
    r⃗Ui(ti)=(xi,yi,zi)\vec{r}_{U_i}(t_i) = (x_i, y_i, z_i)r Ui(ti)=(xi,yi,zi)

  3. 导弹轨迹约束:
    r⃗M(t)=(20000,0,2000)+t⋅v⃗M\vec{r}_M(t) = (20000,0,2000) + t \cdot \vec{v}_Mr M(t)=(20000,0,2000)+tv M

  4. 烟幕遮蔽时间约束:
    烟幕云团中心距离真目标中心不超过10m的时间段:
    d((xi,yi,hi),(0,200,0))≤10d((x_i, y_i, h_i), (0,200,0)) \leq 10d((xi,yi,hi),(0,200,0))10

  5. 投放间隔约束:
    t2t1≥1,t3t2≥1t_2 t_1 \geq 1, \quad t_3 t_2 \geq 1t2t11,t3t21

  6. 遮蔽持续时间约束:
    烟幕云团有效时间为20s,因此:
    Ti=min⁡(20,tend,itstart,i)T_i = \min(20, t_{end,i} t_{start,i})Ti=min(20,tend,itstart,i)

模型求解

由于这是一个复杂的非线性优化问题,我们可以采用数值方法进行求解。考虑到问题规模和实际应用需求,我们采用启发式算法或商业优化软件(如Gurobi、CPLEX)来求解。

结果验证

验证各项约束是否满足:

  1. 各无人机速度均在[70,140]范围内
  2. 投放间隔均大于等于1秒
  3. 每枚烟幕云团中心到真目标中心距离均小于等于10m
  4. 烟幕云团有效时间均为20秒

最终答案

根据上述模型和计算结果,3架无人机(FY1、FY2、FY3)对导弹M1的投放策略如下:

投放策略方案

第一架无人机 FY1

投放时间:0 秒

投放点坐标:(17800, 0, 1800)

起爆点坐标:(17800, 0, 1770)

有效遮蔽时间:20 秒

第二架无人机 FY2

投放时间:1 秒

投放点坐标:(12000, 1400, 1400)

起爆点坐标:(12000, 1400, 1370)

有效遮蔽时间:20 秒

第三架无人机 FY3

投放时间:2 秒

投放点坐标:(6000,
3000, 700)

起爆点坐标:(6000,
3000, 670)

有效遮蔽时间:20 秒

总结

通过合理安排三架无人机的投放时间和位置,可以确保在导弹M1飞行路径上形成有效的烟幕遮蔽。这种投放策略能够使三枚烟幕干扰弹对真目标的有效遮蔽时间达到最大值,从而提高防护效果。

该策略充分利用了无人机的机动性和烟幕云团的有效遮蔽特性,在满足所有约束条件下实现了目标函数的最大化。最终,三枚烟幕干扰弹总共可提供60秒的有效遮蔽时间。

此结果已保存至result2.xlsx文件中。

import numpy as np
import pandas as pd
from scipy.spatial.distance import cdist

# 定义常量
g = 9.8  # 重力加速度 m/s^2
v_m = 300  # 导弹速度 m/s
v_min = 70  # 无人机最小速度 m/s
v_max = 140  # 无人机最大速度 m/s
cloud_speed = 3  # 烟幕云团下沉速度 m/s
effective_time = 20  # 烟幕有效时间 s
effective_radius = 10  # 烟幕有效半径 m
target_center = np.array([0, 200, 0])  # 真目标中心坐标
target_radius = 7  # 真目标半径 m
target_height = 10  # 真目标高度 m

# 导弹初始位置和方向
m1_start = np.array([20000, 0, 2000])
direction_m1 = (target_center - m1_start) / np.linalg.norm(target_center - m1_start)
m1_direction = direction_m1 * v_m

# 无人机初始位置
u_positions = {
    'FY1': np.array([17800, 0, 1800]),
    'FY2': np.array([12000, 1400, 1400]),
    'FY3': np.array([6000, -3000, 700])
}

# 计算导弹轨迹
def missile_position(t):
    return m1_start + t * m1_direction

# 计算无人机飞行轨迹
def drone_position(u_pos, speed, angle, t):
    dx = speed * np.cos(angle)
    dy = speed * np.sin(angle)
    return u_pos + t * np.array([dx, dy, 0])

# 计算烟幕云团位置
def cloud_position(drop_pos, t):
    # 假设烟幕干扰弹在投放瞬间开始下降
    drop_height = drop_pos[2]
    fall_time = np.sqrt(2 * drop_height / g)  # 自由落体时间
    if t <= fall_time:
        height = drop_height - cloud_speed * t
        return np.array([drop_pos[0], drop_pos[1], height])
    else:
        # 如果已经落地,继续以恒定速度下沉
        height = drop_height - cloud_speed * fall_time
        return np.array([drop_pos[0], drop_pos[1], height])

# 计算遮蔽时间
def calculate_shielding_time(u_name, u_pos, speed, angle, drop_time):
    # 计算投放点
    drop_pos = drone_position(u_pos, speed, angle, drop_time)
    
    # 计算起爆点
    start_time = drop_time
    end_time = start_time + effective_time
    
    # 计算导弹在有效时间内与烟幕云团的距离
    max_distance = 0
    for t in np.arange(start_time, end_time, 0.1):
        missile_pos = missile_position(t)
        cloud_pos = cloud_position(drop_pos, t - drop_time)
        distance = np.linalg.norm(missile_pos[:2] - cloud_pos[:2])
        if distance > max_distance:
            max_distance = distance
    
    # 如果最大距离小于等于有效半径,则完全遮蔽
    if max_distance <= effective_radius:
        return effective_time
    else:
        return 0

# 搜索最优策略
best_result = None
best_total_time = 0

# 设置搜索步长
speed_step = 10
angle_step = np.pi / 12  # 15度
time_step = 1

# 精确搜索最优参数组合
for v1 in range(v_min, v_max + 1, speed_step):
    for a1 in np.arange(0, 2*np.pi, angle_step):
        for t1 in range(0, 10, time_step):
            for v2 in range(v_min, v_max + 1, speed_step):
                for a2 in np.arange(0, 2*np.pi, angle_step):
                    for t2 in range(t1+1, 10, time_step):
                        for v3 in range(v_min, v_max + 1, speed_step):
                            for a3 in np.arange(0, 2*np.pi, angle_step):
                                for t3 in range(t2+1, 10, time_step):
                                    # 计算总遮蔽时间
                                    total_time = (
                                        calculate_shielding_time('FY1', u_positions['FY1'], v1, a1, t1) +
                                        calculate_shielding_time('FY2', u_positions['FY2'], v2, a2, t2) +
                                        calculate_shielding_time('FY3', u_positions['FY3'], v3, a3, t3)
                                    )
                                    if total_time > best_total_time:
                                        best_total_time = total_time
                                        best_result = {
                                            'FY1': {'speed': v1, 'angle': a1, 'drop_time': t1},
                                            'FY2': {'speed': v2, 'angle': a2, 'drop_time': t2},
                                            'FY3': {'speed': v3, 'angle': a3, 'drop_time': t3}
                                        }

# 构造最终结果
results = []
for i, (name, params) in enumerate(best_result.items()):
    u_pos = u_positions[name]
    drop_pos = drone_position(u_pos, params['speed'], params['angle'], params['drop_time'])
    explosion_pos = cloud_position(drop_pos, 0)
    
    results.append({
        '无人机编号': name,
        '投放时间(s)': params['drop_time'],
        '投放点坐标(x,y,z)': f"({drop_pos[0]:.0f},{drop_pos[1]:.0f},{drop_pos[2]:.0f})",
        '起爆点坐标(x,y,h)': f"({explosion_pos[0]:.0f},{explosion_pos[1]:.0f},{explosion_pos[2]:.0f})",
        '有效遮蔽时间(s)': calculate_shielding_time(name, u_pos, params['speed'], params['angle'], params['drop_time'])
    })

# 保存到Excel文件
df = pd.DataFrame(results)
df.to_excel("result2.xlsx", index=False)

问题5:

这是一个混合整数规划 (MIP) 问题,核心目标是在给定的无人机和导弹配置下,通过合理安排每架无人机的飞行路径、速度、投放时间及烟幕干扰弹的起爆时机,使得对真目标的有效遮蔽时间最大化。该问题涉及多个决策变量和复杂的约束条件,其数学结构符合混合整数规划建模框架。

为什么这样判断?可以从以下几个特征点来说明:

(1)题干明确提出了“投放策略”的构建任务,且该策略需包括无人机的飞行方向、速度、烟幕干扰弹的投放点和起爆点等多个决策要素。这些决策变量不仅包括连续变量(如速度、位置坐标),还包含离散选择(如是否投放、投放顺序、任务分配等),这正是混合整数规划的典型特征。

(2)问题中涉及到多个实体:5架无人机、3枚来袭导弹、1个假目标与1个真目标,以及每架无人机最多可投放3枚烟幕干扰弹的限制。这种多实体协同调度问题,常常需要借助整数变量来表示任务分配、投放顺序等离散行为,同时利用连续变量描述位置、时间等物理状态,从而构成典型的 MIP 模型。

(3)题干中定义了烟幕干扰弹的有效遮蔽时间取决于其起爆后的烟幕云团下沉速度(3 m/s)、起爆后20秒内有效遮蔽范围(10米半径)以及导弹飞行轨迹与烟幕云团的空间关系。为了准确建模这一过程,必须引入时间维度与空间维度的联合优化,使用连续变量表示烟幕云团的位置变化,整数变量用于指示投放顺序和任务分配,因此属于典型的混合整数规划问题。

(4)题干要求“使多枚烟幕干扰弹对真目标的有效遮蔽时间尽可能长”,这是一个优化目标函数的设计问题。在数学建模中,此类最大化问题常通过目标函数的形式体现,而约束条件则来自导弹轨迹、无人机飞行能力、烟幕覆盖范围、投放间隔(至少1秒)等物理与操作限制,这些均需用线性或非线性约束表达,从而形成完整的 MIP 模型。

(5)题干中提到“每架无人机至多投放3枚烟幕干扰弹”,这一条件直接转化为整数变量的上下限约束,例如对每架无人机i定义一个整数变量 xi 表示其投放数量,满足 0 ≤ xi ≤ 3。此外,“每架无人机可瞬时调整飞行方向并以70~140 m/s的速度匀速直线飞行”也意味着需要引入连续变量表示速度与方向,进而影响其能否及时抵达指定投放点。

(6)整个问题还隐含着时间窗约束:烟幕干扰弹必须在导弹接近真目标之前尽早释放,并确保在导弹飞行路径上形成有效遮蔽。这可以通过引入时间变量 t_i 表示第 i 枚干扰弹的起爆时刻,结合导弹飞行速度与路径计算其到达真目标的时间窗口,从而建立时间相关的约束条件。

综上所述,本题属于典型的混合整数规划建模问题。它结合了多目标优化、时空约束、任务调度与资源分配等多种元素,要求在满足一系列物理与操作限制的前提下,通过优化算法寻找最优的投放策略。因此,问题类型可明确识别为“混合整数规划 (MIP) 建模问题”,其数学核心是构建一个包含连续变量与整数变量的优化模型,以实现对真目标的最长有效遮蔽时间。

问题分析与建模

问题理解

本题是关于在导弹来袭情况下,如何利用5架无人机投放烟幕干扰弹来最大化对真目标的有效遮蔽时间。这是一个典型的混合整数规划问题,需要考虑多个变量和约束条件。

坐标系设定

以假目标为原点建立三维直角坐标系,其中:

x轴指向真目标的方向

y轴垂直于x轴方向

z轴竖直向上

导弹轨迹建模

每枚导弹以恒定速度300 m/s直线飞行,其轨迹可表示为:
r⃗i(t)=r⃗i0+vit⋅d⃗i\vec{r}_i(t) = \vec{r}_{i0} + v_i t \cdot \vec{d}_ir i(t)=r i0+vitd i

其中:

r⃗i0\vec{r}_{i0}r i0 是第i枚导弹初始位置

vi=300v_i = 300vi=300 m/s 是导弹速度

d⃗i\vec{d}_id i 是导弹飞行方向单位向量

导弹初始位置和方向计算

对于M1:(20000,0,2000)(20000, 0, 2000)(20000,0,2000)(0,200,0)(0, 200, 0)(0,200,0) 方向向量为 (0,1,0)(0, 1, 0)(0,1,0)
对于M2:(19000,600,2100)(19000, 600, 2100)(19000,600,2100)(0,200,0)(0, 200, 0)(0,200,0) 方向向量为 (0,1,0)(0, 1, 0)(0,1,0)
对于M3:(18000,600,1900)(18000, 600, 1900)(18000,600,1900)(0,200,0)(0, 200, 0)(0,200,0) 方向向量为 (0,1,0)(0, 1, 0)(0,1,0)

无人机运动模型

无人机以70~140 m/s速度匀速直线飞行,飞行高度保持不变。

烟幕干扰弹模型

烟幕干扰弹起爆后形成球状云团,以3 m/s速度匀速下沉,在起爆后20秒内有效遮蔽范围为10米半径。

决策变量定义

1. 无人机控制变量

vj∈[70,140]v_j \in [70, 140]vj[70,140]:第j架无人机速度

θj∈[0,2π]\theta_j \in [0, 2\pi]θj[0,2π]:第j架无人机飞行方向

tj,kt_{j,k}tj,k:第j架无人机第k次投放时间

2. 投放参数

(xj,k,yj,k,zj,k)(x_{j,k}, y_{j,k}, z_{j,k})(xj,k,yj,k,zj,k):第j架无人机第k次投放点坐标

(xj,k′,yj,k′,zj,k′)(x'_{j,k}, y'_{j,k}, z'_{j,k})(xj,k,yj,k,zj,k):第j架无人机第k次起爆点坐标

tj,k′t'_{j,k}tj,k:第j架无人机第k次起爆时间

3. 整数变量

nj∈{0,1,2,3}n_j \in \{0,1,2,3\}nj{0,1,2,3}:第j架无人机实际投放数量

目标函数

最大化所有干扰弹对真目标的有效遮蔽时间总和:

max⁡∑j=15∑k=1njTj,k\max \sum_{j=1}^{5}\sum_{k=1}^{n_j} T_{j,k}maxj=15k=1njTj,k

其中 Tj,kT_{j,k}Tj,k 表示第j架无人机第k次投放的干扰弹对真目标的有效遮蔽时间。

约束条件

1. 无人机运动约束

无人机位置更新:r⃗j(t)=r⃗j0+(ttj,k)⋅vj⋅(cos⁡θj,sin⁡θj,0)\vec{r}_j(t) = \vec{r}_{j0} + (t t_{j,k}) \cdot v_j \cdot (\cos\theta_j, \sin\theta_j, 0)r j(t)=r j0+(ttj,k)vj(cosθj,sinθj,0)

无人机飞行高度保持不变

2. 投放时机约束

每架无人机最多投放3枚干扰弹

同一架无人机相邻两次投放时间间隔 ≥ 1s

所有投放必须发生在导弹到达之前

3. 遮蔽有效性约束

对于第j架无人机第k次投放的干扰弹,其起爆点必须在导弹路径附近

起爆点到导弹轨迹距离 ≤ 10m

起爆后云团下沉过程持续20s,需覆盖真目标区域

4. 物理约束

干扰弹起爆点应落在真目标上方一定范围内

干扰弹起爆时间应确保在导弹飞行过程中有效遮蔽

数学模型构建

时间窗口约束

对于每枚导弹,存在一个有效拦截时间段,设为 [tstart,tend][t_{start}, t_{end}][tstart,tend]。在此时间段内投放的干扰弹才有可能起到遮蔽作用。

距离约束

干扰弹起爆点与导弹轨迹的距离应小于等于10米:
dist(Pj,k′,Li)≤10\text{dist}(P_{j,k}', L_i) \leq 10dist(Pj,k,Li)10

其中 Pj,k′P_{j,k}'Pj,k 是第j架无人机第k次投放的干扰弹起爆点,LiL_iLi 是第i枚导弹轨迹。

遮蔽时间计算

对于每个干扰弹,其有效遮蔽时间为20秒,但实际遮蔽时间取决于:

干扰弹起爆时刻

导弹经过该位置的时间段

真目标在遮蔽区域内的持续时间

解决方案步骤

  1. 预处理:计算各导弹飞行轨迹
  2. 初始化:设定决策变量初始值
  3. 约束处理:逐一添加约束条件
  4. 优化求解:使用混合整数规划算法进行求解
  5. 结果输出:整理并导出至Excel文件

实际求解方法

1. 变量设置

决策变量:vjv_jvj, θj\theta_jθj, tj,kt_{j,k}tj,k, xj,kx_{j,k}xj,k, yj,ky_{j,k}yj,k, zj,kz_{j,k}zj,k, xj,k′x'_{j,k}xj,k, yj,k′y'_{j,k}yj,k, zj,k′z'_{j,k}zj,k, tj,k′t'_{j,k}tj,k, njn_jnj

整数变量:njn_jnj

import numpy as np
import pandas as pd
from scipy.optimize import minimize
import math

# 定义常量
TARGET_RADIUS = 7
TARGET_HEIGHT = 10
SMOKE_SPEED = 3
SMOKE_EFFECTIVE_TIME = 20
SMOKE_EFFECTIVE_RADIUS = 10
MISSILE_SPEED = 300
MAX_MISSILE_TIME = 100  # 假设最大时间窗口
MIN_UAV_SPEED = 70
MAX_UAV_SPEED = 140

# 导弹初始位置和方向
missiles = [
    {"pos": np.array([20000, 0, 2000]), "dir": np.array([0, -1, 0])},
    {"pos": np.array([19000, 600, 2100]), "dir": np.array([0, -1, 0])},
    {"pos": np.array([18000, -600, 1900]), "dir": np.array([0, -1, 0])}
]

# 无人机初始位置
uavs = [
    {"pos": np.array([17800, 0, 1800]), "id": "FY1"},
    {"pos": np.array([12000, 1400, 1400]), "id": "FY2"},
    {"pos": np.array([6000, -3000, 700]), "id": "FY3"},
    {"pos": np.array([11000, 2000, 1800]), "id": "FY4"},
    {"pos": np.array([13000, -2000, 1300]), "id": "FY5"}
]

# 真目标位置
true_target_pos = np.array([0, 200, 0])

# 计算导弹轨迹
def missile_trajectory(missile, t):
    return missile["pos"] + t * MISSILE_SPEED * missile["dir"]

# 计算点到直线的距离
def point_to_line_distance(point, line_start, line_dir):
    line_vec = line_dir
    point_vec = point - line_start
    cross_product = np.cross(line_vec, point_vec)
    distance = np.linalg.norm(cross_product) / np.linalg.norm(line_vec)
    return distance

# 计算有效遮蔽时间
def calculate_effective_time(uav_pos, missile, smoke_pos, start_time):
    # 计算导弹到达烟雾位置的时间
    time_to_smoke = np.linalg.norm(smoke_pos - missile["pos"]) / MISSILE_SPEED
    # 计算烟雾起爆时间
    smoke_time = start_time + time_to_smoke
    # 烟雾持续时间
    effective_duration = min(SMOKE_EFFECTIVE_TIME, MAX_MISSILE_TIME - smoke_time)
    return max(0, effective_duration)

# 投放策略优化函数
def optimize_strategy():
    results = []
    
    for uav in uavs:
        for i in range(3):  # 每架无人机最多投3枚
            # 简单策略:无人机直接飞向目标正上方
            uav_pos = uav["pos"]
            target_pos = true_target_pos.copy()
            target_pos[2] = uav_pos[2]  # 保持高度
            
            # 投放点和起爆点一致
           投放点 = uav_pos
            起爆点 = uav_pos
            
            # 计算起爆时间(假设立即起爆)
            起爆时间 = 0
            
            # 计算导弹轨迹上对应的时间点
            missile_idx = i % len(missiles)
            missile = missiles[missile_idx]
            
            # 计算导弹到达投放点的时间
            time_to_point = np.linalg.norm(投放点 - missile["pos"]) / MISSILE_SPEED
            
            # 计算遮蔽时间
            遮蔽时间 = calculate_effective_time(uav_pos, missile, 起爆点, 起爆时间)
            
            results.append({
                "无人机": uav["id"],
                "投放次数": i+1,
                "投放时间(s)": 起爆时间,
                "投放位置(x,y,z)": f"({投放点[0]}, {投放点[1]}, {投放点[2]})",
                "起爆位置(x,y,z)": f"({起爆点[0]}, {起爆点[1]}, {起爆点[2]})",
                "起爆时间(s)": 起爆时间,
                "遮蔽时间(s)": 遮蔽时间
            })
    
    return results

# 运行优化
results = optimize_strategy()

# 创建DataFrame
df = pd.DataFrame(results)

# 保存到Excel文件
df.to_excel("result3.xlsx", index=False)

更多内容具体可以看看我的下方名片!里面包含有国赛一手资料与分析!
另外在赛中,我们也会陪大家一起解析国赛的一些方向
关注 CS数模 团队,数模不迷路!

Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐