Files
mcm-26-b/docs/总体思路与流程图.md
T
2026-09-13 10:27:09 +08:00

8.8 KiB
Raw Blame History

总体思路与流程图

插图:figures/flow-overall-architecture.png(总体思路与算法主线)、 figures/steps-state-machine.png(执行步骤)、 figures/timing-attachment-example-105-111-194-199.png(附件计时示例)。 复现:uv run python scripts/build_figure_data.py --only flow-overall-architecture,steps-state-machine,timing-attachment-example-105-111-194-199

本文给出四问的思路、端到端流程图、执行步骤与执行时间。 算法细节指向 algo-1.md~algo-4.md, 协议细节指向 协议规则表与状态机.md。


1. 主线

把题面约束写成可计算的几何集合和计时账本,四问共用一套「证据 — 决策 — 执行」结构, 每问都给出可验证的保证:

问 保证
1 直径由顶点对枚举给出;最小包围圆半径 \rho\le20 m 时存在可保证清除的点
2 第二检测点取在解析安全盘 $B(c,1000-a)$(半径 249.8858 m)内,必然收到信号
3 七点计划覆盖整个 Ω(解析上界 984.5391 m < 1000 m),据此可判定频道无源
4 31 点最小命中集在 15 m / 72 朝向档证书下缺口为 0

总体思路与算法主线


2. 四层结构

层 内容 作用
L0 题面抽象 Ω 半径 1800 m;移动 5 m/s、检测 5 s、换频 1 s、清除 5 s / 3 s;观测 direction/no_signal/near;源 1016 个,频道 120,定向源覆盖 ±90° 后续推导只用这些量,不引入题面之外的信息
L1 在线三层 证据层(候选集与粒子)、决策层(选点与任务表)、执行层(串行客户端) 依赖单向向下,几何结论与调度启发式可分别测试
L2 四问 Q1 定位解算 → Q2 第二点选择 → Q3 全向搜索 → Q4 混合定向 后一问复用前一问的内核
L3 三条闭环 发现、定位、清除 每环有明确的进入与退出条件

L0 的常量集中在 src/mcm26b/config.py,带 [题面] / [工程] 标注。 证据层只给出「可能在哪里」,决策层只读证据并产出动作, 执行层负责发送动作并维护虚拟时钟。


3. 四问思路

问题一

  1. 检测点 s_i 与示向度 \theta_i 给出前向角域 $W_i={p:\angle(p-s_i)-\theta_i\in[-1°,+1°]}$,定位区域是半平面交 $P=\bigcap_i W_i$;
  2. 直径 D(P)=\max_{i,j}\lVert v_i-v_j\rVert 只需枚举顶点对(凸集上最远点必为顶点);
  3. 直径圆能否覆盖 $P$:唯一候选圆心是最远顶点对的中点。若 a,b 同在该圆内, 三角不等式两处同时取等,圆心只能是 ab 中点,因此只需在该点检查全部顶点;
  4. 能否保证清除:最小包围圆半径 \rho\le20 m 时,停在 MEC 圆心即可清除。 这是充分条件,不是必要条件。

结论:直径圆不一定覆盖定位区域,见 geo-q1-counterexample.png; 官方演练案例是「覆盖失败但 \rho=12.07 m \le20 m,可保证清除」。

问题二

候选集 $K_1=\Omega\cap W(s_1,\theta_1\pm\delta)\cap B(s_1,1500)$。 截断角域(扇形)的最小包围圆为 $B(c,a)$,a=R_{\max}/(2\cos\delta)=750.1142 m, 故安全盘 B(c,1000-a) 的半径为 249.8858 m,盘内任一点到扇形内任一点的距离 不超过 1000 m,即必然收到信号。在该盘内以最坏保守后验包围半径为主目标选点, 移动与检测成本作次目标,交会角只用于同分筛选。详见 algo-2.md。

问题三

发现保证用七点计划(原点 + 半径 a=1159.7 m 的六等分环):解析上界 D(a)=\max\{a/\sqrt3,\ \sqrt{R^2+a^2-\sqrt3Ra}\}=984.5391 m < 1000 m, Ω 内任意位置的源都在某站点 1000 m 内。证据层按频道维护候选集与粒子幸存集, 负观测按 full_disk 语义排除 1000 m 圆盘;决策层用信息增益选点, 任务表包含检测、定位、清除三类任务,排序为开放路径问题; 所有频道销账即完成证明成立,立即 /exit。

问题四

