MCM520 ← 资料站首页 烟幕干扰弹的投放策略(2025 国赛 A)优秀范文(二) 打开交互阅读器 →

烟幕干扰弹的投放策略(2025 国赛 A)优秀范文(二)

视角:离散选址优化(候选离散化 + 贪心 / 遗传算法最小暴露)。与范文一"解析烟团 + 烟帘设计"互补,本文把投放问题提升为在有限弹药约束下的最优布点—时序搜索。

摘要

在范文一建立的高斯烟团浓度场基础上,本文进一步将烟幕投放抽象为一个离散选址优化问题:把投弹的纬度位置 yy 与释放时刻 τ\tau 离散为候选网格,以二维保护区 RR 的"时间—空间积分覆盖率" JJ 作为暴露度量,目标是选出 KK 个布点使 JJ 最大(即残差暴露最小)。我们分别采用贪心增量法与遗传算法(GA)求解,并给出"发数 KK—效能 JJ"的代价—效能前沿。数值结果表明:8 发弹药若朴素地全部堆在同一点同时释放,积分覆盖率仅 J=0.0852J=0.0852;经贪心优化后升至 J=0.2149J=0.2149(约 2.5 倍),GA 进一步达 J=0.2180J=0.2180。代价—效能前沿显示,优化方案的 JJ 随 KK 由 2 增至 10 从 0.0666 单调上升到 0.2283,而朴素方案始终在 0.045–0.089 间徘徊,说明优化让每发弹药都"用在刀刃上"。蒙特卡洛(800 风场扰动情景)下优化方案 JJ 均值 0.1883、标准差 0.0395,始终维持在朴素水平的 2.5 倍以上;风场敏感性分析揭示风速是主导因素——弱风(3 m/s)下驻留更久、覆盖率最高可达 0.3192,强风(7 m/s)下烟幕快速掠过、覆盖率降至约 0.10,提示强风条件下须增弹或调整时序。

一、问题重述

赛题要求在关键时段、关键空域构筑有效烟幕屏障,以干扰敌方光电 / 红外探测与制导。范文一已从物理上刻画了单发烟团的扩散—输运与视场遮蔽率;但"具体在何处、何时投下每一发弹"仍是一个决策问题。本文聚焦该决策层:在携弹数量受限的前提下,如何从可行的布点—时序组合中,选出使被掩护区域暴露最小(覆盖最大)的方案,并量化其在风场不确定性下的稳健性。

二、模型假设

  1. 浓度场沿用范文一:单发高斯烟团随风平流、扩散尺度 σ(t)=σ0+κt−τ\sigma(t)=\sigma_0+\kappa\sqrt{t-\tau},多弹线性叠加。
  2. 投弹点固定在上风侧 x0=−120 mx_0=-120\ \mathrm{m},弹随风速 UU 漂移穿过保护区 RR。
  3. 每发弹的决策变量仅为纬度 y∈[−80,80]y\in[-80,80] 与释放时刻 τ∈[0,16] s\tau\in[0,16]\ \mathrm{s};两发不可重合于同一点同时刻。
  4. 被掩护区域 R=[−80,80]×[0,160]R=[-80,80]\times[0,160](米),度量其被烟幕覆盖的比例。
  5. 风场均匀,U,θU,\theta 在标称值附近扰动以做鲁棒性分析。

三、符号说明

符号 含义 取值
RR 被掩护二维区域 x∈[0,160],y∈[−80,80]x\in[0,160],y\in[-80,80]
y,τy,\tau 布点纬度 / 释放时刻 决策变量
KK 投弹总数 2–10
C(x,y,t)C(x,y,t) tt 时刻 (x,y)(x,y) 浓度 由烟团叠加
CthC_{\mathrm{th}} 遮蔽阈值 1.0
JJ 时间—空间积分覆盖率 待优化
E=1−JE=1-J 残差暴露 待最小化

四、模型建立

4.1 浓度场与覆盖判定

