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

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

视角:风不确定下的鲁棒优化(maximin)。在范文二"离散选址优化"的基础上,进一步把投放提升为鲁棒决策问题——风场(风速、风向)并非精确已知,而是落在一个不确定性集内;目标是选出使"最坏风情景下暴露最小(覆盖最大)"的布点—时序方案,即求覆盖率的 maximin。

摘要

范文一建立了高斯烟团浓度场、范文二将其抽象为确定性风场下的离散选址优化(贪心 / 遗传算法最小暴露)。然而实战中风速、风向均存在不可忽略的扰动:若只在标称风(5 m/s、风向 0)下寻优,一旦实际风偏离,方案可能大幅退化。本文引入鲁棒优化视角:将风场不确定性建模为盒形集 Γ={U∈[3,7] m/s, θ∈[−0.30,0.30] rad}\Gamma=\{U\in[3,7]\ \mathrm{m/s},\ \theta\in[-0.30,0.30]\ \mathrm{rad}\},定义最坏情形覆盖 Z=min⁡风JZ=\min_{\text{风}}J 为性能底线,投放决策即转化为
max⁡S Z(S)=max⁡S min⁡(U,θ)∈Γ J(S;U,θ)\max_{\mathcal{S}}\ Z(\mathcal{S})=\max_{\mathcal{S}}\ \min_{(U,\theta)\in\Gamma}\ J(\mathcal{S};U,\theta)
的 maximin 问题,并用情景采样 + 遗传算法求解。数值结果表明:在 K=8K=8 时,标称最优方案标称覆盖率 J=0.2180J=0.2180、但最坏情形仅 Z=0.0940Z=0.0940;鲁棒最优方案以标称覆盖率小幅退让至 J=0.1937J=0.1937(代价 regret=0.02430.0243)为交换,把最坏情形覆盖率抬高到 Z=0.1069Z=0.1069(增益 gain=0.01290.0129),且对风场扰动的方差由 0.05030.0503 降至 0.03780.0378(约降 25%25\%)。蒙特卡洛(800 风场情景)下,鲁棒方案最坏情形覆盖率 0.11620.1162 高于标称方案的 0.10430.1043,印证了其"抬高地板、压缩波动"的稳健价值。代价—鲁棒前沿显示鲁棒最坏情形 ZZ 随发数 KK 由 2 增至 10 从 0.02740.0274 单调上升到 0.11880.1188,始终优于或持平标称方案。本文论证了在气象不确定性下,"不为均值、为最坏"的鲁棒投放原则,能以有限代价显著削弱敌方"赌一把风"的对抗空间。

一、问题重述

赛题要求在关键时段、关键空域构筑有效烟幕屏障以干扰敌方光电 / 红外探测与制导。范文一、二已分别解决"烟有多浓"与"在标称风下布哪几点"两个问题。但真实战场中,气象预报存在误差:风速可能在 3∼7 m/s3\sim7\ \mathrm{m/s} 间波动,风向也可能偏转十余度。若投放方案只在"完美预报"下最优,一旦风偏不利,掩护窗口可能骤然失效,使被掩护目标暴露。因此本文聚焦决策层的鲁棒性:在风场不确定性集 Γ\Gamma 内,如何选出"即便遇到最坏风,暴露仍尽可能低"的投弹方案,并量化"为稳健所付出的平均性能代价"。