定向源只向朝向 ±90° 的前向半球辐射,覆盖语义改为 forward_half_disk。 七点在该语义下有缺口,改用离线贪心得到的 31 点最小命中集(设计半径 965 m, 前向角裕量 5°),并以 15 m / 72 朝向档的运行期证书校核(325.62 万个采样格,缺口 0, 最坏命中 990.05 m)。负观测只约束朝向,因此维护位置 × 朝向联合信念, 信念坍缩到有限格时使用后备盲清。详见 algo-4.md。


4. 端到端流程

flowchart TD
  S([开始:/enter 成功<br/>现实预算 1200 s 起算]) --> P0[读配置 ProblemConfig]
  P0 --> PLAN{按问题选择覆盖计划}
  PLAN -->|问题 3| S7[七点全向计划<br/>解析上界 984.54 m]
  PLAN -->|问题 4| S31[31 点最小命中集<br/>forward_half_disk 证书]
  S7 --> LOOP
  S31 --> LOOP

  subgraph LOOP[主循环:动作回合]
    direction TB
    NEXT[选下一个任务<br/>信息增益 / 最坏后验半径<br/>滚动 2-opt 排序] --> SEND[/发送动作/]
    SEND --> RESP{accepted?}
    RESP -->|false| FIX[不更新状态<br/>记录并重排任务]
    RESP -->|true| CLK[更新虚拟时钟、位置、频道]
    FIX --> NEXT
    CLK --> OBS{观测类型}
    OBS -->|direction| HIT[登记新源<br/>同频道安排第二点交会]
    OBS -->|no_signal| NEG[负观测裁剪<br/>位置候选或朝向档]
    OBS -->|near| SKIP[距离过近,换点重测]
    HIT --> DONE{该频道 ρ ≤ 20 m?}
    NEG --> DONE
    SKIP --> DONE
    DONE -->|是| CLR[/清除动作/]
    DONE -->|否| NEXT
    CLR --> LEDGER[覆盖账本销账]
    LEDGER --> FIN{全部频道销账?}
    FIN -->|否| NEXT
  end

  FIN -->|是| EXITQ[完成证明成立,立即 /exit]
  EXITQ --> REP[日志复算与统计]
  REP --> END([结束:虚拟时间即成绩])

  classDef main fill:#dce6f1,stroke:#1f4e79,color:#1c2430
  classDef acc fill:#f6dcd8,stroke:#b03a2e,color:#1c2430
  classDef ok fill:#d8ece5,stroke:#1e7a5f,color:#1c2430
  class NEXT,SEND,RESP,CLK,OBS main
  class CLR,FIN,EXITQ acc
  class LEDGER,REP ok

会话状态机与单次动作回合见 figures/steps-state-machine.png, 逐步计时示例见 figures/timing-attachment-example-105-111-194-199.png。


5. 执行步骤与执行时间

一次动作回合:本地预校验 → 发送 → 等响应计时 → 按响应更新状态。 异常时同 request_id 同内容重发,400 与 409 立即失败。

动作 虚拟耗时 说明
/enter、/exit 0 s 不改变虚拟时刻,/exit 不切频道
移动 直线距离 / 5 m·s⁻¹ 同点不动为 0 s
换测向频道 1 s 仅 /measure 触发,/clear 不切换
检测 /measure 5 s 与返回结果无关
清除 /clear 5 s / 3 s 成功 5 s,未发现 3 s

实测样例(评测机日志 BBM9-HZG2-77N5-NKKC,问题三演练,10 源全清):

项 数值
总虚拟时间 3134.643 s
移动(里程 11.9 km) 2379.6 s
检测与清除动作(119 + 10 次) 645.0 s
换频(110 次) 110.0 s
现实耗时 1.889 s

三项之和等于响应中的 virtual_time_s,与 evaluation.recompute_virtual_time 口径一致。 分解图见 figures/timing-measured-q3-10-sources.png, 定向局(GM56-…,虚拟 8703.766 s,现实 3.397 s)与复现命令见 执行时间与执行步骤.md。


6. 交付物与验收锚点

问 算法文档 主要实现 锚点
1 algo-1.md、问题一解答.md src/mcm26b/geometry/ 演练复算 D=23.9967 m、\rho=12.0686 m、E=+0.6040 m
2 algo-2.md geometry/、belief/、planner/ 安全盘半径 249.8858 m
3 algo-3.md、algo-3-bayes.md planner/bayes_loop.py、planner/seven.py 七点上界 984.5391 m < 1000 m
4 algo-4.md planner/directional.py、belief/joint.py 证书缺口 0,最坏命中 990.05 m
1–4 最优与基线实现对比.md project/ uv run python -m project.run

优化过程与未采用的改动见 第三四问架构优化与运行提速方案.md、 第三四问图论与动态规划优化方案.md。