沿用范文一的浓度场 C(x,y,t)=∑kCkC(x,y,t)=\sum_k C_k,其中单团
Ck(x,y,t)=M2πσ2(t−τk)exp⁡ ⁣[−(x−xc)2+(y−yc)22σ2(t−τk)]C_k(x,y,t)=\frac{M}{2\pi\sigma^2(t-\tau_k)}\exp\!\left[-\frac{(x-x_c)^2+(y-y_c)^2}{2\sigma^2(t-\tau_k)}\right]
在任一时刻 tt,若 C(x,y,t)≥CthC(x,y,t)\ge C_{\mathrm{th}} 则判定该点被有效遮蔽。

4.2 暴露度量 JJ

对保护区 RR 离散采样,定义区域覆盖率 CR(t)=1∣R∣∑(x,y)∈R1(C≥Cth)C_R(t)=\frac{1}{|R|}\sum_{(x,y)\in R}\mathbf{1}(C\ge C_{\mathrm{th}})。将整个交战窗口 [0,Tw][0,T_w] 上的覆盖率做时间平均,得到积分覆盖率
J=1Tw∫0TwCR(t) dt≈1Nt∑tCR(t)J=\frac{1}{T_w}\int_0^{T_w} C_R(t)\,dt\approx \frac{1}{N_t}\sum_{t} C_R(t)
JJ 越大,说明在时空上被烟幕掩护得越充分;其补数 E=1−JE=1-J 即残差暴露,是我们真正想最小化的量。

4.3 离散选址优化模型

将可行的 (y,τ)(y,\tau) 离散为候选网格(9 个纬度 × 5 个时刻 = 45 个候选点),优化问题表述为
max⁡S⊂C, ∣S∣=K J(S),S 为选中的布点—时序集合\max_{\mathcal{S}\subset\mathcal{C},\ |\mathcal{S}|=K}\ J(\mathcal{S}),\qquad \mathcal{S}\ \text{为选中的布点—时序集合}
这是在 45 选 KK 的组合优化,随 KK 增大呈组合爆炸,须借助启发式 / 元启发式求解。整体框架如图 1。

图1 烟幕投放离散选址优化框架

五、模型求解

5.1 贪心增量法

从空集出发,每步加入使 JJ 边际增益最大的候选点,直至选满 KK 个。该方法计算廉价、可解释,且对单调子结构问题有近似保证。对 K=8K=8,贪心选出的配置为
(y,τ)∈{(−40,4),(20,12),(60,0),(−60,16),(60,16),(0,0),(−60,0),(0,16)}(y,\tau)\in\{(-40,4),(20,12),(60,0),(-60,16),(60,16),(0,0),(-60,0),(0,16)\}
可见优化器自动在纬度 {−60,−40,0,20,60}\{-60,-40,0,20,60\} 上横向铺开、在时刻 {0,4,12,16}\{0,4,12,16\} 上纵向错开,兼顾"横向铺宽"与"纵向延时",与朴素"全堆于 (0,0)(0,0) 同时释放"形成鲜明对比。

5.2 遗传算法

以 KK 个候选点编码为染色体,适应度即 JJ。采用锦标赛选择、均匀交叉与 15% 变异,种群 30、进化 40 代、精英保留。图 4 显示最优适应度随代数快速收敛,在第 10 代左右即逼近平台,说明该优化地形较为平缓、易收敛。

图4 遗传算法收敛曲线(最优暴露覆盖率 J vs 代数)

5.3 结果对比

K=8K=8 时三种方案:J朴素=0.0852J_{\text{朴素}}=0.0852,J贪心=0.2149J_{\text{贪心}}=0.2149,JGA=0.2180J_{\text{GA}}=0.2180。贪心与 GA 高度一致(相差 < 0.2%),验证了贪心解已接近全局较优。图 2、图 3 直观呈现:朴素配置在峰值时刻也只在 RR 中留下一小块高浓度斑,而优化配置经候选网格搜索后铺满了整个区域。

图2 朴素配置浓度场(8发同点同时)

图3 候选网格与贪心选出的投放配置

