md 数学公式 LaTex 化
This commit is contained in:
@@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
主要风险:
|
主要风险:
|
||||||
|
|
||||||
- **问题2的候选区域 \( \mathcal Q \) 可能为空**,需要补非空判断和退化策略。
|
- **问题2的候选区域 $\mathcal{Q}$ 可能为空**,需要补非空判断和退化策略。
|
||||||
- **定向源第4问中 `no_signal` 不能直接删除空间候选点**,现有基线保守但效率低,需明确后备清除的规模和请求预算。
|
- **定向源第4问中 `no_signal` 不能直接删除空间候选点**,现有基线保守但效率低,需明确后备清除的规模和请求预算。
|
||||||
- **现实20分钟窗口**下,49点×20频道最多980次检测,可能请求数过大;虚拟时间不是瓶颈,网络延迟和程序运行时间才是。
|
- **现实20分钟窗口**下,49点×20频道最多980次检测,可能请求数过大;虚拟时间不是瓶颈,网络延迟和程序运行时间才是。
|
||||||
- **正式测试机会少**,9月13日截止,必须尽早演练并保留正式机会。
|
- **正式测试机会少**,9月13日截止,必须尽早演练并保留正式机会。
|
||||||
@@ -28,8 +28,8 @@
|
|||||||
|---|---|---|---|---|
|
|---|---|---|---|---|
|
||||||
| P0 规则固定 | 核对题目、附件1/2、协议、计时、日志要求 | 规则表、状态机、字段表 | 计时示例能逐步得到附件给定值;`/clear` 不切换频道;`accepted=false` 不更新 | 最高 |
|
| P0 规则固定 | 核对题目、附件1/2、协议、计时、日志要求 | 规则表、状态机、字段表 | 计时示例能逐步得到附件给定值;`/clear` 不切换频道;`accepted=false` 不更新 | 最高 |
|
||||||
| P1 协议基线 | 实现 `/enter`、`/detect`、`/clear`、`/exit`;串行、幂等重试、超时 | 可运行客户端、自建回放测试 | 失败重试不污染状态;虚拟时间与公式一致;能主动退出 | 最高 |
|
| P1 协议基线 | 实现 `/enter`、`/detect`、`/clear`、`/exit`;串行、幂等重试、超时 | 可运行客户端、自建回放测试 | 失败重试不污染状态;虚拟时间与公式一致;能主动退出 | 最高 |
|
||||||
| P2 几何内核 | 角域半平面表示、半平面交、凸多边形、直径、最小包围圆 | `geometry` 模块、测试用例 | 处理0°/360°跨界、空集/单点/线段/无界;等边三角形反例通过 | 最高 |
|
| P2 几何内核 | 角域半平面表示、半平面交、凸多边形、直径、最小包围圆 | `geometry` 模块、测试用例 | 处理 $0^\circ/360^\circ$ 跨界、空集/单点/线段/无界;等边三角形反例通过 | 最高 |
|
||||||
| P3 问题2选点 | 构造 \(K_1\),计算候选区域 \( \mathcal Q\),采样评估后验包围圆 | 第二检测点策略、候选区域算法 | 保证收到信号;\( \mathcal Q\) 为空时有退化方案;near分支处理 | 高 |
|
| P3 问题2选点 | 构造 $K_1$,计算候选区域 $\mathcal{Q}$,采样评估后验包围圆 | 第二检测点策略、候选区域算法 | 保证收到信号;$\mathcal{Q}$ 为空时有退化方案;`near` 分支处理 | 高 |
|
||||||
| P4 问题3全向闭环 | 49点覆盖、逐频道覆盖记录、发现—定位—清除—停止 | 全向演练版本、统计脚本 | 10源和16源都能正确退出;边界朝外不漏;停止条件正确 | 最高 |
|
| P4 问题3全向闭环 | 49点覆盖、逐频道覆盖记录、发现—定位—清除—停止 | 全向演练版本、统计脚本 | 10源和16源都能正确退出;边界朝外不漏;停止条件正确 | 最高 |
|
||||||
| P5 问题4定向扩展 | 定向源覆盖证明、失去信号处理、20m圆盘后备清除 | 定向演练版本 | 边界朝外定向源能发现;失去信号后能清除;不误删真源 | 高 |
|
| P5 问题4定向扩展 | 定向源覆盖证明、失去信号处理、20m圆盘后备清除 | 定向演练版本 | 边界朝外定向源能发现;失去信号后能清除;不误删真源 | 高 |
|
||||||
| P6 加速与消融 | 共享检测、自适应覆盖、目标排序、提前清除 | 消融实验记录 | 全清不退化;虚拟时间/请求数有改善证据 | 中 |
|
| P6 加速与消融 | 共享检测、自适应覆盖、目标排序、提前清除 | 消融实验记录 | 全清不退化;虚拟时间/请求数有改善证据 | 中 |
|
||||||
@@ -44,22 +44,22 @@
|
|||||||
| 设计点 | 判断 | 需要补强/注意 |
|
| 设计点 | 判断 | 需要补强/注意 |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| 四问统一框架 | 合理 | 问题1和2的几何结果要直接复用到3、4,避免重复建模 |
|
| 四问统一框架 | 合理 | 问题1和2的几何结果要直接复用到3、4,避免重复建模 |
|
||||||
| 有界误差±1°、示向度两位小数 | 正确 | 实现可加±1.005°保守裕量,但不能写成题面规定 |
|
| 有界误差 $\pm 1^\circ$、示向度两位小数 | 正确 | 实现可加 $\pm 1.005^\circ$ 保守裕量,但不能写成题面规定 |
|
||||||
| 同地点误差固定 | 正确 | 不能原地重复测量取平均 |
|
| 同地点误差固定 | 正确 | 不能原地重复测量取平均 |
|
||||||
| 角域半平面交 | 正确 | 必须处理0°/360°跨界;区分空集、单点、线段、有限多边形、无界 |
|
| 角域半平面交 | 正确 | 必须处理 $0^\circ/360^\circ$ 跨界;区分空集、单点、线段、有限多边形、无界 |
|
||||||
| 直径枚举 | 正确 | 小规模枚举顶点对即可;无界区域不能截断后声称直径 |
|
| 直径枚举 | 正确 | 小规模枚举顶点对即可;无界区域不能截断后声称直径 |
|
||||||
| 以直径为直径的圆覆盖区域 | **不能保证** | 等边三角形反例正确;保证清除要用最小包围圆 \( \rho(K)\le20 \) |
|
| 以直径为直径的圆覆盖区域 | **不能保证** | 等边三角形反例正确;保证清除要用最小包围圆 $\rho(K)\le 20$ |
|
||||||
| 问题2候选区域 \( \mathcal Q \) | 方向正确 | \(K_1\) 应加 \( \Omega \) 和 \(B(s_1,1500)\) 约束;\( \mathcal Q\) 可能为空,需退化策略 |
|
| 问题2候选区域 $\mathcal{Q}$ | 方向正确 | $K_1$ 应加 $\Omega$ 和 $B(s_1,1500)$ 约束;$\mathcal{Q}$ 可能为空,需退化策略 |
|
||||||
| 外包圆候选 \(B(c,1000-r)\) | 正确 | 仅当 \(r<1000\) 时非空;若 \(r\) 接近1000,区域很小 |
|
| 外包圆候选 $B(c,1000-r)$ | 正确 | 仅当 $r<1000$ 时非空;若 $r$ 接近 1000,区域很小 |
|
||||||
| “候选点距第一次检测点不超过1000米” | 错误表述 | 计划已指出,正确是“到 \(K_1\) 中任意可能位置距离不超过1000米” |
|
| “候选点距第一次检测点不超过1000米” | 错误表述 | 计划已指出,正确是“到 $K_1$ 中任意可能位置距离不超过 1000 米” |
|
||||||
| 49点覆盖 | 证明成立 | 需实现网格边/顶点规则;全向和定向都适用;全 no_signal 可证明该频道不存在 |
|
| 49点覆盖 | 证明成立 | 需实现网格边/顶点规则;全向和定向都适用;全 no_signal 可证明该频道不存在 |
|
||||||
| 49点扫描规模 | 估算合理 | 虚拟时间约3.665小时,但现实20分钟受请求延迟约束 |
|
| 49点扫描规模 | 估算合理 | 虚拟时间约3.665小时,但现实20分钟受请求延迟约束 |
|
||||||
| 定向源 `no_signal` | 不能直接删除空间候选点 | 基线可只记录覆盖,不删点;加速版再维护朝向可行集合 |
|
| 定向源 `no_signal` | 不能直接删除空间候选点 | 基线可只记录覆盖,不删点;加速版再维护朝向可行集合 |
|
||||||
| 定向源后备清除 | 思路可靠 | 候选集合有界后,用边长20m小方格中心,中心到格内点≤10√2<20,逐点 `/clear` |
|
| 定向源后备清除 | 思路可靠 | 候选集合有界后,用边长 20 米小方格中心,中心到格内点的距离满足 $d\le 10\sqrt{2}<20$ 米,逐点 `/clear` |
|
||||||
| 停止条件 | 严格正确 | 清除16个不同频道,或每频道清除成功/完整覆盖证明不存在 |
|
| 停止条件 | 严格正确 | 清除16个不同频道,或每频道清除成功/完整覆盖证明不存在 |
|
||||||
| `/clear` 不切换频道 | 正确 | 清除后当前测向频道不变,影响下一次切换耗时 |
|
| `/clear` 不切换频道 | 正确 | 清除后当前测向频道不变,影响下一次切换耗时 |
|
||||||
| 协议幂等 | 正确 | 重试同 `request_id` 和完全相同内容;`accepted=false` 不更新状态 |
|
| 协议幂等 | 正确 | 重试同 `request_id` 和完全相同内容;`accepted=false` 不更新状态 |
|
||||||
| 现实预算 | 关键风险 | 用 `remaining_real_duration_s` 管理;预留退出和故障恢复;日志≤2MB |
|
| 现实预算 | 关键风险 | 用 `remaining_real_duration_s` 管理;预留退出和故障恢复;日志不超过 2 MB |
|
||||||
| 正式测试 | 时间紧 | 问题3和4各3次;建议9月13日15:30前完成,17:30后不能启动新测试 |
|
| 正式测试 | 时间紧 | 问题3和4各3次;建议9月13日15:30前完成,17:30后不能启动新测试 |
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -70,26 +70,26 @@
|
|||||||
|
|
||||||
建议把第一次测向后的候选集合写清楚:
|
建议把第一次测向后的候选集合写清楚:
|
||||||
|
|
||||||
\[
|
$$
|
||||||
K_1=\Omega \cap W(s_1,\theta_1\pm\delta)\cap B(s_1,1500)
|
K_1=\Omega\cap W(s_1,\theta_1\pm\delta)\cap B(s_1,1500)
|
||||||
\]
|
$$
|
||||||
|
|
||||||
其中 \(W\) 是角域,\(\delta\) 取 \(1.005^\circ\) 保守裕量。
|
其中 $W$ 是角域,$\delta$ 取 $1.005^\circ$ 保守裕量。
|
||||||
然后:
|
然后:
|
||||||
|
|
||||||
\[
|
$$
|
||||||
\mathcal Q=\{q:\max_{g\in K_1}\|q-g\|\le1000\}
|
\mathcal{Q}=\left\{q:\max_{g\in K_1}\lVert q-g\rVert\le 1000\right\}
|
||||||
\]
|
$$
|
||||||
|
|
||||||
若 \( \mathcal Q\neq\varnothing \),在其中采样选点,评估最坏后验包围圆半径和移动成本。
|
若 $\mathcal{Q}\neq\varnothing$,在其中采样选点,评估最坏后验包围圆半径和移动成本。
|
||||||
若 \( \mathcal Q=\varnothing \),则退化为:
|
若 $\mathcal{Q}=\varnothing$,则退化为:
|
||||||
|
|
||||||
\[
|
$$
|
||||||
q^*=\arg\min_q \max_{g\in K_1}\|q-g\|
|
q^*=\arg\min_q\max_{g\in K_1}\lVert q-g\rVert
|
||||||
\]
|
$$
|
||||||
|
|
||||||
即选一个使最坏接收距离最小的点,同时结合交会角筛选。
|
即选一个使最坏接收距离最小的点,同时结合交会角筛选。
|
||||||
若 \(K_1\) 的外包圆为 \(B(c,r)\) 且 \(r<1000\),则 \(B(c,1000-r)\) 是更简单的充分候选区域。
|
若 $K_1$ 的外包圆为 $B(c,r)$ 且 $r<1000$,则 $B(c,1000-r)$ 是更简单的充分候选区域。
|
||||||
|
|
||||||
### 2. 问题4:定向源不要过早依赖 `no_signal` 删点
|
### 2. 问题4:定向源不要过早依赖 `no_signal` 删点
|
||||||
|
|
||||||
@@ -114,12 +114,12 @@ q^*=\arg\min_q \max_{g\in K_1}\|q-g\|
|
|||||||
|
|
||||||
### 4. 问题1:直径圆覆盖判断可给更明确算法
|
### 4. 问题1:直径圆覆盖判断可给更明确算法
|
||||||
|
|
||||||
对凸多边形 \(P\):
|
对凸多边形 $P$:
|
||||||
|
|
||||||
- 先求直径 \(D=\max_{i,j}\|v_i-v_j\|\);
|
- 先求直径 $D=\max_{i,j}\lVert v_i-v_j\rVert$;
|
||||||
- 枚举所有顶点对作为候选直径,检查其余顶点是否都在以该对为直径的圆内;
|
- 枚举所有顶点对作为候选直径,检查其余顶点是否都在以该对为直径的圆内;
|
||||||
- 若存在一个直径对使所有顶点在圆内,则覆盖;否则不覆盖;
|
- 若存在一个直径对使所有顶点在圆内,则覆盖;否则不覆盖;
|
||||||
- 但保证清除时不要用直径圆,要用最小包围圆 \( \rho(K)\le20 \)。
|
- 但保证清除时不要用直径圆,要用最小包围圆 $\rho(K)\le 20$。
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -144,9 +144,9 @@ q^*=\arg\min_q \max_{g\in K_1}\|q-g\|
|
|||||||
现有设计思路**整体可行且偏保守**,适合竞赛中“先保证全清,再优化时间”的目标。
|
现有设计思路**整体可行且偏保守**,适合竞赛中“先保证全清,再优化时间”的目标。
|
||||||
最需要立即补强的是:
|
最需要立即补强的是:
|
||||||
|
|
||||||
1. 问题2中 \(K_1\) 和 \( \mathcal Q\) 的严格定义及空集处理;
|
1. 问题2中 $K_1$ 和 $\mathcal{Q}$ 的严格定义及空集处理;
|
||||||
2. 问题4中定向源朝向不确定性和 `no_signal` 的正确使用;
|
2. 问题4中定向源朝向不确定性和 `no_signal` 的正确使用;
|
||||||
3. 现实20分钟窗口下的请求数控制;
|
3. 现实20分钟窗口下的请求数控制;
|
||||||
4. 正式测试时间安排,务必尽早演练并保留正式机会。
|
4. 正式测试时间安排,务必尽早演练并保留正式机会。
|
||||||
|
|
||||||
下一步最有价值的工作仍然是:**协议计时基线 + 几何内核 + 全向闭环**。完成这条链路后,再用演练数据决定是否加入加速策略。
|
下一步最有价值的工作仍然是:**协议计时基线 + 几何内核 + 全向闭环**。完成这条链路后,再用演练数据决定是否加入加速策略。
|
||||||
|
|||||||
+59
-59
@@ -6,21 +6,21 @@
|
|||||||
|
|
||||||
依据:`issue/B题.pdf` 全文、`issue/附件/附件1.docx`《模拟器使用说明》、`issue/附件/附件2.docx`《模拟器通信接口说明及编程指南》。文档中的登录、测试和日志要求在这里作为交付约束分析,不作为自动执行正式测试的指令。
|
依据:`issue/B题.pdf` 全文、`issue/附件/附件1.docx`《模拟器使用说明》、`issue/附件/附件2.docx`《模拟器通信接口说明及编程指南》。文档中的登录、测试和日志要求在这里作为交付约束分析,不作为自动执行正式测试的指令。
|
||||||
|
|
||||||
**本次建议的取舍**
|
## 本次建议的取舍
|
||||||
|
|
||||||
| 建议 | 处理结论 |
|
| 建议 | 处理结论 |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| 四问复用几何内核、有界误差、覆盖证明、严格停止、幂等协议 | 保留,作为主线与验收条件 |
|
| 四问复用几何内核、有界误差、覆盖证明、严格停止、幂等协议 | 保留,作为主线与验收条件 |
|
||||||
| 问题二的候选集合加入 Ω 和1500米上界 | 采纳,但仅加入在线候选集合K,不改变问题一纯角域多边形P |
|
| 问题二的候选集合加入 $\Omega$ 和 1500 米上界 | 采纳,但仅加入在线候选集合 $K$,不改变问题一纯角域多边形 $P$ |
|
||||||
| 问题二首次测向后安全区域可能为空 | 对一般K成立;本题首次窄角域可直接证明非空,见下文 |
|
| 问题二首次测向后安全区域可能为空 | 对一般 $K$ 成立;本题首次窄角域可直接证明非空,见下文 |
|
||||||
| Q为空就去最小包围圆圆心并结合交会角 | 仅是一般情形的探索退化;ρ>1000时不保证接收,不能冒充保底方案 |
|
| $Q$ 为空就去最小包围圆圆心并结合交会角 | 仅是一般情形的探索退化;$\rho>1000$ 时不保证接收,不能冒充保底方案 |
|
||||||
| 枚举所有直径对判断直径圆 | 简化为任意一组最远点对检查一次;失败时给出圆外顶点 |
|
| 枚举所有直径对判断直径圆 | 简化为任意一组最远点对检查一次;失败时给出圆外顶点 |
|
||||||
| 定向无信号不直接删位置、失去信号后覆盖清除 | 采纳;执行前必须计算覆盖格数、路径和现实请求预算 |
|
| 定向无信号不直接删位置、失去信号后覆盖清除 | 采纳;执行前必须计算覆盖格数、路径和现实请求预算 |
|
||||||
| 现实20分钟优先控制请求数 | 采纳为硬约束;全部清除后仍按题目虚拟时间优化 |
|
| 现实20分钟优先控制请求数 | 采纳为硬约束;全部清除后仍按题目虚拟时间优化 |
|
||||||
| P0–P7分期与尽早正式测试 | 采纳分期;演练不限定3次,正式问题3/4各3次由团队另行安排 |
|
| P0–P7分期与尽早正式测试 | 采纳分期;演练不限定3次,正式问题3/4各3次由团队另行安排 |
|
||||||
| `/detect` | 修正为附件规定的 `/measure` |
|
| `/detect` | 修正为附件规定的 `/measure` |
|
||||||
|
|
||||||
**1. 四问应当串成一条实现主线**
|
## 1. 四问应当串成一条实现主线
|
||||||
|
|
||||||
| 问题 | 要回答的实质问题 | 推荐抽象 | 必须交付的结果 |
|
| 问题 | 要回答的实质问题 | 推荐抽象 | 必须交付的结果 |
|
||||||
| --- | --- | --- | --- |
|
| --- | --- | --- | --- |
|
||||||
@@ -31,19 +31,19 @@
|
|||||||
|
|
||||||
第 1 问的定位区域和包围圆直接服务第 2 问选点与第 3、4 问清除;第 3 问的工程框架延伸到第 4 问。模型不必为每问重新搭建。
|
第 1 问的定位区域和包围圆直接服务第 2 问选点与第 3、4 问清除;第 3 问的工程框架延伸到第 4 问。模型不必为每问重新搭建。
|
||||||
|
|
||||||
**2. 用题面明确的观测能力约束物理抽象**
|
## 2. 用题面明确的观测能力约束物理抽象
|
||||||
|
|
||||||
目标区域为 Ω = {(x,y): x²+y²≤1800²}。每个频道最多有一个源,源总数为 10–16,频道为 1–20。对一个存在的源 c,用未知位置 g_c、接收半径 R_c∈[1000,1500]、类型和定向朝向描述;全向源不需要朝向参数。
|
目标区域为 $\Omega=\{(x,y):x^2+y^2\le 1800^2\}$。每个频道最多有一个源,源总数为 10–16,频道为 1–20。对一个存在的源 $c$,用未知位置 $g_c$、接收半径 $R_c\in[1000,1500]$、类型和定向朝向描述;全向源不需要朝向参数。
|
||||||
|
|
||||||
机器狗状态只需要位置 p、当前测向频道 k、虚拟时间、现实剩余时间、各频道的观测历史和处理状态。每个频道维护:未知/已发现待定位/可清除/已清除/已证明不存在,以及尚可能包含源的集合 K_c。
|
机器狗状态只需要位置 $p$、当前测向频道 $k$、虚拟时间、现实剩余时间、各频道的观测历史和处理状态。每个频道维护:未知/已发现待定位/可清除/已清除/已证明不存在,以及尚可能包含源的集合 $K_c$。
|
||||||
|
|
||||||
| 规则 | 数学或程序含义 | 容易出现的错误 |
|
| 规则 | 数学或程序含义 | 容易出现的错误 |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| 只返回 no_signal、near、direction;direction 附带示向度 | 这是带距离可见性门限的方位观测问题 | 构造接口并未提供的 RSSI、距离或场强数据 |
|
| 只返回 no_signal、near、direction;direction 附带示向度 | 这是带距离可见性门限的方位观测问题 | 构造接口并未提供的 RSSI、距离或场强数据 |
|
||||||
| 同地点误差固定,幅度不超过 1° | 用有界误差集合,保留空间相关性 | 原地重复测量取平均,假定可消除误差 |
|
| 同地点误差固定,幅度不超过 $1^\circ$ | 用有界误差集合,保留空间相关性 | 原地重复测量取平均,假定可消除误差 |
|
||||||
| 示向度保留两位小数 | 题设模型取 ±1°;实现可另设 ±1.005° 保守裕量 | 把额外舍入裕量写成题面规定 |
|
| 示向度保留两位小数 | 题设模型取 $\pm 1^\circ$;实现可另设 $\pm 1.005^\circ$ 保守裕量 | 把额外舍入裕量写成题面规定 |
|
||||||
| 定向源覆盖朝向两侧各 90°,包含边界 | 检测点须处于以源为界的发射半平面内 | 把无信号直接判定为没有源 |
|
| 定向源覆盖朝向两侧各 $90^\circ$,包含边界 | 检测点须处于以源为界的发射半平面内 | 把无信号直接判定为没有源 |
|
||||||
| 可到目标圆域外检测与清除 | 目标位置受 Ω 限制,机器狗正常搜索不受 Ω 限制 | 所有搜索点强制留在圆域内,遗漏朝外发射的边界源 |
|
| 可到目标圆域外检测与清除 | 目标位置受 $\Omega$ 限制,机器狗正常搜索不受 $\Omega$ 限制 | 所有搜索点强制留在圆域内,遗漏朝外发射的边界源 |
|
||||||
| 清除半径 20 米,不受定向朝向限制 | 清除可成为失去信号时的可靠后备手段 | 认为背面接收不到信号就无法清除 |
|
| 清除半径 20 米,不受定向朝向限制 | 清除可成为失去信号时的可靠后备手段 | 认为背面接收不到信号就无法清除 |
|
||||||
| /clear 不切换测向频道 | 保存独立的当前测向频道状态 | 清除后错误更新频道,算错下一次检测耗时 |
|
| /clear 不切换测向频道 | 保存独立的当前测向频道状态 | 清除后错误更新频道,算错下一次检测耗时 |
|
||||||
|
|
||||||
@@ -51,86 +51,86 @@
|
|||||||
|
|
||||||
精确的虚拟时间目标是:
|
精确的虚拟时间目标是:
|
||||||
|
|
||||||
\[
|
$$
|
||||||
T=\frac{L}{5}+N_{\mathrm{switch}}+5N_{\mathrm{measure}}
|
T=\frac{L}{5}+N_{\mathrm{switch}}+5N_{\mathrm{measure}}
|
||||||
+5N_{\mathrm{clear,success}}+3N_{\mathrm{clear,fail}}.
|
+5N_{\mathrm{clear,success}}+3N_{\mathrm{clear,fail}}.
|
||||||
\]
|
$$
|
||||||
|
|
||||||
L 包括检测和清除引发的所有移动,切换次数只由被接受的检测动作决定。先满足全部清除,再减少 T;不能通过少清几个源来改善平均时间。程序运行时间是另一个硬约束,不能把虚拟检测的 5 秒实现为现实 sleep(5)。
|
$L$ 包括检测和清除引发的所有移动,切换次数只由被接受的检测动作决定。先满足全部清除,再减少 $T$;不能通过少清几个源来改善平均时间。程序运行时间是另一个硬约束,不能把虚拟检测的 5 秒实现为现实 `sleep(5)`。
|
||||||
|
|
||||||
**3. 定位与选点的统一几何标准**
|
## 3. 定位与选点的统一几何标准
|
||||||
|
|
||||||
在 s_i 测到 θ_i 后,定义 W_i 为从 s_i 出发、方向范围 [θ_i−δ,θ_i+δ] 的前向角域。它由两条线性半平面约束表示,必须正确处理 0°/360° 跨界。
|
在 $s_i$ 测到 $\theta_i$ 后,定义 $W_i$ 为从 $s_i$ 出发、方向范围 $[\theta_i-\delta,\theta_i+\delta]$ 的前向角域。它由两条线性半平面约束表示,必须正确处理 $0^\circ/360^\circ$ 跨界。
|
||||||
|
|
||||||
第 1 问的定位多边形 P 为这些角域的交。求各边界直线交点并筛选可行点、排序成凸多边形后,小规模下直接枚举顶点对即可计算直径:
|
第 1 问的定位多边形 $P$ 为这些角域的交。求各边界直线交点并筛选可行点、排序成凸多边形后,小规模下直接枚举顶点对即可计算直径:
|
||||||
|
|
||||||
\[
|
$$
|
||||||
D(P)=\max_{i,j}\|v_i-v_j\|.
|
D(P)=\max_{i,j}\lVert v_i-v_j\rVert.
|
||||||
\]
|
$$
|
||||||
|
|
||||||
先用简单可靠的顶点对枚举作基准,规模确有需要时再换旋转卡壳。算法必须区分空集、单点、线段、有限多边形和无界区域;不能靠任意大方框截断后声称得到无界区域的真实直径。旋转卡壳的背景可参考 [McGill 计算几何研究页面](https://www-cgrl.cs.mcgill.ca/~godfried/research/calipers.html)。
|
先用简单可靠的顶点对枚举作基准,规模确有需要时再换旋转卡壳。算法必须区分空集、单点、线段、有限多边形和无界区域;不能靠任意大方框截断后声称得到无界区域的真实直径。旋转卡壳的背景可参考 [McGill 计算几何研究页面](https://www-cgrl.cs.mcgill.ca/~godfried/research/calipers.html)。
|
||||||
|
|
||||||
**直径为 D 的圆不一定覆盖直径为 D 的区域。**例如边长 D 的等边三角形,最小包围圆半径为 D/√3,大于 D/2。后续保证清除应使用:
|
**直径为 $D$ 的圆不一定覆盖直径为 $D$ 的区域。**例如边长为 $D$ 的等边三角形,最小包围圆半径为 $D/\sqrt{3}$,大于 $D/2$。后续保证清除应使用:
|
||||||
|
|
||||||
\[
|
$$
|
||||||
\rho(K)=\min_z\max_{g\in K}\|g-z\|\le20.
|
\rho(K)=\min_z\max_{g\in K}\lVert g-z\rVert\le 20.
|
||||||
\]
|
$$
|
||||||
|
|
||||||
到最小包围圆圆心清除是充分选择,并非唯一选择。所有可保证清除的位置组成 C₂₀(K)=∩_{g∈K}B(g,20);只要该集合非空,就可进一步选择距离机器狗最近的可行点来节省移动。D≤40只是必要条件,不是充分条件。最小包围圆是已有标准计算几何问题,可参考 [CGAL Min_circle_2 文档](https://doc.cgal.org/latest/Bounding_volumes/classCGAL_1_1Min__circle__2.html)。实现时给20米阈值保留数值余量;数值阈值附近返回谨慎判断,不把浮点容差当作精确算术证明。
|
到最小包围圆圆心清除是充分选择,并非唯一选择。所有可保证清除的位置组成 $C_{20}(K)=\bigcap_{g\in K}B(g,20)$;只要该集合非空,就可进一步选择距离机器狗最近的可行点来节省移动。$D\le 40$ 只是必要条件,不是充分条件。最小包围圆是已有标准计算几何问题,可参考 [CGAL Min_circle_2 文档](https://doc.cgal.org/latest/Bounding_volumes/classCGAL_1_1Min__circle__2.html)。实现时给 20 米阈值保留数值余量;数值阈值附近返回谨慎判断,不把浮点容差当作精确算术证明。
|
||||||
|
|
||||||
直径圆覆盖只需任意一组最远顶点A、B:包含距离D的两点且半径为D/2的圆,其圆心只能是(A+B)/2。因此检查一次全部顶点即可;若失败,换另一组直径对也不可能产生覆盖圆。问题一实现现输出最坏超出距离、圆外顶点索引和一个具体反例顶点。
|
直径圆覆盖只需任意一组最远顶点 $A,B$:包含距离为 $D$ 的两点且半径为 $D/2$ 的圆,其圆心只能是 $(A+B)/2$。因此检查一次全部顶点即可;若失败,换另一组直径对也不可能产生覆盖圆。问题一实现现输出最坏超出距离、圆外顶点索引和一个具体反例顶点。
|
||||||
|
|
||||||
在线定位还可用 Ω 和“收到信号意味着距离≤1500”约束 K。圆盘交角域可能包含曲线边界;若用多边形近似,必须构造外包近似,才能维持“不丢失真源”的保证。用圆周采样点连成的内接多边形不能直接作为保守外包。
|
在线定位还可用 $\Omega$ 和“收到信号意味着距离 $\le 1500$”约束 $K$。圆盘交角域可能包含曲线边界;若用多边形近似,必须构造外包近似,才能维持“不丢失真源”的保证。用圆周采样点连成的内接多边形不能直接作为保守外包。
|
||||||
|
|
||||||
第 2 问建议先明确“较好的定位效果”:以新观测后的最坏包围圆半径为主要几何指标,再考虑移动和检测成本。交会角大、面积小可作为候选点筛选指标,但不是对所有未知位置都最优的证明。
|
第 2 问建议先明确“较好的定位效果”:以新观测后的最坏包围圆半径为主要几何指标,再考虑移动和检测成本。交会角大、面积小可作为候选点筛选指标,但不是对所有未知位置都最优的证明。
|
||||||
|
|
||||||
第一次收到direction后,明确取K₁=Ω∩W(s₁,θ₁±δ)∩B(s₁,1500)。保留整个距离圆盘是保守处理,忽略direction还隐含的近距离排除不会丢失真源。对全向源,第二检测点的安全候选区域为:
|
第一次收到 `direction` 后,明确取 $K_1=\Omega\cap W(s_1,\theta_1\pm\delta)\cap B(s_1,1500)$。保留整个距离圆盘是保守处理,忽略 `direction` 还隐含的近距离排除不会丢失真源。对全向源,第二检测点的安全候选区域为:
|
||||||
|
|
||||||
\[
|
$$
|
||||||
\mathcal Q=\{q:\max_{g\in K_1}\|q-g\|\le1000\}.
|
\mathcal{Q}=\left\{q:\max_{g\in K_1}\lVert q-g\rVert\le 1000\right\}.
|
||||||
\]
|
$$
|
||||||
|
|
||||||
在这里测量,不论实际目标位于K₁何处,接收距离都满足题目最小接收半径;可能返回direction,也可能返回near。若已知外包圆K₁⊆B(c,r),且r≤1000,则B(c,1000−r)是充分候选区域,等号时是单点。不要误写成“距第一次检测点不超过1000米”。宽松外包圆的r>1000不能证明真实Q为空。
|
在这里测量,不论实际目标位于 $K_1$ 何处,接收距离都满足题目最小接收半径;可能返回 `direction`,也可能返回 `near`。若已知外包圆 $K_1\subseteq B(c,r)$,且 $r\le 1000$,则 $B(c,1000-r)$ 是充分候选区域,等号时是单点。不要误写成“距第一次检测点不超过 1000 米”。宽松外包圆的 $r>1000$ 不能证明真实 $\mathcal{Q}$ 为空。
|
||||||
|
|
||||||
本题还有比“检查Q是否为空”更强的解析结论。令R=1500,u为第一次示向方向,δ≤45°,定义
|
本题还有比“检查 $\mathcal{Q}$ 是否为空”更强的解析结论。令 $R=1500$,$u$ 为第一次示向方向,$\delta\le 45^\circ$,定义
|
||||||
|
|
||||||
\[
|
$$
|
||||||
a=\frac{R}{2\cos\delta},\qquad c=s_1+a u.
|
a=\frac{R}{2\cos\delta},\qquad c=s_1+au.
|
||||||
\]
|
$$
|
||||||
|
|
||||||
整个截断角域W∩B(s₁,R)包含在B(c,a)内。证明:任意候选g=s₁+t uφ满足0≤t≤R、|φ−θ₁|≤δ,因此
|
整个截断角域 $W\cap B(s_1,R)$ 包含在 $B(c,a)$ 内。证明:任意候选 $g=s_1+tu_\varphi$ 满足 $0\le t\le R$、$|\varphi-\theta_1|\le\delta$,因此
|
||||||
|
|
||||||
\[
|
$$
|
||||||
\|g-c\|^2=t^2+a^2-2at\cos(\varphi-\theta_1).
|
\lVert g-c\rVert^2=t^2+a^2-2at\cos(\varphi-\theta_1).
|
||||||
\]
|
$$
|
||||||
|
|
||||||
该式关于t是凸函数,最大值在0或R取得;两端都不超过a²。于是K₁⊆B(c,a),从而B(c,1000−a)⊆Q。δ=1.005°时,a≈750.115391米,安全圆盘半径约249.884609米,严格为正;题设δ=1°同样成立。即使检测点或c在Ω外也合法,因为机器狗不受源位置圆域限制。实现见 `geometry/planning.py::first_bearing_candidate_disk`。
|
该式关于 $t$ 是凸函数,最大值在 $0$ 或 $R$ 取得;两端都不超过 $a^2$。于是 $K_1\subseteq B(c,a)$,从而 $B(c,1000-a)\subseteq\mathcal{Q}$。$\delta=1.005^\circ$ 时,$a\approx 750.115391$ 米,安全圆盘半径约 $249.884609$ 米,严格为正;题设 $\delta=1^\circ$ 同样成立。即使检测点或 $c$ 在 $\Omega$ 外也合法,因为机器狗不受源位置圆域限制。实现见 `geometry/planning.py::first_bearing_candidate_disk`。
|
||||||
|
|
||||||
因此,在本题一致的首次测向条件下无需依赖“Q空集退化”。对后续更一般的非空紧集K,Q非空当且仅当ρ(K)≤1000;若确实ρ>1000,去MEC圆心只是最小化最坏接收距离的探索动作,必须允许no_signal。若K为空,应先核查频道、数据、误差界与几何计算,不给空集编造中心。上述证书只保证距离;不能直接用于定向源的朝向可见性保证。
|
因此,在本题一致的首次测向条件下无需依赖“$\mathcal{Q}$ 空集退化”。对后续更一般的非空紧集 $K$,$\mathcal{Q}$ 非空当且仅当 $\rho(K)\le 1000$;若确实 $\rho>1000$,去 MEC 圆心只是最小化最坏接收距离的探索动作,必须允许 `no_signal`。若 $K$ 为空,应先核查频道、数据、误差界与几何计算,不给空集编造中心。上述证书只保证距离;不能直接用于定向源的朝向可见性保证。
|
||||||
|
|
||||||
在上述安全圆盘内,围绕测向轴两侧取候选点,计算后验包围半径与动作代价。最坏情形目标可写为sup ρ(K₁∩W(q,θ′)),θ′遍历与K₁和误差界一致的读数;实现先用目标位置与误差区间端点采样,并加密检查。若返回near,则候选源位于当前点5米以内,可直接在当前位置尝试清除该频道。交会角仅作筛选或同分择优,不为改善交会角越出已证明安全的候选区域。采样是启发式,不能称为严格最坏情形最优解;圆弧先验如需离散,使用外包切线多边形并记录逼近误差。
|
在上述安全圆盘内,围绕测向轴两侧取候选点,计算后验包围半径与动作代价。最坏情形目标可写为 $\sup_{\theta'}\rho\bigl(K_1\cap W(q,\theta')\bigr)$,其中 $\theta'$ 遍历与 $K_1$ 和误差界一致的读数;实现先用目标位置与误差区间端点采样,并加密检查。若返回 `near`,则候选源位于当前点 5 米以内,可直接在当前位置尝试清除该频道。交会角仅作筛选或同分择优,不为改善交会角越出已证明安全的候选区域。采样是启发式,不能称为严格最坏情形最优解;圆弧先验如需离散,使用外包切线多边形并记录逼近误差。
|
||||||
|
|
||||||
**4. 搜索完整性和停止条件要有可验证的依据**
|
## 4. 搜索完整性和停止条件要有可验证的依据
|
||||||
|
|
||||||
第 3 问中,在 s 对尚未清除频道测得 no_signal,可以排除以 s 为中心、半径1000米的圆盘内存在该全向源。超过1000米仍可能存在接收半径较小的源,不能一律排除到1500米。
|
第 3 问中,在 $s$ 对尚未清除频道测得 `no_signal`,可以排除以 $s$ 为中心、半径 1000 米的圆盘内存在该全向源。超过 1000 米仍可能存在接收半径较小的源,不能一律排除到 1500 米。
|
||||||
|
|
||||||
第 4 问中,同样的 no_signal 约束的是“位置、半径、朝向”的联合假设。若位置和朝向暂不联合维护,最简单的可靠基线就是不利用这一观测直接删除空间候选点,只记录覆盖检测已完成。后续加速版本再维护朝向可行集合。
|
第 4 问中,同样的 `no_signal` 约束的是“位置、半径、朝向”的联合假设。若位置和朝向暂不联合维护,最简单的可靠基线就是不利用这一观测直接删除空间候选点,只记录覆盖检测已完成。后续加速版本再维护朝向可行集合。
|
||||||
|
|
||||||
可以先构造一个对全向、定向均适用的完整发现基线:
|
可以先构造一个对全向、定向均适用的完整发现基线:
|
||||||
|
|
||||||
\[
|
$$
|
||||||
S=\{(700i,700j):i,j=-3,-2,\ldots,3\},\quad |S|=49.
|
S=\{(700i,700j):i,j=-3,-2,\ldots,3\},\quad |S|=49.
|
||||||
\]
|
$$
|
||||||
|
|
||||||
这些点覆盖 [-2100,2100]²,包含目标圆域,并允许到圆域外访问。对于位于一个网格单元内部的源 g,该单元4个顶点到 g 的距离都不超过700√2≈989.95米。g 在这些顶点的凸包内部,所以经过 g 的任意发射半平面总包含至少一个顶点。该顶点满足接收距离与发射角条件。源恰在网格边或顶点时,取相邻单元的顶点;由于目标圆域与外框有余量,两侧相邻点都存在,仍可选择距离合格、且不与源重合的可见点。
|
这些点覆盖 $[-2100,2100]^2$,包含目标圆域,并允许到圆域外访问。对于位于一个网格单元内部的源 $g$,该单元 4 个顶点到 $g$ 的距离都不超过 $700\sqrt{2}\approx 989.95$ 米。$g$ 在这些顶点的凸包内部,所以经过 $g$ 的任意发射半平面总包含至少一个顶点。该顶点满足接收距离与发射角条件。源恰在网格边或顶点时,取相邻单元的顶点;由于目标圆域与外框有余量,两侧相邻点都存在,仍可选择距离合格、且不与源重合的可见点。
|
||||||
|
|
||||||
因此,对每个尚未解决的频道完成这些点的测量,能够保证发现该频道存在的源。实际实现可跳过已经清除或已经具有有效定位任务的频道,但必须保存逐频道的覆盖记录,不能把“路过某点”当作“测过所有频道”。
|
因此,对每个尚未解决的频道完成这些点的测量,能够保证发现该频道存在的源。实际实现可跳过已经清除或已经具有有效定位任务的频道,但必须保存逐频道的覆盖记录,不能把“路过某点”当作“测过所有频道”。
|
||||||
|
|
||||||
作为规模检查,49点全部扫描20频道最多需要980次检测。若从原点去网格一角,再按逐行折返路线扫完,纯扫描路程约36569.85米;每点检测成本上界120秒,纯扫描虚拟总耗时上界约13193.97秒,即3.665小时。**该估算不含定位、清除及其绕行,也不保证满足现实20分钟窗口。**它说明覆盖基线在100小时虚拟上限内有设计空间,现实可行性仍要测接口延迟、总请求数和日志大小。
|
作为规模检查,49点全部扫描20频道最多需要980次检测。若从原点去网格一角,再按逐行折返路线扫完,纯扫描路程约36569.85米;每点检测成本上界120秒,纯扫描虚拟总耗时上界约13193.97秒,即3.665小时。**该估算不含定位、清除及其绕行,也不保证满足现实20分钟窗口。**它说明覆盖基线在100小时虚拟上限内有设计空间,现实可行性仍要测接口延迟、总请求数和日志大小。
|
||||||
|
|
||||||
发现源后,先通过主动测向缩小候选集合。若定向源再次失去信号,可对已知有界候选集合构造半径小于20米的有限圆盘覆盖,逐点调用/clear,作为不依赖朝向的后备清除方法。边长20米方格中心距格内任何点不超过10√2米;保留与候选集合相交的格子即可保守覆盖。格子按统一半开区间索引,源恰在网格线上时至少归入一个格子;若相交判定数值不确定则保留格子。
|
发现源后,先通过主动测向缩小候选集合。若定向源再次失去信号,可对已知有界候选集合构造半径小于 20 米的有限圆盘覆盖,逐点调用 `/clear`,作为不依赖朝向的后备清除方法。边长 20 米方格中心距格内任何点不超过 $10\sqrt{2}$ 米;保留与候选集合相交的格子即可保守覆盖。格子按统一半开区间索引,源恰在网格线上时至少归入一个格子;若相交判定数值不确定则保留格子。
|
||||||
|
|
||||||
有限不等于现实预算可行。设候选外包框宽w、高h,使用全局20米网格枚举时,上界可取N≤(⌈w/20⌉+2)(⌈h/20⌉+2),再以实际相交格子列表得到精确请求上限。生成路径长度L后,单源全失败清除耗时为L/5+3N;若最后一次成功则为L/5+3(N−1)+5。现实代价用N乘实测单请求高分位耗时加本地计算时间估计。不满足剩余预算时应继续有希望的定位、选择其它任务或按预算退出,不能声称后备清除保证20分钟内成功。即使已知源落在半径1500米圆盘,按外包框枚举仍有约2.3万个格子的量级,故宽候选集合不能直接盲扫。
|
有限不等于现实预算可行。设候选外包框宽为 $w$、高为 $h$,使用全局 20 米网格枚举时,上界可取 $N\le(\lceil w/20\rceil+2)(\lceil h/20\rceil+2)$,再以实际相交格子列表得到精确请求上限。生成路径长度 $L$ 后,单源全失败清除耗时为 $L/5+3N$;若最后一次成功则为 $L/5+3(N-1)+5$。现实代价用 $N$ 乘实测单请求高分位耗时加本地计算时间估计。不满足剩余预算时应继续有希望的定位、选择其它任务或按预算退出,不能声称后备清除保证 20 分钟内成功。即使已知源落在半径 1500 米圆盘,按外包框枚举仍有约 $2.3$ 万个格子的量级,故宽候选集合不能直接盲扫。
|
||||||
|
|
||||||
停止成功的依据为以下任一项:
|
停止成功的依据为以下任一项:
|
||||||
|
|
||||||
@@ -139,7 +139,7 @@ S=\{(700i,700j):i,j=-3,-2,\ldots,3\},\quad |S|=49.
|
|||||||
|
|
||||||
发现10个源、连续若干次无信号、候选采样点恰好为空,都不是充分停止条件。现实预算不足而退出应记为未证明完成,不能与成功退出混记。
|
发现10个源、连续若干次无信号、候选采样点恰好为空,都不是充分停止条件。现实预算不足而退出应记为未证明完成,不能与成功退出混记。
|
||||||
|
|
||||||
**5. 在可靠基线之上增加加速策略**
|
## 5. 在可靠基线之上增加加速策略
|
||||||
|
|
||||||
先做“发现一个、定位清除一个”的简单闭环,保证功能可运行;再增加以下独立可开关的策略,以便消融比较:
|
先做“发现一个、定位清除一个”的简单闭环,保证功能可运行;再增加以下独立可开关的策略,以便消融比较:
|
||||||
|
|
||||||
@@ -156,7 +156,7 @@ S=\{(700i,700j):i,j=-3,-2,\ldots,3\},\quad |S|=49.
|
|||||||
|
|
||||||
AI 的适合用法是把这些模块逐一变成可测试程序、生成边界案例、分析消融结果,以及在自建环境中搜索策略参数。先形成可解释基线,再判断学习方法是否有额外收益;避免把未建立的奖励与训练分布直接用于正式测试。
|
AI 的适合用法是把这些模块逐一变成可测试程序、生成边界案例、分析消融结果,以及在自建环境中搜索策略参数。先形成可解释基线,再判断学习方法是否有额外收益;避免把未建立的奖励与训练分布直接用于正式测试。
|
||||||
|
|
||||||
**6. 抽象标准和验收标准**
|
## 6. 抽象标准和验收标准
|
||||||
|
|
||||||
采用“来源—输入—状态—动作—观测—约束—代价—输出—验证”的统一模块记录格式。它是本项目建议的工程标准,不是竞赛另行规定的官方评分标准。每个假设注明是题面事实、保守近似还是实验启发式;每条结论注明是数学证明还是演练观察。
|
采用“来源—输入—状态—动作—观测—约束—代价—输出—验证”的统一模块记录格式。它是本项目建议的工程标准,不是竞赛另行规定的官方评分标准。每个假设注明是题面事实、保守近似还是实验启发式;每条结论注明是数学证明还是演练观察。
|
||||||
|
|
||||||
@@ -177,11 +177,11 @@ AI 的适合用法是把这些模块逐一变成可测试程序、生成边界
|
|||||||
|
|
||||||
980次检测在单次0.5–1秒的假设下占490–980秒(约8.17–16.33分钟),还没有定位清除余量。这个延迟范围不是实测结论;本地接口和模拟器计算的实际耗时应测量。当前14个动作的单次短演练不足以估计高分位延迟或全程稳定性。已清除频道跳过,已发现频道暂停覆盖并进入定位队列,移动到同一点后共享频道测量;自适应跳点必须保留逐频道覆盖证据。根据附件,正式上传日志不超过2MB,需监测官方日志体积;自建JSON大小不能冒充加密日志的大小。
|
980次检测在单次0.5–1秒的假设下占490–980秒(约8.17–16.33分钟),还没有定位清除余量。这个延迟范围不是实测结论;本地接口和模拟器计算的实际耗时应测量。当前14个动作的单次短演练不足以估计高分位延迟或全程稳定性。已清除频道跳过,已发现频道暂停覆盖并进入定位队列,移动到同一点后共享频道测量;自适应跳点必须保留逐频道覆盖证据。根据附件,正式上传日志不超过2MB,需监测官方日志体积;自建JSON大小不能冒充加密日志的大小。
|
||||||
|
|
||||||
基准实验至少覆盖:全向与混合源;数量10和16;接收半径1000和1500米;目标贴近圆域边界且朝外;测向接近0°/360°;误差取界值;检测点距离5米及清除距离20米的边界;重复请求、拒绝动作及短暂断连。样例数量按剩余时间和运行成本安排,不把有限样例通过等同于数学保证。
|
基准实验至少覆盖:全向与混合源;数量 10 和 16;接收半径 1000 和 1500 米;目标贴近圆域边界且朝外;测向接近 $0^\circ/360^\circ$;误差取界值;检测点距离 5 米及清除距离 20 米的边界;重复请求、拒绝动作及短暂断连。样例数量按剩余时间和运行成本安排,不把有限样例通过等同于数学保证。
|
||||||
|
|
||||||
比较策略时先看是否全清,再比较同一批场景的总虚拟时间、平均每源时间、中位数与高分位耗时、程序时间、请求数。自建环境可用固定场景做配对比较;官方案例随机且不能重读真值,演练成绩单独记录,不声称是在完全相同的隐藏案例上比较。
|
比较策略时先看是否全清,再比较同一批场景的总虚拟时间、平均每源时间、中位数与高分位耗时、程序时间、请求数。自建环境可用固定场景做配对比较;官方案例随机且不能重读真值,演练成绩单独记录,不声称是在完全相同的隐藏案例上比较。
|
||||||
|
|
||||||
**7. 建议实施次序与阶段交付**
|
## 7. 建议实施次序与阶段交付
|
||||||
|
|
||||||
下面按P0–P7列出可执行交付与当前状态。排期以验收门槛推进,避免把“几何代码完成”误认为“全清策略完成”。
|
下面按P0–P7列出可执行交付与当前状态。排期以验收门槛推进,避免把“几何代码完成”误认为“全清策略完成”。
|
||||||
|
|
||||||
@@ -190,7 +190,7 @@ AI 的适合用法是把这些模块逐一变成可测试程序、生成边界
|
|||||||
| P0 规则固定 | 规则表、状态机、四类API字段与成本 | 示例逐步105/111/194/199秒;clear不切换频道 | 已核对规则,完整状态机待工程化 |
|
| P0 规则固定 | 规则表、状态机、四类API字段与成本 | 示例逐步105/111/194/199秒;clear不切换频道 | 已核对规则,完整状态机待工程化 |
|
||||||
| P1 协议基线 | enter/measure/clear/exit客户端;串行、幂等、截止时间 | accepted=false和超时重试不污染状态;主动退出;故障注入回放 | 已有少量测向采集器及真实计时回放;完整客户端待实现 |
|
| P1 协议基线 | enter/measure/clear/exit客户端;串行、幂等、截止时间 | accepted=false和超时重试不污染状态;主动退出;故障注入回放 | 已有少量测向采集器及真实计时回放;完整客户端待实现 |
|
||||||
| P2 几何内核 | 问题一解答、区域分类、直径圆证据、MEC、清除余量 | 跨界、退化、无界、解析反例、独立算法对照 | 已实现并优化,20项自动化测试通过 |
|
| P2 几何内核 | 问题一解答、区域分类、直径圆证据、MEC、清除余量 | 跨界、退化、无界、解析反例、独立算法对照 | 已实现并优化,20项自动化测试通过 |
|
||||||
| P3 问题二选点 | K₁先验、安全候选盘、后验半径采样与near分支 | 距离证书有效;采样加密;不把探索当接收保证 | 解析非空证明及证书已实现;选点器与实验待实现 |
|
| P3 问题二选点 | $K_1$ 先验、安全候选盘、后验半径采样与 `near` 分支 | 距离证书有效;采样加密;不把探索当接收保证 | 解析非空证明及证书已实现;选点器与实验待实现 |
|
||||||
| P4 全向闭环 | 49点覆盖记录、定位队列、清除、停止、日志统计 | 10/16源、边界源和错误响应案例;官方演练全清并正常退出 | 待实现 |
|
| P4 全向闭环 | 49点覆盖记录、定位队列、清除、停止、日志统计 | 10/16源、边界源和错误响应案例;官方演练全清并正常退出 | 待实现 |
|
||||||
| P5 定向扩展 | no_signal联合约束、覆盖发现、有限清除后备与预算 | 朝外边界源不漏;真源不误删;格数与退出预算检查 | 已有证明和设计;闭环待实现 |
|
| P5 定向扩展 | no_signal联合约束、覆盖发现、有限清除后备与预算 | 朝外边界源不漏;真源不误删;格数与退出预算检查 | 已有证明和设计;闭环待实现 |
|
||||||
| P6 加速消融 | 共享测点、自适应覆盖、目标排序、提前清除 | 配对案例全清不退化,时间/请求数改善可复算 | 可删减;复杂学习与朝向搜索后置 |
|
| P6 加速消融 | 共享测点、自适应覆盖、目标排序、提前清除 | 配对案例全清不退化,时间/请求数改善可复算 | 可删减;复杂学习与朝向搜索后置 |
|
||||||
@@ -202,11 +202,11 @@ AI 的适合用法是把这些模块逐一变成可测试程序、生成边界
|
|||||||
|
|
||||||
建议后续代码划分为 protocol、geometry、belief、coverage、planner、local_simulator、evaluation 七个模块。官方客户端与自建环境使用同一动作接口;自建真值只对测试端开放,策略端只能看到观测,防止评估时意外使用隐藏答案。
|
建议后续代码划分为 protocol、geometry、belief、coverage、planner、local_simulator、evaluation 七个模块。官方客户端与自建环境使用同一动作接口;自建真值只对测试端开放,策略端只能看到观测,防止评估时意外使用隐藏答案。
|
||||||
|
|
||||||
**8. 当前已落实的结论与下一步**
|
## 8. 当前已落实的结论与下一步
|
||||||
|
|
||||||
已完成题面与附件核对、49点覆盖推导及扫描成本复算;此前497160个位置与朝向组合的辅助数值校核未发现覆盖遗漏,但采样不代替证明。问题一已通过官方演练三点观测离线验证;该次只有enter、measure、exit,没有清除动作,不能当作全清策略成绩。
|
已完成题面与附件核对、49点覆盖推导及扫描成本复算;此前497160个位置与朝向组合的辅助数值校核未发现覆盖遗漏,但采样不代替证明。问题一已通过官方演练三点观测离线验证;该次只有enter、measure、exit,没有清除动作,不能当作全清策略成绩。
|
||||||
|
|
||||||
本次将MEC从全支撑点枚举改为带固定随机种子的Welzl增量算法,保留原枚举法作独立对照;对外输出增加直径圆反例顶点、超出距离和20米清除余量。CLI可显式追加0.005°舍入裕量。真实演练默认δ=1°时D=23.996723米、ρ=12.068583米;δ=1.005°时D=24.119088米、ρ=12.130377米,两种口径下直径圆都不覆盖,但MEC半径都小于20米。原始演练记录未改写。
|
本次将 MEC 从全支撑点枚举改为带固定随机种子的 Welzl 增量算法,保留原枚举法作独立对照;对外输出增加直径圆反例顶点、超出距离和 20 米清除余量。CLI 可显式追加 $0.005^\circ$ 舍入裕量。真实演练默认 $\delta=1^\circ$ 时 $D=23.996723$ 米、$\rho=12.068583$ 米;$\delta=1.005^\circ$ 时 $D=24.119088$ 米、$\rho=12.130377$ 米,两种口径下直径圆都不覆盖,但 MEC 半径都小于 20 米。原始演练记录未改写。
|
||||||
|
|
||||||
可复现报告见 `output/q1/optimization_report.json`,问题一证明、输入输出及数值限制见 `docs/问题一解答.md`。局部MEC基准只反映本地几何计算,不能据此宣称请求延迟、完整策略或官方成绩得到同样提升。
|
可复现报告见 `output/q1/optimization_report.json`,问题一证明、输入输出及数值限制见 `docs/问题一解答.md`。局部MEC基准只反映本地几何计算,不能据此宣称请求延迟、完整策略或官方成绩得到同样提升。
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# B题问题一 交会定位
|
# B题问题一 交会定位
|
||||||
|
|
||||||
给定同一干扰源的检测点坐标及带±1°误差的示向度,计算前向角域交集、定位区域直径、直径圆覆盖判断与最小包围圆。
|
给定同一干扰源的检测点坐标及带 $\pm 1^\circ$ 误差的示向度,计算前向角域交集、定位区域直径、直径圆覆盖判断与最小包围圆。
|
||||||
|
|
||||||
- [完整中文解答与算法证明](docs/问题一解答.md)
|
- [完整中文解答与算法证明](docs/问题一解答.md)
|
||||||
- [修订后的四问思路与P0–P7计划](B题建模分析与实施计划.md)
|
- [修订后的四问思路与P0–P7计划](B题建模分析与实施计划.md)
|
||||||
@@ -22,7 +22,7 @@ python scripts/benchmark_q1.py
|
|||||||
|
|
||||||
用浏览器打开 `output/q1/question1.html`。可选择合成反例或官方演练,逐个加入测点,切换全景与定位区域放大。
|
用浏览器打开 `output/q1/question1.html`。可选择合成反例或官方演练,逐个加入测点,切换全景与定位区域放大。
|
||||||
|
|
||||||
输出新增直径圆覆盖反例顶点、最大超出距离和20米清除余量;默认仍为题设±1°,舍入裕量须显式启用。最小包围圆使用可复现的随机增量算法,原枚举法保留作独立对照。`geometry.first_bearing_candidate_disk` 提供问题二首次测向安全区域的解析证书;问题二选点优化器及问题三、四的全清闭环仍待实现。
|
输出新增直径圆覆盖反例顶点、最大超出距离和 20 米清除余量;默认仍为题设 $\pm 1^\circ$,舍入裕量须显式启用。最小包围圆使用可复现的随机增量算法,原枚举法保留作独立对照。`geometry.first_bearing_candidate_disk` 提供问题二首次测向安全区域的解析证书;问题二选点优化器及问题三、四的全清闭环仍待实现。
|
||||||
|
|
||||||
可视化事件检查使用Node.js:`node scripts/verify_visualization.cjs`。可选PNG重绘使用Pillow及Windows微软雅黑字体:`python scripts/render_q1_figures.py`;这些只用于图形校核,不是核心求解依赖。
|
可视化事件检查使用Node.js:`node scripts/verify_visualization.cjs`。可选PNG重绘使用Pillow及Windows微软雅黑字体:`python scripts/render_q1_figures.py`;这些只用于图形校核,不是核心求解依赖。
|
||||||
|
|
||||||
|
|||||||
+68
-68
@@ -4,62 +4,62 @@
|
|||||||
|
|
||||||
代码、合成算例与官方演练观测均已实现和保存。本解答只解决问题一;在官方问题3演练中采集同一频道的三个检测点,用于检验交会计算,没有执行全域搜索清除任务,未使用正式测试。
|
代码、合成算例与官方演练观测均已实现和保存。本解答只解决问题一;在官方问题3演练中采集同一频道的三个检测点,用于检验交会计算,没有执行全域搜索清除任务,未使用正式测试。
|
||||||
|
|
||||||
**一 题目假设和模型边界**
|
## 一、题目假设和模型边界
|
||||||
|
|
||||||
检测点为 \(S_i=(s_{ix},s_{iy})\),测得示向度为 \(\theta_i\),误差半角为 \(\delta=1^\circ\)。角度从正东开始逆时针计算。同一频道对应同一干扰源;位置不变时重复检测不会消除误差。
|
检测点为 $S_i=(s_{ix},s_{iy})$,测得示向度为 $\theta_i$,误差半角为 $\delta=1^\circ$。角度从正东开始逆时针计算。同一频道对应同一干扰源;位置不变时重复检测不会消除误差。
|
||||||
|
|
||||||
本问求附录2交会法所定义的多边形,因此主模型只取前向角域之交,不额外加入1800米圆域或1500米接收上界。这些先验可用于后续搜索定位,但加入圆盘后边界可能包含圆弧,不能仍按原问题的纯多边形处理。本程序也不以图像视窗作为真实边界。
|
本问求附录2交会法所定义的多边形,因此主模型只取前向角域之交,不额外加入1800米圆域或1500米接收上界。这些先验可用于后续搜索定位,但加入圆盘后边界可能包含圆弧,不能仍按原问题的纯多边形处理。本程序也不以图像视窗作为真实边界。
|
||||||
|
|
||||||
模拟器示向度保留两位小数,正文规定误差在±1°内。本次主计算使用±1°;如需把独立舍入误差也纳入保守预算,可用 `--rounding-margin-deg 0.005` 显式追加半角,输出会记录实际误差半角。这是额外的工程裕量,不是题面规定。
|
模拟器示向度保留两位小数,正文规定误差在 $\pm 1^\circ$ 内。本次主计算使用 $\pm 1^\circ$;如需把独立舍入误差也纳入保守预算,可用 `--rounding-margin-deg 0.005` 显式追加半角,输出会记录实际误差半角。这是额外的工程裕量,不是题面规定。
|
||||||
|
|
||||||
**二 从测向角域得到线性约束**
|
## 二、从测向角域得到线性约束
|
||||||
|
|
||||||
设二维叉积 \([a,b]=a_xb_y-a_yb_x\),令
|
设二维叉积 $[a,b]=a_xb_y-a_yb_x$,令
|
||||||
|
|
||||||
\[
|
$$
|
||||||
u_i^-=(\cos(\theta_i-\delta),\sin(\theta_i-\delta)),\qquad
|
u_i^-=(\cos(\theta_i-\delta),\sin(\theta_i-\delta)),\qquad
|
||||||
u_i^+=(\cos(\theta_i+\delta),\sin(\theta_i+\delta)).
|
u_i^+=(\cos(\theta_i+\delta),\sin(\theta_i+\delta)).
|
||||||
\]
|
$$
|
||||||
|
|
||||||
未知源位置 \(X=(x,y)\) 必须满足
|
未知源位置 $X=(x,y)$ 必须满足
|
||||||
|
|
||||||
\[
|
$$
|
||||||
[u_i^-,X-S_i]\ge0,\qquad [u_i^+,X-S_i]\le0.
|
[u_i^-,X-S_i]\ge0,\qquad [u_i^+,X-S_i]\le0.
|
||||||
\]
|
$$
|
||||||
|
|
||||||
这两条不等式选择两条边界射线之间的前向角域,而不是无限延伸的两条直线。写为标准形式 \(a_jx+b_jy\le c_j\):
|
这两条不等式选择两条边界射线之间的前向角域,而不是无限延伸的两条直线。写为标准形式 $a_jx+b_jy\le c_j$:
|
||||||
|
|
||||||
\[
|
$$
|
||||||
\begin{aligned}
|
\begin{aligned}
|
||||||
\sin(\theta_i-\delta)x-\cos(\theta_i-\delta)y
|
\sin(\theta_i-\delta)x-\cos(\theta_i-\delta)y
|
||||||
&\le \sin(\theta_i-\delta)s_{ix}-\cos(\theta_i-\delta)s_{iy},\\
|
&\le \sin(\theta_i-\delta)s_{ix}-\cos(\theta_i-\delta)s_{iy},\\
|
||||||
-\sin(\theta_i+\delta)x+\cos(\theta_i+\delta)y
|
-\sin(\theta_i+\delta)x+\cos(\theta_i+\delta)y
|
||||||
&\le-\sin(\theta_i+\delta)s_{ix}+\cos(\theta_i+\delta)s_{iy}.
|
&\le-\sin(\theta_i+\delta)s_{ix}+\cos(\theta_i+\delta)s_{iy}.
|
||||||
\end{aligned}
|
\end{aligned}
|
||||||
\]
|
$$
|
||||||
|
|
||||||
程序另外保留 \(u_i\cdot(X-S_i)\ge0\) 的前向约束。当 \(0<\delta<90^\circ\) 时它是冗余的,但可让 \(\delta=0\) 的扩展情形正确表示射线,而不是整条直线。实现支持0≤δ<90°,题目算例始终使用1°。
|
程序另外保留 $u_i\cdot(X-S_i)\ge 0$ 的前向约束。当 $0<\delta<90^\circ$ 时它是冗余的,但可让 $\delta=0$ 的扩展情形正确表示射线,而不是整条直线。实现支持 $0\le\delta<90^\circ$,题目算例始终使用 $1^\circ$。
|
||||||
|
|
||||||
定位区域为
|
定位区域为
|
||||||
|
|
||||||
\[
|
$$
|
||||||
P=\bigcap_{i=1}^{n}W_i=\{X:AX\le b\}.
|
P=\bigcap_{i=1}^{n}W_i=\{X:AX\le b\}.
|
||||||
\]
|
$$
|
||||||
|
|
||||||
通过向量而不是简单的角度大小比较处理约束,可自然处理359°与0°跨界问题。
|
通过向量而不是简单的角度大小比较处理约束,可自然处理 $359^\circ$ 与 $0^\circ$ 跨界问题。
|
||||||
|
|
||||||
**三 可复现的算法**
|
## 三、可复现的算法
|
||||||
|
|
||||||
1. 验证输入为有限数值,将检测点平移至其均值附近并按尺度归一化,减小大坐标带来的抵消误差。
|
1. 验证输入为有限数值,将检测点平移至其均值附近并按尺度归一化,减小大坐标带来的抵消误差。
|
||||||
2. 构造所有半平面;枚举每对不平行边界直线的交点。
|
2. 构造所有半平面;枚举每对不平行边界直线的交点。
|
||||||
3. 只保留满足全部不等式的交点;去重后用单调链算法求凸包,并保留点、线段等退化结果。
|
3. 只保留满足全部不等式的交点;去重后用单调链算法求凸包,并保留点、线段等退化结果。
|
||||||
4. 判断有无非零方向 \(d\) 满足 \(Ad\le0\)。若存在,任一可行点沿该方向无限前进仍可行,区域无界,直径为无穷大。
|
4. 判断有无非零方向 $d$ 满足 $Ad\le 0$。若存在,任一可行点沿该方向无限前进仍可行,区域无界,直径为无穷大。
|
||||||
5. 对有界非空区域,枚举凸包顶点对,得到直径及一对最远顶点。
|
5. 对有界非空区域,枚举凸包顶点对,得到直径及一对最远顶点。
|
||||||
6. 用任意一组最远顶点对中点与半径D/2检验圆覆盖;失败时返回圆外顶点及最大超出距离。用Welzl随机增量法求最小包围圆,输出20米清除半径余量,以区分“直径圆覆盖”和“保证清除”。
|
6. 用任意一组最远顶点对中点与半径 $D/2$ 检验圆覆盖;失败时返回圆外顶点及最大超出距离。用 Welzl 随机增量法求最小包围圆,输出 20 米清除半径余量,以区分“直径圆覆盖”和“保证清除”。
|
||||||
|
|
||||||
非空前向角域的交集不会包含一条双向无限直线,即它是尖的多面集。这保证非空区域存在极点,所以在本模型中可以通过是否存在可行边界交点来判空。无观测时需单独返回整个平面无界,不能依据“没有顶点”误判为空集。
|
非空前向角域的交集不会包含一条双向无限直线,即它是尖的多面集。这保证非空区域存在极点,所以在本模型中可以通过是否存在可行边界交点来判空。无观测时需单独返回整个平面无界,不能依据“没有顶点”误判为空集。
|
||||||
|
|
||||||
二维非平凡衰退锥若存在,至少有一条边界方向与某个约束边界平行。因此检查每条边界的两个切向方向是否满足 \(Ad\le0\),即可判定无界性。无界情形中输出的有限顶点仅是区域的极点,不构成完整有限多边形。
|
二维非平凡衰退锥若存在,至少有一条边界方向与某个约束边界平行。因此检查每条边界的两个切向方向是否满足 $Ad\le 0$,即可判定无界性。无界情形中输出的有限顶点仅是区域的极点,不构成完整有限多边形。
|
||||||
|
|
||||||
伪代码如下:
|
伪代码如下:
|
||||||
|
|
||||||
@@ -69,101 +69,101 @@ P=\bigcap_{i=1}^{n}W_i=\{X:AX\le b\}.
|
|||||||
H ← 将每次测量转换为前向角域的半平面约束
|
H ← 将每次测量转换为前向角域的半平面约束
|
||||||
V ← 所有边界对交点中满足 H 的点
|
V ← 所有边界对交点中满足 H 的点
|
||||||
若 V 为空:返回空集
|
若 V 为空:返回空集
|
||||||
若存在非零 d 满足 H 的齐次约束 A d ≤ 0:返回无界
|
若存在非零 d 满足 H 的齐次约束 A d <= 0:返回无界
|
||||||
V ← 去重并排序为凸包
|
V ← 去重并排序为凸包
|
||||||
(D, A, B) ← V 中的最远顶点对
|
(D, A, B) ← V 中的最远顶点对
|
||||||
O ← (A+B)/2
|
O ← (A+B)/2
|
||||||
覆盖成立 ← max_{v∈V} ||v−O|| ≤ D/2
|
覆盖成立 <- max_{v in V} ||v-O|| <= D/2
|
||||||
返回 V、D、A、B、O、覆盖判断和最小包围圆
|
返回 V、D、A、B、O、覆盖判断和最小包围圆
|
||||||
```
|
```
|
||||||
|
|
||||||
设半平面数为k(本实现k=3n),最终顶点数为m。枚举交点并检验全部约束需要O(k³),直径计算O(m²),无界性检查O(k²)。可行交点排序的代价上界为O(k² log k),临时交点存储上界O(k²)。新增直径圆证据只需O(m)遍历。
|
设半平面数为 $k$(本实现中 $k=3n$),最终顶点数为 $m$。枚举交点并检验全部约束需要 $O(k^3)$,直径计算需要 $O(m^2)$,无界性检查需要 $O(k^2)$。可行交点排序的代价上界为 $O(k^2\log k)$,临时交点存储上界为 $O(k^2)$。新增直径圆证据只需 $O(m)$ 遍历。
|
||||||
|
|
||||||
最小包围圆改为Welzl随机增量算法:先打乱点顺序;已有圆包含新点则保留,否则强制新点成为边界点并解更小子问题;二维最多需要3个支撑点。3个强制边界点必须用外接圆,不能误用这3点的无约束最小圆。实现以显式栈代替递归,防止大量点超过Python递归深度。固定随机种子使输出可复现,理论期望线性指随机排列下的期望,不是该固定种子的最坏复杂度保证。对外函数内部也做坐标归一化,最后重新计算所有点到输出圆心的最大距离,保持数值包含性。旧O(m⁴)支撑点枚举保留为独立测试基准。
|
最小包围圆改为 Welzl 随机增量算法:先打乱点顺序;已有圆包含新点则保留,否则强制新点成为边界点并解更小子问题;二维最多需要 3 个支撑点。3 个强制边界点必须用外接圆,不能误用这 3 点的无约束最小圆。实现以显式栈代替递归,防止大量点超过 Python 递归深度。固定随机种子使输出可复现,理论期望线性指随机排列下的期望,不是该固定种子的最坏复杂度保证。对外函数内部也做坐标归一化,最后重新计算所有点到输出圆心的最大距离,保持数值包含性。旧 $O(m^4)$ 支撑点枚举保留为独立测试基准。
|
||||||
|
|
||||||
半平面交与直径仍采用容易审查的小规模算法,未为少量测点引入更复杂的旋转卡壳。大规模在线数据可后续替换半平面交,不能把MEC局部提速等同于整个求解器线性复杂度。
|
半平面交与直径仍采用容易审查的小规模算法,未为少量测点引入更复杂的旋转卡壳。大规模在线数据可后续替换半平面交,不能把MEC局部提速等同于整个求解器线性复杂度。
|
||||||
|
|
||||||
**四 为什么只枚举顶点对就能得到直径**
|
## 四、为什么只枚举顶点对就能得到直径
|
||||||
|
|
||||||
有界凸多边形内任意两点可表示为顶点的凸组合:
|
有界凸多边形内任意两点可表示为顶点的凸组合:
|
||||||
|
|
||||||
\[
|
$$
|
||||||
x=\sum_i\lambda_i v_i,\quad y=\sum_j\mu_jv_j,\quad
|
x=\sum_i\lambda_i v_i,\quad y=\sum_j\mu_jv_j,\quad
|
||||||
\lambda_i,\mu_j\ge0,\quad\sum_i\lambda_i=\sum_j\mu_j=1.
|
\lambda_i,\mu_j\ge0,\quad\sum_i\lambda_i=\sum_j\mu_j=1.
|
||||||
\]
|
$$
|
||||||
|
|
||||||
由三角不等式,
|
由三角不等式,
|
||||||
|
|
||||||
\[
|
$$
|
||||||
\|x-y\|=\left\|\sum_{i,j}\lambda_i\mu_j(v_i-v_j)\right\|
|
\lVert x-y\rVert=\left\lVert\sum_{i,j}\lambda_i\mu_j(v_i-v_j)\right\rVert
|
||||||
\le\sum_{i,j}\lambda_i\mu_j\|v_i-v_j\|
|
\le\sum_{i,j}\lambda_i\mu_j\lVert v_i-v_j\rVert
|
||||||
\le\max_{i,j}\|v_i-v_j\|.
|
\le\max_{i,j}\lVert v_i-v_j\rVert.
|
||||||
\]
|
$$
|
||||||
|
|
||||||
最远顶点对本身又属于区域,因此上界可以达到:
|
最远顶点对本身又属于区域,因此上界可以达到:
|
||||||
|
|
||||||
\[
|
$$
|
||||||
\boxed{D(P)=\max_{i,j}\|v_i-v_j\|.}
|
\boxed{D(P)=\max_{i,j}\lVert v_i-v_j\rVert.}
|
||||||
\]
|
$$
|
||||||
|
|
||||||
点的直径为0,线段的直径为端点距离。对空集,本程序约定直径未定义,输出null;对无界区域,输出 `diameter_infinite=true`,不把Infinity写入不兼容标准的JSON数值。
|
点的直径为0,线段的直径为端点距离。对空集,本程序约定直径未定义,输出null;对无界区域,输出 `diameter_infinite=true`,不把Infinity写入不兼容标准的JSON数值。
|
||||||
|
|
||||||
**五 直径圆能否覆盖的充分必要条件**
|
## 五、直径圆能否覆盖的充分必要条件
|
||||||
|
|
||||||
取任意最远顶点对A、B,距离为D,令O=(A+B)/2。如果半径D/2的某个圆能够同时包含A和B,则
|
取任意最远顶点对 $A,B$,距离为 $D$,令 $O=(A+B)/2$。如果半径为 $D/2$ 的某个圆能够同时包含 $A$ 和 $B$,则
|
||||||
|
|
||||||
\[
|
$$
|
||||||
D=\|A-B\|\le\|A-O'\|+\|O'-B\|\le D.
|
D=\lVert A-B\rVert\le\lVert A-O'\rVert+\lVert O'-B\rVert\le D.
|
||||||
\]
|
$$
|
||||||
|
|
||||||
两个不等式只能同时取等号,因此其圆心只能是O。又因为圆盘是凸集,包含全部顶点等价于包含整个多边形。所以
|
两个不等式只能同时取等号,因此其圆心只能是O。又因为圆盘是凸集,包含全部顶点等价于包含整个多边形。所以
|
||||||
|
|
||||||
\[
|
$$
|
||||||
\boxed{\text{存在直径为D的覆盖圆}\iff
|
\boxed{\text{存在直径为 }D\text{ 的覆盖圆}\iff
|
||||||
\max_{v\in V}\|v-(A+B)/2\|\le D/2.}
|
\max_{v\in V}\lVert v-(A+B)/2\rVert\le D/2.}
|
||||||
\]
|
$$
|
||||||
|
|
||||||
不必尝试移动直径圆,也不必尝试其它最远点对:若这个唯一可能的圆心不满足覆盖,就不存在直径为D的覆盖圆。最小包围圆半径ρ满足ρ≥D/2,当且仅当ρ=D/2时存在这样的覆盖圆。
|
不必尝试移动直径圆,也不必尝试其他最远点对:若这个唯一可能的圆心不满足覆盖,就不存在直径为 $D$ 的覆盖圆。最小包围圆半径 $\rho$ 满足 $\rho\ge D/2$,当且仅当 $\rho=D/2$ 时存在这样的覆盖圆。
|
||||||
|
|
||||||
代码的 `diameter_circle.max_excess_m` 为maxᵥ‖v−O‖−D/2;超出数值容差时返回 `witness_vertex` 和从0开始的 `outside_vertex_indices`。因此输出既有判断,也有可独立复核的反例。判定中使用 `coverage_tolerance_m`,边界附近的布尔结果属于浮点容差下结论。
|
代码的 `diameter_circle.max_excess_m` 为 $\max_{v\in V}\lVert v-O\rVert-D/2$;超出数值容差时返回 `witness_vertex` 和从 0 开始的 `outside_vertex_indices`。因此输出既有判断,也有可独立复核的反例。判定中使用 `coverage_tolerance_m`,边界附近的布尔结果属于浮点容差下结论。
|
||||||
|
|
||||||
保证清除使用MEC半径加数值余量εₘ,再比较20米。`clearance_certificate.remaining_margin_m=20−(ρ+εₘ)`;非负时支持当前圆心清除,负数时不作此保证。这里的证书以观测误差界正确、真源属于P和浮点几何计算可靠为前提,不是实际清除成功记录。数学上所有可行清除中心构成∩ᵥB(v,20),MEC圆心是充分选择;后续可在此集合中另选距离机器狗最近的点。
|
保证清除使用 MEC 半径加数值余量 $\varepsilon_m$,再与 20 米比较。`clearance_certificate.remaining_margin_m` 对应 $20-(\rho+\varepsilon_m)$;非负时支持当前圆心清除,负数时不作此保证。这里的证书以观测误差界正确、真源属于 $P$ 和浮点几何计算可靠为前提,不是实际清除成功记录。数学上所有可行清除中心构成 $\bigcap_{v\in V}B(v,20)$,MEC 圆心是充分选择;后续可在此集合中另选距离机器狗最近的点。
|
||||||
|
|
||||||
**六 满足题设±1°的具体反例**
|
## 六、满足题设 $\pm 1^\circ$ 的具体反例
|
||||||
|
|
||||||
取三个检测点及示向度:
|
取三个检测点及示向度:
|
||||||
|
|
||||||
| 检测点 | x(米) | y(米) | 示向度 |
|
| 检测点 | x(米) | y(米) | 示向度 |
|
||||||
| --- | ---: | ---: | ---: |
|
| --- | ---: | ---: | ---: |
|
||||||
| S1 | −1000 | 0 | 1° |
|
| $S_1$ | $-1000$ | $0$ | $1^\circ$ |
|
||||||
| S2 | 540 | −500√3 | 121° |
|
| $S_2$ | $540$ | $-500\sqrt{3}$ | $121^\circ$ |
|
||||||
| S3 | 520 | 520√3 | 241° |
|
| $S_3$ | $520$ | $520\sqrt{3}$ | $241^\circ$ |
|
||||||
|
|
||||||
三个角域的交集恰为等边三角形,顶点是(0,0)、(40,0)、(20,20√3)。每个角域的一条边界对应三角形的一条边,另一条边界在三角形外侧,不切去三角形内部。可将真实源设在三角形中心(20,20√3/3),其真实方位与上述读数的偏差均小于1°,且三个检测距离都小于1500米。因此这不是脱离测向模型的任意图形反例。
|
三个角域的交集恰为等边三角形,顶点是 $(0,0)$、$(40,0)$、$(20,20\sqrt{3})$。每个角域的一条边界对应三角形的一条边,另一条边界在三角形外侧,不切去三角形内部。可将真实源设在三角形中心 $(20,20\sqrt{3}/3)$,其真实方位与上述读数的偏差均小于 $1^\circ$,且三个检测距离都小于 1500 米。因此这不是脱离测向模型的任意图形反例。
|
||||||
|
|
||||||
它的直径D=40米;直径圆半径20米。以底边两端为最远点对,圆心为(20,0),到第三个顶点的距离是20√3≈34.6410米,因此不能覆盖。其最小包围圆为
|
它的直径为 $D=40$ 米;直径圆半径为 20 米。以底边两端为最远点对,圆心为 $(20,0)$,到第三个顶点的距离是 $20\sqrt{3}\approx 34.6410$ 米,因此不能覆盖。其最小包围圆为
|
||||||
|
|
||||||
\[
|
$$
|
||||||
O_*=(20,20\sqrt3/3),\qquad \rho_*=40/\sqrt3\approx23.0940\text{米}>20\text{米}.
|
O_*=(20,20\sqrt{3}/3),\qquad \rho_*=40/\sqrt{3}\approx 23.0940\,\text{米}>20\,\text{米}.
|
||||||
\]
|
$$
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
图中蓝色为定位区域,红色虚线为直径圆,绿色实线为最小包围圆。黑色加号只在合成场景中表示已知真源。
|
图中蓝色为定位区域,红色虚线为直径圆,绿色实线为最小包围圆。黑色加号只在合成场景中表示已知真源。
|
||||||
|
|
||||||
**七 官方演练数据验证**
|
## 七、官方演练数据验证
|
||||||
|
|
||||||
2026年9月10日,界面明确为“问题3 演练 测试”后,通过公开HTTP接口采集。案例编码为 `U5ZW-P9KN-TCAG-R7ST`,选取频道9。
|
2026年9月10日,界面明确为“问题3 演练 测试”后,通过公开HTTP接口采集。案例编码为 `U5ZW-P9KN-TCAG-R7ST`,选取频道9。
|
||||||
|
|
||||||
| 检测点 | x(米) | y(米) | 示向度 |
|
| 检测点 | x(米) | y(米) | 示向度 |
|
||||||
| --- | ---: | ---: | ---: |
|
| --- | ---: | ---: | ---: |
|
||||||
| S1 | 0 | 0 | 131.52° |
|
| $S_1$ | $0$ | $0$ | $131.52^\circ$ |
|
||||||
| S2 | −613.761885 | 391.530775 | 34.92° |
|
| $S_2$ | $-613.761885$ | $391.530775$ | $34.92^\circ$ |
|
||||||
| S3 | −314.272134 | 656.683353 | 227.19° |
|
| $S_3$ | $-314.272134$ | $656.683353$ | $227.19^\circ$ |
|
||||||
|
|
||||||
重复在S1测量一次仍返回131.52°。这次重复观测只用于核查原地误差固定,没有作为新的独立测点加入模型。
|
重复在 $S_1$ 测量一次仍返回 $131.52^\circ$。这次重复观测只用于核查原地误差固定,没有作为新的独立测点加入模型。
|
||||||
|
|
||||||
使用±1°得到四边形,其顶点按逆时针顺序为:
|
使用 $\pm 1^\circ$ 得到四边形,其顶点按逆时针顺序为:
|
||||||
|
|
||||||
| 顶点 | x(米) | y(米) |
|
| 顶点 | x(米) | y(米) |
|
||||||
| --- | ---: | ---: |
|
| --- | ---: | ---: |
|
||||||
@@ -180,7 +180,7 @@ O_*=(20,20\sqrt3/3),\qquad \rho_*=40/\sqrt3\approx23.0940\text{米}>20\text{米}
|
|||||||
|
|
||||||
原始请求响应保存在 `output/q1/practice/*_actions.json`,保留了复算所需的请求ID、位置、频道与时间;三点观测及其计算结果保存在 `*_observations.json`。没有读取或解密模拟器隐藏场景数据。
|
原始请求响应保存在 `output/q1/practice/*_actions.json`,保留了复算所需的请求ID、位置、频道与时间;三点观测及其计算结果保存在 `*_observations.json`。没有读取或解密模拟器隐藏场景数据。
|
||||||
|
|
||||||
**八 运行方式和代码入口**
|
## 八、运行方式和代码入口
|
||||||
|
|
||||||
核心算法仅用Python标准库,支持Python3.10及以上;本次在Python3.12.14中验证。在项目根目录运行:
|
核心算法仅用Python标准库,支持Python3.10及以上;本次在Python3.12.14中验证。在项目根目录运行:
|
||||||
|
|
||||||
@@ -229,7 +229,7 @@ python scripts/capture_practice.py --robot-id 你的参赛队号 --practice-conf
|
|||||||
|
|
||||||
接口协议没有返回演练/正式模式的字段,`--practice-confirmed` 是操作者确认已核验界面的显式参数,不能替代界面核查。采集脚本没有启动测试的功能,没有正式模式选项,只会调用 `/enter`、`/measure`、`/exit`。禁止在正式测试会话中运行。
|
接口协议没有返回演练/正式模式的字段,`--practice-confirmed` 是操作者确认已核验界面的显式参数,不能替代界面核查。采集脚本没有启动测试的功能,没有正式模式选项,只会调用 `/enter`、`/measure`、`/exit`。禁止在正式测试会话中运行。
|
||||||
|
|
||||||
**九 验证范围和数值限制**
|
## 九、验证范围和数值限制
|
||||||
|
|
||||||
20项自动化测试通过,包括100组随机有界案例、60组与独立矩形裁剪实现的对照、250组增量圆与穷举圆对照、1500个共圆点及重复点/共线点、平移旋转缩放不变性,以及已保存演练日志的逐动作计时复算。新增测试还覆盖清除距离20米临界值、显式舍入选项、首次安全候选圆盘边界和零半径情形。已测试一组有限但直径超过10亿米的近乎平行测向,确认不会因为显示范围而被截断成小区域。
|
20项自动化测试通过,包括100组随机有界案例、60组与独立矩形裁剪实现的对照、250组增量圆与穷举圆对照、1500个共圆点及重复点/共线点、平移旋转缩放不变性,以及已保存演练日志的逐动作计时复算。新增测试还覆盖清除距离20米临界值、显式舍入选项、首次安全候选圆盘边界和零半径情形。已测试一组有限但直径超过10亿米的近乎平行测向,确认不会因为显示范围而被截断成小区域。
|
||||||
|
|
||||||
@@ -237,12 +237,12 @@ python scripts/capture_practice.py --robot-id 你的参赛队号 --practice-conf
|
|||||||
|
|
||||||
| 误差半角 | 直径 / 米 | MEC半径 / 米 | 直径圆最大超出 / 米 | 含数值裕量的清除余量 / 米 |
|
| 误差半角 | 直径 / 米 | MEC半径 / 米 | 直径圆最大超出 / 米 | 含数值裕量的清除余量 / 米 |
|
||||||
| --- | ---: | ---: | ---: | ---: |
|
| --- | ---: | ---: | ---: | ---: |
|
||||||
| 1°(默认题设) | 23.996723 | 12.068583 | 0.604002 | 7.931415 |
|
| $1^\circ$(默认题设) | 23.996723 | 12.068583 | 0.604002 | 7.931415 |
|
||||||
| 1.005°(额外舍入) | 24.119088 | 12.130377 | 0.608486 | 7.869621 |
|
| $1.005^\circ$(额外舍入) | 24.119088 | 12.130377 | 0.608486 | 7.869621 |
|
||||||
|
|
||||||
在本机60个共圆点的局部基准中,旧MEC枚举中位约306.5毫秒,新算法约0.096毫秒;4点时旧法约0.022毫秒、新法约0.029毫秒,小规模没有提速优势。这些是特定输入的局部实测,不是普遍倍率保证,也不代表网络、全清闭环或官方成绩。三点演练的完整问题一求解中位约0.099毫秒。运行基准脚本可以重新生成当前机器的报告。
|
在本机60个共圆点的局部基准中,旧MEC枚举中位约306.5毫秒,新算法约0.096毫秒;4点时旧法约0.022毫秒、新法约0.029毫秒,小规模没有提速优势。这些是特定输入的局部实测,不是普遍倍率保证,也不代表网络、全清闭环或官方成绩。三点演练的完整问题一求解中位约0.099毫秒。运行基准脚本可以重新生成当前机器的报告。
|
||||||
|
|
||||||
浮点计算不是精确算术。实现使用归一化位置容差10⁻⁹、平行行列式阈值10⁻¹²和较严格的衰退方向角度容差。极端近乎平行、差异接近机器精度或接近退化的输入可能需要高精度几何谓词;结果接近临界阈值时应做容差敏感性检查,而不把最后若干小数位当作严格证明。正常题设坐标和测向精度下,本次案例远离这些数值极限。
|
浮点计算不是精确算术。实现使用归一化位置容差 $10^{-9}$、平行行列式阈值 $10^{-12}$ 和较严格的衰退方向角度容差。极端近乎平行、差异接近机器精度或接近退化的输入可能需要高精度几何谓词;结果接近临界阈值时应做容差敏感性检查,而不把最后若干小数位当作严格证明。正常题设坐标和测向精度下,本次案例远离这些数值极限。
|
||||||
|
|
||||||
交互图数据全部由同一Python求解器生成。已在最小DOM测试环境中检查32个“案例/测点数量/视图”组合,未发现缺失控件或NaN等非法图形坐标;并对360与736像素、明暗两种配色的SVG作静态图形检查。浏览器工具对本地文件URL的访问被策略拦截,因此没有声称完成真实浏览器的HTML/CSS布局验证。离线页面和对话内可视化均已生成;静态PNG可作为直接查看的补充。
|
交互图数据全部由同一Python求解器生成。已在最小DOM测试环境中检查32个“案例/测点数量/视图”组合,未发现缺失控件或NaN等非法图形坐标;并对360与736像素、明暗两种配色的SVG作静态图形检查。浏览器工具对本地文件URL的访问被策略拦截,因此没有声称完成真实浏览器的HTML/CSS布局验证。离线页面和对话内可视化均已生成;静态PNG可作为直接查看的补充。
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user