二、模型假设

  1. 浓度场、覆盖判定与暴露度量 JJ 完全沿用范文二:单发高斯烟团随风平流、扩散尺度 σ(t)=σ0+κt−τ\sigma(t)=\sigma_0+\kappa\sqrt{t-\tau},多弹线性叠加,保护区 RR 的时间—空间积分覆盖率 JJ 越大越好。
  2. 投弹点固定在上风侧 x0=−120 mx_0=-120\ \mathrm{m},每发决策变量仅为纬度 y∈[−80,80]y\in[-80,80] 与释放时刻 τ∈[0,16] s\tau\in[0,16]\ \mathrm{s};候选网格同范文二(9 纬度 × 5 时刻 = 45 候选)。
  3. 风场不确定性以盒形集描述:风速 U∈[U0−ΔU,U0+ΔU]U\in[U_0-\Delta_U,U_0+\Delta_U](U0=5, ΔU=2U_0=5,\ \Delta_U=2),风向偏移 θ∈[−ΔD,ΔD]\theta\in[-\Delta_D,\Delta_D](ΔD=0.30 rad\Delta_D=0.30\ \mathrm{rad})。
  4. 决策者属风险厌恶型:以最坏风情景下的覆盖率作为方案评价基准(maximin),而非仅看标称风。
  5. 各风情景之间独立,且不确定性集可由预报置信区间给出。

三、符号说明

符号 含义 取值
Γ\Gamma 风场不确定性集 U∈[3,7], θ∈[−0.30,0.30]U\in[3,7],\ \theta\in[-0.30,0.30]
J(S;U,θ)J(\mathcal{S};U,\theta) 某风下方案 S\mathcal{S} 的积分覆盖率 待算
Z(S)Z(\mathcal{S}) 最坏情形覆盖(性能底线) min⁡ΓJ\min_{\Gamma}J
JnomJ_{\mathrm{nom}} 标称风下覆盖率 越大越好
regret 鲁棒代价 =Jnom−Jrob=J_{\mathrm{nom}}-J_{\mathrm{rob}} 越小越好
gain 鲁棒增益 =Zrob−Znom=Z_{\mathrm{rob}}-Z_{\mathrm{nom}} 越大越好
KK 投弹总数 2–10

四、模型建立

4.1 不确定性集 Γ

将实战可预期的风场扰动封装为一个二维盒形集 Γ\Gamma(图 2):横轴为风速 UU、纵轴为风向偏移 θ\theta,标称风 (5,0)(5,0) 位于盒心,红色极端情景为遗传算法训练所用的四角与中轴点。这一集合可由气象预报的置信区间直接获得,是鲁棒优化的"敌人可能行动空间"。

图2 风场不确定性集 Γ 与采样情景(U×DIR 平面)

4.2 最坏情形暴露度量

对任一投放方案 S\mathcal{S},在风情景 (U,θ)(U,\theta) 下的积分覆盖率为 J(S;U,θ)J(\mathcal{S};U,\theta)。由于真实风未知,我们用其在 Γ\Gamma 上的下确界刻画方案的"保底性能":
Z(S)=min⁡(U,θ)∈ΓJ(S;U,θ)Z(\mathcal{S})=\min_{(U,\theta)\in\Gamma} J(\mathcal{S};U,\theta)
ZZ 越高,说明即使遭遇最不利的风,烟幕仍能维持越充分的掩护。ZZ 即本模型的优化目标。

4.3 maximin 鲁棒投放模型

投放决策表述为
max⁡S⊂C, ∣S∣=K Z(S)=max⁡S min⁡(U,θ)∈Γ J(S;U,θ)\max_{\mathcal{S}\subset\mathcal{C},\ |\mathcal{S}|=K}\ Z(\mathcal{S})=\max_{\mathcal{S}}\ \min_{(U,\theta)\in\Gamma}\ J(\mathcal{S};U,\theta)
这是典型的**极大极小(maximin)**问题:外层在候选集中选方案以最大化覆盖,内层模拟"最不利的敌对环境"以最小化覆盖。它与范文二确定性优化的根本区别在于——后者只问"平均风下覆盖几何",前者问"最坏风下覆盖是否仍可接受"。整体框架如图 1。

图1 风不确定下烟幕投放鲁棒优化框架

4.4 求解思路