六、结果分析

6.1 代价—效能前沿

对 K=2,4,6,8,10K=2,4,6,8,10 分别求朴素与优化方案的 JJ,得到代价—效能前沿(图 5):优化方案的 JJ 随 KK 单调上升(0.0666→0.2283),而朴素方案几乎停滞在 0.045–0.089。这揭示一个关键结论——弹药数量本身不等于效能,关键在于"布得开、错得开";在 K=10K=10 时优化仍比朴素高约 2.5 倍。

图5 代价—效能前沿:发数 K 与暴露覆盖率 J

6.2 覆盖率随时间演化

图 6 对比 K=8K=8 时区域覆盖率 CR(t)C_R(t) 的时序曲线:朴素方案全程在 0.05–0.12 间低位波动,优化方案则通过错时释放把覆盖率整体抬升到 0.15–0.30 区间,并在更长时段维持较高水平,显著压缩了敌方的"可视窗口"。

图6 区域覆盖率 C(t) 随时间(朴素 vs 优化)

6.3 风场敏感性

固定优化配置,扫描风速 {3,5,7} m/s\{3,5,7\}\ \mathrm{m/s} 与风向偏移 {−0.3,0,0.3} rad\{-0.3,0,0.3\}\ \mathrm{rad},得到 JJ 的热力矩阵(图 8):

  • 弱风 3:0.2200 / 0.3192 / 0.2397
  • 中风 5:0.1477 / 0.2180 / 0.1612
  • 强风 7:0.0940 / 0.1348 / 0.1012

风速是主导因素:风速越低,烟团在 RR 内驻留越久、积分覆盖越高;风速越高,烟幕快速掠过、覆盖骤降。风向偏移的影响相对温和。这提示实战中:弱风利于持久遮蔽,强风条件下须增弹或前移布点 / 提前释放以补偿快速输运。值得强调,本文的暴露度量 JJ 同时刻画了"空间是否被覆盖"与"时间是否被持续覆盖"两个维度,因而比单帧快照更能反映真实的掩护质量——单帧覆盖率可能在某一瞬间很高,但时间积分后的 JJ 才会暴露"窗口期"风险。

图8 风场敏感性:不同风速×风向下的 J

七、灵敏度分析

以蒙特卡洛刻画风速 U∈[3.5,6.5]U\in[3.5,6.5]、风向 θ∈[−0.30,0.30]\theta\in[-0.30,0.30] 的联合扰动,对优化配置抽样 800 个情景,统计 JJ 分布(图 7)。结果显示:JJ 均值 0.1883、标准差 0.0395,变异系数约 21%,分布相对集中;在全部情景下优化方案的 JJ 始终稳定在朴素水平的 2.5 倍以上。需要指出,受限于 K=8K=8 的弹药总量,即使在最有利扰动下积分覆盖也难突破 0.32,说明有限弹药下"全域满遮蔽"在物理上不可达,残差暴露客观存在——这恰是优化价值所在:在不可达满遮蔽时,仍把暴露压到最低。

图7 蒙特卡洛风场扰动下优化方案 J 分布 (800 情景)

八、模型评价

优点:

  1. 将投放提升为可计算的离散优化问题,方法论上比"凭经验布帘"更通用、可扩展至多目标(如同时优化成本、持续时长)。
  2. 贪心与 GA 互相印证,解稳定可信;GA 收敛快,适合嵌入指挥辅助系统实时重算。
  3. 代价—效能前沿直观指导"打几发、怎么打"的费效决策。
  4. 暴露度量 JJ 统一了"空间覆盖"与"时间持续"两维,比单帧覆盖率更全面。

不足与改进:

  1. 候选网格分辨率有限,更优解可能落在网格之间;可改用连续优化(如 CMA-ES)或网格细化。
  2. 目标仅为覆盖率,未显式约束单发持续时长与平台发射通道;可加入整数规划硬约束。
  3. JJ 对风速敏感,实战宜做"风速自适应"再优化(按实时气象重算布点)。

