diff --git a/1.md b/1.md deleted file mode 100644 index 0c32ff9..0000000 --- a/1.md +++ /dev/null @@ -1,152 +0,0 @@ -下面把现有《B题建模分析与实施计划》拆成可执行任务,并逐项检查设计思路。总体结论:**主线设计是对的,四问串联、保守几何、覆盖证明、协议幂等这些方向都合理;但有几个关键点需要补强,尤其是问题2候选区域非空性、定向源朝向不确定性、现实20分钟窗口下的请求数控制,以及正式测试时间安排。** - ---- - -## 一、总体判断 - -现有方案的最大优点是: - -1. **四问没有割裂**:问题1的定位区域和包围圆服务于问题2选点,问题3的覆盖发现与清除框架延伸到问题4。 -2. **坚持保守性**:用有界误差、半平面交、最小包围圆、49点覆盖证明,避免“看起来能清”但实际漏源。 -3. **协议与状态意识强**:强调 `accepted=false` 不更新状态、重试复用 `request_id`、`/clear` 不切换频道、虚拟时间公式。 -4. **停止条件严格**:没有把“发现10个源”或“连续无信号”当成功。 - -主要风险: - -- **问题2的候选区域 $\mathcal{Q}$ 可能为空**,需要补非空判断和退化策略。 -- **定向源第4问中 `no_signal` 不能直接删除空间候选点**,现有基线保守但效率低,需明确后备清除的规模和请求预算。 -- **现实20分钟窗口**下,49点×20频道最多980次检测,可能请求数过大;虚拟时间不是瓶颈,网络延迟和程序运行时间才是。 -- **正式测试机会少**,9月13日截止,必须尽早演练并保留正式机会。 - ---- - -## 二、任务拆分:可执行清单 - -建议按下面 P0–P7 拆分,每阶段都有明确交付和验收。 - -| 阶段 | 任务 | 交付物 | 验收标准 | 优先级 | -|---|---|---|---|---| -| P0 规则固定 | 核对题目、附件1/2、协议、计时、日志要求 | 规则表、状态机、字段表 | 计时示例能逐步得到附件给定值;`/clear` 不切换频道;`accepted=false` 不更新 | 最高 | -| P1 协议基线 | 实现 `/enter`、`/detect`、`/clear`、`/exit`;串行、幂等重试、超时 | 可运行客户端、自建回放测试 | 失败重试不污染状态;虚拟时间与公式一致;能主动退出 | 最高 | -| P2 几何内核 | 角域半平面表示、半平面交、凸多边形、直径、最小包围圆 | `geometry` 模块、测试用例 | 处理 $0^\circ/360^\circ$ 跨界、空集/单点/线段/无界;等边三角形反例通过 | 最高 | -| P3 问题2选点 | 构造 $K_1$,计算候选区域 $\mathcal{Q}$,采样评估后验包围圆 | 第二检测点策略、候选区域算法 | 保证收到信号;$\mathcal{Q}$ 为空时有退化方案;`near` 分支处理 | 高 | -| P4 问题3全向闭环 | 49点覆盖、逐频道覆盖记录、发现—定位—清除—停止 | 全向演练版本、统计脚本 | 10源和16源都能正确退出;边界朝外不漏;停止条件正确 | 最高 | -| P5 问题4定向扩展 | 定向源覆盖证明、失去信号处理、20m圆盘后备清除 | 定向演练版本 | 边界朝外定向源能发现;失去信号后能清除;不误删真源 | 高 | -| P6 加速与消融 | 共享检测、自适应覆盖、目标排序、提前清除 | 消融实验记录 | 全清不退化;虚拟时间/请求数有改善证据 | 中 | -| P7 正式与论文 | 演练、正式各3次、日志原名、表1、论文 | 6次正式记录、原始日志 | 案例编码、程序版本、统计一致;日志上传成功 | 最高 | - -时间紧时,**P6 可删减,P0–P5 必须保留**。 - ---- - -## 三、设计思路逐项检查 - -| 设计点 | 判断 | 需要补强/注意 | -|---|---|---| -| 四问统一框架 | 合理 | 问题1和2的几何结果要直接复用到3、4,避免重复建模 | -| 有界误差 $\pm 1^\circ$、示向度两位小数 | 正确 | 实现可加 $\pm 1.005^\circ$ 保守裕量,但不能写成题面规定 | -| 同地点误差固定 | 正确 | 不能原地重复测量取平均 | -| 角域半平面交 | 正确 | 必须处理 $0^\circ/360^\circ$ 跨界;区分空集、单点、线段、有限多边形、无界 | -| 直径枚举 | 正确 | 小规模枚举顶点对即可;无界区域不能截断后声称直径 | -| 以直径为直径的圆覆盖区域 | **不能保证** | 等边三角形反例正确;保证清除要用最小包围圆 $\rho(K)\le 20$ | -| 问题2候选区域 $\mathcal{Q}$ | 方向正确 | $K_1$ 应加 $\Omega$ 和 $B(s_1,1500)$ 约束;$\mathcal{Q}$ 可能为空,需退化策略 | -| 外包圆候选 $B(c,1000-r)$ | 正确 | 仅当 $r<1000$ 时非空;若 $r$ 接近 1000,区域很小 | -| “候选点距第一次检测点不超过1000米” | 错误表述 | 计划已指出,正确是“到 $K_1$ 中任意可能位置距离不超过 1000 米” | -| 49点覆盖 | 证明成立 | 需实现网格边/顶点规则;全向和定向都适用;全 no_signal 可证明该频道不存在 | -| 49点扫描规模 | 估算合理 | 虚拟时间约3.665小时,但现实20分钟受请求延迟约束 | -| 定向源 `no_signal` | 不能直接删除空间候选点 | 基线可只记录覆盖,不删点;加速版再维护朝向可行集合 | -| 定向源后备清除 | 思路可靠 | 候选集合有界后,用边长 20 米小方格中心,中心到格内点的距离满足 $d\le 10\sqrt{2}<20$ 米,逐点 `/clear` | -| 停止条件 | 严格正确 | 清除16个不同频道,或每频道清除成功/完整覆盖证明不存在 | -| `/clear` 不切换频道 | 正确 | 清除后当前测向频道不变,影响下一次切换耗时 | -| 协议幂等 | 正确 | 重试同 `request_id` 和完全相同内容;`accepted=false` 不更新状态 | -| 现实预算 | 关键风险 | 用 `remaining_real_duration_s` 管理;预留退出和故障恢复;日志不超过 2 MB | -| 正式测试 | 时间紧 | 问题3和4各3次;建议9月13日15:30前完成,17:30后不能启动新测试 | - ---- - -## 四、重点补强建议 - -### 1. 问题2:候选区域必须明确非空处理 - -建议把第一次测向后的候选集合写清楚: - -$$ -K_1=\Omega\cap W(s_1,\theta_1\pm\delta)\cap B(s_1,1500) -$$ - -其中 $W$ 是角域,$\delta$ 取 $1.005^\circ$ 保守裕量。 -然后: - -$$ -\mathcal{Q}=\left\{q:\max_{g\in K_1}\lVert q-g\rVert\le 1000\right\} -$$ - -若 $\mathcal{Q}\neq\varnothing$,在其中采样选点,评估最坏后验包围圆半径和移动成本。 -若 $\mathcal{Q}=\varnothing$,则退化为: - -$$ -q^*=\arg\min_q\max_{g\in K_1}\lVert q-g\rVert -$$ - -即选一个使最坏接收距离最小的点,同时结合交会角筛选。 -若 $K_1$ 的外包圆为 $B(c,r)$ 且 $r<1000$,则 $B(c,1000-r)$ 是更简单的充分候选区域。 - -### 2. 问题4:定向源不要过早依赖 `no_signal` 删点 - -第4问中,`no_signal` 只说明“当前位置、接收半径、朝向”联合假设下不可见,不能单独排除位置。 -基线策略建议: - -- 用49点覆盖保证发现; -- 发现后主动测向缩小候选; -- 若失去信号,不再强行靠 `direction` 追踪,而是对当前有界候选集合做20m圆盘覆盖,逐点 `/clear`; -- 若时间允许,再维护朝向可行集合,减少无效检测。 - -### 3. 现实20分钟:请求数比虚拟时间更关键 - -49点×20频道最多980次检测,若每次网络延迟0.5–1秒,现实时间可能超过8–16分钟。 -建议: - -- 已清除频道不再检测; -- 已发现待定位频道可暂停覆盖扫描; -- 共享检测位置:到一个点后顺便测多个未知频道; -- 自适应覆盖:根据 no_signal 覆盖记录跳点,但必须保持证明完整; -- 正式测试前实测接口延迟、日志大小、总请求数。 - -### 4. 问题1:直径圆覆盖判断可给更明确算法 - -对凸多边形 $P$: - -- 先求直径 $D=\max_{i,j}\lVert v_i-v_j\rVert$; -- 枚举所有顶点对作为候选直径,检查其余顶点是否都在以该对为直径的圆内; -- 若存在一个直径对使所有顶点在圆内,则覆盖;否则不覆盖; -- 但保证清除时不要用直径圆,要用最小包围圆 $\rho(K)\le 20$。 - ---- - -## 五、建议的最小可行路线 - -如果时间不足,按这个顺序做: - -1. **P0+P1**:协议、计时、状态更新、幂等重试。 -2. **P2**:角域交、直径、最小包围圆。 -3. **P3**:问题2候选区域和选点。 -4. **P4**:问题3全向闭环,49点覆盖,发现—定位—清除—停止。 -5. **P5**:问题4定向扩展,后备清除。 -6. **P7**:演练后尽早正式测试。 - -可删减:P6中的复杂调度、朝向联合维护、学习型策略。 -不可删减:覆盖证明、停止条件、协议幂等、日志、正式测试。 - ---- - -## 六、结论 - -现有设计思路**整体可行且偏保守**,适合竞赛中“先保证全清,再优化时间”的目标。 -最需要立即补强的是: - -1. 问题2中 $K_1$ 和 $\mathcal{Q}$ 的严格定义及空集处理; -2. 问题4中定向源朝向不确定性和 `no_signal` 的正确使用; -3. 现实20分钟窗口下的请求数控制; -4. 正式测试时间安排,务必尽早演练并保留正式机会。 - -下一步最有价值的工作仍然是:**协议计时基线 + 几何内核 + 全向闭环**。完成这条链路后,再用演练数据决定是否加入加速策略。 diff --git a/B题建模分析与实施计划.md b/docs/B题建模分析与实施计划.md similarity index 100% rename from B题建模分析与实施计划.md rename to docs/B题建模分析与实施计划.md diff --git a/issue/附件/~$附件2.docx b/issue/附件/~$附件2.docx deleted file mode 100644 index f9a31eb..0000000 Binary files a/issue/附件/~$附件2.docx and /dev/null differ diff --git a/scripts/benchmark_q1.py b/src/scripts/benchmark_q1.py similarity index 100% rename from scripts/benchmark_q1.py rename to src/scripts/benchmark_q1.py diff --git a/scripts/build_q1_demo.py b/src/scripts/build_q1_demo.py similarity index 100% rename from scripts/build_q1_demo.py rename to src/scripts/build_q1_demo.py diff --git a/scripts/capture_practice.py b/src/scripts/capture_practice.py similarity index 100% rename from scripts/capture_practice.py rename to src/scripts/capture_practice.py diff --git a/scripts/render_q1_figures.py b/src/scripts/render_q1_figures.py similarity index 100% rename from scripts/render_q1_figures.py rename to src/scripts/render_q1_figures.py diff --git a/scripts/verify_visualization.cjs b/src/scripts/verify_visualization.cjs similarity index 100% rename from scripts/verify_visualization.cjs rename to src/scripts/verify_visualization.cjs diff --git a/tests/test_geometry.py b/src/tests/test_geometry.py similarity index 100% rename from tests/test_geometry.py rename to src/tests/test_geometry.py diff --git a/tests/test_geometry_certificates.py b/src/tests/test_geometry_certificates.py similarity index 100% rename from tests/test_geometry_certificates.py rename to src/tests/test_geometry_certificates.py diff --git a/tests/test_practice_replay.py b/src/tests/test_practice_replay.py similarity index 100% rename from tests/test_practice_replay.py rename to src/tests/test_practice_replay.py diff --git a/visualization/q1.template.html b/src/visualization/q1.template.html similarity index 100% rename from visualization/q1.template.html rename to src/visualization/q1.template.html diff --git a/visualization/question1.html b/src/visualization/question1.html similarity index 100% rename from visualization/question1.html rename to src/visualization/question1.html diff --git a/visualization/standalone.css b/src/visualization/standalone.css similarity index 100% rename from visualization/standalone.css rename to src/visualization/standalone.css