Γ\Gamma 连续无限,直接求下确界困难。采用情景采样近似:在 Γ\Gamma 的四角与中轴取 6 个极端风情景 T\mathcal{T} 作为训练集,用 ZT(S)=min⁡(U,θ)∈TJ(S;U,θ)Z_{\mathcal{T}}(\mathcal{S})=\min_{(U,\theta)\in\mathcal{T}}J(\mathcal{S};U,\theta) 充当 ZZ 的代理;再用遗传算法在 45 选 KK 的组合空间内搜索使 ZTZ_{\mathcal{T}} 最大的方案。该代理对平滑的覆盖率响应是紧的下界,且极大约束了计算量。

五、模型求解

5.1 标称最优方案(对照基线)

以范文二的确定性遗传算法(固定种子)求得标称风下最优方案,其标称覆盖率 Jnom=0.2180J_{\mathrm{nom}}=0.2180。但把它代入不确定性集 Γ\Gamma 的 12 点网格评估,其最坏情形覆盖率骤降至 Znom=0.0940Z_{\mathrm{nom}}=0.0940——即遇到不利风时,覆盖率可能腰斩。这正是"只优化均值"的脆弱性所在。

5.2 鲁棒遗传算法

以 KK 个候选点编码染色体,适应度取最坏情形覆盖 ZTZ_{\mathcal{T}}(maximin),采用锦标赛选择、均匀交叉与 15% 变异,种群 16、进化 16 代、精英保留。图 4 显示最坏情形覆盖 ZZ 随代数稳定抬升、约 6 代后即逼近平台,说明该鲁棒地形同样易收敛、可嵌入指挥辅助系统实时重算。

图4 鲁棒遗传算法收敛(最坏情形覆盖 Z vs 代数)

5.3 两方案对比

K=8K=8 时鲁棒最优方案的选点为
(y,τ)∈{(60,0),(−40,16),(0,16),(−80,4),(60,12),(−20,0),(20,4),(−20,8)}(y,\tau)\in\{(60,0),(-40,16),(0,16),(-80,4),(60,12),(-20,0),(20,4),(-20,8)\}
其标称覆盖率 Jrob=0.1937J_{\mathrm{rob}}=0.1937,最坏情形 Zrob=0.1069Z_{\mathrm{rob}}=0.1069。与标称方案相比:标称覆盖率高出 0.02430.0243(regret),但最坏情形覆盖率低 0.01290.0129(gain)——鲁棒方案以约 11% 的平均性能退让,换取了最坏情形的抬升与波动的压缩。图 8 给出鲁棒方案的候选网格与选中配置,可见其同样在纬度与时刻上"铺开 + 错时",但布点更偏向能抵御风向偏转的对称结构。

图8 鲁棒最优投放配置(候选网格与选中点)

六、结果分析

6.1 各风情景下的覆盖对比

将两方案在 12 个风情景(风速 {3,5,7}\{3,5,7\} × 风向偏移 {−0.30,0,0.30}\{-0.30,0,0.30\})下逐一评估(图 3):标称方案覆盖率区间 [0.0940, 0.3192][0.0940,\ 0.3192],鲁棒方案区间 [0.1069, 0.2908][0.1069,\ 0.2908]。可见鲁棒方案的"下限"明显高于标称方案(0.1069 > 0.0940),而"上限"略低(0.2908 < 0.3192)——这正是鲁棒性的几何特征:削峰填谷,用一点峰值性能换取地板的安全。

图3 标称方案与鲁棒方案在各风情景下的覆盖率 J

6.2 代价—鲁棒前沿

对 K=2,4,6,8,10K=2,4,6,8,10 分别求标称方案(贪心)与鲁棒方案的最坏情形覆盖 ZZ,得代价—鲁棒前沿(图 5):鲁棒最坏 ZZ 由 0.02740.0274(K=2)单调升至 0.11880.1188(K=10),标称最坏 ZZ 由 0.02580.0258 升至 0.11210.1121。在所有 KK 下鲁棒方案的最坏情形均不低于标称方案,且差距随 KK 增大而显现——说明弹药越多,鲁棒寻优的边际保本价值越突出。