九、结论

  1. 投放的本质是离散选址优化:在有限弹药下,优化布点—时序可使积分覆盖率较朴素方案提升约 2.5 倍(K=8K=8 时 0.0852→0.2149)。
  2. 代价—效能前沿表明,效能随发数单调上升但收益递减,优化方案的边际价值始终远高于朴素堆叠。
  3. 风速是覆盖的主导因素,弱风利于持久遮蔽、强风须增弹或调整时序;优化方案在 800 个风场扰动下保持稳健(变异系数约 21%)。
  4. 受弹药总量约束,全域满遮蔽物理上不可达,优化目标应定为"在约束下最小化残差暴露"。

综上,烟幕干扰弹投放应遵循"离散寻优、横向铺宽、纵向错时、随风自适应"的原则,以最小弹药代价换取最低暴露。

从作战运用角度看,本文方法可嵌入指挥辅助决策:在已知携弹量与大致威胁方向时,先以候选网格快速求得代价—效能前沿,依可用弹药量选定 KK,再按优化出的 (y,τ)(y,\tau) 编制投放诸元;若实时气象与预估有偏差,只需以新风速重算(风场敏感性已表明低风更有利、强风须补偿),即可在秒级内刷新方案。这种"网格离散 + 启发式寻优"的范式,亦可平移至其他需多点布设的掩护 / 干扰资源调度问题。

九、参考文献

[1] 2025 高教社杯全国大学生数学建模竞赛 A 题"烟幕干扰弹的投放策略"(官方发布渠道 mcm.edu.cn)。
[2] 本文范文一:烟幕浓度场与投弹优化(高斯烟团 + 视场遮蔽率)。
[3] 玄光男,程润伟. 遗传算法与工程优化[M]. 北京:清华大学出版社.
[4] 司守奎,孙兆亮. 数学建模算法与应用[M]. 北京:国防工业出版社.


附录:核心 Python 实现

以下代码复用本题真源模块 tools/gen_cumcm2025a_2.py(纯标准库、固定随机种子),直接调用其浓度场、暴露积分、贪心与遗传算法接口,保证正文 / 配图 / 附录 / 真源四路数字完全一致,且可独立运行复现。

import os, sys, math, random
# 定位并导入真源模块(与配图同源,四路一致)
try:
    _HERE = os.path.dirname(os.path.abspath(__file__))
except NameError:
    _HERE = os.getcwd()
sys.path.insert(0, os.path.abspath(os.path.join(_HERE, "..", "..", "..", "tools")))
import gen_cumcm2025a_2 as G

# ---- 复算关键数字 ----
n8 = G.naive(8)
g8 = G.greedy(8)
best8, _ = G.ga(8)            # 固定种子,结果确定可复现
print("K=8  朴素 J=%.4f  贪心 J=%.4f  GA J=%.4f" % (
    G.exposure_J(n8), G.exposure_J(g8), G.exposure_J(best8)))

ks = [2, 4, 6, 8, 10]
nJ = [G.exposure_J(G.naive(k)) for k in ks]
oJ = [G.exposure_J(G.greedy(k)) for k in ks]
print("K扫描 朴素:", [round(v, 4) for v in nJ])
print("K扫描 优化:", [round(v, 4) for v in oJ])

# 蒙特卡洛(固定种子,复用 GA 最优配置 best8,避免重复搜索)
rng = random.Random(20250820)
res = [G.exposure_J(best8, rng.uniform(3.5, 6.5), rng.uniform(-0.30, 0.30)) for _ in range(800)]
m = sum(res) / len(res)
sd = math.sqrt(sum((p - m) ** 2 for p in res) / len(res))
print("MC 均值=%.4f 标准差=%.4f" % (m, sd))

# 风场敏感性(风速 × 风向偏移)
for U in [3.0, 5.0, 7.0]:
    row = [G.exposure_J(best8, U, D) for D in [-0.3, 0.0, 0.3]]
    print("风%d:" % U, [round(v, 4) for v in row])