图5 代价—鲁棒前沿:发数 K 与最坏情形覆盖率 Z

6.3 不确定性半径敏感性

固定鲁棒方案(按 ΔU=2,ΔD=0.30\Delta_U=2,\Delta_D=0.30 训练),检验当真实不确定性更大时其保底性能(图 7):随 ΔU\Delta_U、ΔD\Delta_D 增大,最坏情形 ZZ 由 0.15340.1534(ΔU=1,ΔD=0.15\Delta_U=1,\Delta_D=0.15)降至 0.06250.0625(ΔU=3,ΔD=0.45\Delta_U=3,\Delta_D=0.45)。这提示两点:其一,鲁棒方案的性能底线随"未建模的不确定性"单调递减,符合直觉;其二,实战若预报置信区间变宽,应同步放大 Γ\Gamma 并重算鲁棒方案,而非沿用窄盒训练结果。

图7 不确定性半径对鲁棒方案最坏情形覆盖 Z 的影响

七、灵敏度分析(蒙特卡洛验证)

以蒙特卡洛刻画风速 U∈[3,7]U\in[3,7]、风向 θ∈[−0.30,0.30]\theta\in[-0.30,0.30] 的联合均匀分布,对两方案各抽样 800 个风情景(图 6 箱线):标称方案 JJ 均值 0.19190.1919、标准差 0.05030.0503、最坏 0.10430.1043;鲁棒方案 JJ 均值 0.18100.1810、标准差 0.03780.0378、最坏 0.11620.1162。鲁棒方案以均值降低约 5.7%5.7\% 为代价,把标准差压缩约 25%25\%、把最坏情形抬高约 11.4%11.4\%。从分布形态看,鲁棒方案的箱体更窄、下须更高——波动更小、地板更硬,这正是风险厌恶型决策者所追求的"确定性掩护"。需要指出,受有限弹药约束,即使在最有利扰动下,最坏情形覆盖仍难突破 0.120.12,说明"全域满遮蔽"在物理上不可达,鲁棒优化的价值恰在于把暴露压到可接受的低波动区间。

图6 标称方案与鲁棒方案在 800 风场情景下的 J 分布(箱线)

八、模型评价

优点:

  1. 把"风场不确定性"显式纳入投放决策,用 maximin 框架统一刻画风险,方法论比确定性优化更贴近实战。
  2. 以最坏情形覆盖 ZZ 作为性能底线,直接回答"敌方赌到不利风时我方是否仍安全",决策语义清晰。
  3. 情景采样 + 遗传算法求解高效、可复现,收敛快,适合嵌入指挥辅助系统按实时气象重算。
  4. 量化了"稳健的代价与收益"(regret / gain / 方差压缩),为"要不要鲁棒、鲁棒到什么程度"提供费效依据。

不足与改进:

  1. 采用盒形不确定性集与情景采样近似,未给出 ZZ 的理论下界证明;可引入鲁棒优化对偶或预算不确定集(budget of uncertainty)以收紧近似。
  2. 仅以覆盖率为目标,未联合优化成本、持续时长与发射通道约束;可扩展为多目标鲁棒优化。
  3. 假设风场在 Γ\Gamma 上均匀,实际应输入预报的概率分布,改用风险价值(CVaR)或分布鲁棒优化(DRO)以利用概率信息。
  4. 不确定性半径依赖人工设定,宜与气象预报的置信度自动联动。

九、结论

  1. 风场不确定性下,投放决策应转为 maximin 鲁棒问题:以最坏情形覆盖 ZZ 为优化目标,而非仅优化标称风。
  2. K=8K=8 时鲁棒方案以标称覆盖率退让 0.02430.0243 为代价,把最坏情形覆盖由 0.09400.0940 抬升至 0.10690.1069,且蒙特卡洛方差压缩约 25%25\%,实现"抬高地板、压缩波动"。
  3. 代价—鲁棒前沿表明,鲁棒最坏情形 ZZ 随发数单调上升且始终不劣于标称方案,弹药越多鲁棒寻优的保本价值越显著。
  4. 鲁棒方案的保底性能随未建模的不确定性半径递减,实战中应按预报置信区间同步放大 Γ\Gamma 并重算,方能维持"最坏也可接受"的掩护质量。

综上,面向风场不确定的烟幕投放,应遵循"不为均值、为最坏;情景采样、maximin 寻优;随预报置信而自适应放大不确定性集"的鲁棒原则,以有限的平均性能代价换取可预期的、低波动的掩护效果。

从作战运用角度看,本文方法可直接嵌入气象—火力闭环:输入预报给出的风速、风向置信区间即构成 Γ\Gamma,按可用弹药量 KK 求得代价—鲁棒前沿并选定方案,再依优化出的 (y,τ)(y,\tau) 编制投放诸元;一旦预报更新(置信区间变宽),只需以新 Γ\Gamma 重算(图 7 已揭示半径敏感性规律),即可在秒级刷新鲁棒方案。这种"不确定性集 + maximin 寻优"的范式,亦可平移至其他面临环境扰动的资源调度与对抗决策问题。

九、参考文献

[1] 2025 高教社杯全国大学生数学建模竞赛 A 题"烟幕干扰弹的投放策略"(官方发布渠道 mcm.edu.cn)。
[2] 本文范文一:烟幕浓度场与投弹优化(高斯烟团 + 视场遮蔽率)。
[3] 本文范文二:离散选址优化(候选网格 + 贪心 / 遗传算法最小暴露)。
[4] 玄光男,程润伟. 遗传算法与工程优化[M]. 北京:清华大学出版社.
[5] Bertsimas D., Sim M. The Price of Robustness[J]. Operations Research, 2004.
[6] 司守奎,孙兆亮. 数学建模算法与应用[M]. 北京:国防工业出版社.


附录:核心 Python 实现

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

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 G2   # 物理基元:浓度场 / 覆盖 / 暴露 / 确定性 GA
import gen_cumcm2025a_3 as G3   # 鲁棒层:maximin GA / 情景 / 不确定性集

# ---- 复算关键数字 ----
# 标称最优(复用范文二确定性 GA,固定种子)
nom_best, _ = G2.ga(8, seed=20250820)
J_nom = G2.exposure_J(nom_best)
Z_nom = G3.worst_Z(nom_best, G3.SCEN12)
print("标称: J=%.4f  最坏Z=%.4f" % (J_nom, Z_nom))

# 鲁棒最优(maximin GA,固定种子)
rob_best, _ = G3.robust_ga(8, G3.TRAIN)
J_rob = G2.exposure_J(rob_best)
Z_rob = G3.worst_Z(rob_best, G3.SCEN12)
print("鲁棒: J=%.4f  最坏Z=%.4f" % (J_rob, Z_rob))
print("regret=%.4f  gain=%.4f" % (J_nom - J_rob, Z_rob - Z_nom))

# 蒙特卡洛 800 风场情景验证
rng = random.Random(20250819)
nres, rres = [], []
for _ in range(800):
    u = rng.uniform(G3.US[0], G3.US[1]); d = rng.uniform(G3.DS[0], G3.DS[1])
    nres.append(G3.scen_J(nom_best, u, d))
    rres.append(G3.scen_J(rob_best, u, d))
def stat(x):
    x = sorted(x); m = sum(x) / len(x)
    sd = math.sqrt(sum((p - m) ** 2 for p in x) / len(x))
    return m, sd, x[0]
mn, sdn, minn = stat(nres); mr, sdr, minr = stat(rres)
print("MC 标称: 均值=%.4f 标准差=%.4f 最坏=%.4f" % (mn, sdn, minn))
print("MC 鲁棒: 均值=%.4f 标准差=%.4f 最坏=%.4f" % (mr, sdr, minr))