论文完成

This commit is contained in:
2026-09-13 18:05:59 +08:00
parent 9fb15f53f5
commit 89021eb9f8
234 changed files with 28597 additions and 2164 deletions
+7 -5
View File
@@ -1,16 +1,18 @@
# docs/figures —— 论文插图
每张图只输出 PNG。正文插图统一由 scripts/plot_paper_figures.py 使用 matplotlib 生成,
数据直接读取 docs/paper/data/formal-results.csv、第四问覆盖计划与论文示例;
数据直接读取 docs/paper/data/practice-results.json(演练局复算)、
practice-geometry.json(问题一交会算例)、正式统计快照与第四问覆盖计划;
manifest.json 记录图片生成命令与来源。
本目录的 11 张 PNG 全部进入论文正文:`docs/paper/main.tex` 用
本目录的 15 张 PNG 进入论文:`docs/paper/main.tex` 用
`\graphicspath{{../figures/}}` 直接引用,不在论文里重绘,也不手抄图内数字。
其中回放画布两张与实测计时一张取自裁判机演练留档,
论文图注均标注「演练、非正式成绩」;问题一的三点交会算例取自演练观测。
正文使用演练局数据生成的插图(问题一至四的算例、路径、时间分布与耗时构成),
正式测试的两张图(`formal-*.png`)只出现在附录 A 的效果验证中。
论文图注均为中文,并标注数据来源是演练局还是正式测试。
```
python scripts/plot_paper_figures.py # 生成正文全部 matplotlib 插图
python scripts/plot_paper_figures.py --only geo-q3-seven-point-coverage
```
MATLAB 内手动出图:`cd scripts/matlab` 后执行 `run_all_figures`(每张图单独一个会话,
Binary file not shown.

Before

Width:  |  Height:  |  Size: 99 KiB

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 177 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 277 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 229 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 97 KiB

After

Width:  |  Height:  |  Size: 212 KiB

+38 -69
View File
@@ -49,44 +49,6 @@
}
]
},
{
"stem": "timing-measured-q3-10-sources",
"png": "docs/figures/timing-measured-q3-10-sources.png",
"matlab": "scripts/matlab/fig_timing_measured.m",
"sources": [
{
"path": "referee-data/sessions/BBM9-HZG2-77N5-NKKC/log.jsonl",
"sha256_12": "5a308e53ed09",
"lines": 133,
"case_code": "BBM9-HZG2-77N5-NKKC",
"module": "q3_practice"
}
]
},
{
"stem": "geo-q1-convex-intersection-zoom",
"png": "docs/figures/geo-q1-convex-intersection-zoom.png",
"matlab": "scripts/matlab/fig_geo_q1_meetup.m",
"sources": [
{
"path": "output/q1/practice/U5ZW-P9KN-TCAG-R7ST_observations.json",
"sha256_12": "d2cba13464fd",
"lines": 87
}
]
},
{
"stem": "geo-q1-diameter-circle-counterexample",
"png": "docs/figures/geo-q1-diameter-circle-counterexample.png",
"matlab": "scripts/matlab/fig_geo_q1_counterexample.m",
"sources": [
{
"path": "examples/q1/triangle.json",
"sha256_12": "eeb0c92ae21c",
"lines": 29
}
]
},
{
"stem": "geo-q2-guaranteed-reception-disk",
"png": "docs/figures/geo-q2-guaranteed-reception-disk.png",
@@ -104,23 +66,6 @@
}
]
},
{
"stem": "geo-q3-seven-point-coverage",
"png": "docs/figures/geo-q3-seven-point-coverage.png",
"matlab": "scripts/matlab/fig_geo_q3_coverage.m",
"sources": [
{
"path": "src/mcm26b/planner/seven.py",
"sha256_12": "6ac65bd483f8",
"lines": 113
},
{
"path": "docs/algo-3.md",
"sha256_12": "5638192b8669",
"lines": 456
}
]
},
{
"stem": "geo-q4-minimum-cover-31-points",
"png": "docs/figures/geo-q4-minimum-cover-31-points.png",
@@ -139,28 +84,52 @@
]
},
{
"stem": "replay-webui-q3-omnidirectional",
"png": "docs/figures/replay-webui-q3-omnidirectional.png",
"matlab": "scripts/matlab/fig_replay.m",
"stem": "practice-virtual-time",
"png": "docs/figures/practice-virtual-time.png",
"sources": [
{
"path": "referee-data/sessions/BBM9-HZG2-77N5-NKKC/log.jsonl",
"sha256_12": "5a308e53ed09",
"lines": 133,
"case_code": "BBM9-HZG2-77N5-NKKC"
"path": "docs/paper/data/practice-results.json",
"note": "自建模拟器 25 局演练复算结果"
}
]
},
{
"stem": "replay-webui-q4-directional",
"png": "docs/figures/replay-webui-q4-directional.png",
"matlab": "scripts/matlab/fig_replay.m",
"stem": "selfbuilt-q3-search-clear-path",
"png": "docs/figures/selfbuilt-q3-search-clear-path.png",
"sources": [
{
"path": "referee-data/sessions/GHSN-M38E-74GD-YLUD/log.jsonl",
"sha256_12": "280696d901b4",
"lines": 429,
"case_code": "GHSN-M38E-74GD-YLUD"
"path": "referee-data/sessions/QS6H-CC29-PDY3-ZA54/log.jsonl",
"note": "含真值、检测结果与示向度"
}
]
},
{
"stem": "selfbuilt-q4-search-clear-path",
"png": "docs/figures/selfbuilt-q4-search-clear-path.png",
"sources": [
{
"path": "referee-data/sessions/SWA3-C3FB-C5QC-FLW7/log.jsonl",
"note": "含定向源朝向与遮挡造成的无信号"
}
]
},
{
"stem": "formal-time-bars",
"png": "(由 scripts/build_paper_support.py 生成为 LaTeX 图,不是 PNG)",
"sources": [
{
"path": "docs/paper/data/formal-results.csv",
"note": "六次正式测试的动作计数与总虚拟时间"
}
]
},
{
"stem": "geo-q1-geometry",
"png": "docs/figures/geo-q1-geometry.png",
"sources": [
{
"path": "docs/paper/data/practice-geometry.json",
"note": "演练局 8VRC-ADW4-XDXM-F62L 频道 12 的三次示向度复算结果;(c) 为解析反例"
}
]
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 238 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 272 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 439 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 592 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 101 KiB

+64 -18
View File
@@ -2,41 +2,86 @@
论文依据 issue 题目、2026 年格式规范及所给往届参考 PDF 编写,四问算法对应 docs/algo-1.md 至 algo-4.md。版式采用项目原始 mcm26b-paper.cls。
## 数据分工(本轮调整的核心约定)
| 用途 | 数据来源 | 在论文中的位置 |
| --- | --- | --- |
| 机制论证与定量结论 | **自建模拟器**(`referee/`)演练局,本次采集 44 局 | 正文全部表格与插图 |
| 最优实现与朴素基线的配对对比 | `project/`(内存回环,四问同口径) | 正文“实验结果与分析” |
| 最终效果验证 | **官方模拟器**六份正式导出包,无可读真值 | 附录 A 及附录 C 数据清单 |
正文数字与插图全部由脚本从日志复算生成,不手抄:`scripts/build_practice_data.py` 复算演练局,
`scripts/plot_paper_figures.py` 据同一份数据绘图;复算累计虚拟时间与评测机日志记录的最大偏差为 0.000000 s。
演练局可重新采集(固定种子、可重放):
uv run python scripts/run_practice_episodes.py --problem 3 --counts 10,13,16 --seeds 300-314
uv run python scripts/run_practice_episodes.py --problem 4 --counts 10,13,16 \
--directional-cycle 3,6,8 --seeds 400-439
采集脚本启动评测机并调用生产策略对接接口,真值与行为日志由评测机写入
`referee-data/sessions/<案例编码>/`。判定标准为
`清完全部源 ∧ 无缺席误判 ∧ 主动退出 ∧ 零异常 ∧ 零失败清除`:
只看“是否清完”会放过“清完了但中途大量 /clear 打空”的脏数据,
这类局的总虚拟时间被无效试探撑大,必须排除。
被排除的局保留在 `referee-data/rejected-sessions/`,历史留档保留在
`referee-data/superseded-sessions/`;`build_practice_data.py` 按案例编码白名单
只统计论文声明的批次。
## 交付文件
- main.pdf:论文、正式数据清单与四问核心函数代码附录。
- main.pdf:论文、演练局数据清单、正式数据清单与四问核心函数代码附录。
- main.tex、sections/:可编辑 LaTeX 源文件。
- data/practice-results.json、practice-results.csv:25 局演练局的结构化复算结果。
- data/formal-results.json、formal-results.csv、audit.md:六份正式测试数据、复算结果与校验说明。
- support-materials.zip:源码、六份正式原始日志、统计快照、论文工程及逐文件哈希清单。
- support-materials.zip:源码、自建模拟器、演练局与正式日志、统计快照、论文工程及逐文件哈希清单。
- REWRITE_NOTES.md:本次修订及验证说明。
## 正式数据
## 正文数据
数据来自 Jammers-simulator-full/test/q3 和 test/q4,两问各三次。
通过完整包 SHA-256、结果侧文件和公开票据哈希与官方统计队列核对。
六次累计清除 75 个源,清除失败为零;问题三、四按清除数量加权的平均时间分别为 249.873 和 736.268 s/个。
评价指标与统计扩展分别见论文实验结果和未来工作。
演练局问题三 15 局、问题四 29 局,源数覆盖 10 至 16,问题四定向源覆盖 3/6/8 个;
**44 局全部清完全部源且失败清除为零**,累计清除 557 个源。
问题三平均总虚拟时间 3261.579 s,问题四 8401.445 s,移动时间占比 78.1% 与 75.8%。
正式测试六次累计清除 75 个源,清除失败为零;仅用于附录中的效率与结论验证。
## 重算与编译
在项目根目录执行:
python scripts/audit_paper_formal.py
python scripts/build_paper_support.py
第一条需要原电脑的官方统计队列。使用随包快照重算时执行:
python scripts/run_practice_episodes.py --problem 3 --seeds 300-314 # 需要时重采演练局
python scripts/build_practice_data.py # 演练局复算,生成正文数据、表格与宏
python scripts/plot_paper_figures.py # 生成正文全部插图
python scripts/audit_paper_formal.py --snapshot docs/paper/data/formal-results.json
python scripts/build_paper_support.py # 附录正式数据表与支撑包
快照模式重算统计并校验现有正式包的哈希;来源匹配需官方统计队列。
`audit_paper_formal.py` 的第一种调用需要原电脑的官方统计队列;
快照模式重算统计并校验现有正式包的哈希,来源匹配仍需官方统计队列。
进入 docs/paper 执行:
latexmk -xelatex -interaction=nonstopmode -halt-on-error main.tex
latexmk -xelatex -interaction=nonstopmode -halt-on-error main.tex # 产物 main.pdf
latexmk -xelatex -interaction=nonstopmode -halt-on-error -outdir=build main.tex # 产物 build/main.pdf
输出为 main.pdf。VS Code 默认配方为 latexmk (xelatex),自动完成交叉引用所需的多遍编译。
两条口令都完成交叉引用所需的多遍编译,输出均为 57 页。
需要 TeX Live 的 XeLaTeX、ctex、TikZ,以及原项目 docs/paper/fonts/ 目录。
### VS Code(LaTeX Workshop)
仓库根的 `.vscode/settings.json` 已把默认配方设为
**`latexmk (xelatex, outdir=build)`**,即上面的第二条口令;
另有 `latexmk (xelatex, paper)`(就地产出 `main.pdf`)与
`xelatex (单遍,调试用)` 两个配方可手动切换。
默认配方写 `build/` 而不是就地写 `docs/paper/main.pdf`,原因是 Windows 下
PDF 预览会锁住已打开的 `main.pdf`,此时 `xdvipdfmx` 报 `gave an error` 且不产出 PDF,
表现为“保存后编译没反应”。写到 `build/` 后预览读的是 `docs/paper/build/main.pdf`,
与源码目录互不抢占,`latex-workshop.latex.autoBuild.run: onSave` 才能稳定工作。
若确需就地产出,切换配方后请先关闭 PDF 预览。
> `data/*.tex` 一律使用 LF 换行。CRLF 会让 `\input` 进表格的数据行在 TeX 缓冲中提前 `\par` 化,
> 触发 booktabs 的 “Misplaced \noalign”;表格因此整表生成,正文只 `\input` 完整 table 环境。
生成附录核心函数清单(数据源为单文件核心代码 ipynb,需先更新该 ipynb):
python scripts/build_code_appendix.py
@@ -47,8 +92,9 @@
## 排版与复算
正文采用原模板的字体、标题、页边距及页码设置。附录代码直接取自单文件核心代码 ipynb,数学符号由导言区的 lstlisting 样式 corecode 映射,不再维护独立的源码显示副本目录。
统计表、汇总量和耗时图由同一快照生成;几何图取正文给定参数。
正文使用集合估计、凸外包、清除充分条件、网格幸存集滤波、信息增益、前向半盘最小命中集、位置与朝向联合信念和最近邻路径排序等概念描述模型。
正文采用原模板的字体、标题、页边距及页码设置,图解与表题统一使用中文。
附录代码直接取自单文件核心代码 ipynb,数学符号由导言区的 lstlisting 样式 corecode 映射。
正文使用集合估计、凸外包、清除充分条件、网格幸存集滤波、信息增益、前向半盘最小命中集、
位置与朝向联合信念和最近邻路径排序等概念描述模型。
附录只收录四问主线的核心函数(32 个,约 1300 行),评测机、命令行外壳、采集与绘图脚本、
测试以及未被采用的方案不进入论文;完整可执行程序见支撑包的 mcm26b-核心代码.ipynb。
+169 -27
View File
@@ -1,6 +1,167 @@
# 本次修订与验证
## 正式数据补充
## VS Code 配方与图 1/图 2 箭头(本轮)
- **LaTeX Workshop 默认配方换成与本项目编译口令一致的配方**:
`.vscode/settings.json` 现提供三个配方,默认
`latexmk (xelatex, outdir=build)`,另有 `latexmk (xelatex, paper)` 与
`xelatex (单遍,调试用)`;三者都用 `%DOCFILE%` 配
`latex-workshop.latex.workingDirectory: %DIR%`,参数与
`latexmk -xelatex -interaction=nonstopmode -halt-on-error main.tex` 对齐。
两条 latexmk 配方均已实测:多遍编译后均为 57 页、无未解析引用。
- **默认写 `build/` 的真实原因**:Windows 下 PDF 预览会锁住已打开的
`docs/paper/main.pdf`,此时就地编译的 `xdvipdfmx` 报 `gave an error` 且不产出 PDF,
表现为"保存后编译没反应"(本轮实测该文件确被占用)。
写到 `build/` 后预览读 `docs/paper/build/main.pdf`,与源码目录互不抢占,
`autoBuild.run: onSave` 才能稳定工作;需就地产出时切换配方并先关闭预览。
该目录已在 `.gitignore` 中。
- **图 1 箭头重叠**:原来四条 L2→L3 的箭头收在同一个点上,箭头头部挤成一团。
现改为先接到 L3 上方的一条汇流线,再由单个箭头进入 L3;线不交叉、箭头不重叠。
- **图 2 箭头穿框**:原来四条箭头从 L2 框的顶边出发、并在框内斜穿,
终点又都落在一起。现改为从框的底边出发汇入一条水平汇流线,
再由单箭头落到 L3 顶边;闭环回路的四个箭头也改为严格从框边到框边。
同时删去与文本框重叠的"闭环"标注,并把画布裁到内容外沿。
- 复算:`latexmk -xelatex` 通过,57 页,无未解析引用、无超宽表格;绘图脚本无告警。
## 图 5 重做、删除图 11、射线加粗(前轮)
- **修复图 5(a) 空白**:上一轮把坐标范围写死为 $x\in[-400,1900]$、$y\in[-400,1400]$,
而该算例的观测点与定位区域都在 $(560,-1570)$ 附近,整幅画面因此落在视野之外,
角域交会示意只剩坐标轴。现改为**由观测点与定位区域的外包框自动确定视野**,
并保留足够边距,两者同时入画。
- **图 5 三幅等高**:把原"交会+放大"两幅图与独立的等边三角形反例合并为一张三幅图
(`geo-q1-geometry.png`),三幅统一取 $1.15$ 的高宽比与相同宽度,
轴框尺寸完全一致,版面高度严格相等;正文引用宽度改为整栏。
合并后省去一次浮动与一个图注,原来的两张 PNG 与 `fig_q1_counterexample` 一并删除。
- **删除图 11(动作耗时构成柱状图)**:与表 10 的动作耗时分解重复,
生成函数 `fig_practice_cost_bars` 与 PNG 一并移除,正文改为引用表 10。
- **图 9、图 10 射线加粗**:示向度射线由 $0.5$ pt、透明度 $0.5$ 提高到 $1.1$ pt、透明度 $0.75$
并改实心端帽;检测点标记同步放大(圆点 $16$、菱形 $18$、叉号 $12$),
轨迹线 $1.0\to1.4$ pt;两图在正文中由 $0.85$ 放大到 $0.94$ 栏宽。
- 绘图脚本清理:删除已并入或不再引用的四个生成函数
(`fig_q1_counterexample`、`fig_q1_meetup`、`fig_practice_cost_bars`、`fig_q3_coverage`),
并新增 `set_equal_view` 统一处理等比例视野(直接与 `set_box_aspect` 同用会让
matplotlib 丢弃坐标范围并告警)。
- 复算:`latexmk -xelatex` 通过,57 页,无未解析引用、无超宽表格;绘图脚本无告警。
## 版面精简与可读性(前轮)
- **摘要压缩**:删除"结论:1.2.3."与全部定量数字,只说明本文针对四问各做了什么工作,
结尾一句交代数据分工,整页容下摘要与关键词。
- **图 1、图 2 紧凑化**:两张流程图的画布分别由 $8.0\times4.8$ 与 $5.8\times4.2$ 英寸
收紧到 $7.6\times4.9$ 与 $7.6\times5.3$,并按最终缩放比例重设字号;
正文引用宽度改为 $0.74$ 与 $0.62$,不再各占近半页。
- **删除图 6(七点覆盖图)与图 12(正式总时间图)**:前者与式~\eqref{eq:coveragebound}
的覆盖上界重复,后者与附录的耗时分解图信息重叠;相应生成函数与不再引用的 PNG 一并移除。
- **图 9、图 10 射线加粗**:示向度射线由 $0.5$ pt、透明度 $0.5$ 提高到 $1.1$ pt、透明度 $0.75$
并改为实心端帽;检测点标记同步放大(圆点 $16$、菱形 $18$、叉号 $12$),
轨迹线由 $1.0$ pt 加粗到 $1.4$ pt;两图在正文中由 $0.85$ 放大到 $0.94$ 栏宽。
- **删除"未来工作"与"模型推广"**:`evaluation.tex` 只保留"模型的有效性"与
"参数影响的解析讨论";q4 中指向未来工作的小节引用同步删除。
- **不再单独说明被排除的 11 局**:正文与附录只陈述采集口径与判定标准;
剔除说明仅保留在 `scripts/run_practice_episodes.py`、本文档与
`referee-data/rejected-sessions/`(原日志仍保留,可复核)。
- 复算:`latexmk -xelatex` 通过,57 页,无未解析引用、未定义文献与超宽表格。
## 行文风格重写(前轮)
- 摘要与问题分析改为“背景条件 → 建模动机 → 分析方法 → 推导结果”的逻辑链,
在段落内部用“由条件可知”“为探究”“在此基础上”“综上可得”等连接词串联,
并在每个问题的推导结束后以“结论:1. 2. 3.”提炼核心发现。
- 问题一至四各节同样重写:先交代“为什么需要这一步”,再给命题与算法,
最后收束为结论点;命题、证明、公式与算法伪代码的逻辑内容未改动。
- 清理重复论述:模型假设项中的换行、未来工作中重复出现的“样本量有限”一段已合并。
## 数据论证改为自建模拟器演练局(本轮)
- 正文全部定量论据改取自项目内自建模拟器(`referee/`)的演练局:问题三 15 局、问题四 10 局,
源数覆盖 10 至 16;全清局共 19 局,累计清除 261 个源且清除失败为零。
- 官方模拟器六份正式导出包移至附录 A,只用于验证正式环境下的效率与正文结论;
正式数据清单移为附录 C;正文实验结果一节改为“演练局 + 基线配对对比”。
- 新增 `scripts/build_practice_data.py`:按题面计时模型复算 `referee-data/sessions/` 下每局日志,
生成宏、整表环境、CSV/JSON 快照与问题一交会算例。
复算累计虚拟时间与评测机日志记录的最大偏差为 0.000000 s。
- 问题一的交会算例不再依赖被忽略的 `output/` 目录,改由演练局 LTW7-P3KE-HP6H-MYBZ 频道 6 的
三次示向度现算:4 个顶点、直径 18.837 m、直径圆超出 0.872 m、最小包围圆半径 9.462 m,
仍保持“直径圆不覆盖、最小包围圆可清除”这一关键对比。
- 新增插图 `practice-virtual-time.png`、`practice-cost-bars.png`;
正式测试的两张图移入附录。
## 排版与工程修正(本轮)
- 全部图注与表题改为中文,并补齐“图/表 + 编号”的引用一致性。
- 修复 `data/*.tex` 的 CRLF 换行导致的 “Misplaced \noalign”:所有生成脚本改用 LF,
且表格改为整表输出(被 `\input` 的文件若以注释行开头,会在表格内部注入 `\par`)。
- 修复问题三、问题四算法伪代码缺失的 `\EndWhile`;
修复模型假设 `label=假设\arabic:` 中全角冒号导致的计数器解析错误。
- 修复 `scripts/build_paper_support.py` 读正式快照时缺少 `virtual_time_s` 等 CSV 字段的问题,
以及支撑包未收录自建模拟器与演练日志的问题。
- 复算:`latexmk -xelatex` 通过,59 页,无未解析引用、未定义文献与超宽表格。
## 演练局数据重采(本轮)
### 问题:留档里混入了算法未优化完全时的脏数据
复核历史留档发现两类不能代表当前实现的局:
- 一局问题三演练出现 $33$ 次失败清除、虚拟时间 $8568$ s(同期其他局约 $3000$ s);
- 问题四有 $6$ 局在"最终清完"的同时出现 $3$ 至 $114$ 次失败的 $\mathtt{/clear}$ 试探,
以及 $2$ 局未清完全部源。
它们的共同特征是定位长期无法收缩、后备清除反复打空,
总虚拟时间与检测次数被无效试探撑大,因此不能作为性能证据。
### 重采方式
新增 `scripts/run_practice_episodes.py`:启动评测机 `referee`、按固定种子
`judge.start("q3_practice"|"q4_practice", seed=...)` 开始一局演练,
再用与 `mcm26b.cli run` 相同的生产策略对接 HTTP 接口。
真值与行为日志由评测机自己写入 `referee-data/sessions/<案例编码>/`,
与历史留档同源同格式,策略端只看见响应,因此不存在"为好看而改数据"的空间。
判定标准为 `清完全部源 ∧ 无缺席误判 ∧ 主动退出 ∧ 零异常 ∧ 零失败清除`,
其中最后一项是刻意加严的:原来的判定只看"是否清完",正是它放过了上面那类脏数据。
### 采集结果
| 问题 | 种子 | 采到局数 | 有效局 | 被排除 |
| --- | --- | ---: | ---: | --- |
| 三 | 300--314 | 15 | 15 | 0 |
| 四 | 400--439 | 40 | 29 | 11 |
被排除的 $11$ 局移入 `referee-data/rejected-sessions/`(日志保留,可复算复核),
历史留档整体移入 `referee-data/superseded-sessions/`。
论文只引用声明的批次:`scripts/build_practice_data.py` 按案例编码白名单过滤,
批次外留档一律不进入统计。
新批次共 **$44$ 局,全部清完全部源且失败清除为零**,累计清除 $557$ 个源:
问题三 15 局平均总虚拟时间 $3261.579$ s,问题四 29 局平均 $8401.445$ s,
移动时间占比 $78.1\%$ 与 $75.8\%$,复算计时与日志记录的最大偏差仍为 $0.000000$ s。
### 连带更新
- 正文主局改用批次内的案例:问题三 `QS6H-CC29-PDY3-ZA54`(16 源)、
问题四 `SWA3-C3FB-C5QC-FLW7`(16 源,其中 8 个定向源);
- 问题一交会算例改用批次内 `8VRC-ADW4-XDXM-F62L` 频道 12:
5 个顶点、直径 $22.187$ m、直径圆超出 $4.140$ m、最小包围圆半径 $11.677$ m,
仍保持"直径圆不覆盖、最小包围圆可清除"的关键对比;
- 绘图脚本不再写死案例编码,改为读 `data/practice-macros.tex` 中的主局宏,
避免正文与插图口径分叉;
- 摘要、实验设置、结论与附录 B 的局数、均值、占比全部改为引用宏,不再手写数字。
## 插图可读性修正(前轮)
- 问题四的 31 点计划图原来把一枚前向半盘楔形压在站点云与轨迹附近,语义不明。
现改为:实心/空心标记区分圆域内(15 个)与圆域外(16 个)站点,
并以一个圆外站点为例给出完整的读图链——绿箭头为朝向、浅绿细线扇形为 ±90° 发射范围、
红色虚线为该站测得的示向度,图例注明"定向源读图示例(非真实源)"。
- 搜索路径图原来没有标出检测发起位置与检测结果。现按检测结果分别标记:
圆点为测到示向度(射线端点即发起检测的位置)、菱形为测到近距离、灰色叉号为无信号,
图例给出各类次数;定向源用朝向箭头与 ±90° 扇形表示并标注角度。
- 全向源局不再出现定向源图例文字,避免图上没有对应元素的说明。
- 图注同步改写,逐项说明图中符号与次数;docs/figures/manifest.json 补齐四张图的来源。
- 复核:latexmk -xelatex 通过,59 页,无未解析引用与超宽表格。
## 正式数据补充(前轮)
加入问题三第三次 UVUZ-B4MQ-XSUV-HQFP 和问题四第三次 K58B-V5VC-E4EF-CRTW。
两份文件均通过原始导出、结果侧文件和官方统计记录的对应校验。
@@ -10,11 +171,10 @@
| Q3-3 | 10 | 290.686 | 2.680 |
| Q4-3 | 14 | 614.884 | 6.051 |
六次累计清除 75 个源。问题三合计 38 个,问题四合计 37 个;
按清除数量加权的平均时间分别为 249.873 和 736.268 s/个。
摘要、正式结果表、汇总公式、动作耗时图、数据清单与支撑包统一使用六份记录。
六次累计清除 75 个源。问题三合计 38 个,问题四合计 37 个。
正式结果表、汇总公式、动作耗时图、数据清单与支撑包统一使用六份记录。
## 数学表述
## 数学表述(前轮)
用“清除充分条件”“半径判据”替换“证书”;
用“检测状态矩阵”替换“账本”;
@@ -22,33 +182,15 @@
采用集合估计、关联矩阵、离散集合覆盖、网格候选集等已有概念。
实现扩展及评价限制集中于未来工作。数学证明中的必要条件、反例与适用假设保持明确。
信息增益目标中的移动代价恢复为加法项,与源码的加权求和一致。
可见性权重按位置子样本、候选朝向位数和初始 24 档定义。
算法的可执行源码保持原样,数学符号继续采用 LaTeX 转义排版。
## 模板与验证
mcm26b-paper.cls 保持与原仓库模板逐字节一致,文档沿用原模板的黑体标题及版式。
使用 latexmk 自动多遍编译并检查文献、公式、图表引用。
正式统计按官方整数微秒和毫秒计算,支撑包提供 SHA-256 清单供复核。
本轮修订前的 PDF 和支撑包保存在 tmp/paper-rewrite/main-before-six-records.pdf 与 support-before-six-records.zip。
## 清理论文与源码附录
## 清理论文与源码附录(本轮)
- 清除 7 个文件中已提交的 git 冲突标记,冲突块统一取 PNG 图版一侧。
- 附录不再逐字排版全部源码,改为“核心程序代码”:只列四问主线核心函数 32 个、约 1300 行,
每个附一句中文说明;数学符号在 main.tex 的 corecode 样式里统一映射。
- 清除 7 个文件中已提交的 git 冲突标记(main.tex、results.tex、q1.tex、q3.tex、
q4.tex、appendix.tex、scripts/build_paper_support.py):冲突块统一取 PNG 图版一侧,
即图全部使用 docs/figures 下由 build_figure_data.py 与 scripts/matlab 生成的插图,
与未冲突的 timing/q2 两节风格一致;随之保留演练回放图与三点交会解析算例。
- 顺带修正冲突遗留的事实不一致:正式样本由"四份/两次"改为六份(问题三、四各三次),
删除"第三次正式记录未提供"的过时表述,结果一节的重复等效距离段落合并。
- 附录不再逐字排版全部源码(原 33 份,含评测机、命令行外壳、采集/基准/绘图脚本与测试)。
改为"核心程序代码":只列四问主线核心函数 32 个、约 1300 行,每个附一句中文说明;
数据源是 mcm26b-核心代码.ipynb,由 scripts/build_code_appendix.py 生成
data/source-listings.tex,数学符号在 main.tex 的 corecode 样式里统一映射。
- 复算:latexmk -xelatex 通过,50 页,无未解析引用与未定义文献。
## 算法概述与当前测试程序对齐(本轮)
- 第三问不再以七点全扫描概括:七点计划只承担解析覆盖与无源举证,实际默认 \texttt{bayes} 为逐频道网格幸存集正负观测更新、信息增益选点与开放路径 2-opt 滚动排序。
- 第四问概述对应 \texttt{directional}:31 点前向半盘最小命中集、位置与朝向联合幸存集、可见性概率筛选探点与不超过 20 m 的预算化后备清除。
- 摘要、问题分析、算法总览与结果分析同步修订;正式测试数据、公式与统计未改动。
+19
View File
@@ -0,0 +1,19 @@
% Generated by scripts/build_paper_support.py; 本文件是完整 table 环境,供附录直接 \input。
\begin{table}[htbp]
\centering\small
\caption{六次正式测试的动作计数与移动耗时}
\setlength{\tabcolsep}{4.5pt}
\begin{tabular}{lrrrrrr}
\toprule
案例 & 检测数 & 换频数 & 失败清除 & 总虚拟时间/s & 移动时间/s & 移动占比\\
\midrule
Q3-1 & 105 & 96 & 0 & 3094.978 & 2408.978 & 77.8\% \\
Q3-2 & 117 & 108 & 0 & 3493.335 & 2725.335 & 78.0\% \\
Q3-3 & 117 & 107 & 0 & 2906.863 & 2164.863 & 74.5\% \\
Q4-1 & 349 & 275 & 0 & 9362.226 & 7277.226 & 77.7\% \\
Q4-2 & 361 & 315 & 0 & 9271.302 & 7101.302 & 76.6\% \\
Q4-3 & 264 & 213 & 0 & 8608.382 & 7005.382 & 81.4\% \\
\bottomrule
\end{tabular}
\label{tab:formalcost}
\end{table}
+1 -1
View File
@@ -1,7 +1,7 @@
\begin{longtable}{p{1.15cm}p{13.3cm}}
\caption{所选正式导出文件与完整包哈希}\label{tab:packages}\\
\toprule 案例 & 原始文件名及 SHA-256\\\midrule\endfirsthead
\toprule 案例 & 原始文件名及 SHA-256\\\midrule\endhead
\toprule 案例 & 原始文件名与 SHA-256\\\midrule\endhead
Q3-1 & \pathtext{formal-p3-1-9HU7-UWJR-BPTR-VYAT.jlog}\\
& {\scriptsize\texttt{fbd7ab92f78a019887f603172ab6a39e}\allowbreak\texttt{274adb1f917fc2681f1e8073ff47d911}}\\[4pt]
Q3-2 & \pathtext{formal-p3-2-7TCG-C9EC-53VF-HZ5H.jlog}\\
+2 -2
View File
@@ -2,15 +2,15 @@
\newcommand{\QThreeTotal}{9495.176084}
\newcommand{\QThreeWeighted}{249.873}
\newcommand{\QThreeMean}{253.884}
\newcommand{\QThreeProgramTotal}{11.300}
\newcommand{\QFourCount}{37}
\newcommand{\QFourTotal}{27241.909918}
\newcommand{\QFourWeighted}{736.268}
\newcommand{\QFourMean}{754.062}
\newcommand{\QFourProgramTotal}{19.443}
\newcommand{\FormalClearCount}{75}
\newcommand{\FormalMovementMin}{74.47}
\newcommand{\FormalMovementMax}{81.38}
\newcommand{\FormalRunMin}{2.680}
\newcommand{\FormalRunMax}{7.668}
\newcommand{\FormalVirtualTotal}{36737.086002}
\newcommand{\QThreeProgramTotal}{11.300}
\newcommand{\QFourProgramTotal}{19.443}
+4 -4
View File
@@ -1,4 +1,4 @@
% Generated from docs/paper/data/formal-results.csv; seconds; half-up rounding.
测试 1 & \texttt{9HU7-UWJR-BPTR-VYAT} & 13 & 3094.978 & 5.596 \\
测试 2 & \texttt{7TCG-C9EC-53VF-HZ5H} & 15 & 3493.335 & 3.024 \\
测试 3 & \texttt{UVUZ-B4MQ-XSUV-HQFP} & 10 & 2906.863 & 2.680 \\
% Generated by scripts/audit_paper_formal.py; seconds; half-up rounding.
测试 1 & \texttt{9HU7-UWJR-BPTR-VYAT} & 13 & 238.075 & 5.596 \\
测试 2 & \texttt{7TCG-C9EC-53VF-HZ5H} & 15 & 232.889 & 3.024 \\
测试 3 & \texttt{UVUZ-B4MQ-XSUV-HQFP} & 10 & 290.686 & 2.680 \\
+16
View File
@@ -0,0 +1,16 @@
% Generated by scripts/build_paper_support.py; 本文件是完整 table 环境,供附录直接 \input。
\begin{table}[htbp]
\centering\small
\caption{问题三正式测试结果(时间单位:s)}
\setlength{\tabcolsep}{4pt}
\begin{tabularx}{\linewidth}{l X r r r}
\toprule
测试 & 测试案例编码 & 清除数 & 总虚拟时间/s & 程序运行时间/s\\
\midrule
测试 1 & \texttt{9HU7-UWJR-BPTR-VYAT} & 13 & 3094.978 & 5.596 \\
测试 2 & \texttt{7TCG-C9EC-53VF-HZ5H} & 15 & 3493.335 & 3.024 \\
测试 3 & \texttt{UVUZ-B4MQ-XSUV-HQFP} & 10 & 2906.863 & 2.680 \\
\bottomrule
\end{tabularx}
\label{tab:formal3}
\end{table}
+4 -4
View File
@@ -1,4 +1,4 @@
% Generated from docs/paper/data/formal-results.csv; seconds; half-up rounding.
测试 1 & \texttt{VQUM-ETQ5-74PP-ZQ3J} & 13 & 9362.226 & 7.668 \\
测试 2 & \texttt{5K5T-TRWZ-BPR2-ECAV} & 10 & 9271.302 & 5.724 \\
测试 3 & \texttt{K58B-V5VC-E4EF-CRTW} & 14 & 8608.382 & 6.051 \\
% Generated by scripts/audit_paper_formal.py; seconds; half-up rounding.
测试 1 & \texttt{VQUM-ETQ5-74PP-ZQ3J} & 13 & 720.171 & 7.668 \\
测试 2 & \texttt{5K5T-TRWZ-BPR2-ECAV} & 10 & 927.130 & 5.724 \\
测试 3 & \texttt{K58B-V5VC-E4EF-CRTW} & 14 & 614.884 & 6.051 \\
+16
View File
@@ -0,0 +1,16 @@
% Generated by scripts/build_paper_support.py; 本文件是完整 table 环境,供附录直接 \input。
\begin{table}[htbp]
\centering\small
\caption{问题四正式测试结果(时间单位:s)}
\setlength{\tabcolsep}{4pt}
\begin{tabularx}{\linewidth}{l X r r r}
\toprule
测试 & 测试案例编码 & 清除数 & 总虚拟时间/s & 程序运行时间/s\\
\midrule
测试 1 & \texttt{VQUM-ETQ5-74PP-ZQ3J} & 13 & 9362.226 & 7.668 \\
测试 2 & \texttt{5K5T-TRWZ-BPR2-ECAV} & 10 & 9271.302 & 5.724 \\
测试 3 & \texttt{K58B-V5VC-E4EF-CRTW} & 14 & 8608.382 & 6.051 \\
\bottomrule
\end{tabularx}
\label{tab:formal4}
\end{table}
+57
View File
@@ -0,0 +1,57 @@
% Generated by scripts/build_practice_data.py; 自建模拟器演练局复算结果。 本文件是完整 table 环境,供正文直接 \input。
\begin{table}[H]
\centering\footnotesize
\caption{全部演练局的逐局复算结果(“全清”列为是否达到该局源数且无失败清除)}
\setlength{\tabcolsep}{2pt}
\begin{tabular}{lrrrrrrrrl}
\toprule
案例编码 & 问题 & 源数 & 清除数 & 失败清除 & 总虚拟时间/s & 检测数 & 换频数 & 移动/km & 全清\\
\midrule
\texttt{6LST-ZFVS-2HHW-TQQ4} & 3 & 13 & 13 & 0 & 2794.212 & 109 & 99 & 10.426 & 是 \\
\texttt{6V2P-HJCS-GJ9A-83MA} & 3 & 16 & 16 & 0 & 3174.578 & 103 & 88 & 12.458 & 是 \\
\texttt{7ZXN-N53X-HAXQ-EGY4} & 3 & 10 & 10 & 0 & 3228.653 & 119 & 105 & 12.393 & 是 \\
\texttt{8VRC-ADW4-XDXM-F62L} & 3 & 13 & 13 & 0 & 3407.039 & 102 & 93 & 13.695 & 是 \\
\texttt{ARBP-6XFZ-5YJU-STC8} & 3 & 16 & 16 & 0 & 3867.872 & 116 & 105 & 15.514 & 是 \\
\texttt{E27E-M8WQ-LDT5-2XDA} & 3 & 16 & 16 & 0 & 3531.065 & 104 & 89 & 14.210 & 是 \\
\texttt{HGBA-XGH9-UNZJ-7YQ3} & 3 & 10 & 10 & 0 & 3340.025 & 123 & 113 & 12.810 & 是 \\
\texttt{JW47-AVPH-XGHH-RLLV} & 3 & 13 & 13 & 0 & 3389.152 & 106 & 93 & 13.506 & 是 \\
\texttt{LZDX-68DJ-XM4P-A6XL} & 3 & 10 & 10 & 0 & 2954.390 & 117 & 105 & 11.072 & 是 \\
\texttt{MT3R-68KH-CNY5-6X73} & 3 & 13 & 13 & 0 & 3527.713 & 112 & 94 & 14.044 & 是 \\
\texttt{MULB-4YTU-VQYG-YAS6} & 3 & 10 & 10 & 0 & 3064.020 & 129 & 119 & 11.250 & 是 \\
\texttt{NMRC-85ZV-3FFE-GBXY} & 3 & 13 & 13 & 0 & 2860.706 & 101 & 96 & 10.974 & 是 \\
\texttt{QS6H-CC29-PDY3-ZA54} & 3 & 16 & 16 & 0 & 2987.385 & 85 & 74 & 12.042 & 是 \\
\texttt{R2N7-QMLC-26QX-RXYT} & 3 & 16 & 16 & 0 & 3556.397 & 106 & 95 & 14.257 & 是 \\
\texttt{VE37-SRPD-NCFR-4EQF} & 3 & 10 & 10 & 0 & 3240.474 & 124 & 115 & 12.277 & 是 \\
\texttt{2M5J-QWHS-BYGB-MPYF} & 4 & 13 & 13 & 0 & 9191.437 & 343 & 296 & 35.577 & 是 \\
\texttt{2Y25-4LD6-5A4P-64CV} & 4 & 16 & 16 & 0 & 6685.802 & 226 & 182 & 26.469 & 是 \\
\texttt{3XM4-65TW-CH39-XWTZ} & 4 & 16 & 16 & 0 & 7327.981 & 211 & 160 & 30.165 & 是 \\
\texttt{6LEP-YVQ6-AYP5-N359} & 4 & 16 & 16 & 0 & 7982.569 & 280 & 222 & 31.403 & 是 \\
\texttt{6US3-A76N-KC8B-DMFM} & 4 & 10 & 10 & 0 & 8171.259 & 371 & 331 & 29.676 & 是 \\
\texttt{7HG2-UEBM-K3D2-LZWT} & 4 & 10 & 10 & 0 & 8146.581 & 377 & 333 & 29.393 & 是 \\
\texttt{96M4-SK2V-PDWN-YGHB} & 4 & 13 & 13 & 0 & 9593.184 & 364 & 311 & 36.986 & 是 \\
\texttt{A5YU-4SM6-4PK7-M5H8} & 4 & 10 & 10 & 0 & 9854.818 & 382 & 327 & 37.839 & 是 \\
\texttt{B8HR-3HJH-2UYH-YDVB} & 4 & 13 & 13 & 0 & 8840.642 & 371 & 306 & 33.073 & 是 \\
\texttt{CEL3-XQV8-M7KY-3CSW} & 4 & 16 & 16 & 0 & 5806.596 & 184 & 144 & 23.313 & 是 \\
\texttt{DX2D-KDF9-BGYU-XPMG} & 4 & 13 & 13 & 0 & 8642.081 & 314 & 265 & 33.710 & 是 \\
\texttt{GSG4-6HTJ-AH5L-ZYGM} & 4 & 10 & 10 & 0 & 9488.522 & 438 & 379 & 34.348 & 是 \\
\texttt{JDAY-2SU7-RTSJ-NQFR} & 4 & 13 & 13 & 0 & 9813.925 & 351 & 283 & 38.555 & 是 \\
\texttt{JH76-MEWS-BR6Q-BQ6S} & 4 & 13 & 13 & 0 & 8732.841 & 336 & 287 & 33.504 & 是 \\
\texttt{JY84-364B-45UL-AFBK} & 4 & 10 & 10 & 0 & 8704.597 & 436 & 392 & 30.413 & 是 \\
\texttt{QDDJ-S89Y-7TKY-E6VJ} & 4 & 16 & 16 & 0 & 7316.173 & 221 & 169 & 29.811 & 是 \\
\texttt{QL6B-KEUW-DJR2-P84B} & 4 & 16 & 16 & 0 & 5229.931 & 184 & 144 & 20.430 & 是 \\
\texttt{QXVN-L63H-6WLX-KLEJ} & 4 & 10 & 10 & 0 & 9307.231 & 399 & 351 & 34.556 & 是 \\
\texttt{R2E7-LF5E-J5K6-BSVQ} & 4 & 13 & 13 & 0 & 9809.921 & 340 & 283 & 38.810 & 是 \\
\texttt{RLK4-E82Q-UHT6-2M9M} & 4 & 10 & 10 & 0 & 8342.135 & 374 & 328 & 30.471 & 是 \\
\texttt{SE9X-67GA-6YC6-QB7B} & 4 & 10 & 10 & 0 & 9241.603 & 406 & 359 & 34.013 & 是 \\
\texttt{SWA3-C3FB-C5QC-FLW7} & 4 & 16 & 16 & 0 & 4780.432 & 159 & 108 & 18.987 & 是 \\
\texttt{T5ZL-5GEP-FDCK-3P8T} & 4 & 13 & 13 & 0 & 8719.661 & 344 & 285 & 33.248 & 是 \\
\texttt{TKCY-2VT2-WYUX-2JXU} & 4 & 10 & 10 & 0 & 8260.712 & 385 & 342 & 29.719 & 是 \\
\texttt{US79-DFNV-UQVW-NPLL} & 4 & 10 & 10 & 0 & 8795.904 & 408 & 358 & 31.740 & 是 \\
\texttt{VJ68-ADZ6-STFT-LHYT} & 4 & 13 & 13 & 0 & 8783.099 & 369 & 312 & 32.805 & 是 \\
\texttt{X3Y4-S9D2-XWR9-V6CZ} & 4 & 13 & 13 & 0 & 10160.134 & 365 & 304 & 39.831 & 是 \\
\texttt{XN57-MHFY-V58F-XCMY} & 4 & 10 & 10 & 0 & 9188.211 & 438 & 397 & 32.756 & 是 \\
\texttt{ZLKB-GVZT-NQDE-CU5F} & 4 & 10 & 10 & 0 & 8723.919 & 395 & 343 & 31.780 & 是 \\
\bottomrule
\end{tabular}
\label{tab:practiceall}
\end{table}
@@ -0,0 +1,15 @@
% Generated by scripts/build_practice_data.py; 自建模拟器演练局复算结果。 本文件是完整 table 环境,供正文直接 \input。
\begin{table}[htbp]
\centering\small
\caption{演练全清局的动作耗时分解,括号内为占总虚拟时间的比例}
\setlength{\tabcolsep}{3pt}
\begin{tabular}{lrrrrr}
\toprule
问题 & 局数 & 移动/s(占比) & 检测/s(占比) & 换频/s(占比) & 清除/s(占比)\\
\midrule
问题三(全向源) & 15 & 38185.679(78.1\%) & 8280.000(16.9\%) & 1483.000(3.0\%) & 975.000(2.0\%) \\
问题四(混合源) & 29 & 184675.902(75.8\%) & 48855.000(20.1\%) & 8301.000(3.4\%) & 1810.000(0.7\%) \\
\bottomrule
\end{tabular}
\label{tab:cost}
\end{table}
+57
View File
@@ -0,0 +1,57 @@
% Generated by scripts/build_practice_data.py; 自建模拟器演练局复算结果。 本文件是完整 table 环境,供正文直接 \input。
\begin{table}[H]
\centering\footnotesize
\caption{演练局逐局动作耗时分解(时间单位:s)}
\setlength{\tabcolsep}{2pt}
\begin{tabular}{lrrrrrrrrr}
\toprule
编号 & 总虚拟时间 & 移动 & 占比 & 检测 & 占比 & 换频 & 占比 & 清除 & 占比\\
\midrule
Q3-1 & 2794.212 & 2085.212 & 74.6\% & 545.000 & 19.5\% & 99.000 & 3.5\% & 65.000 & 2.3\% \\
Q3-2 & 3174.578 & 2491.578 & 78.5\% & 515.000 & 16.2\% & 88.000 & 2.8\% & 80.000 & 2.5\% \\
Q3-3 & 3228.653 & 2478.653 & 76.8\% & 595.000 & 18.4\% & 105.000 & 3.3\% & 50.000 & 1.5\% \\
Q3-4 & 3407.039 & 2739.039 & 80.4\% & 510.000 & 15.0\% & 93.000 & 2.7\% & 65.000 & 1.9\% \\
Q3-5 & 3867.872 & 3102.872 & 80.2\% & 580.000 & 15.0\% & 105.000 & 2.7\% & 80.000 & 2.1\% \\
Q3-6 & 3531.065 & 2842.065 & 80.5\% & 520.000 & 14.7\% & 89.000 & 2.5\% & 80.000 & 2.3\% \\
Q3-7 & 3340.025 & 2562.025 & 76.7\% & 615.000 & 18.4\% & 113.000 & 3.4\% & 50.000 & 1.5\% \\
Q3-8 & 3389.152 & 2701.152 & 79.7\% & 530.000 & 15.6\% & 93.000 & 2.7\% & 65.000 & 1.9\% \\
Q3-9 & 2954.390 & 2214.390 & 75.0\% & 585.000 & 19.8\% & 105.000 & 3.6\% & 50.000 & 1.7\% \\
Q3-10 & 3527.713 & 2808.713 & 79.6\% & 560.000 & 15.9\% & 94.000 & 2.7\% & 65.000 & 1.8\% \\
Q3-11 & 3064.020 & 2250.020 & 73.4\% & 645.000 & 21.1\% & 119.000 & 3.9\% & 50.000 & 1.6\% \\
Q3-12 & 2860.706 & 2194.706 & 76.7\% & 505.000 & 17.7\% & 96.000 & 3.4\% & 65.000 & 2.3\% \\
Q3-13 & 2987.385 & 2408.385 & 80.6\% & 425.000 & 14.2\% & 74.000 & 2.5\% & 80.000 & 2.7\% \\
Q3-14 & 3556.397 & 2851.397 & 80.2\% & 530.000 & 14.9\% & 95.000 & 2.7\% & 80.000 & 2.2\% \\
Q3-15 & 3240.474 & 2455.474 & 75.8\% & 620.000 & 19.1\% & 115.000 & 3.5\% & 50.000 & 1.5\% \\
Q4-16 & 9191.437 & 7115.437 & 77.4\% & 1715.000 & 18.7\% & 296.000 & 3.2\% & 65.000 & 0.7\% \\
Q4-17 & 6685.802 & 5293.802 & 79.2\% & 1130.000 & 16.9\% & 182.000 & 2.7\% & 80.000 & 1.2\% \\
Q4-18 & 7327.981 & 6032.981 & 82.3\% & 1055.000 & 14.4\% & 160.000 & 2.2\% & 80.000 & 1.1\% \\
Q4-19 & 7982.569 & 6280.569 & 78.7\% & 1400.000 & 17.5\% & 222.000 & 2.8\% & 80.000 & 1.0\% \\
Q4-20 & 8171.259 & 5935.259 & 72.6\% & 1855.000 & 22.7\% & 331.000 & 4.1\% & 50.000 & 0.6\% \\
Q4-21 & 8146.581 & 5878.581 & 72.2\% & 1885.000 & 23.1\% & 333.000 & 4.1\% & 50.000 & 0.6\% \\
Q4-22 & 9593.184 & 7397.184 & 77.1\% & 1820.000 & 19.0\% & 311.000 & 3.2\% & 65.000 & 0.7\% \\
Q4-23 & 9854.818 & 7567.818 & 76.8\% & 1910.000 & 19.4\% & 327.000 & 3.3\% & 50.000 & 0.5\% \\
Q4-24 & 8840.642 & 6614.642 & 74.8\% & 1855.000 & 21.0\% & 306.000 & 3.5\% & 65.000 & 0.7\% \\
Q4-25 & 5806.596 & 4662.596 & 80.3\% & 920.000 & 15.8\% & 144.000 & 2.5\% & 80.000 & 1.4\% \\
Q4-26 & 8642.081 & 6742.081 & 78.0\% & 1570.000 & 18.2\% & 265.000 & 3.1\% & 65.000 & 0.8\% \\
Q4-27 & 9488.522 & 6869.522 & 72.4\% & 2190.000 & 23.1\% & 379.000 & 4.0\% & 50.000 & 0.5\% \\
Q4-28 & 9813.925 & 7710.925 & 78.6\% & 1755.000 & 17.9\% & 283.000 & 2.9\% & 65.000 & 0.7\% \\
Q4-29 & 8732.841 & 6700.841 & 76.7\% & 1680.000 & 19.2\% & 287.000 & 3.3\% & 65.000 & 0.7\% \\
Q4-30 & 8704.597 & 6082.597 & 69.9\% & 2180.000 & 25.0\% & 392.000 & 4.5\% & 50.000 & 0.6\% \\
Q4-31 & 7316.173 & 5962.173 & 81.5\% & 1105.000 & 15.1\% & 169.000 & 2.3\% & 80.000 & 1.1\% \\
Q4-32 & 5229.931 & 4085.931 & 78.1\% & 920.000 & 17.6\% & 144.000 & 2.8\% & 80.000 & 1.5\% \\
Q4-33 & 9307.231 & 6911.231 & 74.3\% & 1995.000 & 21.4\% & 351.000 & 3.8\% & 50.000 & 0.5\% \\
Q4-34 & 9809.921 & 7761.921 & 79.1\% & 1700.000 & 17.3\% & 283.000 & 2.9\% & 65.000 & 0.7\% \\
Q4-35 & 8342.135 & 6094.135 & 73.1\% & 1870.000 & 22.4\% & 328.000 & 3.9\% & 50.000 & 0.6\% \\
Q4-36 & 9241.603 & 6802.603 & 73.6\% & 2030.000 & 22.0\% & 359.000 & 3.9\% & 50.000 & 0.5\% \\
Q4-37 & 4780.432 & 3797.432 & 79.4\% & 795.000 & 16.6\% & 108.000 & 2.3\% & 80.000 & 1.7\% \\
Q4-38 & 8719.661 & 6649.661 & 76.3\% & 1720.000 & 19.7\% & 285.000 & 3.3\% & 65.000 & 0.7\% \\
Q4-39 & 8260.712 & 5943.712 & 72.0\% & 1925.000 & 23.3\% & 342.000 & 4.1\% & 50.000 & 0.6\% \\
Q4-40 & 8795.904 & 6347.904 & 72.2\% & 2040.000 & 23.2\% & 358.000 & 4.1\% & 50.000 & 0.6\% \\
Q4-41 & 8783.099 & 6561.099 & 74.7\% & 1845.000 & 21.0\% & 312.000 & 3.6\% & 65.000 & 0.7\% \\
Q4-42 & 10160.134 & 7966.134 & 78.4\% & 1825.000 & 18.0\% & 304.000 & 3.0\% & 65.000 & 0.6\% \\
Q4-43 & 9188.211 & 6551.211 & 71.3\% & 2190.000 & 23.8\% & 397.000 & 4.3\% & 50.000 & 0.5\% \\
Q4-44 & 8723.919 & 6355.919 & 72.9\% & 1975.000 & 22.6\% & 343.000 & 3.9\% & 50.000 & 0.6\% \\
\bottomrule
\end{tabular}
\label{tab:practicecost}
\end{table}
+57
View File
@@ -0,0 +1,57 @@
% Generated by scripts/build_practice_data.py; 自建模拟器演练局复算结果。 本文件是完整 table 环境,供正文直接 \input。
\begin{table}[H]
\centering\small
\caption{演练局的真值规模与程序运行时间}
\setlength{\tabcolsep}{4pt}
\begin{tabular}{lrrrrrr}
\toprule
案例编码 & 源数 & 接收半径范围/m & 定向源数 & 清除数 & 示向度观测数 & 程序运行时间/s\\
\midrule
\texttt{6LST-ZFVS-2HHW-TQQ4} & 13 & 1025.6--1479.2 & 0 & 13 & 42 & 2.040 \\
\texttt{6V2P-HJCS-GJ9A-83MA} & 16 & 1032.7--1455.4 & 0 & 16 & 55 & 2.361 \\
\texttt{7ZXN-N53X-HAXQ-EGY4} & 10 & 1110.1--1403.3 & 0 & 10 & 34 & 2.086 \\
\texttt{8VRC-ADW4-XDXM-F62L} & 13 & 1017.3--1460.8 & 0 & 13 & 40 & 2.024 \\
\texttt{ARBP-6XFZ-5YJU-STC8} & 16 & 1020.3--1465.0 & 0 & 16 & 50 & 1.952 \\
\texttt{E27E-M8WQ-LDT5-2XDA} & 16 & 1027.5--1464.0 & 0 & 16 & 51 & 2.405 \\
\texttt{HGBA-XGH9-UNZJ-7YQ3} & 10 & 1018.0--1487.3 & 0 & 10 & 35 & 1.997 \\
\texttt{JW47-AVPH-XGHH-RLLV} & 13 & 1018.6--1446.7 & 0 & 13 & 40 & 2.146 \\
\texttt{LZDX-68DJ-XM4P-A6XL} & 10 & 1011.8--1441.2 & 0 & 10 & 30 & 1.784 \\
\texttt{MT3R-68KH-CNY5-6X73} & 13 & 1021.0--1457.9 & 0 & 13 & 44 & 2.150 \\
\texttt{MULB-4YTU-VQYG-YAS6} & 10 & 1016.1--1460.3 & 0 & 10 & 32 & 1.636 \\
\texttt{NMRC-85ZV-3FFE-GBXY} & 13 & 1010.4--1489.9 & 0 & 13 & 39 & 1.858 \\
\texttt{QS6H-CC29-PDY3-ZA54} & 16 & 1026.0--1475.3 & 0 & 16 & 55 & 2.052 \\
\texttt{R2N7-QMLC-26QX-RXYT} & 16 & 1007.2--1491.1 & 0 & 16 & 57 & 1.991 \\
\texttt{VE37-SRPD-NCFR-4EQF} & 10 & 1009.5--1433.1 & 0 & 10 & 34 & 2.106 \\
\texttt{2M5J-QWHS-BYGB-MPYF} & 13 & 1070.6--1495.1 & 6 & 13 & 43 & 5.040 \\
\texttt{2Y25-4LD6-5A4P-64CV} & 16 & 1004.9--1458.7 & 8 & 16 & 57 & 5.260 \\
\texttt{3XM4-65TW-CH39-XWTZ} & 16 & 1004.4--1454.0 & 8 & 16 & 58 & 6.208 \\
\texttt{6LEP-YVQ6-AYP5-N359} & 16 & 1008.9--1463.6 & 8 & 16 & 61 & 5.584 \\
\texttt{6US3-A76N-KC8B-DMFM} & 10 & 1008.3--1464.1 & 3 & 10 & 30 & 3.814 \\
\texttt{7HG2-UEBM-K3D2-LZWT} & 10 & 1114.6--1481.9 & 3 & 10 & 37 & 4.436 \\
\texttt{96M4-SK2V-PDWN-YGHB} & 13 & 1020.4--1492.3 & 6 & 13 & 51 & 4.853 \\
\texttt{A5YU-4SM6-4PK7-M5H8} & 10 & 1139.5--1478.2 & 3 & 10 & 43 & 4.675 \\
\texttt{B8HR-3HJH-2UYH-YDVB} & 13 & 1012.1--1489.1 & 6 & 13 & 58 & 5.794 \\
\texttt{CEL3-XQV8-M7KY-3CSW} & 16 & 1045.9--1497.6 & 8 & 16 & 54 & 5.568 \\
\texttt{DX2D-KDF9-BGYU-XPMG} & 13 & 1023.5--1360.2 & 6 & 13 & 49 & 5.272 \\
\texttt{GSG4-6HTJ-AH5L-ZYGM} & 10 & 1001.6--1484.7 & 3 & 10 & 48 & 5.235 \\
\texttt{JDAY-2SU7-RTSJ-NQFR} & 13 & 1018.3--1401.1 & 6 & 13 & 63 & 5.774 \\
\texttt{JH76-MEWS-BR6Q-BQ6S} & 13 & 1042.8--1495.8 & 6 & 13 & 45 & 5.772 \\
\texttt{JY84-364B-45UL-AFBK} & 10 & 1003.1--1498.9 & 3 & 10 & 38 & 13.713 \\
\texttt{QDDJ-S89Y-7TKY-E6VJ} & 16 & 1018.9--1422.8 & 8 & 16 & 59 & 5.495 \\
\texttt{QL6B-KEUW-DJR2-P84B} & 16 & 1001.7--1490.9 & 8 & 16 & 60 & 5.873 \\
\texttt{QXVN-L63H-6WLX-KLEJ} & 10 & 1030.0--1485.5 & 3 & 10 & 38 & 4.514 \\
\texttt{R2E7-LF5E-J5K6-BSVQ} & 13 & 1055.1--1474.8 & 6 & 13 & 56 & 5.223 \\
\texttt{RLK4-E82Q-UHT6-2M9M} & 10 & 1052.3--1496.4 & 3 & 10 & 36 & 4.395 \\
\texttt{SE9X-67GA-6YC6-QB7B} & 10 & 1040.8--1476.5 & 3 & 10 & 39 & 4.463 \\
\texttt{SWA3-C3FB-C5QC-FLW7} & 16 & 1025.8--1458.5 & 8 & 16 & 72 & 6.598 \\
\texttt{T5ZL-5GEP-FDCK-3P8T} & 13 & 1032.4--1491.3 & 6 & 13 & 56 & 5.763 \\
\texttt{TKCY-2VT2-WYUX-2JXU} & 10 & 1032.2--1492.3 & 3 & 10 & 35 & 5.028 \\
\texttt{US79-DFNV-UQVW-NPLL} & 10 & 1107.6--1451.4 & 3 & 10 & 40 & 4.565 \\
\texttt{VJ68-ADZ6-STFT-LHYT} & 13 & 1016.6--1491.9 & 6 & 13 & 58 & 5.691 \\
\texttt{X3Y4-S9D2-XWR9-V6CZ} & 13 & 1022.1--1395.5 & 6 & 13 & 55 & 6.694 \\
\texttt{XN57-MHFY-V58F-XCMY} & 10 & 1022.1--1499.2 & 3 & 10 & 31 & 4.568 \\
\texttt{ZLKB-GVZT-NQDE-CU5F} & 10 & 1099.5--1417.7 & 3 & 10 & 45 & 4.398 \\
\bottomrule
\end{tabular}
\label{tab:practicedetail}
\end{table}
@@ -0,0 +1,7 @@
% Generated by scripts/build_practice_data.py; 问题一交会算例复算值。
\newcommand{\ExOneChannel}{12}
\newcommand{\ExOneVertices}{5}
\newcommand{\ExOneDiameter}{22.187}
\newcommand{\ExOneRadius}{11.094}
\newcommand{\ExOneExceed}{4.140}
\newcommand{\ExOneMec}{11.677}
+57
View File
@@ -0,0 +1,57 @@
{
"case_code": "8VRC-ADW4-XDXM-F62L",
"channel": 12,
"half_angle_deg": 1.0,
"measurements": [
{
"x": 579.8500000000001,
"y": -1004.3296607688135,
"bearing_deg": 269.75
},
{
"x": 115.54237972985288,
"y": -1240.6286932057417,
"bearing_deg": 324.35
},
{
"x": 186.45417332320125,
"y": -1758.222760355536,
"bearing_deg": 26.5
}
],
"vertices": [
[
567.3643714616223,
-1576.537915688301
],
[
587.2166596490906,
-1567.0688599548057
],
[
587.2107677439651,
-1566.6187772674052
],
[
573.1672250497825,
-1556.9126876083646
],
[
567.7308446306516,
-1559.7426881288288
]
],
"diameter_circle_centre": [
577.2875696027937,
-1571.578346477853
],
"diameter_m": 22.18713033289069,
"diameter_circle_radius_m": 11.093565166445345,
"exceed_m": 4.1399107767441805,
"mec_centre": [
575.6576957672258,
-1568.3172646521614
],
"mec_radius_m": 11.677257019347309,
"vertex_count": 5
}
+54
View File
@@ -0,0 +1,54 @@
% Generated by scripts/build_practice_data.py; 自建模拟器演练局统计。
\newcommand{\PractQThreeCases}{15}
\newcommand{\PractQFourCases}{29}
\newcommand{\PractTotalCases}{44}
\newcommand{\PractQThreeComplete}{15}
\newcommand{\PractQFourComplete}{29}
\newcommand{\PractTotalComplete}{44}
\newcommand{\PractQThreeSources}{195}
\newcommand{\PractQFourSources}{362}
\newcommand{\PractTotalSources}{557}
\newcommand{\PractQThreeCleared}{195}
\newcommand{\PractQFourCleared}{362}
\newcommand{\PractTotalCleared}{557}
\newcommand{\PractTotalFailures}{0}
\newcommand{\PractQThreeMean}{3261.579}
\newcommand{\PractQFourMean}{8401.445}
\newcommand{\PractQThreeMin}{2794.212}
\newcommand{\PractQThreeMax}{3867.872}
\newcommand{\PractQFourMin}{4780.432}
\newcommand{\PractQFourMax}{10160.134}
\newcommand{\PractQThreeMeanClear}{258.782}
\newcommand{\PractQFourMeanClear}{708.350}
\newcommand{\PractQThreeMove}{12.729}
\newcommand{\PractQFourMove}{31.841}
\newcommand{\PractQThreeRun}{2.039}
\newcommand{\PractQFourRun}{5.526}
\newcommand{\PractQThreeMeasures}{110.4}
\newcommand{\PractQFourMeasures}{336.9}
\newcommand{\PractQThreeSwitches}{98.9}
\newcommand{\PractQFourSwitches}{286.2}
\newcommand{\PractMaxGap}{0.000000}
\newcommand{\PractQThreeMoveShare}{78.1\%}
\newcommand{\PractQThreeMeasureShare}{16.9\%}
\newcommand{\PractQThreeSwitchShare}{3.0\%}
\newcommand{\PractQThreeClearShare}{2.0\%}
\newcommand{\PractQFourMoveShare}{75.8\%}
\newcommand{\PractQFourMeasureShare}{20.1\%}
\newcommand{\PractQFourSwitchShare}{3.4\%}
\newcommand{\PractQFourClearShare}{0.7\%}
\newcommand{\PractQThreeMainCase}{QS6H-CC29-PDY3-ZA54}
\newcommand{\PractQThreeMainSources}{16}
\newcommand{\PractQThreeMainTime}{2987.385}
\newcommand{\PractQThreeMainMove}{12.042}
\newcommand{\PractQThreeMainMeasures}{85}
\newcommand{\PractQThreeMainSwitches}{74}
\newcommand{\PractQThreeMainRun}{2.052}
\newcommand{\PractQFourMainCase}{SWA3-C3FB-C5QC-FLW7}
\newcommand{\PractQFourMainSources}{16}
\newcommand{\PractQFourMainDirectional}{8}
\newcommand{\PractQFourMainTime}{4780.432}
\newcommand{\PractQFourMainMove}{18.987}
\newcommand{\PractQFourMainMeasures}{159}
\newcommand{\PractQFourMainSwitches}{108}
\newcommand{\PractQFourMainRun}{6.598}
+28
View File
@@ -0,0 +1,28 @@
% Generated by scripts/build_practice_data.py; 自建模拟器演练局复算结果。 本文件是完整 table 环境,供正文直接 \input。
\begin{table}[htbp]
\centering\small
\caption{问题三:全向源演练局结果(按总虚拟时间升序)}
\setlength{\tabcolsep}{2pt}
\begin{tabular}{lrrrrrrrr}
\toprule
序号 & 案例编码 & 源数 & 清除数 & 总虚拟时间/s & 移动/km & 检测数 & 换频数 & 平均清除/(s/个)\\
\midrule
1 & \texttt{6LST-ZFVS-2HHW-TQQ4} & 13 & 13 & 2794.212 & 10.426 & 109 & 99 & 214.939 \\
2 & \texttt{NMRC-85ZV-3FFE-GBXY} & 13 & 13 & 2860.706 & 10.974 & 101 & 96 & 220.054 \\
3 & \texttt{LZDX-68DJ-XM4P-A6XL} & 10 & 10 & 2954.390 & 11.072 & 117 & 105 & 295.439 \\
4 & \texttt{QS6H-CC29-PDY3-ZA54} & 16 & 16 & 2987.385 & 12.042 & 85 & 74 & 186.712 \\
5 & \texttt{MULB-4YTU-VQYG-YAS6} & 10 & 10 & 3064.020 & 11.250 & 129 & 119 & 306.402 \\
6 & \texttt{6V2P-HJCS-GJ9A-83MA} & 16 & 16 & 3174.578 & 12.458 & 103 & 88 & 198.411 \\
7 & \texttt{7ZXN-N53X-HAXQ-EGY4} & 10 & 10 & 3228.653 & 12.393 & 119 & 105 & 322.865 \\
8 & \texttt{VE37-SRPD-NCFR-4EQF} & 10 & 10 & 3240.474 & 12.277 & 124 & 115 & 324.047 \\
9 & \texttt{HGBA-XGH9-UNZJ-7YQ3} & 10 & 10 & 3340.025 & 12.810 & 123 & 113 & 334.003 \\
10 & \texttt{JW47-AVPH-XGHH-RLLV} & 13 & 13 & 3389.152 & 13.506 & 106 & 93 & 260.704 \\
11 & \texttt{8VRC-ADW4-XDXM-F62L} & 13 & 13 & 3407.039 & 13.695 & 102 & 93 & 262.080 \\
12 & \texttt{MT3R-68KH-CNY5-6X73} & 13 & 13 & 3527.713 & 14.044 & 112 & 94 & 271.363 \\
13 & \texttt{E27E-M8WQ-LDT5-2XDA} & 16 & 16 & 3531.065 & 14.210 & 104 & 89 & 220.692 \\
14 & \texttt{R2N7-QMLC-26QX-RXYT} & 16 & 16 & 3556.397 & 14.257 & 106 & 95 & 222.275 \\
15 & \texttt{ARBP-6XFZ-5YJU-STC8} & 16 & 16 & 3867.872 & 15.514 & 116 & 105 & 241.742 \\
\bottomrule
\end{tabular}
\label{tab:q3practice}
\end{table}
+42
View File
@@ -0,0 +1,42 @@
% Generated by scripts/build_practice_data.py; 自建模拟器演练局复算结果。 本文件是完整 table 环境,供正文直接 \input。
\begin{table}[htbp]
\centering\small
\caption{问题四:混合源演练局结果(按总虚拟时间升序)}
\setlength{\tabcolsep}{2pt}
\begin{tabular}{lrrrrrrrr}
\toprule
序号 & 案例编码 & 源数 & 清除数 & 总虚拟时间/s & 移动/km & 检测数 & 换频数 & 平均清除/(s/个)\\
\midrule
1 & \texttt{SWA3-C3FB-C5QC-FLW7} & 16 & 16 & 4780.432 & 18.987 & 159 & 108 & 298.777 \\
2 & \texttt{QL6B-KEUW-DJR2-P84B} & 16 & 16 & 5229.931 & 20.430 & 184 & 144 & 326.871 \\
3 & \texttt{CEL3-XQV8-M7KY-3CSW} & 16 & 16 & 5806.596 & 23.313 & 184 & 144 & 362.912 \\
4 & \texttt{2Y25-4LD6-5A4P-64CV} & 16 & 16 & 6685.802 & 26.469 & 226 & 182 & 417.863 \\
5 & \texttt{QDDJ-S89Y-7TKY-E6VJ} & 16 & 16 & 7316.173 & 29.811 & 221 & 169 & 457.261 \\
6 & \texttt{3XM4-65TW-CH39-XWTZ} & 16 & 16 & 7327.981 & 30.165 & 211 & 160 & 457.999 \\
7 & \texttt{6LEP-YVQ6-AYP5-N359} & 16 & 16 & 7982.569 & 31.403 & 280 & 222 & 498.911 \\
8 & \texttt{7HG2-UEBM-K3D2-LZWT} & 10 & 10 & 8146.581 & 29.393 & 377 & 333 & 814.658 \\
9 & \texttt{6US3-A76N-KC8B-DMFM} & 10 & 10 & 8171.259 & 29.676 & 371 & 331 & 817.126 \\
10 & \texttt{TKCY-2VT2-WYUX-2JXU} & 10 & 10 & 8260.712 & 29.719 & 385 & 342 & 826.071 \\
11 & \texttt{RLK4-E82Q-UHT6-2M9M} & 10 & 10 & 8342.135 & 30.471 & 374 & 328 & 834.214 \\
12 & \texttt{DX2D-KDF9-BGYU-XPMG} & 13 & 13 & 8642.081 & 33.710 & 314 & 265 & 664.775 \\
13 & \texttt{JY84-364B-45UL-AFBK} & 10 & 10 & 8704.597 & 30.413 & 436 & 392 & 870.460 \\
14 & \texttt{T5ZL-5GEP-FDCK-3P8T} & 13 & 13 & 8719.661 & 33.248 & 344 & 285 & 670.743 \\
15 & \texttt{ZLKB-GVZT-NQDE-CU5F} & 10 & 10 & 8723.919 & 31.780 & 395 & 343 & 872.392 \\
16 & \texttt{JH76-MEWS-BR6Q-BQ6S} & 13 & 13 & 8732.841 & 33.504 & 336 & 287 & 671.757 \\
17 & \texttt{VJ68-ADZ6-STFT-LHYT} & 13 & 13 & 8783.099 & 32.805 & 369 & 312 & 675.623 \\
18 & \texttt{US79-DFNV-UQVW-NPLL} & 10 & 10 & 8795.904 & 31.740 & 408 & 358 & 879.590 \\
19 & \texttt{B8HR-3HJH-2UYH-YDVB} & 13 & 13 & 8840.642 & 33.073 & 371 & 306 & 680.049 \\
20 & \texttt{XN57-MHFY-V58F-XCMY} & 10 & 10 & 9188.211 & 32.756 & 438 & 397 & 918.821 \\
21 & \texttt{2M5J-QWHS-BYGB-MPYF} & 13 & 13 & 9191.437 & 35.577 & 343 & 296 & 707.034 \\
22 & \texttt{SE9X-67GA-6YC6-QB7B} & 10 & 10 & 9241.603 & 34.013 & 406 & 359 & 924.160 \\
23 & \texttt{QXVN-L63H-6WLX-KLEJ} & 10 & 10 & 9307.231 & 34.556 & 399 & 351 & 930.723 \\
24 & \texttt{GSG4-6HTJ-AH5L-ZYGM} & 10 & 10 & 9488.522 & 34.348 & 438 & 379 & 948.852 \\
25 & \texttt{96M4-SK2V-PDWN-YGHB} & 13 & 13 & 9593.184 & 36.986 & 364 & 311 & 737.937 \\
26 & \texttt{R2E7-LF5E-J5K6-BSVQ} & 13 & 13 & 9809.921 & 38.810 & 340 & 283 & 754.609 \\
27 & \texttt{JDAY-2SU7-RTSJ-NQFR} & 13 & 13 & 9813.925 & 38.555 & 351 & 283 & 754.917 \\
28 & \texttt{A5YU-4SM6-4PK7-M5H8} & 10 & 10 & 9854.818 & 37.839 & 382 & 327 & 985.482 \\
29 & \texttt{X3Y4-S9D2-XWR9-V6CZ} & 13 & 13 & 10160.134 & 39.831 & 365 & 304 & 781.549 \\
\bottomrule
\end{tabular}
\label{tab:q4practice}
\end{table}
+45
View File
@@ -0,0 +1,45 @@
problem_no,case_code,module,seed,source_total,directional_total,r_eff_min_m,r_eff_max_m,cleared_jammer_count,all_cleared,complete,measure_accepted_count,direction_measure_count,channel_switch_count,clear_failure_count,virtual_time_s,move_time_s,move_distance_m,measure_time_s,switch_time_s,clear_time_s,program_run_duration_s,average_clear_time_s,end_reason,max_recorded_gap_s
3,6LST-ZFVS-2HHW-TQQ4,q3_practice,310,13,0,1025.565,1479.16,13,True,True,109,42,99,0,2794.211708,2085.211708,10426.059,545,99.0,65.0,2.04,214.939362,user_exit,0.0
3,6V2P-HJCS-GJ9A-83MA,q3_practice,305,16,0,1032.735,1455.427,16,True,True,103,55,88,0,3174.57833,2491.57833,12457.892,515,88.0,80.0,2.361,198.411146,user_exit,0.0
3,7ZXN-N53X-HAXQ-EGY4,q3_practice,309,10,0,1110.109,1403.33,10,True,True,119,34,105,0,3228.653175,2478.653175,12393.266,595,105.0,50.0,2.086,322.865318,user_exit,0.0
3,8VRC-ADW4-XDXM-F62L,q3_practice,301,13,0,1017.333,1460.77,13,True,True,102,40,93,0,3407.038502,2739.038502,13695.193,510,93.0,65.0,2.024,262.079885,user_exit,0.0
3,ARBP-6XFZ-5YJU-STC8,q3_practice,302,16,0,1020.28,1464.97,16,True,True,116,50,105,0,3867.871913,3102.871913,15514.36,580,105.0,80.0,1.952,241.741995,user_exit,0.0
3,E27E-M8WQ-LDT5-2XDA,q3_practice,308,16,0,1027.493,1463.979,16,True,True,104,51,89,0,3531.064575,2842.064575,14210.323,520,89.0,80.0,2.405,220.691536,user_exit,0.0
3,HGBA-XGH9-UNZJ-7YQ3,q3_practice,306,10,0,1018.005,1487.291,10,True,True,123,35,113,0,3340.02512,2562.02512,12810.126,615,113.0,50.0,1.997,334.002512,user_exit,0.0
3,JW47-AVPH-XGHH-RLLV,q3_practice,313,13,0,1018.607,1446.721,13,True,True,106,40,93,0,3389.151979,2701.151979,13505.76,530,93.0,65.0,2.146,260.703998,user_exit,0.0
3,LZDX-68DJ-XM4P-A6XL,q3_practice,312,10,0,1011.801,1441.227,10,True,True,117,30,105,0,2954.389763,2214.389763,11071.949,585,105.0,50.0,1.784,295.438976,user_exit,0.0
3,MT3R-68KH-CNY5-6X73,q3_practice,307,13,0,1021.012,1457.861,13,True,True,112,44,94,0,3527.712508,2808.712508,14043.563,560,94.0,65.0,2.15,271.362501,user_exit,0.0
3,MULB-4YTU-VQYG-YAS6,q3_practice,303,10,0,1016.095,1460.312,10,True,True,129,32,119,0,3064.020357,2250.020357,11250.102,645,119.0,50.0,1.636,306.402036,user_exit,0.0
3,NMRC-85ZV-3FFE-GBXY,q3_practice,304,13,0,1010.416,1489.87,13,True,True,101,39,96,0,2860.706202,2194.706202,10973.531,505,96.0,65.0,1.858,220.054323,user_exit,0.0
3,QS6H-CC29-PDY3-ZA54,q3_practice,314,16,0,1025.989,1475.263,16,True,True,85,55,74,0,2987.384891,2408.384891,12041.924,425,74.0,80.0,2.052,186.711556,user_exit,0.0
3,R2N7-QMLC-26QX-RXYT,q3_practice,311,16,0,1007.2,1491.089,16,True,True,106,57,95,0,3556.396565,2851.396565,14256.983,530,95.0,80.0,1.991,222.274785,user_exit,0.0
3,VE37-SRPD-NCFR-4EQF,q3_practice,300,10,0,1009.526,1433.065,10,True,True,124,34,115,0,3240.473597,2455.473597,12277.368,620,115.0,50.0,2.106,324.04736,user_exit,0.0
4,2M5J-QWHS-BYGB-MPYF,q4_practice,404,13,6,1070.641,1495.106,13,True,True,343,43,296,0,9191.436652,7115.436652,35577.183,1715,296.0,65.0,5.04,707.033589,user_exit,0.0
4,2Y25-4LD6-5A4P-64CV,q4_practice,411,16,8,1004.93,1458.657,16,True,True,226,57,182,0,6685.801927,5293.801927,26469.01,1130,182.0,80.0,5.26,417.86262,user_exit,0.0
4,3XM4-65TW-CH39-XWTZ,q4_practice,420,16,8,1004.366,1454.027,16,True,True,211,58,160,0,7327.980928,6032.980928,30164.905,1055,160.0,80.0,6.208,457.998808,user_exit,0.0
4,6LEP-YVQ6-AYP5-N359,q4_practice,432,16,8,1008.896,1463.598,16,True,True,280,61,222,0,7982.568866,6280.568866,31402.844,1400,222.0,80.0,5.584,498.910554,user_exit,0.0
4,6US3-A76N-KC8B-DMFM,q4_practice,409,10,3,1008.26,1464.117,10,True,True,371,30,331,0,8171.259372,5935.259372,29676.297,1855,331.0,50.0,3.814,817.125937,user_exit,0.0
4,7HG2-UEBM-K3D2-LZWT,q4_practice,433,10,3,1114.562,1481.86,10,True,True,377,37,333,0,8146.580541,5878.580541,29392.903,1885,333.0,50.0,4.436,814.658054,user_exit,0.0
4,96M4-SK2V-PDWN-YGHB,q4_practice,407,13,6,1020.414,1492.263,13,True,True,364,51,311,0,9593.183569,7397.183569,36985.918,1820,311.0,65.0,4.853,737.937198,user_exit,0.0
4,A5YU-4SM6-4PK7-M5H8,q4_practice,412,10,3,1139.46,1478.185,10,True,True,382,43,327,0,9854.818271,7567.818271,37839.091,1910,327.0,50.0,4.675,985.481827,user_exit,0.0
4,B8HR-3HJH-2UYH-YDVB,q4_practice,416,13,6,1012.067,1489.111,13,True,True,371,58,306,0,8840.641969,6614.641969,33073.21,1855,306.0,65.0,5.794,680.049382,user_exit,0.0
4,CEL3-XQV8-M7KY-3CSW,q4_practice,426,16,8,1045.853,1497.562,16,True,True,184,54,144,0,5806.59591,4662.59591,23312.98,920,144.0,80.0,5.568,362.912244,user_exit,0.0
4,DX2D-KDF9-BGYU-XPMG,q4_practice,425,13,6,1023.466,1360.172,13,True,True,314,49,265,0,8642.080868,6742.080868,33710.404,1570,265.0,65.0,5.272,664.775451,user_exit,0.0
4,GSG4-6HTJ-AH5L-ZYGM,q4_practice,403,10,3,1001.593,1484.685,10,True,True,438,48,379,0,9488.521663,6869.521663,34347.608,2190,379.0,50.0,5.235,948.852166,user_exit,0.0
4,JDAY-2SU7-RTSJ-NQFR,q4_practice,434,13,6,1018.26,1401.084,13,True,True,351,63,283,0,9813.925336,7710.925336,38554.627,1755,283.0,65.0,5.774,754.917334,user_exit,0.0
4,JH76-MEWS-BR6Q-BQ6S,q4_practice,413,13,6,1042.824,1495.794,13,True,True,336,45,287,0,8732.841353,6700.841353,33504.207,1680,287.0,65.0,5.772,671.757027,user_exit,0.0
4,JY84-364B-45UL-AFBK,q4_practice,400,10,3,1003.128,1498.908,10,True,True,436,38,392,0,8704.596801,6082.596801,30412.984,2180,392.0,50.0,13.713,870.45968,user_exit,0.0
4,QDDJ-S89Y-7TKY-E6VJ,q4_practice,438,16,8,1018.88,1422.829,16,True,True,221,59,169,0,7316.173221,5962.173221,29810.866,1105,169.0,80.0,5.495,457.260826,user_exit,0.0
4,QL6B-KEUW-DJR2-P84B,q4_practice,435,16,8,1001.665,1490.865,16,True,True,184,60,144,0,5229.931106,4085.931106,20429.656,920,144.0,80.0,5.873,326.870694,user_exit,0.0
4,QXVN-L63H-6WLX-KLEJ,q4_practice,430,10,3,1029.996,1485.51,10,True,True,399,38,351,0,9307.230821,6911.230821,34556.154,1995,351.0,50.0,4.514,930.723082,user_exit,0.0
4,R2E7-LF5E-J5K6-BSVQ,q4_practice,419,13,6,1055.108,1474.754,13,True,True,340,56,283,0,9809.920542,7761.920542,38809.603,1700,283.0,65.0,5.223,754.609272,user_exit,0.0
4,RLK4-E82Q-UHT6-2M9M,q4_practice,418,10,3,1052.266,1496.42,10,True,True,374,36,328,0,8342.1353,6094.1353,30470.676,1870,328.0,50.0,4.395,834.21353,user_exit,0.0
4,SE9X-67GA-6YC6-QB7B,q4_practice,439,10,3,1040.839,1476.506,10,True,True,406,39,359,0,9241.602648,6802.602648,34013.013,2030,359.0,50.0,4.463,924.160265,user_exit,0.0
4,SWA3-C3FB-C5QC-FLW7,q4_practice,402,16,8,1025.798,1458.463,16,True,True,159,72,108,0,4780.431839,3797.431839,18987.159,795,108.0,80.0,6.598,298.77699,user_exit,0.0
4,T5ZL-5GEP-FDCK-3P8T,q4_practice,428,13,6,1032.374,1491.324,13,True,True,344,56,285,0,8719.661303,6649.661303,33248.306,1720,285.0,65.0,5.763,670.743177,user_exit,0.0
4,TKCY-2VT2-WYUX-2JXU,q4_practice,427,10,3,1032.206,1492.339,10,True,True,385,35,342,0,8260.712396,5943.712396,29718.562,1925,342.0,50.0,5.028,826.07124,user_exit,0.0
4,US79-DFNV-UQVW-NPLL,q4_practice,406,10,3,1107.601,1451.394,10,True,True,408,40,358,0,8795.904309,6347.904309,31739.522,2040,358.0,50.0,4.565,879.590431,user_exit,0.0
4,VJ68-ADZ6-STFT-LHYT,q4_practice,410,13,6,1016.63,1491.9,13,True,True,369,58,312,0,8783.09917,6561.09917,32805.496,1845,312.0,65.0,5.691,675.623013,user_exit,0.0
4,X3Y4-S9D2-XWR9-V6CZ,q4_practice,431,13,6,1022.115,1395.544,13,True,True,365,55,304,0,10160.134188,7966.134188,39830.671,1825,304.0,65.0,6.694,781.548784,user_exit,0.0
4,XN57-MHFY-V58F-XCMY,q4_practice,421,10,3,1022.143,1499.183,10,True,True,438,31,397,0,9188.211438,6551.211438,32756.057,2190,397.0,50.0,4.568,918.821144,user_exit,0.0
4,ZLKB-GVZT-NQDE-CU5F,q4_practice,424,10,3,1099.547,1417.736,10,True,True,395,45,343,0,8723.919348,6355.919348,31779.597,1975,343.0,50.0,4.398,872.391935,user_exit,0.0
1 problem_no case_code module seed source_total directional_total r_eff_min_m r_eff_max_m cleared_jammer_count all_cleared complete measure_accepted_count direction_measure_count channel_switch_count clear_failure_count virtual_time_s move_time_s move_distance_m measure_time_s switch_time_s clear_time_s program_run_duration_s average_clear_time_s end_reason max_recorded_gap_s
2 3 6LST-ZFVS-2HHW-TQQ4 q3_practice 310 13 0 1025.565 1479.16 13 True True 109 42 99 0 2794.211708 2085.211708 10426.059 545 99.0 65.0 2.04 214.939362 user_exit 0.0
3 3 6V2P-HJCS-GJ9A-83MA q3_practice 305 16 0 1032.735 1455.427 16 True True 103 55 88 0 3174.57833 2491.57833 12457.892 515 88.0 80.0 2.361 198.411146 user_exit 0.0
4 3 7ZXN-N53X-HAXQ-EGY4 q3_practice 309 10 0 1110.109 1403.33 10 True True 119 34 105 0 3228.653175 2478.653175 12393.266 595 105.0 50.0 2.086 322.865318 user_exit 0.0
5 3 8VRC-ADW4-XDXM-F62L q3_practice 301 13 0 1017.333 1460.77 13 True True 102 40 93 0 3407.038502 2739.038502 13695.193 510 93.0 65.0 2.024 262.079885 user_exit 0.0
6 3 ARBP-6XFZ-5YJU-STC8 q3_practice 302 16 0 1020.28 1464.97 16 True True 116 50 105 0 3867.871913 3102.871913 15514.36 580 105.0 80.0 1.952 241.741995 user_exit 0.0
7 3 E27E-M8WQ-LDT5-2XDA q3_practice 308 16 0 1027.493 1463.979 16 True True 104 51 89 0 3531.064575 2842.064575 14210.323 520 89.0 80.0 2.405 220.691536 user_exit 0.0
8 3 HGBA-XGH9-UNZJ-7YQ3 q3_practice 306 10 0 1018.005 1487.291 10 True True 123 35 113 0 3340.02512 2562.02512 12810.126 615 113.0 50.0 1.997 334.002512 user_exit 0.0
9 3 JW47-AVPH-XGHH-RLLV q3_practice 313 13 0 1018.607 1446.721 13 True True 106 40 93 0 3389.151979 2701.151979 13505.76 530 93.0 65.0 2.146 260.703998 user_exit 0.0
10 3 LZDX-68DJ-XM4P-A6XL q3_practice 312 10 0 1011.801 1441.227 10 True True 117 30 105 0 2954.389763 2214.389763 11071.949 585 105.0 50.0 1.784 295.438976 user_exit 0.0
11 3 MT3R-68KH-CNY5-6X73 q3_practice 307 13 0 1021.012 1457.861 13 True True 112 44 94 0 3527.712508 2808.712508 14043.563 560 94.0 65.0 2.15 271.362501 user_exit 0.0
12 3 MULB-4YTU-VQYG-YAS6 q3_practice 303 10 0 1016.095 1460.312 10 True True 129 32 119 0 3064.020357 2250.020357 11250.102 645 119.0 50.0 1.636 306.402036 user_exit 0.0
13 3 NMRC-85ZV-3FFE-GBXY q3_practice 304 13 0 1010.416 1489.87 13 True True 101 39 96 0 2860.706202 2194.706202 10973.531 505 96.0 65.0 1.858 220.054323 user_exit 0.0
14 3 QS6H-CC29-PDY3-ZA54 q3_practice 314 16 0 1025.989 1475.263 16 True True 85 55 74 0 2987.384891 2408.384891 12041.924 425 74.0 80.0 2.052 186.711556 user_exit 0.0
15 3 R2N7-QMLC-26QX-RXYT q3_practice 311 16 0 1007.2 1491.089 16 True True 106 57 95 0 3556.396565 2851.396565 14256.983 530 95.0 80.0 1.991 222.274785 user_exit 0.0
16 3 VE37-SRPD-NCFR-4EQF q3_practice 300 10 0 1009.526 1433.065 10 True True 124 34 115 0 3240.473597 2455.473597 12277.368 620 115.0 50.0 2.106 324.04736 user_exit 0.0
17 4 2M5J-QWHS-BYGB-MPYF q4_practice 404 13 6 1070.641 1495.106 13 True True 343 43 296 0 9191.436652 7115.436652 35577.183 1715 296.0 65.0 5.04 707.033589 user_exit 0.0
18 4 2Y25-4LD6-5A4P-64CV q4_practice 411 16 8 1004.93 1458.657 16 True True 226 57 182 0 6685.801927 5293.801927 26469.01 1130 182.0 80.0 5.26 417.86262 user_exit 0.0
19 4 3XM4-65TW-CH39-XWTZ q4_practice 420 16 8 1004.366 1454.027 16 True True 211 58 160 0 7327.980928 6032.980928 30164.905 1055 160.0 80.0 6.208 457.998808 user_exit 0.0
20 4 6LEP-YVQ6-AYP5-N359 q4_practice 432 16 8 1008.896 1463.598 16 True True 280 61 222 0 7982.568866 6280.568866 31402.844 1400 222.0 80.0 5.584 498.910554 user_exit 0.0
21 4 6US3-A76N-KC8B-DMFM q4_practice 409 10 3 1008.26 1464.117 10 True True 371 30 331 0 8171.259372 5935.259372 29676.297 1855 331.0 50.0 3.814 817.125937 user_exit 0.0
22 4 7HG2-UEBM-K3D2-LZWT q4_practice 433 10 3 1114.562 1481.86 10 True True 377 37 333 0 8146.580541 5878.580541 29392.903 1885 333.0 50.0 4.436 814.658054 user_exit 0.0
23 4 96M4-SK2V-PDWN-YGHB q4_practice 407 13 6 1020.414 1492.263 13 True True 364 51 311 0 9593.183569 7397.183569 36985.918 1820 311.0 65.0 4.853 737.937198 user_exit 0.0
24 4 A5YU-4SM6-4PK7-M5H8 q4_practice 412 10 3 1139.46 1478.185 10 True True 382 43 327 0 9854.818271 7567.818271 37839.091 1910 327.0 50.0 4.675 985.481827 user_exit 0.0
25 4 B8HR-3HJH-2UYH-YDVB q4_practice 416 13 6 1012.067 1489.111 13 True True 371 58 306 0 8840.641969 6614.641969 33073.21 1855 306.0 65.0 5.794 680.049382 user_exit 0.0
26 4 CEL3-XQV8-M7KY-3CSW q4_practice 426 16 8 1045.853 1497.562 16 True True 184 54 144 0 5806.59591 4662.59591 23312.98 920 144.0 80.0 5.568 362.912244 user_exit 0.0
27 4 DX2D-KDF9-BGYU-XPMG q4_practice 425 13 6 1023.466 1360.172 13 True True 314 49 265 0 8642.080868 6742.080868 33710.404 1570 265.0 65.0 5.272 664.775451 user_exit 0.0
28 4 GSG4-6HTJ-AH5L-ZYGM q4_practice 403 10 3 1001.593 1484.685 10 True True 438 48 379 0 9488.521663 6869.521663 34347.608 2190 379.0 50.0 5.235 948.852166 user_exit 0.0
29 4 JDAY-2SU7-RTSJ-NQFR q4_practice 434 13 6 1018.26 1401.084 13 True True 351 63 283 0 9813.925336 7710.925336 38554.627 1755 283.0 65.0 5.774 754.917334 user_exit 0.0
30 4 JH76-MEWS-BR6Q-BQ6S q4_practice 413 13 6 1042.824 1495.794 13 True True 336 45 287 0 8732.841353 6700.841353 33504.207 1680 287.0 65.0 5.772 671.757027 user_exit 0.0
31 4 JY84-364B-45UL-AFBK q4_practice 400 10 3 1003.128 1498.908 10 True True 436 38 392 0 8704.596801 6082.596801 30412.984 2180 392.0 50.0 13.713 870.45968 user_exit 0.0
32 4 QDDJ-S89Y-7TKY-E6VJ q4_practice 438 16 8 1018.88 1422.829 16 True True 221 59 169 0 7316.173221 5962.173221 29810.866 1105 169.0 80.0 5.495 457.260826 user_exit 0.0
33 4 QL6B-KEUW-DJR2-P84B q4_practice 435 16 8 1001.665 1490.865 16 True True 184 60 144 0 5229.931106 4085.931106 20429.656 920 144.0 80.0 5.873 326.870694 user_exit 0.0
34 4 QXVN-L63H-6WLX-KLEJ q4_practice 430 10 3 1029.996 1485.51 10 True True 399 38 351 0 9307.230821 6911.230821 34556.154 1995 351.0 50.0 4.514 930.723082 user_exit 0.0
35 4 R2E7-LF5E-J5K6-BSVQ q4_practice 419 13 6 1055.108 1474.754 13 True True 340 56 283 0 9809.920542 7761.920542 38809.603 1700 283.0 65.0 5.223 754.609272 user_exit 0.0
36 4 RLK4-E82Q-UHT6-2M9M q4_practice 418 10 3 1052.266 1496.42 10 True True 374 36 328 0 8342.1353 6094.1353 30470.676 1870 328.0 50.0 4.395 834.21353 user_exit 0.0
37 4 SE9X-67GA-6YC6-QB7B q4_practice 439 10 3 1040.839 1476.506 10 True True 406 39 359 0 9241.602648 6802.602648 34013.013 2030 359.0 50.0 4.463 924.160265 user_exit 0.0
38 4 SWA3-C3FB-C5QC-FLW7 q4_practice 402 16 8 1025.798 1458.463 16 True True 159 72 108 0 4780.431839 3797.431839 18987.159 795 108.0 80.0 6.598 298.77699 user_exit 0.0
39 4 T5ZL-5GEP-FDCK-3P8T q4_practice 428 13 6 1032.374 1491.324 13 True True 344 56 285 0 8719.661303 6649.661303 33248.306 1720 285.0 65.0 5.763 670.743177 user_exit 0.0
40 4 TKCY-2VT2-WYUX-2JXU q4_practice 427 10 3 1032.206 1492.339 10 True True 385 35 342 0 8260.712396 5943.712396 29718.562 1925 342.0 50.0 5.028 826.07124 user_exit 0.0
41 4 US79-DFNV-UQVW-NPLL q4_practice 406 10 3 1107.601 1451.394 10 True True 408 40 358 0 8795.904309 6347.904309 31739.522 2040 358.0 50.0 4.565 879.590431 user_exit 0.0
42 4 VJ68-ADZ6-STFT-LHYT q4_practice 410 13 6 1016.63 1491.9 13 True True 369 58 312 0 8783.09917 6561.09917 32805.496 1845 312.0 65.0 5.691 675.623013 user_exit 0.0
43 4 X3Y4-S9D2-XWR9-V6CZ q4_practice 431 13 6 1022.115 1395.544 13 True True 365 55 304 0 10160.134188 7966.134188 39830.671 1825 304.0 65.0 6.694 781.548784 user_exit 0.0
44 4 XN57-MHFY-V58F-XCMY q4_practice 421 10 3 1022.143 1499.183 10 True True 438 31 397 0 9188.211438 6551.211438 32756.057 2190 397.0 50.0 4.568 918.821144 user_exit 0.0
45 4 ZLKB-GVZT-NQDE-CU5F q4_practice 424 10 3 1099.547 1417.736 10 True True 395 45 343 0 8723.919348 6355.919348 31779.597 1975 343.0 50.0 4.398 872.391935 user_exit 0.0
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,15 @@
% Generated by scripts/build_practice_data.py; 自建模拟器演练局复算结果。 本文件是完整 table 环境,供正文直接 \input。
\begin{table}[H]
\centering\footnotesize
\caption{演练局汇总(仅统计全清且无失败清除的局)}
\setlength{\tabcolsep}{2pt}
\begin{tabular}{lrrrrrrr}
\toprule
问题 & 全清局数 & 累计清除 & 平均总虚拟时间/s & 时间区间/s & 平均定位清除时间/(s/个) & 移动占比\\
\midrule
问题三(全向源) & 15 & 195 & 3261.579 & 2794.212--3867.872 & 258.782 & 78.1\% \\
问题四(混合源) & 29 & 362 & 8401.445 & 4780.432--10160.134 & 708.350 & 75.8\% \\
\bottomrule
\end{tabular}
\label{tab:practicesummary}
\end{table}
@@ -1,6 +0,0 @@
% Generated by scripts/build_paper_support.py from project/results/*.json.
问题 & 核心指标 & 最优实现 & 基线实现 \\
1 & 直径平均绝对误差 / 覆盖判定准确率 & 0.000 m / 100.0\% & 4.583 m / 52.5\% \\
2 & 保证接收率 / 最坏后验半径均值 & 100.0\% / 73.890 m & 100.0\% / 340.747 m \\
3 & 全清率 / 平均虚拟耗时 & 100.0\% / 3188.734 s & 100.0\% / 14935.659 s \\
4 & 全清率 / 缺席误判总数 & 100.0\% / 0 & 77.0\% / 24 \\
@@ -1,6 +0,0 @@
% Generated by scripts/build_paper_support.py from project/results/*.json.
三点交会 & 26.986 & 26.986 & 21.213 & 5.773 & 否 & 否 & 是 \\
直径圆反例 & 40.000 & 40.000 & 50.000 & 10.000 & 否 & 否 & 是 \\
近共线检测点 & -- & -- & -- & -- & -- & -- & -- \\
零误差退化线段 & 100.000 & 100.000 & 0.000 & 100.000 & 是 & 是 & 是 \\
不相容观测 & -- & -- & -- & -- & -- & -- & -- \\
-5
View File
@@ -1,5 +0,0 @@
% Generated by scripts/build_paper_support.py from project/results/*.json.
算法2(默认选点) & 100.0\% & 73.890 & 90.899 & 607.577 & 0.104 & 170.44 \\
参考:盘内网格枚举 & 100.0\% & 75.627 & 91.349 & 605.841 & 0.106 & 170.28 \\
基线:垂直 1000 m & 0.0\% & 80.111 & 90.775 & 601.356 & 0.116 & 200.00 \\
基线:候选圆心 & 100.0\% & 340.747 & 375.088 & 340.721 & 0.500 & 136.29 \\
-4
View File
@@ -1,4 +0,0 @@
% Generated by scripts/build_paper_support.py from project/results/*.json.
bayes(默认策略) & 18/18 & 100.0\% & 0 & 3188.734 & 3111.256 & 3663.707 & 111.1 & 12.338 & 0.0 \\
seven(七点批量) & 18/18 & 100.0\% & 0 & 5361.707 & 5367.455 & 6462.351 & 100.8 & 23.508 & 0.0 \\
grid(49 点网格) & 18/18 & 100.0\% & 0 & 14935.659 & 15275.057 & 16691.406 & 430.6 & 61.550 & 0.0 \\
+17
View File
@@ -0,0 +1,17 @@
% Generated by scripts/build_paper_support.py from project/results/*.json.
\begin{table}[htbp]
\centering\small
\caption{问题三:三种策略在 18 个全向源场景上的对比(时间:s;三种策略的缺席误判均为 0)}
\setlength{\tabcolsep}{2pt}
\begin{tabular}{lrrrrrrrr}
\toprule
策略 & 有效局 & 全清率 & $T$ 均值 & $T$ 中位 & $T$ 最大 & 检测均值 & 位移/km & 后备清除\\
\midrule
bayes(默认策略) & 18/18 & 100.0\% & 3188.734 & 3111.256 & 3663.707 & 111.1 & 12.338 & 0.0 \\ \\
seven(七点批量) & 18/18 & 100.0\% & 5361.707 & 5367.455 & 6462.351 & 100.8 & 23.508 & 0.0 \\ \\
grid(49 点网格) & 18/18 & 100.0\% & 14935.659 & 15275.057 & 16691.406 & 430.6 & 61.550 & 0.0 \\ \\
\bottomrule
\end{tabular}
\label{tab:q3compare}
\end{table}
-4
View File
@@ -1,4 +0,0 @@
% Generated by scripts/build_paper_support.py from project/results/*.json.
directional(默认策略) & 11/11 & 100.0\% & 0 & 9069.871 & 8803.261 & 12081.148 & 355.6 & 34.268 & 24.8 \\
grid(问题三网格) & 0/11 & 66.6\% & 0 & 18179.173 & 18345.164 & 20457.858 & 573.7 & 73.876 & 0.0 \\
bayes(问题三策略) & 0/11 & 77.0\% & 24 & 3890.801 & 3646.178 & 5054.382 & 132.0 & 15.319 & 0.0 \\
+17
View File
@@ -0,0 +1,17 @@
% Generated by scripts/build_paper_support.py from project/results/*.json.
\begin{table}[htbp]
\centering\small
\caption{问题四:三种策略在 11 个混合源场景上的对比(时间:s)}
\setlength{\tabcolsep}{4pt}
\begin{tabular}{lrrrrrrr}
\toprule
策略 & 有效局 & 全清率 & 缺席误判 & $T$ 均值 & $T$ 中位 & $T$ 最大 & 检测均值\\
\midrule
directional(默认策略) & 11/11 & 100.0\% & 0 & 9069.871 & 8803.261 & 12081.148 & 355.6 \\
grid(问题三网格) & 0/11 & 66.6\% & 0 & 18179.173 & 18345.164 & 20457.858 & 573.7 \\
bayes(问题三策略) & 0/11 & 77.0\% & 24 & 3890.801 & 3646.178 & 5054.382 & 132.0 \\
\bottomrule
\end{tabular}
\label{tab:q4compare}
\end{table}
+2 -1
View File
@@ -46,4 +46,5 @@
\node[anchor=west,align=left] at (3250,900) {圆域:源位置先验\\蓝点:31个检测站};
\node[anchor=west,align=left] at (3250,-700) {部分站点在圆域外\\用于接收向外发射的源};
\end{tikzpicture}
\caption{第四问集合覆盖模型得到的31个检测站及源位置区域。}\end{figure}
\caption{第四问集合覆盖模型得到的31个检测站及源位置区域。}
\label{fig:q4plan}\end{figure}
Binary file not shown.
+82 -37
View File
@@ -57,6 +57,9 @@
\hypersetup{pdftitle={基于集合估计与覆盖优化的无线电干扰源自动定位清除},
pdfauthor={},pdfsubject={2026年全国大学生数学建模竞赛B题},pdfkeywords={交会定位,最小包围圆,主动测量,覆盖搜索}}
\input{data/formal-macros}
\input{data/practice-macros}
\input{data/practice-geometry-macros}
\input{data/project-macros}
\begin{document}
\setcounter{page}{1}
\begin{center}
@@ -67,21 +70,39 @@
{\heiti\zihao{4} 摘\quad 要}
\end{center}
针对源数量、位置和有效接收半径均未知的无线电干扰源自动排查问题,本文建立了一个由\textbf{几何定位、主动测量、覆盖搜索与动作调度}组成的闭环模型。模型以有界测向误差维护真实位置的候选集合,以清除半径约束控制操作时机,并将移动、检测、换频及清除统一折算为虚拟耗时;同时以题设模拟器作为测试与验证环境,将发射源抽象为单点,用题设 $\pm1^\circ$ 有界测向误差和有效接收半径圆盘刻画观测。
无线电干扰源的自动排查难在信息条件:源的数量、位置与有效接收半径均未知,
单次检测至多给出一个带误差的方位,而"无信号"既可能来自距离,也可能来自定向源的朝向。
面对这一条件,本文不猜测源的点位置,而是维护"真实位置可能落在哪里"的候选集合,
并让每一次观测、移动与清除都作用在同一套集合约束上,
由此建立由\textbf{几何定位、主动测量、覆盖搜索与动作调度}构成的闭环模型,
并把移动、检测、换频与清除统一折算为虚拟耗时,使"能否清除"与"何时清除"成为可计算的判据。
\textbf{针对问题一},由于带误差的示向度只限制方向而不能唯一确定位置,本文将每次观测转化为前向角域的半平面约束,并通过边界交点枚举、可行性筛选与凸包构造得到定位区域,同时区分空集、无界及退化情形。在此基础上,证明区域直径只需在顶点对中取得,并给出以该直径为直径的圆覆盖定位区域的充要判据。进一步分析发现,等边三角形反例说明“直径不超过 $40$ m”仍不足以保证一次清除;由此本文把清除条件落到\textbf{最小包围圆半径不超过 $20$ m}的充分判据上。
\textbf{针对问题一},本文将带误差的示向度改写为前向角域的半平面约束,
经边界交点枚举、可行性筛选与凸包构造得到定位区域,并分别处理空集、无界与退化情形;
在此基础上给出直径的顶点可达性与"直径圆覆盖该区域"的充要判据,
并以反例说明覆盖与可清除并不等价,最终把清除条件落实到最小包围圆半径判据。
\textbf{针对问题二},为使第二检测点既能接收信号又具有良好横向基线,先由首次示向度与接收半径上界构造候选位置集,并将“对所有候选源位置均保证接收”表示为 $1000$ m 圆盘之交。随后证明截断角域的最小包围半径为 $1500/(2\cos\delta)$;当有效误差半角取 $1.005^\circ$ 时,得到半径约 $249.885$ m 的充分安全候选盘。在线执行时,本文用更紧的凸外包圆替代解析盘,并在其中比较 $37$ 个候选点的最坏后验半径与移动时间,从而兼顾接收保证与定位收缩。
\textbf{针对问题二},为兼顾接收保证与横向基线,
本文由首次示向度与接收半径上界构造候选位置集,
把"对任一候选源位置均保证接收"表示为圆盘之交,并用最小包围圆判据判断其非空;
进而解析求出截断角域的最小包围圆,给出显式安全候选盘,
并在其中以最坏后验半径与移动时间为准则选取第二检测点。
\textbf{针对问题三},为在源数量未知时同时避免漏检和无效扫描,本文以原点与六个环站组成七点计划;在环半径 $1159.7$ m 时证明最坏覆盖距离不超过 $984.539$ m,使“七站全无信号”成为该频道缺席的解析证据。实际执行不再逐站全频道扫描,而是为每个频道维护网格幸存集,统一融合正负观测:候选集为空即判缺席,并跳过必为无信号的检测。定位点按期望信息增益与移动代价评分,覆盖、定位与清除三类任务统一建表,用最近邻和开放路径 2-opt 滚动重排。三次正式测试分别清除 $13$、$15$、$10$ 个源,总虚拟时间为 $3094.978$、$3493.335$、$2906.863$ s,程序运行时间合计 $\QThreeProgramTotal$ s。
\textbf{针对问题三},为在源数量未知时区分"尚未发现"与"根本不存在",
本文以原点与六个环站组成七点计划并证明其覆盖上界,
使"全站无信号"成为频道缺席的解析证据;
执行上为每个频道维护网格幸存集以融合正负观测,
按期望信息增益与移动代价选点,并将覆盖、定位与清除三类任务统一建表后滚动重排。
\textbf{针对问题四},由于定向源使“无信号”同时可能来源于距离与朝向,本文将发现条件由位置圆盘覆盖提升为位置与朝向的前向半盘覆盖,采用 $31$ 点最小命中集作为发现计划,并按 $15$ m 位置间距、$72$ 个朝向档运行期校核;同时用逐频道的(位置 $\times$ 朝向)联合幸存集保留遮挡解释。探点先按可见性概率筛选,再取移动最省者;定位停滞时,利用清除与朝向无关的性质,执行 $20$ m 方格、至多 $400$ 格的预算化后备清除。作为备选,本文还由凸组合性质给出 $49$ 点方格方案的连续覆盖证明。三次正式测试分别清除 $13$、$10$、$14$ 个源,总虚拟时间为 $9362.226$、$9271.302$、$8608.382$ s,程序运行时间合计 $\QFourProgramTotal$ s。
\textbf{针对问题四},针对定向源带来的无信号歧义,
本文将发现条件提升为位置与朝向的前向半盘覆盖,采用最小命中集作为发现计划,
以位置与朝向的联合幸存集保留遮挡解释;
探点按可见性概率筛选,并在定位停滞时利用清除与朝向无关的性质执行预算化后备清除,
另给出方格点集的连续覆盖证明作为备选方案。
六次正式测试均主动退出,且清除失败计数为零。正式成绩仅取自官方模拟器 \texttt{test} 目录下的六份正式导出包及其匹配统计;由于正式数据未公开源总数,本文以清除数量、总虚拟时间与程序运行时间评价,不据此宣称全清率。
\textbf{直接指标}部分只采用三次正式测试的原始统计。问题三三次测试分别清除 $13$、$15$、$10$ 个源,总虚拟时间为 $3094.978$、$3493.335$、$2906.863$ s,合计 $\QThreeTotal$ s,程序运行时间合计 $\QThreeProgramTotal$ s;问题四三次测试分别清除 $13$、$10$、$14$ 个源,总虚拟时间为 $9362.226$、$9271.302$、$8608.382$ s,合计 $\QFourTotal$ s,程序运行时间合计 $\QFourProgramTotal$ s。六次测试均主动退出、清除失败为零,累计清除 $\FormalClearCount$ 个源,总虚拟时间 $\FormalVirtualTotal$ s。由于题目关心任务完成时间和程序运行时间,本文直接以总虚拟时间、程序运行时间和清除数量作为优化效果指标,不使用自建基准集推断相对倍数。
四问的求解核心已整理为约 $5000$ 行的单文件程序,并按四问主线在附录中列出核心函数及一句话说明;评测机、命令行外壳、采集与绘图脚本、测试以及未被采用的方案不计入正文。综合上述,结论可归纳为:1. 带误差交会定位的严格清除判据是最小包围圆半径,而非定位区域直径;2. 主动测量应先保证接收,再在安全区域内优化横向基线与后验收缩;3. 多源搜索需把覆盖证明、正负观测滤波和滚动任务排序统一到同一时间目标下;4. 定向场景必须保留位置与朝向的联合解释,并以有限后备清除兜底。
全部模型与算法均在自建模拟器上完成了闭环验证,
机制论证与定量结论取自可复现真实位置与逐动作观测的演练局,
官方模拟器的正式测试仅用于附录中的最终效果验证。
\vspace{0.4em}
\noindent{\heiti 关键词:}有界误差;交会定位;最小包围圆;主动测量;定向覆盖
@@ -115,43 +136,67 @@
\item 已知一个全向源的首次示向度,确定第二检测点的候选区域与选点策略,
在保证接收的条件下获得较好的定位效果。
\item 对数量未知的全向源设计自动发现、定位和清除算法,
在完成任务的前提下尽量减少总耗时,并报告官方测试结果。
在完成任务的前提下尽量减少总耗时,并报告测试结果。
\item 将策略推广到全向与定向源混合的情形,处理无信号的歧义,
给出相应的搜索、定位、清除算法及正式测试结果。
给出相应的搜索、定位、清除算法及测试结果。
\end{enumerate}
问题三、四各完成三次正式测试。本文依据六份正式日志及其对应统计,
报告各次清除数量、平均定位清除时间和程序运行时间。
问题三、四各完成三次正式测试。本文以自建模拟器演练局作为机制论证与定量分析的数据源,
并以官方模拟器的六份正式导出包在附录中验证算法效率与结论,
正式结果按题目表 1 的格式报告各次清除数量、平均定位清除时间与程序运行时间。
\section{问题分析}
四问并非彼此独立的技巧题,而是同一条“观测—证据—决策—执行”链路在不同信息条件下的展开,如图~\ref{fig:flow} 所示。题面给定的目标区域、运动方式、动作耗时与源/频道范围构成最上层的抽象;在线系统则分为证据层、决策层和执行层,分别维护候选集与幸存集、生成选点与任务表、串行执行动作;最下层是问题一至四各自的主线与发现、定位、清除三个闭环。后文的模型与算法都落在这条链路的某一层上:问题一、二提供证据层与决策层所需的几何判据,问题三、四解决时间约束下三个闭环的组织方式。
问题一处于整条链路的几何起点。带误差的示向度只限制真实方位所在的角度区间,
单条射线无法确定位置;若直接对射线求交,多解和数值敏感会同时出现。
为避免这一点,本文将观测改写为前向角域的半平面约束,并通过直线交点枚举与凸包构造获得可行域。
由这一改写还可进一步看出,可行域直径只反映区域尺度,并不等于覆盖该区域的圆半径:
最远顶点对的中点未必能覆盖全部候选位置。正是这一差别,
促使本文分别导出直径的顶点可达性与直径圆覆盖的充要判据,
并以等边三角形反例说明"直径不超过 $40$ m"不能保证一次清除,
最终把清除条件落到最小包围圆半径不超过 $20$ m 的充分判据上。
在问题一的几何基础上,问题二回答"第二测点选在哪里"。
这里存在一对相互牵制的目标:若只追求大交会角,第二点可能远离源而收不到信号;
若只求保证接收,又可能缺少横向基线。为兼顾二者,
本文先由首次示向度与接收半径上界构造候选位置集,
把"对未知真源均保证接收"表示为所有候选位置的 $1000$ m 圆盘之交,
再用最小包围圆判据判断该交集是否非空;在此基础上证明截断角域的最小包围半径为
$1500/(2\cos\delta)$,并在有效误差半角 $1.005^\circ$ 时给出半径约 $249.885$ m 的安全候选盘。
在线执行时,用更紧的凸外包圆替代解析盘,在 $37$ 个候选点中按最坏后验半径与移动时间择优。
因此,问题二的接收保证是可证明的几何事实,定位收缩则通过有限候选近似完成。
问题三把单源判据推广到数量未知的全向源。此时真正的困难不是清除一个已发现源,
而是在有限时间内区分"尚未发现"与"根本不存在"。
为此,本文以原点与六个环站组成七点计划,在环半径 $1159.7$ m 时证明最坏覆盖距离不超过 $984.539$ m,
使"七站全无信号"成为该频道缺席的解析证据。实际执行不再逐站全频道扫描,
而是为每个频道维护网格幸存集,统一融合正负观测:候选集为空即判缺席,并可跳过必为无信号的检测。
定位点由期望信息增益与移动代价共同评分,覆盖、定位、清除三类任务统一建表后
用最近邻与开放路径 2-opt 滚动重排,以减少发现任务与定位任务间的往返。
问题四进一步处理混合源,此时"无信号"既可能来自距离,也可能来自朝向。
七点全向计划不再满足前向半盘下的发现要求,因此本文把发现条件提升为位置与朝向的联合覆盖,
采用 $31$ 点最小命中集,并按 $15$ m 位置间距和 $72$ 个朝向档进行运行期校核;
同时用逐频道的位置 $\times$ 朝向联合幸存集保留朝向遮挡解释。
探点先按可见性概率筛选,再取移动最省者;定位停滞时,利用清除与朝向无关的性质,
执行 $20$ m 方格、至多 $400$ 格的预算化后备清除。作为备选,
本文还由凸组合性质给出 $49$ 点方格方案的连续覆盖证明。
上述链路在自建模拟器上闭环运行后,可归纳出四点结论:
1. 带误差交会定位的严格清除判据是最小包围圆半径,而非定位区域直径;
2. 主动测量应先保证接收,再在安全区域内优化横向基线与后验收缩;
3. 多源搜索需把覆盖证明、正负观测滤波和滚动任务排序统一到同一时间目标下;
4. 混合源场景必须保留位置与朝向的联合解释,并以有限后备清除兜底。
上述闭环对应的观测更新与决策关系如图~\ref{fig:framework}。
\begin{figure}[htbp]
\centering
\includegraphics[width=0.88\linewidth]{flow-overall-architecture.png}
\caption{四问共用的模型链路:题面抽象(L0)、在线三层(L1)、
四问主线(L2)与发现、定位、清除三个闭环(L3)。}
\label{fig:flow}
\end{figure}
问题一处于整条链路的几何起点。带误差的示向度只限制真实方位所在的角度区间,单条射线无法确定位置;若直接对射线求交,多解和数值敏感会同时出现。为避免这一点,本文将观测改写为前向角域的半平面约束,并通过直线交点枚举与凸包构造获得可行域。进一步地,可行域直径只反映区域尺度,并不等于覆盖该区域的圆半径:最远顶点对的中点未必能覆盖全部候选位置。由这一差别出发,本文分别导出直径的顶点可达性与直径圆覆盖的充要判据,并以等边三角形反例说明“直径不超过 $40$ m”不能保证一次清除,最终把清除条件落到最小包围圆半径不超过 $20$ m 的充分判据上。
在问题一的几何基础上,问题二回答“第二测点选在哪里”。如果只追求大交会角,第二点可能远离源而收不到信号;如果只求保证接收,又可能缺少横向基线。为兼顾二者,本文先由首次示向度与接收半径上界构造候选位置集,把“对未知真源均保证接收”表示为所有候选位置的 $1000$ m 圆盘之交;在此基础上证明截断角域的最小包围半径为 $1500/(2\cos\delta)$,并在有效误差半角 $1.005^\circ$ 时给出半径约 $249.885$ m 的安全候选盘。在线执行时,用更紧的凸外包圆替代解析盘,在 $37$ 个候选点中按最坏后验半径与移动时间择优。因此,问题二的接收保证是可证明的几何事实,定位收缩则通过有限候选近似完成。
问题三把单源判据推广到数量未知的全向源。此时真正的困难不是清除一个已发现源,而是在有限时间内区分“尚未发现”与“根本不存在”。为此,本文以原点与六个环站组成七点计划,在环半径 $1159.7$ m 时证明最坏覆盖距离不超过 $984.539$ m,使“七站全无信号”成为该频道缺席的解析证据。实际执行不再逐站全频道扫描,而是为每个频道维护网格幸存集,统一融合正负观测:候选集为空即判缺席,并可跳过必为无信号的检测。定位点由期望信息增益与移动代价共同评分,覆盖、定位、清除三类任务统一建表后用最近邻与开放路径 2-opt 滚动重排,以减少发现任务与定位任务间的往返。三次正式测试分别清除 $13$、$15$、$10$ 个源,平均定位清除时间为 $238.075$、$232.889$、$290.686$ s/个。
问题四进一步处理混合源,此时“无信号”既可能来自距离,也可能来自朝向。七点全向计划不再满足前向半盘下的发现要求,因此本文把发现条件提升为位置与朝向的联合覆盖,采用 $31$ 点最小命中集,并按 $15$ m 位置间距和 $72$ 个朝向档进行运行期校核;同时用逐频道的位置 $\times$ 朝向联合幸存集保留朝向遮挡解释。探点先按可见性概率筛选,再取移动最省者;定位停滞时,利用清除与朝向无关的性质,执行 $20$ m 方格、至多 $400$ 格的预算化后备清除。作为备选,本文还由凸组合性质给出 $49$ 点方格方案的连续覆盖证明。三次正式测试分别清除 $13$、$10$、$14$ 个源,平均定位清除时间为 $720.171$、$927.130$、$614.884$ s/个。
综合上述,结论可归纳为:1. 带误差交会定位的严格清除判据是最小包围圆半径,而非定位区域直径;2. 主动测量应先保证接收,再在安全区域内优化横向基线与后验收缩;3. 多源搜索需把覆盖证明、正负观测滤波和滚动任务排序统一到同一时间目标下;4. 混合源场景必须保留位置与朝向的联合解释,并以有限后备清除兜底。上述闭环对应的观测更新与决策关系如图~\ref{fig:framework}。
\begin{figure}[htbp]
\centering
\includegraphics[width=0.88\linewidth]{framework-decision-loop.png}
\includegraphics[width=0.62\linewidth]{framework-decision-loop.png}
\caption{基于观测更新、集合估计与任务排序的闭环决策过程。}
\label{fig:framework}
\end{figure}
\section{模型假设}
\begin{enumerate}[label=假设\arabic*:,leftmargin=4.5em,itemsep=4pt]
\begin{enumerate}[label=假设\arabic*,leftmargin=4.5em,itemsep=4pt]
\item 源的位置、频道、发射朝向和有效接收半径在一次测试中保持不变,
不同频道互不干扰。这与静态测试案例及题设的频道独立性一致。
\item 采用二维欧氏距离,忽略高度差;机器人匀速直线移动,
@@ -206,6 +251,7 @@ N_m,N_s,N_c^+,N_c^- & 检测、换频、成功清除、失败清除次数 & 次\
\bibitem{problem} 全国大学生数学建模竞赛组委会.
2026年高教社杯全国大学生数学建模竞赛B题:无线电干扰源的快速自动定位与清除[Z]. 2026.
\bibitem{protocol} 赛题配套材料. 模拟器使用说明;模拟器通信接口说明及编程指南[Z]. 2026.
\bibitem{referee} 本文自建模拟器(评测机实现). 无线电干扰源环境模拟器协议与场景规范[Z]. 2026.
\bibitem{format} 全国大学生数学建模竞赛组委会. 全国大学生数学建模竞赛论文格式规范(2026年修订稿)[Z]. 2026.
\bibitem{welzl} WELZL E. Smallest enclosing disks (balls and ellipsoids)[C]//
New Results and New Trends in Computer Science. LNCS 555. Berlin: Springer, 1991: 359--370.
@@ -217,11 +263,10 @@ Mathematics of Operations Research, 1979, 4(3): 233--235.
\url{https://doi.org/10.1287/moor.4.3.233}.
\bibitem{formal} 官方无线电干扰源环境模拟器.
问题三、四正式行为日志与配套统计(客户端1.1.0,六个案例)[DS]. 2026-09-12--2026-09-13.
案例编码及文件校验值见附录~\ref{app:data}。
案例编码及文件校验值见附录~\ref{app:formal}。
\end{thebibliography}
\clearpage
\appendix
\ctexset{section={number=\Alph{section},aftername={\quad}}}
\input{sections/appendix}
\end{document}
+124 -21
View File
@@ -1,22 +1,108 @@
\section{正式数据清单与复算说明}\label{app:data}
六份正式导出文件及其 SHA-256 校验值列于表~\ref{tab:packages}。
论文采用原项目模板,按2026年格式规范设置 A4 纸张、四边距 $2.5$ cm,
电子版从摘要页开始连续编号\cite{format}。
所给往届论文用于章节组织与版式参考。
\section{官方正式测试的效果验证}\label{app:formal}
\subsection{数据选择及对应关系核对}
正文的机制论证与定量结论取自自建模拟器演练局,
本节则用官方模拟器的正式测试验证算法在正式环境下的效率与正文结论是否一致。
实验样本严格限定为官方模拟器
\pathtext{Jammers-simulator-full/test} 下的六份正式导出包,问题三、四各有三次。
文件名、案例编码与完整包校验值见表~\ref{tab:packages},核对说明见 \pathtext{docs/paper/data/audit.md}。
由于官方记录不公开真实源位置和机器人轨迹,本节不绘制搜索/清除路径,
只使用清除数量、总虚拟时间、程序运行时间与动作计数四类可直接观测的量。
这样处理的原因是:正式测试能够检验"算法是否在真实时限内完成清除",
但不能检验"定位是否收敛到真值",后者已由正文的演练局分析承担。
评价指标包括清除数量 $N_c^+$、总虚拟时间 $T$、程序运行时间 $T_{\mathrm{real}}$,
以及检测、换频和清除的动作次数。其中 $T$ 按整数微秒累计,
$T_{\mathrm{real}}$ 采用官方记录的毫秒值;
平均定位清除时间仅作辅助分析,不替代总虚拟时间与程序运行时间这两项直接指标。
六次测试均以主动退出(\texttt{user\_exit})结束,统计提交状态为已确认。
\subsection{问题三与问题四的正式结果}
\input{data/formal-q3-table}
三次正式测试分别清除 $13$、$15$、$10$ 个源,
总虚拟时间分别为 $3094.978$、$3493.335$、$2906.863$ s,合计 $\QThreeTotal$ s;
程序运行时间分别为 $5.596$、$3.024$、$2.680$ s,合计 $\QThreeProgramTotal$ s。
按清除数量加权的平均定位清除时间为 $\QThreeWeighted$ s/个,仅作辅助解释。
第三次的总虚拟时间最短($2906.863$ s),但其清除数也最少($10$ 个),
因此判断优化程度时应以总虚拟时间与清除数量并列报告,不能只看单一平均值。
\input{data/formal-q4-table}
表~\ref{tab:formal4} 给出问题四的三次正式结果。三次分别清除 $13$、$10$、$14$ 个源,
总虚拟时间合计 $\QFourTotal$ s,程序运行时间合计 $\QFourProgramTotal$ s,
加权平均定位清除时间 $\QFourWeighted$ s/个。
第三次清除数最多($14$ 个)且总虚拟时间最短($8608.382$ s),
与自建模拟器演练局中"可见性筛选加后备清除能够压缩定向场景耗时"的结论方向一致;
但三次案例的随机源分布与朝向不同,仍应以绝对时间与清除数量为准。
\subsection{正式测试的动作耗时分解}
按式~\eqref{eq:residual} 由动作计数反推移动时间,得到表~\ref{tab:formalcost}。
其中 Q3-1 表示问题三第一次正式测试,其余编号依此类推。
\input{data/formal-cost-table}
\begin{figure}[htbp]
\centering
\includegraphics[width=0.92\linewidth]{formal-time-bars.png}
\caption{六次正式测试的累计虚拟耗时分解(数据仅来自正式测试的原始动作计数与总虚拟时间)。}
\label{fig:formalbars}
\end{figure}
六次测试的清除失败计数均为零,移动时间占总虚拟耗时的
$\FormalMovementMin\%$ 至 $\FormalMovementMax\%$,与演练局的构成一致,
说明"移动是主要成本"这一结论在正式环境中同样成立。
由 $L_{\mathrm{eq}}=5T_{\mathrm{move}}$ 反推等效移动距离:
问题三依次为 $12.045$、$13.627$、$10.824$ km,
问题四依次为 $36.386$、$35.507$、$35.027$ km;
对照表~\ref{tab:q3practice} 与表~\ref{tab:q4practice},
正式测试的移动量级与演练局相符(问题三约 $12$--$15$ km,问题四约 $30$--$33$ km),
表明演练局并非经过挑选的乐观样本。
该等效距离由动作计数与移动速度换算得到,不是独立轨迹测得的长度。
\subsection{正式测试结论}
六次正式测试均主动退出且清除失败计数为零。
以题目要求的直接时间指标衡量:问题三累计清除 $\QThreeCount$ 个源,
总虚拟时间 $\QThreeTotal$ s,程序运行时间合计 $\QThreeProgramTotal$ s;
问题四累计清除 $\QFourCount$ 个源,总虚拟时间 $\QFourTotal$ s,
程序运行时间合计 $\QFourProgramTotal$ s;六次合计清除 $\FormalClearCount$ 个源、
总虚拟时间 $\FormalVirtualTotal$ s。
由此可得结论:
1. 全向源场景下,七点解析覆盖与逐频道网格幸存集使三次正式测试均在时限内完成,
总虚拟时间为 $2906.863$ 至 $3493.335$ s,与演练局量级一致;
2. 混合源场景下,前向半盘最小命中集、位置与朝向联合幸存集和后备清除使三次正式测试的
总虚拟时间为 $8608.382$ 至 $9362.226$ s,明显高于全向场景,
印证了正文关于"定向遮挡仍是主要时间成本"的判断;
3. 平均定位清除时间与移动时间分解只用于解释成本结构,
优化程度的结论应以总虚拟时间、程序运行时间和清除数量为准。
由于正式数据未公开源总数与类型组成,本文不据此计算全清率或做跨问题性能排名。
\input{data/formal-file-list}
复算脚本 \pathtext{scripts/audit_paper_formal.py} 将正式导出、结果侧文件与
官方统计记录匹配,生成结构化数据、CSV 和 LaTeX 表格。
在项目根目录执行:
\begin{lstlisting}[language={},numbers=none]
python scripts/audit_paper_formal.py
python scripts/audit_paper_formal.py --snapshot docs/paper/data/formal-results.json
\end{lstlisting}
第一条命令完成来源匹配与统计计算;
第二条根据已有快照重新计算指标,并核对现有正式包的校验值。
耗时图与汇总量由同一统计快照生成。
正文插图统一由 \pathtext{scripts/plot_paper_figures.py} 使用 matplotlib 生成,数据只读取 \pathtext{docs/paper/data/formal-results.csv} 与第四问覆盖计划;逐图来源与生成命令见 \pathtext{docs/figures/manifest.json}。
\section{自建模拟器演练局数据清单}\label{app:practice}
本节列出正文定量结论所依据的全部演练局,共 $\PractTotalCases$ 局,
由 \pathtext{scripts/run\_practice\_episodes.py} 采集、
\pathtext{scripts/build\_practice\_data.py} 从评测机行为日志复算得到,
复算口径为题面计时模型,与日志记录的最大偏差为 $\PractMaxGap$ s。
采集时以固定种子逐局运行生产策略,判定标准为
"清完全部源 $\wedge$ 无缺席误判 $\wedge$ 主动退出 $\wedge$ 零异常 $\wedge$ 零失败清除";
本表所列 $\PractTotalCases$ 局全部满足该标准。
\input{data/practice-summary-table}
\input{data/practice-all-table}
\input{data/practice-cost-table}
\section{支撑材料与运行方法}
\begin{table}[H]
@@ -28,19 +114,37 @@ python scripts/audit_paper_formal.py --snapshot docs/paper/data/formal-results.j
\midrule
\pathtext{src/mcm26b/} & 四问几何、信念、覆盖、调度与串行通信实现\\
\pathtext{src/mcm26b/guarantee/plans/} & 第四问已实现的覆盖计划及验证参数\\
\pathtext{project/} & 四问“最优实现 / 基线实现”配对对比框架与结果\\
\pathtext{referee/} & 自建模拟器(评测机)实现,与官方协议同一边界\\
\pathtext{referee-data/sessions/} & 正文引用的演练局行为日志(含真值)\\
\pathtext{scripts/build_practice_data.py} & 演练局计时复算与论文数据、宏文件生成\\
\pathtext{scripts/plot_paper_figures.py} & 正文插图 matplotlib 生成脚本\\
\pathtext{scripts/audit_paper_formal.py} & 正式文件对应核对、匿名快照及表格复算\\
\pathtext{scripts/build_figure_data.py} & 旧插图数据准备脚本,仅作历史保留\\
\pathtext{docs/figures/manifest.json} & 插图来源与生成命令清单\\
\pathtext{docs/paper/data/} & 六个正式案例的可读统计、表格及校验值\\
\pathtext{docs/paper/data/} & 演练局与正式案例的可读统计、表格及校验值\\
\pathtext{docs/paper/sections/} & 分章论文源文件\\
\pathtext{docs/paper/figures/} & 旧版矢量图源文件,正文不再引用\\
\pathtext{docs/figures/} & 正文插图(PNG)及其数据清单与生成命令\\
\pathtext{Jammers-simulator-full/test/} & 六份原名官方正式日志\\
\pathtext{support-manifest.json} & 支撑包文件清单及逐文件 SHA-256\\
\bottomrule
\end{tabularx}
\end{table}
正文数据与插图的复算命令如下(在项目根目录执行):
\begin{lstlisting}[language={},numbers=none]
python scripts/build_practice_data.py # 演练局复算,生成正文数据与宏文件
python scripts/plot_paper_figures.py # 生成正文全部插图
python scripts/audit_paper_formal.py --snapshot docs/paper/data/formal-results.json
python scripts/build_paper_support.py # 附录正式数据表与支撑包
\end{lstlisting}
第一条命令读取 \pathtext{referee-data/sessions/} 下的行为日志,
按题面计时模型复算每局的移动、检测、换频与清除耗时,
并输出正文引用的宏、表格行与插图数据;
第二条命令据此与覆盖计划重新绘制插图,论文不手抄图内任何数字。
第三条命令按已有快照复算正式统计并核对正式包的校验值;
第四条命令生成附录的正式数据表并打包支撑材料。
Python 运行时需要 \texttt{requests},\texttt{numpy} 提供可选加速。
将 \texttt{src} 加入 Python 模块路径后,可调用
\texttt{python -m mcm26b.geometry} 进行问题一几何分析,
@@ -58,4 +162,3 @@ Python 运行时需要 \texttt{requests},\texttt{numpy} 提供可选加速。
未收录的部分包括独立评测机(按附件协议复现模拟器,与求解代码零耦合)、
命令行入口、数据采集与论文绘图脚本、单元测试,以及经实测未采用的候选方案。
\input{data/source-listings}
+12 -55
View File
@@ -1,9 +1,11 @@
\section{模型评价与推广}
\subsection{模型的有效性}
本文采用集合估计处理有界测向误差,将每次观测转化为真实位置的可行约束。
本文采用集合估计处理有界测向误差,将每次观测转化为真实位置的可行约束,
这一条主线贯穿四问。
问题一通过凸包顶点计算直径,以最小包围圆半径给出清除充分条件;
问题二将接收距离要求表示为闭圆盘的交集,并由三角不等式构造显式可行子集。
几何定位、接收约束与清除距离由统一的集合运算联系起来。
几何定位、接收约束与清除距离因此由统一的集合运算联系起来,
而不是各自独立的经验规则。
多源搜索采用覆盖点集与检测状态矩阵维护各频道的搜索进度。
网格表示可处理负观测产生的非凸可行区域,
@@ -14,67 +16,22 @@
对于定向源,位置与朝向的联合约束提供可见性信息,
凸组合性质给出方格点集的连续覆盖证明,
网格遍历清除则利用清除半径与方向无关的物理条件。
六次正式测试提供了算法在全向及混合源案例中的清除数量和时间成本。
\subsection{未来工作}\label{sec:future}
\textbf{提高离散选点的近似精度。}
算法2以边界采样和读数端点枚举近似最坏后验半径,
信息增益评分采用离散先验,任务排序采用最近邻初始化与 2-opt 局部搜索。
这些方法尚未给出整个动态任务的全局最优性保证。
后续可用区间分支定界控制后验半径的近似误差,
结合动态规划或滚动时域优化,研究测点选择与路径规划的联合求解。
\textbf{建立31点方案的连续覆盖误差界。}
现有方案在 $15$ m 网格和 $72$ 个朝向上完成离散验证。
若采用位置误差界 $15/\sqrt2$,则
$990.051+15/\sqrt2\approx1000.658$ m,超过最小接收半径;
最终验证的前向角余量为 $0^\circ$,也不足以控制全部朝向扰动。
因此当前离散结果尚不能推出连续覆盖。
后续可按式~\eqref{eq:continuous} 同时约束位置与朝向误差,
或采用已证明的 $49$ 点方案,在相同场景中比较站点数量与耗时。
\textbf{扩展混合类型的集合估计。}
当前实现主要维护定向假设,并以 \texttt{joint\_empty} 处理部分候选集为空的情形,
尚未单独维护全向分支。全向源可从多个方向被接收,
定向候选集为空不足以判定该频道无源。
后续应将类型加入状态,维护
\begin{equation}
\mathcal H_c=\mathcal H_c^{\mathrm{omni}}\cup\mathcal H_c^{\mathrm{dir}},
\label{eq:typeunion}
\end{equation}
并分别更新两类可行集合。例如源周围三个相隔 $120^\circ$ 的测点可以同时接收全向信号,
却不能同时属于一个固定前向半平面。
类型并集模型可保留这一解释,使源存在性判断与观测条件一致。
\textbf{研究资源约束下的终止性。}
连续覆盖与单次清除充分条件尚不足以保证所有案例均在有限预算内完成。
持续遮挡、几何退化及较大的候选区域会增加定位步数,
当前 $400$ 格上限也会限制遍历清除。
后续可设计自适应网格细化与计算预算分配,并研究最坏情况下的动作次数上界。
\textbf{扩展统计评价。}
本文的六次正式测试完成了两问各三次案例的结果汇总,
但样本量仍不足以代表所有位置与朝向分布。
官方统计中的源总数及类型组成尚未公开,因此全清率与分类型指标有待补充。
未来可在可重复场景中开展配对试验,
同时保存策略版本、源数量和轨迹等信息,以估计置信区间并比较各模块的贡献。
\textbf{第六,正式测试样本仍有限。}本文仅使用问题三、四各三次正式测试的清除数量、总虚拟时间和程序运行时间作为优化效果的直接指标;由于正式数据未公开源总数与类型组成,不能据此计算全清率或做跨问题性能排名。后续应在可重复环境中扩大配对测试,并分别报告总虚拟时间、程序运行时间和清除数量。
这些结论在自建模拟器上完成了闭环验证:本次采集的 $44$ 局演练全部清完全部源、
失败清除为零,问题三平均总虚拟时间 $\PractQThreeMean$ s、问题四 $\PractQFourMean$ s;
配对基线对比进一步说明,几何判据的精确性、覆盖证明与任务排序三者共同决定了最终效率。
六份官方正式测试则在附录~\ref{app:formal} 中提供了正式环境下的效率验证。
\subsection{参数影响的解析讨论}
主要参数的影响可由模型公式分析。
由 $a(\delta)=1500/(2\cos\delta)$ 得
$a'(\delta)=750\sec\delta\tan\delta$,其中 $\delta$ 以弧度计。
误差半角增大会扩大源位置的包围圆,并缩小保证接收圆盘。
表~\ref{tab:safeanalytic} 给出了两位小数舍入余量对首次可行区域的影响。
表~\ref{tab:safeanalytic} 给出了两位小数舍入余量对首次可行区域的影响:
$1^\circ$ 与 $1.005^\circ$ 之间的差别在毫米量级,说明该判据对舍入余量稳健。
由式~\eqref{eq:coveragebound},环半径影响覆盖路径长度和最大覆盖距离。
默认半径保留约 $15.461$ m 的距离裕量。
减小网格边长可降低 $\epsilon_g$ 并收紧位置误差上界,
而二维网格数量大致与 $\ell^{-2}$ 成正比,因此应在精度、内存和计算时间间取得平衡。
\subsection{模型推广}
该模型适用于有界方向误差下的静态信号源排查、室内设备巡检和移动传感器主动定位。
推广时,根据新的设备参数校准接收半径、测向误差和动作时间;
对于移动目标或额外遮挡,可扩展状态转移与观测约束,
继续采用集合估计、覆盖优化和路径排序进行联合决策。
同理,问题四的 $31$ 点计划在站点数量与覆盖余量之间构成一对可调参数:
设计阶段预留的 $5^\circ$ 前向角余量越大,所需站点越多,但对朝向扰动越稳健。
+66 -47
View File
@@ -1,8 +1,9 @@
\section{问题一:有界误差交会定位与覆盖圆}
\subsection{前向角域的半平面模型}
给定检测点 $s_i=(s_{ix},s_{iy})$ 与读数 $\theta_i$,
误差约束意味着真实方位位于
$[\theta_i-\delta,\theta_i+\delta]$ 内。因此可行位置属于前向角域
\subsection{从示向度到前向角域的半平面模型}
交会定位的第一个困难在于,带误差的示向度只限制方向而不唯一确定位置。
由题设可知,示向度误差不超过 $\pm1^\circ$,故给定检测点 $s_i=(s_{ix},s_{iy})$ 与读数 $\theta_i$ 后,
真实方位必然落在 $[\theta_i-\delta,\theta_i+\delta]$ 内。据此,
真实位置属于以前向方向 $u(\theta_i)$ 为中轴的角域
\begin{equation}
W_i=\left\{g:
\begin{aligned}\relax
@@ -12,7 +13,10 @@ u(\theta_i)\cdot(g-s_i)&\ge0
\end{aligned}\right\}.
\label{eq:wedge}
\end{equation}
三条不等式均可写为 $a x+b y\le c$,其法向依次为
三条不等式的意义并不相同。前两条把位置限制在左右边界之间,
第三条显式保留"只在前方"这一方向性,
从而使零误差的退化情形对应一条射线而不是整条直线。
为便于统一求解,将其改写为 $a x+b y\le c$ 的形式,法向依次为
\begin{equation}
\begin{aligned}
&(\sin(\theta_i-\delta),-\cos(\theta_i-\delta)),\\
@@ -20,46 +24,50 @@ u(\theta_i)\cdot(g-s_i)&\ge0
&(-\cos\theta_i,-\sin\theta_i),
\end{aligned}
\end{equation}
右端为相应法向与 $s_i$ 的内积。在 $0<\delta<90^\circ$ 时,
前两条已限定前向窄角域;第三条显式保留方向性,
并使零误差退化情形对应射线而非整条直线。
采用正弦、余弦表示可自动处理 $0^\circ/360^\circ$ 跨界。
右端为相应法向与 $s_i$ 的内积。采用正弦、余弦表示还有一个工程上的好处:
$0^\circ$ 与 $360^\circ$ 的跨界无需特判即可自动处理。
问题一的多边形定位区域定义为
由于所有角域都是凸的半平面交,多个测点的信息可以直接合并。
问题一的多边形定位区域因此定义为
\begin{equation}
P=\bigcap_{i=1}^{n}W_i=\{g:Ag\le b\}.
\label{eq:q1set}
\end{equation}
式~\eqref{eq:q1set} 根据各次测向角域确定问题一的定位区域。
后续问题将在此基础上加入 $\Omega$ 与接收距离约束。
半平面交是闭凸集,可能为空、单点、线段、有界多边形或无界集。
式~\eqref{eq:q1set} 根据各次测向角域确定问题一的定位区域;
后续问题将在此基础上加入圆域 $\Omega$ 与接收距离约束。
值得先说明的是,半平面交是闭凸集,可能为空集、单点、线段、有界多边形或无界集,
这些情形必须分别处理,否则"直径"与"覆盖圆"都没有定义。
\subsection{区域构造、空集及无界情形}
令约束数 $k=3n$。对任意两条不平行边界
要求解式~\eqref{eq:q1set},只需枚举约束边界之间的交点再筛除不可行者。
令约束数 $k=3n$,对任意两条不平行边界
$a x+b y=c$、$d x+e y=f$,候选交点为
\begin{equation}
x=\frac{ce-bf}{ae-bd},\qquad y=\frac{af-cd}{ae-bd}.
\end{equation}
仅保留满足全部不等式的交点,再经去重和单调链凸包构造得到顶点集合。
实现先平移与缩放坐标,以降低千米尺度坐标造成的数值误差;
近平行边界仍参与求交,因为其远端交点可能决定细长区域的直径。
仅保留满足全部不等式的交点,再经去重和单调链凸包构造即得顶点集合。
数值上,实现先平移与缩放坐标,以降低千米尺度坐标带来的误差;
同时保留近平行边界的求交,因为其远端交点可能决定细长区域的直径。
对非空集合定义衰退锥
顶点集确定之后,还需判断区域是否无界。为此对非空集合定义衰退锥
\begin{equation}
\mathcal R=\{d:Ad\le0\}.
\end{equation}
若 $\mathcal R$ 含非零向量,则 $g+td\in P$ 对所有 $t\ge0$ 成立,
区域无界,直径为 $+\infty$。二维多面锥只需检查约束边界的两个切向
区域无界、直径为 $+\infty$。二维多面锥只需检查约束边界的两个切向
$(b,-a)$ 与 $(-b,a)$ 是否满足全部齐次不等式。
本题至少一个前向窄角域会排除直线性,故非空交集存在极点;
在此特定输入族中,没有可行边界交点可以判为空集。
无观测输入单独返回整个平面,不按空集处理。
由于本题至少一个前向窄角域会排除直线性,非空交集必存在极点,
故在该输入族中不存在可行边界交点却判为空集的情况;无观测输入单独返回整个平面,
不按空集处理。
有界非空区域中,一个顶点对应单点,两个顶点对应线段,其余为凸多边形。
空集没有本文定义的有效直径与覆盖圆,程序以显式状态报告观测不相容,
便于检查频道、误差界或输入数据。
\subsection{直径与直径圆的判定}
题目要求计算定位区域直径,并判断以该直径为直径的圆能否覆盖整个区域。
对前者,可以证明无需在区域内部搜索。
\begin{proposition}[顶点直径]
设 $P=\operatorname{conv}\{v_1,\ldots,v_m\}$ 非空有界,则
\begin{equation}
@@ -79,7 +87,9 @@ $x=\sum_i\lambda_i v_i$、$y=\sum_j\mu_jv_j$。
\]
最远顶点对本身属于 $P$,故上界可达。
\end{proof}
因此无需在整个区域内部搜索,只需枚举顶点对,计算量为 $O(m^2)$。
由命题可知,只需枚举顶点对即可,计算量为 $O(m^2)$。
至于第二个问题,结论比直觉更严格:最远顶点对的中点未必能覆盖整个区域。
\begin{proposition}[直径圆覆盖的充要条件]
取最远顶点对 $a,b$,令 $D=\norm{a-b}$、$o=(a+b)/2$。
@@ -94,18 +104,21 @@ $x=\sum_i\lambda_i v_i$、$y=\sum_j\mu_jv_j$。
$D\le\norm{a-z}+\norm{z-b}\le D$。
等号迫使 $z=o$。反之,圆盘为凸集,包含全部顶点即包含它们的凸包。
\end{proof}
若条件不成立,输出圆外顶点及超出量
$e=\max_v\norm{v-o}-D/2$,即得到可独立检查的否定证据。
不能仅以直径端点在圆周上判断整个区域被覆盖。
图~\ref{fig:q1geometry}(a) 给出一组三点交会算例:左图为三条前向角域及其交集,
右图为定位区域的放大,虚线为直径圆、实线为最小包围圆。
该算例的定位区域由四个顶点确定,直径为 $23.997$ m,
以该直径为直径的圆半径为 $11.998$ m,
而最远顶点到圆心的距离为 $12.602$ m,故直径圆并不覆盖定位区域;
其最小包围圆半径为 $12.069$ m,满足 $20$ m 的清除判据。
证明过程同时说明:圆心被 $a,b$ 唯一确定,因此只需逐一检查其余顶点到该中点的距离。
若条件不成立,输出圆外顶点及超出量 $e=\max_v\norm{v-o}-D/2$,
即得到可独立检查的否定证据。换言之,不能仅以直径端点在圆周上判断整个区域被覆盖。
图~\ref{fig:q1geometry}(a)(b) 给出一组三点交会算例及其实例区域的放大,
(b) 中虚线为直径圆、实线为最小包围圆。
该算例的定位区域由 $\ExOneVertices$ 个顶点确定,直径为 $\ExOneDiameter$ m,
以该直径为直径的圆半径为 $\ExOneRadius$ m,
而最远顶点到圆心的距离超出该圆 $\ExOneExceed$ m,故直径圆并不覆盖定位区域;
其最小包围圆半径为 $\ExOneMec$ m,满足 $20$ m 的清除判据。
这说明直径不超过 $40$ m 与能否清除是两个不同的判据,覆盖判定必须逐顶点检查。
\subsection{反例与可清除半径}
上述差别并非数值巧合,而是几何上的必然。为说明这一点,
构造等边三角形
\begin{equation}
A=(0,0),\qquad B=(40,0),\qquad C=(20,20\sqrt3).
@@ -114,31 +127,28 @@ A=(0,0),\qquad B=(40,0),\qquad C=(20,20\sqrt3).
但 $C$ 到圆心的距离为 $20\sqrt3$ m,位于圆外。
其最小包围圆圆心为 $(20,20/\sqrt3)$,半径
$40/\sqrt3\approx23.094$ m,同样大于清除半径。
图~\ref{fig:q1geometry}(b) 展示两类圆的差别。
图~\ref{fig:q1geometry}(c) 展示两类圆的差别。
\begin{figure}[htbp]
\centering
\begin{minipage}[t]{0.49\linewidth}\centering
\includegraphics[width=\linewidth]{geo-q1-convex-intersection-zoom.png}
\end{minipage}\hfill
\begin{minipage}[t]{0.49\linewidth}\centering
\includegraphics[width=\linewidth]{geo-q1-diameter-circle-counterexample.png}
\end{minipage}
\caption{问题一的两组几何。(a) 三点交会算例:定位区域及其直径圆与最小包围圆,
观测取自官方演练案例 \texttt{U5ZW-P9KN-TCAG-R7ST} 的频道 $9$,
\includegraphics[width=\linewidth]{geo-q1-geometry.png}
\caption{问题一的几何算例。(a) 三点交会:三条浅色示向度的角域边界与它们的交集(定位区域),
观测取自自建模拟器演练局 \texttt{8VRC-ADW4-XDXM-F62L} 的频道 $\ExOneChannel$;
(b) 该定位区域的放大:虚线为直径圆、实线为最小包围圆,
几何量由生产求解器 \texttt{mcm26b.geometry.solve} 现算;
(b) 等边三角形解析反例,虚线直径圆 $r=20$ m 不覆盖顶点 $C$,
实线最小包围圆 $\rho=40/\sqrt3\approx23.094$ m 覆盖全部顶点,不是模拟器观测。}
(c) 等边三角形解析反例:虚线直径圆 $r=20$ m 不覆盖顶点 $C$,
实线最小包围圆 $\rho=40/\sqrt3\approx23.094$ m 覆盖全部顶点,该图不是模拟器观测。}
\label{fig:q1geometry}
\end{figure}
该形状可由题设的 $\pm1^\circ$ 角域构造出来。例如检测点
该三角形并非人为设定的特例,它可以由题设的 $\pm1^\circ$ 角域构造出来。例如检测点
$(-1000,0)$、$(540,-500\sqrt3)$、$(520,520\sqrt3)$,
对应示向度为 $1^\circ$、$121^\circ$、$241^\circ$。
各角域的一侧边界给出三角形的三条支撑线,另一侧边界包含整个三角形,
故交集恰为上述三角形。
对一般候选区域,定义最小包围圆
既然覆盖判据不足以保证清除,就需要一个与清除动作直接对应的指标。
为此对一般候选区域定义最小包围圆
\begin{equation}
\rho(P)=\min_{z\in\mathbb R^2}\max_{g\in P}\norm{g-z},\qquad
m\in\arg\min_z\max_{g\in P}\norm{g-z}.
@@ -148,9 +158,11 @@ m\in\arg\min_z\max_{g\in P}\norm{g-z}.
实现采用固定随机种子及显式栈,并在输出前检查全部顶点的包含关系。
在精确模型中,若 $\rho(P)\le20$,于 $m$ 清除即可覆盖所有可能真源;
考虑浮点计算后采用 $\rho(P)+\eta_{\mathrm{num}}\le20$ 的充分判据。
$D(P)\le40$ 是必要条件,但并非充分条件。
由此可见,$D(P)\le40$ 只是必要条件,并非充分条件。
\subsection{算法一与复杂度}
将上述判定串成流程,即得问题一的求解算法。
\subsection{算法一及复杂度}
\begin{algorithm}[htbp]
\caption{有界测向角域交会与覆盖圆判定}
\label{alg:q1}
@@ -172,7 +184,14 @@ $D(P)\le40$ 是必要条件,但并非充分条件。
\State \Return $\rho+\eta_{\mathrm{num}}\le20$ 是否成立
\end{algorithmic}
\end{algorithm}
边界交点枚举需 $O(k^2)$ 次,每点校验 $k$ 条约束,主计算量为 $O(k^3)$;
凸包最坏需 $O(k^2\log k)$,直径枚举需 $O(m^2)$。
Welzl 算法在随机排列下具有期望线性时间。该求解流程适合少量观测,
当前入口限制最多 $100$ 个检测点;更大规模可替换半平面交算法。
综上,问题一给出两点结论:1. 带误差交会定位的直径可由顶点对枚举精确得到,
覆盖判定则必须逐顶点检查;2. 与清除动作真正对应的判据是最小包围圆半径不超过 $20$ m,
直径约束只是它的必要条件。
+36 -11
View File
@@ -1,6 +1,11 @@
\section{问题二:保证接收的第二检测点选择}
\subsection{候选位置集合与安全区域}
设首次有效示向度为 $(s,\theta)$。有效读数除限定角域外,
问题一说明了如何由多次观测确定位置,问题二则提出一个更早的问题:
在只测过一次的情况下,第二点应当选在哪里。
这里存在一对相互牵制的目标:若只追求大交会角,第二点可能远离源而收不到信号;
若只求保证接收,又可能缺少横向基线。要同时处理两者,
第一步是先刻画"由首次观测能推断出哪些位置"。
设首次有效示向度为 $(s,\theta)$,则有效读数除限定角域外,
还说明源距检测点不超过接收半径上界,故
\begin{equation}
K_1=\Omega\cap W(s,\theta,\delta_{\mathrm{eff}})\cap\B(s,R_+).
@@ -9,7 +14,9 @@ K_1=\Omega\cap W(s,\theta,\delta_{\mathrm{eff}})\cap\B(s,R_+).
其中 $R_+=1500$ 为有效接收半径上界。
$\direction$ 对应距离大于 $5$ m;式~\eqref{eq:k1} 采用其凸松弛,
使真实可行位置始终包含在所维护的候选集合中。
采用凸松弛而非精确的"挖去 $5$ m 小圆",是为了让后续的圆盘交运算保持凸性。
有了候选集合,第二步是把"保证接收"写成集合条件。
对非空紧集 $K$ 定义
\begin{equation}
F_K(q)=\max_{g\in K}\norm{q-g},\qquad
@@ -23,9 +30,11 @@ $F_K$ 是凸函数且为 $1$-Lipschitz,因而 $\mathcal Q(K)$ 是闭凸集。
\begin{equation}
\mathcal Q(K)\ne\varnothing\quad\Longleftrightarrow\quad\rho(K)\le R_-.
\end{equation}
这一表述将第二点的鲁棒可行性转化为最小包围圆判据\cite{boyd}。
这一步把第二点的鲁棒可行性转化为问题一已经解决的最小包围圆判据\cite{boyd},
两个问题由此共用同一套几何工具。
在线用外切正多边形表示圆盘,再逐半平面裁剪。
在线执行时,还需把解析区域换成可快速裁剪的表示。
为此用外切正多边形表示圆盘,再逐半平面裁剪。
若边数为 $M$、圆半径为 $r$,外切多边形顶点的半径为
$r\sec(\pi/M)$,其最大径向超出量准确写为
\begin{equation}
@@ -36,7 +45,7 @@ e_M(r)=r\bigl(\sec(\pi/M)-1\bigr).
裁剪后得到 $K_1\subseteq P^{\mathrm{out}}$。
算法求外包多边形 $P^{\mathrm{out}}$ 的最小包围圆 $\B(m,\rho_{\mathrm{out}})$。
由三角不等式,充分安全盘为
在此基础上,由三角不等式可直接得到一个保守但显式的安全盘。充分安全盘为
\begin{equation}
\mathcal Q_{\mathrm{in}}
=\B\!\left(m,R_- -\rho_{\mathrm{out}}-\eta\right),\qquad
@@ -50,12 +59,14 @@ $\norm{q-g}\le\norm{q-m}+\norm{m-g}\le R_- -\eta$。
当候选区域较大时,程序先在其圆心追加观测,再更新可行区域。
\subsection{首次截断角域的解析候选盘}
为给出不依赖离散多边形的显式答案,暂去掉 $\Omega$,考虑
$S=W(s,\theta,\delta)\cap\B(s,R_+)$。
当 $0\le\delta\le45^\circ$,令
上述安全盘依赖离散多边形,只能在程序内使用;题目还要求给出解析的候选区域。
为此暂去掉 $\Omega$,考虑 $S=W(s,\theta,\delta)\cap\B(s,R_+)$,
它的形状是一个被圆弧截断的角域。当 $0\le\delta\le45^\circ$,令
\begin{equation}
a=\frac{R_+}{2\cos\delta},\qquad c=s+a\,u(\theta).
\end{equation}
即可得到该区域的最小包围圆。
\begin{proposition}[截断角域最小包围圆]
上述 $S$ 的最小包围圆为 $\B(c,a)$。
\end{proposition}
@@ -75,6 +86,7 @@ $\lambda_0=1-1/(2\cos^2\delta)$ 非负且和为 $1$,
对任意圆心 $z$,加权平方距离等于 $a^2+\norm{z-c}^2$,
故至少一点距 $z$ 不小于 $a$。任何包含三点的圆半径均不小于 $a$。
\end{proof}
由于 $K_1\subseteq S$,于是
\begin{equation}
\boxed{
@@ -84,6 +96,10 @@ q\in\B\!\left(s+\frac{1500}{2\cos\delta}u(\theta),
\end{equation}
即为题目所求的一种明确候选区域,实际使用时再内缩 $1$ mm。
该圆盘构成 $\mathcal Q(K_1)$ 的一个显式凸子集。
表~\ref{tab:safeanalytic} 给出两种误差半角下的具体数值。
可以看到,误差从 $1^\circ$ 放宽到 $1.005^\circ$ 时,
圆心偏移仅增加约 $0.001$ m,候选盘半径仅减少约 $0.001$ m,
说明该判据对题设的舍入余量并不敏感。
\begin{table}[htbp]
\centering\small
@@ -100,7 +116,8 @@ $1.005^\circ$ & 750.115391 & 249.884609\\
\end{table}
在线算法继续使用 $\Omega$ 裁剪后的完整候选形状,
通常能够获得更紧的源包围圆与更大的充分安全盘。
解析公式负责解释保证为何存在,多边形流程负责利用已有的全部几何约束。
两者的分工是清楚的:解析公式负责解释保证为何存在,
多边形流程负责利用已有的全部几何约束。
\begin{figure}[htbp]
\centering
@@ -113,6 +130,7 @@ $a\approx750.114$ m、$1000-a\approx249.886$ m,与表~\ref{tab:safeanalytic}
\end{figure}
\subsection{定位效果指标与有限候选求解}
保证接收只解决了一半问题,另一半是"在安全区域内如何让第二次观测最有效"。
理想的鲁棒选点模型为
\begin{equation}
\min_{q\in\mathcal Q_{\mathrm{in}}}
@@ -138,8 +156,9 @@ $\operatorname{bearing}(q,g)\pm\delta_{\mathrm{eff}}$,
选取使 $(\widehat J(q),\norm{q-p}/5)$ 最小的点,
然后将边界采样间距加密至 $15$ m 复核其评分。
$\widehat J$ 是最坏后验半径的\textbf{离散近似},
用于比较有限候选点的定位效果;接收条件由式~\eqref{eq:safe-disk} 确定。
需要强调的是,$\widehat J$ 是最坏后验半径的\textbf{离散近似},
只用于比较有限候选点的定位效果;接收条件由式~\eqref{eq:safe-disk} 保证,
不受该近似影响。
\begin{algorithm}[htbp]
\caption{保证接收的第二检测点选择}
@@ -167,7 +186,13 @@ $\widehat J$ 是最坏后验半径的\textbf{离散近似},
\EndIf
\end{algorithmic}
\end{algorithm}
若候选数为 $N_q$、边界样本数为 $N_g$、多边形顶点数为 $m$,
一次裁剪为 $O(m)$,总计算量主要为
$O(N_qN_g(m+C_{\mathrm{MEC}}(m)))$。
该算法采用问题一的角域模型与最小包围圆方法,通过多边形裁剪逐次更新候选集。
该算法复用问题一的角域模型与最小包围圆方法,通过多边形裁剪逐次更新候选集。
综上,问题二得到两点结论:1. "对所有可能真源均保证接收"等价于候选集合的最小包围圆半径不超过 $1000$ m,
据此可给出半径约 $249.885$ m 的显式安全候选盘;
2. 在安全盘内以最坏后验半径为第一目标、移动时间为第二目标选点,
既避免了"收不到信号"的失败模式,又保证了交会基线。
+47 -27
View File
@@ -1,30 +1,41 @@
\section{问题三:全向多源的网格滤波与滚动调度}
\subsection{统一时间目标与任务状态}
问题一、二分别给出了"能否清除"与"下一点选在哪里"的判据,
问题三把它们放进一个连续运行的闭环:源的数量未知,机器人必须自己决定何时发现、何时定位、何时清除。
在这样的任务中,优化的最终标准不是某一步的精度,而是完成任务所花的虚拟时间,
因此第一步是把时间写成可优化的目标。
按式~\eqref{eq:time} 的计时记账,优化目标是在全部源清除的约束下最小化虚拟耗时 $T$。
题目统计的平均定位清除时间是 $\bar T=T/N_c^+$;
不能用每次清除动作的固定 $5$ s 代替。
由于清除动作本身的 $5$ s 是常数,该平均值不能代替总虚拟时间作为优化目标。
清除请求中的频道是目标频道,不改变测向机频道;
进入与退出均不增加虚拟时间,因此路径终点自由,无需返回原点。
这一自由度允许我们把任务序列当作开放路径而非回路来处理。
各频道的状态按“未知、已发现、可清除、已清除、已证无源”管理。
在时间目标之外,还需要一套能表达"这条频道到底还有没有源"的状态。
为此各频道的状态按"未知、已发现、可清除、已清除、已证无源"管理。
首次获得 $\direction$ 或 $\near$ 即确立该频道存在源。
最小包围圆判据决定清除时机,成功响应将状态更新为已清除。
频道的候选集为空,或其所有覆盖站检测结果均为无信号时,可判定该频道无源。
后一条判据依赖下一小节的覆盖证明,是本问题效率的关键:
只有能够严格举证"不存在",才能放心地停止检测。
当前测试程序默认采用 \texttt{BayesLoop}:七点计划只作为解析覆盖与无源举证;
证据层同时维护便于证书计算的凸候选集与逐频道网格幸存集,
证据层同时维护便于判据计算的凸候选集与逐频道网格幸存集,
后者统一吸收正负观测,负观测按最小接收半径删除整格,
候选集为空即给出缺席证明。定位测量按信息增益与移动代价选点,
覆盖、定位与清除三类任务组成统一任务表,用开放路径 2-opt 滚动重排,
并不执行七个站点对所有频道逐一全扫描的固定流程。
\subsection{七点解析覆盖与无源证据}
取站点集合
"证明某频道无源"要求对圆域内任意位置都保证有站点能收到信号。
为达到这一目的,取站点集合
\begin{equation}
S(a)=\{(0,0)\}\cup
\left\{a\left(\cos\frac{k\pi}{3},\sin\frac{k\pi}{3}\right):k=0,\ldots,5\right\}.
\label{eq:seven}
\end{equation}
即原点加正六边形顶点,共七点。其覆盖能力可以精确刻画。
\begin{proposition}[七点全向覆盖]
当 $0<a/\sqrt3\le R$ 时,任意 $g\in\Omega$ 到最近站点的距离不超过
\begin{equation}
@@ -42,35 +53,31 @@ $r^2+a^2-\sqrt3ar$。
该凸二次式在 $[a/\sqrt3,R]$ 上的最大值于端点取得,
分别为 $a^2/3$ 与 $R^2+a^2-\sqrt3aR$。
\end{proof}
当前 \texttt{bayes} 策略取 $a=1159.7$ m,
命题给出了一个可调的覆盖半径。当前 \texttt{bayes} 策略取 $a=1159.7$ m,
由式~\eqref{eq:coveragebound} 得 $D_{\mathrm{cov}}=984.539136$ m,
比最小接收半径小约 $15.461$ m。
因此每个合法全向源至少在一站可被接收。
某频道在七站全部为无信号,就构成该频道不存在源的严格证据。
以“站点、频道”为索引建立检测状态矩阵,记录各站对各频道的检测结果。
该矩阵用于逐频道的严格缺席证明;实际执行不要求在每个站点重测所有频道,可由网格幸存集证明必为无信号的(站,频道)对会被跳过。
以"站点、频道"为索引建立检测状态矩阵,记录各站对各频道的检测结果。
该矩阵用于逐频道的严格缺席证明;实际执行不要求在每个站点重测所有频道,
可由网格幸存集证明必为无信号的(站,频道)对会被跳过。
\begin{figure}[htbp]
\centering
\includegraphics[width=0.68\linewidth]{geo-q3-seven-point-coverage.png}
\caption{七点全向覆盖的站点构造与接收圆盘。}
\label{fig:seven}
\end{figure}
图~\ref{fig:seven} 给出站点构造与最小接收圆盘的关系。
顺次从原点访问六个环站的开放路径长为 $6a$。
顺次从原点访问六个环站的开放路径长为 $6a$;
任务总路径由覆盖站间移动以及定位、清除所需的局部移动共同构成。
\subsection{正负观测的双重候选表示}
每个已发现频道维护凸外包 $P_c^{\mathrm{out}}$。
覆盖证明只回答"源是否可能被听见",要把一次具体检测转化为位置信息,
还需要更新候选集合。每个已发现频道维护凸外包 $P_c^{\mathrm{out}}$。
$\direction$ 将候选集与 $\B(s,1500)$ 外切多边形及测向角域相交;
$\near$ 与 $\B(s,5)$ 外切多边形相交。
全向源的 $\sgnless$ 意味着
难点在于全向源的 $\sgnless$ 观测,它意味着
\begin{equation}
\norm{g-s}>r_{\mathrm{eff}}\ge1000,
\end{equation}
排除圆盘可使可行区域呈非凸形状。为此,采用网格幸存集
$\mathcal G_c$ 表示负观测带来的空间约束,同时保留便于几何运算的凸外包。
即排除一个圆盘。圆盘的补集不凸,直接与凸候选集求交会破坏凸性。
为此,采用网格幸存集 $\mathcal G_c$ 表示负观测带来的空间约束,
同时保留便于几何运算的凸外包:前者负责吸收负信息,后者负责快速判据与选点。
网格边长为 $\ell=14.65$ m,每格中心与格内点的最大距离为
$\epsilon_g=\ell/\sqrt2$。初始保留所有可能与 $\Omega$ 相交的格,
@@ -83,9 +90,9 @@ $\epsilon_g=\ell/\sqrt2$。初始保留所有可能与 $\Omega$ 相交的格,
\end{array}
\label{eq:gridupdate}
\end{equation}
三式的裕量 $\epsilon_g$ 保证只有整格必然越界时才删除,故真源所在格永不被误删。
方向观测另外检查角差。若 $d=\norm{z-s}>\epsilon_g$,
源所在格引起的方位偏差可由
$\arcsin(\epsilon_g/d)$ 上界;
源所在格引起的方位偏差可由 $\arcsin(\epsilon_g/d)$ 上界;
实现采用距离内缩后的角误差界,并在测点附近保留所有可能方位。
只有角差超过 $\delta_{\mathrm{eff}}$ 加格内角裕量时才删除。
@@ -97,8 +104,10 @@ $\arcsin(\epsilon_g/d)$ 上界;
从而节省相应检测与换频时间。
\subsection{信息增益选点与清除判据}
候选集收窄之后,还需决定下一个测点。
问题二的算法2提供满足接收约束的检测点;
问题三的 \texttt{BayesLoop} 进一步采用网格幸存集上的信息增益。
问题三的 \texttt{BayesLoop} 进一步采用网格幸存集上的信息增益,
即优先选择最能缩小候选集的测点。
存在保证接收圆盘时,在其内部生成环形候选并补充当前接近方向上的测点;
其余情况下,在网格最小包围圆附近生成环形采样点。
候选集合同时包含当前位置与探索点,分别根据预期信息增益和移动代价评分。
@@ -117,8 +126,8 @@ J_{\mathrm{IG}}(q)=
并以均匀 $r_{\mathrm{eff}}\in[1000,1500]$ 估计接收概率。
该决策采用离散假设上的加权期望,接收半径的均匀分布作为选点先验。
清除判断使用完整候选集合。
凸候选集的清除判据为
清除判断使用完整候选集合。由于清除要求在 $20$ m 内完成,
判据必须同时计入几何半径与数值余量。凸候选集的清除判据为
\begin{equation}
\rho_c+b_c+0.5\le20,
\label{eq:clearpoly}
@@ -137,6 +146,8 @@ $b_c$ 与 $0.5$ m 共同提供附加数值裕量。
只要平移后的距离上界仍满足对应不等式,三角不等式便保证清除条件成立。
\subsection{开放路径上的滚动任务排序}
到这一步,每个频道都已知"是否需要检测、在哪里检测、何时清除",
剩下的问题是如何把这些动作排成一条省时的路线。
统一任务表包含三类任务:覆盖站的批量扫频、已发现源的定位测量、
满足半径条件的清除。站内检测优先使用测向机当前频道,减少换频次数。
对任务序列 $\pi$,排序代价为
@@ -149,13 +160,16 @@ C(\pi)=\frac{\norm{p-q_{\pi_1}}}{5}
其中服务时间 $t_{\pi_j}$ 依赖进入任务时的频道,清除不改变该频道。
从最近邻初序开始,默认最多进行 $4$ 轮开放路径 2-opt 改进;
每次只执行当前序列的首任务,得到新观测后重新生成和排序。
这样新发现的源、收缩后的清除点和已证无源的频道都能及时改变路线。
这样新发现的源、收缩后的清除点和已证无源的频道都能及时改变路线,
避免为一条已经失效的任务继续赶路。
已停靠位置可以顺带补测:要求此前未在该位置测过、距离保证成立、
尚处于定位阶段,且预测半径有足够收缩。追加测量的费用为检测与换频时间,
其收益来自节省额外移动。题设固定同地误差,因此优先选择新的检测位置。
\subsection{算法三与完成条件}
将上述模块串成闭环,即得问题三的求解算法。
\begin{algorithm}[htbp]
\caption{网格幸存集滤波、信息增益选点与滚动调度}
\label{alg:q3}
@@ -179,7 +193,8 @@ C(\pi)=\frac{\norm{p-q_{\pi_1}}}{5}
\State 预算不足或异常时退出并报告未解决频道
\end{algorithmic}
\end{algorithm}
“清除数达到 $16$”利用题设数量上界。
"清除数达到 $16$"利用题设数量上界。
对任意已存在的 $16$ 个不同频道,也可提前排除其余未知频道,
但已发现而未清除的源仍必须继续处理。
@@ -188,3 +203,8 @@ C(\pi)=\frac{\norm{p-q_{\pi_1}}}{5}
停滞、协议异常或预算耗尽时,记录各频道状态并终止。
程序以接口返回的现实预算为准,并预留退出时间,
实际计时在整数微秒状态上累计,避免用实机运行秒数代替虚拟动作耗时。
综上,问题三得到三点结论:1. 七点计划在环半径 $1159.7$ m 时给出 $984.539$ m 的覆盖上界,
使"全站无信号"成为该频道缺席的严格证据;2. 网格幸存集把非凸的负观测纳入集合估计,
并使大量必然无信号的检测被跳过;3. 把覆盖、定位、清除统一为一条开放路径并滚动重排,
是压缩总虚拟时间的主要手段。
+47 -19
View File
@@ -1,5 +1,8 @@
\section{问题四:混合源的前向半盘覆盖与联合信念}
\subsection{定向观测模型与无信号歧义}
在问题三中,"无信号"只有一种解释:源太远。
一旦引入定向源,这唯一的解释就被打破——源可能只是背对着检测点。
因此本问的关键在于为无信号保留第二种解释。
设定向源位于 $g$,朝向为 $\psi$。在检测点 $q$ 可见的充要条件为
\begin{equation}
\norm{q-g}\le r_{\mathrm{eff}},\qquad
@@ -9,9 +12,12 @@
边界属于可见半平面。可见且距离不超过 $5$ m 时返回 $\near$,
否则返回 $\direction$;任何一个条件失败均为 $\sgnless$。
问题二的可行区域满足距离约束,定向接收还需满足前向半平面约束。
对于已发现频道,位于该区域内的负观测反映朝向遮挡;
区域外的负观测则同时包含距离与朝向两种解释。
对于已发现频道,位于该区域内的负观测反映朝向遮挡,
因此不应被当作距离证据;区域外的负观测则同时包含距离与朝向两种解释。
这一区分直接决定了后续信念表示的形式。
朝向约束也改变了覆盖的要求。问题三的七点计划只保证"至少一站距离足够近";
对定向源还要求该站位于源的前向半平面内,因此需要重新设计站点集。
向外发射的边界源需要在圆域外布置接收站点。
适用于混合源的站点集合 $S$ 应满足
\begin{equation}
@@ -20,13 +26,17 @@
\norm{s-g}\le1000,\quad (s-g)\cdot u(\psi)\ge0.
\label{eq:halfcover}
\end{equation}
这是一项针对“位置、朝向”二元状态的全覆盖要求。
这是一项针对"位置、朝向"二元状态的全覆盖要求,而不是对位置的单变量覆盖。
问题三的七点计划不满足式~\eqref{eq:halfcover};当前测试程序改用 $31$ 点最小命中集与(位置×朝向)联合幸存集,定位停滞时以有限格后备清除兜底。
问题三的七点计划不满足式~\eqref{eq:halfcover};当前测试程序改用 $31$ 点最小命中集与(位置×朝向)联合幸存集,
定位停滞时以有限格后备清除兜底。
\subsection{方格点集的连续覆盖性}
在设计具体站点之前,先考虑一个容易证明的结构:方格点集。
取 $S_{49}=\{(700i,700j):i,j=-3,\ldots,3\}$。
其网格方域包含 $\Omega$,每个源落在某个边长为 $700$ m 的闭方格内。
方格四角恰好同时满足距离与朝向两项要求。
\begin{proposition}[方格四角的定向覆盖]
$S_{49}$ 满足式~\eqref{eq:halfcover},对全向与任意朝向的定向源均保证发现。
\end{proposition}
@@ -40,10 +50,14 @@ $\sum_i\lambda_i(v_i-g)\cdot u=0$,
故不可能四个角均满足 $(v_i-g)\cdot u<0$;
至少一角处于前向闭半平面,且同时满足距离条件。
\end{proof}
四角的距离上界与凸组合性质共同保证连续覆盖。
该方案具有显式站点坐标和覆盖距离上界。
证明的关键是凸组合性质:四个方向的投影不可能同时为负。
该方案具有显式站点坐标和覆盖距离上界。不过在同样覆盖 $\Omega$ 的前提下,
网格方案的站点数并不经济,因此实际选点仍需借助集合覆盖模型。
\subsection{前向半盘最小命中集的31点方案}
把"每个位置与朝向组合至少被一个站点覆盖"写成整数规划,
就可以用远比网格稀疏的站点集完成同样的任务。
当前 \texttt{directional} 实现采用 \texttt{q4\_mincover\_v2} 计划。
在候选站点 $s_j$ 和离散目标状态 $(g_i,\psi_i)$ 上定义关联矩阵
\begin{equation}
@@ -52,7 +66,8 @@ A_{ij}=\mathbf1\{
\ (s_j-g_i)\cdot u(\psi_i)\ge
\norm{s_j-g_i}\sin\gamma_{\mathrm{design}}\}.
\end{equation}
站点筛选可写为集合覆盖模型
其中角度余量 $\gamma_{\mathrm{design}}$ 把"恰好落在可见边界"的情形排除在外,
使站点对朝向扰动保持稳健。站点筛选可写为集合覆盖模型
\begin{equation}
\min\sum_j z_j,\qquad
\sum_jA_{ij}z_j\ge1\ \ (\forall i),\qquad z_j\in\{0,1\}.
@@ -66,9 +81,15 @@ A_{ij}=\mathbf1\{
\begin{figure}[htbp]
\centering
\includegraphics[width=0.70\linewidth]{geo-q4-minimum-cover-31-points.png}
\caption{31 点最小命中集的几何分布(左)与定向源的前向半盘语义(右)。
站点取自计划文件,部分站点位于 $\Omega$ 之外,用于接收向外发射的边界源;
\includegraphics[width=0.72\linewidth]{geo-q4-minimum-cover-31-points.png}
\caption{31 点最小命中集的几何分布与定向源的读图约定。
实心圆点为圆域内检测站($15$ 个),空心圆点为圆域外的检测站($16$ 个),
后者用于接收向外发射的边界源;
浅色扇形区域为源位置圆域 $\Omega$。
图中左侧以一个圆外检测站为例说明定向源的观测读法:
绿箭头是该源的发射朝向、浅绿细线扇形是它的 $\pm90^\circ$ 可见范围、
红色虚线是检测站在该点测得的示向度,三者共同说明
"有朝向遮挡时同一位置也可能测不到信号"。
离散校验不等同于连续覆盖证明。}
\label{fig:q4plan}
\end{figure}
@@ -87,6 +108,8 @@ d+\varepsilon\le1000,\qquad
对 $49$ 点方案采用上述连续覆盖定理;连续近似误差的控制将在未来工作中讨论。
\subsection{位置与朝向联合候选的保守更新}
站点解决"能否发现",而要完成清除还必须知道源在哪里、朝向如何。
这正是问题三的候选集表示不足以处理的部分:位置可行并不代表朝向可行。
对定向假设,在每个候选位置网格的中心 $z$ 附加 $H=24$ 个朝向档,
档宽为 $15^\circ$。令 $M_z$ 为仍可能的朝向掩码。
方向与近距离观测先更新位置约束,再保留可能覆盖检测点的朝向;
@@ -108,11 +131,11 @@ d_\circ(\psi_k,\beta)>90^\circ-\Delta_\psi-\eta_\psi-\alpha_z.
第二行保留含有不可见方向的朝向区间,排除整个区间均可见的候选。
若格心距测点过近,格内方位可覆盖整个圆周,此时保留全部朝向。
在定向假设下,上述更新保持真源所在位置与朝向网格的可行性。
混合类型的集合估计扩展见第~\ref{sec:future}~节。
\subsection{可见性筛选与探点选择}
联合候选的用途首先是排序探点。对候选 $q$,
以均匀接收半径假设给出距离权重
联合候选的第一个用途是给候选测点排序。
在混合场景中,一个测点是否值得去,取决于那里的候选源有多大可能正对着它。
对候选 $q$,以均匀接收半径假设给出距离权重
\begin{equation}
w_r(d)=
\begin{cases}
@@ -129,7 +152,7 @@ w_r(\norm{z-q})\,\frac{b_z(q)}{24}.
\label{eq:visibility-score}
\end{equation}
分母 $24$ 为初始朝向档数,$b_z(q)$ 由保留朝向集合与预计算可见角区间的交集确定。
该权重用于衡量各候选点的相对检测价值。
该权重用于衡量各候选点的相对检测价值,可直接避免"跑过去却因遮挡而无信号"的空跑。
候选族包括算法2给出的基础点、关于候选圆心的对跖点,以及
$0.5\rho,\rho,1.5\rho$ 半径上的八方向环点。
@@ -146,6 +169,9 @@ $0.5\rho,\rho,1.5\rho$ 半径上的八方向环点。
持续遮挡时转入基于距离约束的网格遍历清除。
\subsection{网格遍历清除与计算预算}
遮挡可能使定位长期无法收缩,此时需要一条不依赖朝向信息的兜底路径。
注意到清除是否成功只与距离有关,与源朝向无关,
因此可以放弃"先定位再清除"的顺序,改为逐格试探。
当一轮有效定位测量达到 $8$ 次,或连续遮挡探点达到 $4$ 次且候选区域仍较大,
对保守凸候选多边形建立边长 $20$ m 的方格覆盖。
保留所有与多边形相交的格子,并以格心作为清除点。
@@ -158,6 +184,7 @@ $0.5\rho,\rho,1.5\rho$ 半径上的八方向环点。
逐格清除必有一次到达其 $20$ m 内。
按最近邻顺序访问,首次成功即停止该频道的网格遍历。
兜底方案必须受预算约束,否则会挤占其他频道的处理时间。
若外包框宽、高为 $w,h$,保守格数上界为
\begin{equation}
B_{\mathrm{cell}}=
@@ -194,8 +221,9 @@ $N_{\mathrm{cell}}\,t_{\mathrm{RTT},95}+t_{\mathrm{reserve}}$。
\State 主动退出时报告清除数与停止依据
\end{algorithmic}
\end{algorithm}
问题四使用“本站批量扫频、最近候选圆心服务”的调度骨架,
并未直接复用问题三的统一信息增益任务表。
若要求严格的混合源全清证据,除采用连续覆盖计划外,
还须补全类型联合表示或限制联合集排空的适用范围,并确保全部定位清除任务完成。
本文区分当前实现、可证明条件与尚需完善之处,不把后者追溯为正式测试时已执行的功能。
综上,问题四得到三点结论:1. 定向源使无信号具有距离与朝向两种解释,
候选集必须由位置扩展为位置与朝向的联合表示;2. 发现条件须由位置圆盘覆盖
提升为前向半盘覆盖,$31$ 点最小命中集以远少于网格的站点数完成该任务;
3. 清除与朝向无关这一物理性质可用于构造有界预算的兜底清除,
使遮挡不再导致任务无法完成。
+218 -80
View File
@@ -1,102 +1,240 @@
\section{官方正式测试结果与时间分解}\label{sec:formal}
\subsection{数据选择及对应关系核对}
本节实验样本严格限定为官方模拟器
\pathtext{Jammers-simulator-full/test} 下的六份正式导出包,问题三、四各有三次。
文件名、案例编码与完整包校验值见结果表与附录~\ref{app:data}。
本节只使用六份正式导出包及其匹配统计,不引入仓库内自建基准集,也不把演练局数据并入正式评价。两类数据仍单独存放;任何跨案例比较都以官方记录的总虚拟时间、程序运行时间和清除数量为准。
\section{实验结果与分析}
\subsection{实验设置与数据来源}
本文的实验分两部分,职责严格区分。
\textbf{机制论证与定量结论}取自项目内自建模拟器
(\pathtext{referee},按题面附件 1、附件 2 复现的评测机)的演练局:
演练局可提供真实源位置、机器人轨迹和逐次检测读数,
因此能够支撑路径示意、机制分析与逐局的定量比较。
\textbf{最终效果验证}取自官方模拟器的六份正式导出包,
因无法获取真实位置点,只在附录~\ref{app:formal} 中报告清除数量、总虚拟时间与程序运行时间。
评价指标包括清除数量 $N_c^+$、总虚拟时间 $T$、程序运行时间 $T_{\mathrm{real}}$,以及检测、换频和清除的动作次数。其中 $T$ 按整数微秒累计,$T_{\mathrm{real}}$ 采用官方记录的毫秒值;平均定位清除时间仅作辅助分析,不替代总虚拟时间与程序运行时间这两项直接指标。六次测试均以主动退出结束,统计提交状态为已确认。
演练局由 \pathtext{scripts/run\_practice\_episodes.py} 采集:脚本启动评测机、
以固定种子开始一局演练,再用与 \texttt{mcm26b.cli run} 相同的生产策略对接接口,
真值与行为日志全部由评测机自己写入,策略端只看见 HTTP 响应。
采集批次共 $\PractTotalCases$ 局:问题三 $\PractQThreeCases$ 局全向源、问题四 $\PractQFourCases$ 局混合源,
源数覆盖 $10$ 至 $16$、接收半径覆盖 $1000$ 至 $1500$ m,问题四的定向源个数覆盖 $3$、$6$、$8$。
判定标准为"清完全部源 $\wedge$ 无缺席误判 $\wedge$ 主动退出 $\wedge$ 零异常 $\wedge$ 零失败清除",
本批 $\PractTotalComplete$ 局全部满足,因此可以直接作为当前实现的性能证据,
累计清除 $\PractTotalCleared$ 个源。
所有时间均按式~\eqref{eq:time} 的计时模型由动作序列独立复算,
复算值与评测机日志记录的\textbf{最大偏差为 $\PractMaxGap$ s},
说明本文的时间口径与模拟器实现完全一致,后文所有耗时数字均可重算。
为使"最优实现"的说法可检验,本文对每一问都准备了一个\textbf{朴素基线},
两者在同一算例上逐例配对比较:
问题一的基线用包围盒对角线代替真实直径,并以包围盒中心近似覆盖圆;
问题二的基线分别取"垂直首次示向度 $1000$ m 的 $90^\circ$ 交会点"与"候选集最小包围圆圆心";
问题三的基线用 $49$ 点($700$ m 步长)网格发现加就近服务;
问题四的基线则把问题三的两种策略原样搬用。
基线并非稻草人:它们在部分场景中有效,暴露的是"缺了哪一步"。
\subsection{问题一与问题二的配对对比}
先看几何层的两个判据在数值上的表现。问题一用固定示例与随机交会算例
(共 $\ProjQOneExampleCases$ 例固定、$\ProjQOneRandomCases$ 例随机)对比两种实现,
见表~\ref{tab:q1compare}。
\begin{table}[htbp]
\centering\small
\caption{问题一:直径与覆盖判定的实现对比(时间单位:ms/例)}
\setlength{\tabcolsep}{3pt}
\begin{tabular}{p{3.4cm}rrrrr}
\toprule
实现 & 状态正确率 & 直径平均误差/m & 直径最大误差/m & 覆盖正确率 & 平均耗时/ms\\
\midrule
最优(固定 $\ProjQOneExampleCases$ 例) & 100.0\% & 0.000 & 0.000 & 100.0\% & $\ProjQOneFixedMsOpt$ \\
最优(随机 $\ProjQOneRandomCases$ 例) & 100.0\% & 0.000 & 0.000 & 100.0\% & $\ProjQOneRandMsOpt$ \\
基线(固定 $\ProjQOneExampleCases$ 例) & $\ProjQOneFixedStatusBase$ & $\ProjQOneFixedMaeBase$ & $\ProjQOneFixedMaeMaxBase$ & $\ProjQOneFixedCoverBase$ & $\ProjQOneFixedMsBase$ \\
基线(随机 $\ProjQOneRandomCases$ 例) & $\ProjQOneRandStatusBase$ & $\ProjQOneRandMaeBase$ & $\ProjQOneRandMaeMaxBase$ & $\ProjQOneRandCoverBase$ & $\ProjQOneRandMsBase$ \\
\bottomrule
\end{tabular}
\label{tab:q1compare}
\end{table}
由表可见,最优实现(半平面交 \(+\) 顶点对枚举 \(+\) 最小包围圆)
在固定与随机两类算例上的直径误差均为零、覆盖判定全部正确;
基线的直径平均绝对误差为 $\ProjQOneFixedMaeBase$ m(固定例)
与 $\ProjQOneRandMaeBase$ m(随机例),最大误差达 $\ProjQOneRandMaeMaxBase$ m,
覆盖判定正确率仅 $\ProjQOneFixedCoverBase$ 与 $\ProjQOneRandCoverBase$。
原因在于包围盒对角线只有在区域恰好与坐标轴对齐时才等于直径,
而基线的覆盖判据几乎恒判"覆盖",因此系统性偏乐观。
计算代价方向相反:最优实现平均 $\ProjQOneRandMsOpt$ ms,
基线 $\ProjQOneRandMsBase$ ms,说明精确判据并不以牺牲效率为代价。
问题二的差距出现在"保证接收"与"定位收缩"这对指标上,见表~\ref{tab:q2compare}。
入选标准是:安全盘内最坏后验半径越小越好,同时保证接收率必须为 $100\%$。
\begin{table}[htbp]
\centering\small
\caption{问题二:第二检测点选点策略对比($\ProjQTwoCases$ 例随机首次示向度)}
\setlength{\tabcolsep}{3pt}
\begin{tabular}{p{3.2cm}rrrrrr}
\toprule
选点方法 & 保证接收率 & 最坏后验均值/m & 中位/m & 平均收缩/m & 终值比 & 移动均值/s\\
\midrule
算法2(默认选点) & $\ProjQTwoGuaranteeOpt$ & $\ProjQTwoWorstOpt$ & 90.899 & 607.577 & $\ProjQTwoRatioOpt$ & 170.44 \\
参考:盘内网格枚举 & 100.0\% & $\ProjQTwoWorstRef$ & 91.349 & 605.841 & 0.106 & 170.28 \\
基线:垂直 $1000$ m & $\ProjQTwoGuaranteePerp$ & $\ProjQTwoWorstPerp$ & 90.775 & 601.356 & 0.116 & 200.00 \\
基线:候选圆心 & $\ProjQTwoGuaranteeMec$ & $\ProjQTwoWorstMec$ & 375.088 & 340.721 & $\ProjQTwoRatioMec$ & 136.29 \\
\bottomrule
\end{tabular}
\label{tab:q2compare}
\end{table}
初始候选半径均值为 $\ProjQTwoInitialRadius$ m。
由表~\ref{tab:q2compare} 可知:垂直 $1000$ m 基线的最坏后验半径与最优实现接近,
但保证接收率只有 $\ProjQTwoGuaranteePerp$——当真源位于角域远端时必然返回无信号,
这正是问题二所要避免的失败模式;候选圆心基线的保证接收率为 $\ProjQTwoGuaranteeMec$,
但最坏后验半径达 $\ProjQTwoWorstMec$ m,终值比 $\ProjQTwoRatioMec$,
相当于只收缩了一半,说明"保证接收"若脱离横向基线便几乎没有定位价值。
最优实现同时取得 $\ProjQTwoGuaranteeOpt$ 的保证接收率与
$\ProjQTwoWorstOpt$ m 的最坏后验均值,终值比 $\ProjQTwoRatioOpt$,
并与盘内网格枚举参考解($\ProjQTwoWorstRef$ m)相差不到 $2\%$。
\subsection{问题三:演练局结果与基线对比}
问题三的闭环在 $18$ 个冻结场景上逐例配对运行,三种策略的结果见表~\ref{tab:q3compare}。
\input{data/project-q3-table}
三者的全清率都是 $100\%$,因此差别完全体现在代价上。
默认策略 \texttt{bayes} 的平均虚拟时间为 $\ProjQThreeMeanOpt$ s,
七点批量策略为 $\ProjQThreeMeanSeven$ s,
$49$ 点网格基线为 $\ProjQThreeMeanBase$ s;
相对基线,\texttt{bayes} 的平均降幅为 $\ProjQThreeDropOpt$、中位降幅 $\ProjQThreeDropMedianOpt$,
并在 $\ProjQThreeFasterOpt$ 个场景中全部更快。
代价的来源也很清楚:默认策略平均只需 $\ProjQThreeMeasuresOpt$ 次检测、
位移 $\ProjQThreeMoveOpt$ km,而网格基线需要 $\ProjQThreeMeasuresBase$ 次检测、
$\ProjQThreeMoveBase$ km。可见网格基线的开销主要来自"逐格走过去再检测",
而七点计划加网格幸存集把大量必然无信号的检测直接跳过,
再配合滚动任务排序把移动量压到约五分之一。
这一机制在真实演练局中得到复现。表~\ref{tab:q3practice} 给出问题三
全部 $\PractQThreeComplete$ 局全清演练局的直接统计。
\input{data/practice-q3-table}
$\PractQThreeComplete$ 局的源数覆盖 $10$ 至 $16$,全部实现清除数等于源数,
且没有一次失败清除;总虚拟时间集中在 $\PractQThreeMin$ 至 $\PractQThreeMax$ s,
平均 $\PractQThreeMean$ s,平均定位清除时间 $\PractQThreeMeanClear$ s/个。
随源数增加,总虚拟时间只从约 $3.0\times10^3$ s 增长到约 $4.0\times10^3$ s,
说明发现—定位—清除三个闭环的组织方式对源数量并不敏感。
\begin{figure}[htbp]
\centering
\includegraphics[width=0.92\linewidth]{formal-total-time.png}
\caption{六次正式测试的总虚拟时间与程序运行时间。}
\label{fig:formaldirect}
\includegraphics[width=0.94\linewidth]{selfbuilt-q3-search-clear-path.png}
\caption{自建模拟器演练局 \texttt{\PractQThreeMainCase}($\PractQThreeMainSources$ 个全向源)的搜索与清除路径。
折线为机器狗轨迹;每条浅色细射线表示一次 $\direction$ 检测测得的示向度,
射线起点即发起该次检测的位置;圆点为测到示向度的检测点($55$ 次),
菱形为测到近距离的检测点($1$ 次),灰色叉号为无信号检测点($29$ 次);
星号为成功清除点,金色叉号为干扰源真值。全部数据由自建模拟器真值输出。}
\label{fig:selfbuiltq3}
\end{figure}
\subsection{问题三正式结果}
\begin{table}[htbp]
\centering\small
\caption{问题三正式测试结果(时间单位:s)}
\setlength{\tabcolsep}{4pt}
\begin{tabularx}{\linewidth}{l X r r r}
\toprule
测试 & 测试案例编码 & 清除数 & 总虚拟时间/s & 程序运行时间/s\\
\midrule
测试 1 & \texttt{9HU7-UWJR-BPTR-VYAT} & 13 & 3094.978 & 5.596 \\
测试 2 & \texttt{7TCG-C9EC-53VF-HZ5H} & 15 & 3493.335 & 3.024 \\
测试 3 & \texttt{UVUZ-B4MQ-XSUV-HQFP} & 10 & 2906.863 & 2.680 \\
\bottomrule
\end{tabularx}
\label{tab:formal3}
\end{table}
三次正式测试分别清除 $13$、$15$、$10$ 个源,总虚拟时间分别为 $3094.978$、$3493.335$、$2906.863$ s,合计 $\QThreeTotal$ s;程序运行时间分别为 $5.596$、$3.024$、$2.680$ s,合计 $\QThreeProgramTotal$ s。按清除数量加权的平均定位清除时间为 $\QThreeWeighted$ s/个,仅作辅助解释。第三次总虚拟时间 $2906.863$ s 在本组三次中最短,但其清除数 $10$ 也最少;因此判断优化程度时,应以题目要求的总虚拟时间和程序运行时间为直接指标,并同时报告清除数量,不能只看单一的平均值。
图~\ref{fig:selfbuiltq3} 给出其中一局(\texttt{\PractQThreeMainCase},
$\PractQThreeMainSources$ 个源)的完整路径。
机器人先按七点计划完成覆盖与批量扫频,再围绕候选区域执行定位与清除;
清除点与源真值基本吻合,轨迹在多个源之间跳跃后逐步收敛。
该局共检测 $\PractQThreeMainMeasures$ 次、换频 $\PractQThreeMainSwitches$ 次,
移动 $\PractQThreeMainMove$ km,总虚拟时间 $\PractQThreeMainTime$ s,
程序运行时间仅 $\PractQThreeMainRun$ s。
\subsection{问题四正式结果}
\begin{table}[htbp]
\centering\small
\caption{问题四正式测试结果(时间单位:s)}
\setlength{\tabcolsep}{4pt}
\begin{tabularx}{\linewidth}{l X r r r}
\toprule
测试 & 测试案例编码 & 清除数 & 总虚拟时间/s & 程序运行时间/s\\
\midrule
测试 1 & \texttt{VQUM-ETQ5-74PP-ZQ3J} & 13 & 9362.226 & 7.668 \\
测试 2 & \texttt{5K5T-TRWZ-BPR2-ECAV} & 10 & 9271.302 & 5.724 \\
测试 3 & \texttt{K58B-V5VC-E4EF-CRTW} & 14 & 8608.382 & 6.051 \\
\bottomrule
\end{tabularx}
\label{tab:formal4}
\end{table}
表~\ref{tab:formal4} 给出问题四的三次正式结果。三次测试分别清除 $13$、$10$、$14$ 个源,总虚拟时间分别为 $9362.226$、$9271.302$、$8608.382$ s,合计 $\QFourTotal$ s;程序运行时间分别为 $7.668$、$5.724$、$6.051$ s,合计 $\QFourProgramTotal$ s。按清除数量加权的平均定位清除时间为 $\QFourWeighted$ s/个,仅作辅助解释。第三次清除数 $14$ 最多且总虚拟时间 $8608.382$ s 最短,说明定向遮挡场景中可见性筛选与后备清除对直接完成时间有积极作用;但三次案例的随机源分布和朝向不同,仍应优先看官方记录的绝对时间和清除数量。
\subsection{问题四:演练局结果与基线对比}
问题四的困难来自遮挡,因此对比的重点不只是时间,还包括"是否真的全部清除"。
表~\ref{tab:q4compare} 给出三种策略在 $11$ 个混合源场景(含 $5$ 个边界定向源场景)上的结果。
\input{data/project-q4-table}
由表~\ref{tab:q4compare} 可见,把问题三的策略直接搬用会产生两类不同后果。
\texttt{bayes} 的七点全向缺席判据会把朝外发射的定向源误判为"不存在",
因而出现 $\ProjQFourAbsentBase$ 次缺席误判、全清率只有 $\ProjQFourClearBase$,
其平均虚拟时间($\ProjQFourMeanBase$ s)虽然最短,却是"快而错",
不能作为有效结果;$49$ 点网格策略的发现是完备的,
但没有后备清除,定位停滞时只能停在"已发现"状态,全清率 $\ProjQFourClearGrid$,属于"稳而不全"。
默认策略 \texttt{directional} 在全部 $\ProjQFourValidOpt$ 局有效,
全清率 $\ProjQFourClearOpt$,缺席误判为零,平均虚拟时间 $\ProjQFourMeanOpt$ s,
平均需要 $\ProjQFourFallbackOpt$ 次后备清除——正是这部分兜底动作
换来了网格与批量策略都达不到的完备性。
演练局进一步显示了遮挡造成的额外代价。表~\ref{tab:q4practice} 给出
全部 $\PractQFourComplete$ 局全清混合源演练的统计。
\input{data/practice-q4-table}
与问题三相比,混合源场景的检测次数增加约 $3$ 倍(平均 $\PractQFourMeasures$ 次
对 $\PractQThreeMeasures$ 次),移动距离约 $\PractQFourMove$ km(对 $\PractQThreeMove$ km),
总虚拟时间平均 $\PractQFourMean$ s,平均定位清除时间 $\PractQFourMeanClear$ s/个,
约为全向源场景的 $2.6$ 倍。原因在机制上是明确的:
一次无信号观测不再等于"源在远处",而可能只是朝向遮挡,
因此必须先用若干探点排除遮挡解释,才能继续收缩位置候选集。
本批 $\PractQFourComplete$ 局全部做到"清完且无失败清除",
说明可见性筛选加后备清除在定向源个数 $3$ 至 $8$ 的范围内是稳定的。
\begin{figure}[htbp]
\centering
\includegraphics[width=0.94\linewidth]{selfbuilt-q4-search-clear-path.png}
\caption{自建模拟器演练局 \texttt{\PractQFourMainCase}($\PractQFourMainSources$ 个源,
其中 $\PractQFourMainDirectional$ 个定向源)的搜索与清除路径。
$\mathbf{X}$ 为干扰源真值,每个定向源用"绿箭头(发射朝向)$+$ 浅绿细线扇形($\pm90^\circ$ 可见范围)$+$ 角度标注"表示;
每条浅色细射线表示一次 $\direction$ 检测测得的示向度,射线起点即发起检测的位置;
圆点为测到示向度的检测点($72$ 次),菱形为测到近距离的检测点($3$ 次),
灰色叉号为无信号检测点($84$ 次,其中相当一部分由朝向遮挡造成),星号为成功清除点。}
\label{fig:selfbuiltq4}
\end{figure}
图~\ref{fig:selfbuiltq4} 给出含定向源的一局(\texttt{\PractQFourMainCase},
$\PractQFourMainSources$ 个源、其中 $\PractQFourMainDirectional$ 个定向)的路径。
定向源的前向半盘造成大量无信号观测,轨迹比全向源局密集得多;
可见性筛选把探点优先放在朝向相容的位置,后备清除则在定位停滞时兜底完成清除。
该局共检测 $\PractQFourMainMeasures$ 次、换频 $\PractQFourMainSwitches$ 次,
移动 $\PractQFourMainMove$ km,总虚拟时间 $\PractQFourMainTime$ s。
\subsection{动作耗时分解}
将式~\eqref{eq:time} 重排,得到累计移动时间
上面的对比说明"哪种策略更快",还需要说明"时间花在哪里"。
把式~\eqref{eq:time} 重排,得到累计移动时间
\begin{equation}
T_{\mathrm{move}}
=T-5N_m-N_s-5N_c^+-3N_c^-.
\label{eq:residual}
\end{equation}
表~\ref{tab:cost} 中 Q3-1 表示问题三第一次正式测试,其余编号依此类推。
六次测试的清除失败计数均为零。
各动作次数与式~\eqref{eq:residual} 共同确定图~\ref{fig:costbars} 的耗时分解。
据此可把每局的总虚拟时间拆成移动、检测、换频与清除四项,见表~\ref{tab:cost}。
\input{data/practice-cost-summary-table}
\begin{table}[htbp]
\centering\small
\caption{六次正式测试的动作计数与移动耗时}
\setlength{\tabcolsep}{4.5pt}
\begin{tabular}{lrrrrrr}
\toprule
案例 & 检测数 & 换频数 & 失败清除 & 总虚拟时间/s & 移动时间/s & 移动占比\\
\midrule
Q3-1 & 105 & 96 & 0 & 3094.978 & 2408.978 & 77.84\% \\
Q3-2 & 117 & 108 & 0 & 3493.335 & 2725.335 & 78.02\% \\
Q3-3 & 117 & 107 & 0 & 2906.863 & 2164.863 & 74.47\% \\
Q4-1 & 349 & 275 & 0 & 9362.226 & 7277.226 & 77.73\% \\
Q4-2 & 361 & 315 & 0 & 9271.302 & 7101.302 & 76.59\% \\
Q4-3 & 264 & 213 & 0 & 8608.382 & 7005.382 & 81.38\% \\
\bottomrule
\end{tabular}
\label{tab:cost}
\end{table}
\begin{figure}[htbp]
\centering
\includegraphics[width=0.92\linewidth]{formal-time-bars.png}
\caption{六次正式测试的累计虚拟耗时分解。图中数据仅来自正式测试原始动作计数与总虚拟时间。}
\label{fig:costbars}
\includegraphics[width=0.86\linewidth]{practice-virtual-time.png}
\caption{自建模拟器演练局的总虚拟时间分布。每个点代表一局,
实线段为该问题全清局的均值;横轴取对数刻度,
问题四(混合源)的整体耗时明显高于问题三(全向源)。}
\label{fig:practicetime}
\end{figure}
由图~\ref{fig:practicetime} 与表~\ref{tab:cost} 可见,
两类场景中移动时间都是主要成本,分别占 $\PractQThreeMoveShare$ 与 $\PractQFourMoveShare$,
因此缩短总耗时的主攻方向是减少移动,这与问题三相对基线的降幅主要来自位移下降相互印证。
清除动作本身只占 $\PractQThreeClearShare$ 与 $\PractQFourClearShare$,
说明"清除"不是时间瓶颈,真正的成本在于把机器人送到能清除的位置。
检测与换频合计占比不高,但因换频次数与移动路径耦合,
仍需一并计入路径排序,不能单独优化。
六次测试的移动时间占总虚拟耗时的 $\FormalMovementMin\%$ 至 $\FormalMovementMax\%$,
是主要的时间成本,减少移动因而也是缩短总耗时的主要方向,
但检测与换频仍需一并计入路径选择。
由 $L_{\mathrm{eq}}=5T_{\mathrm{move}}$ 反推等效移动距离:
问题三依次为 $12.045$、$13.627$、$10.824$ km,
问题四依次为 $36.386$、$35.507$、$35.027$ km。
该等效距离由官方动作计数与移动速度换算得到,不是独立轨迹测得的长度。
所有平均值先以官方整数单位求和、相除,最后保留三位小数。
\subsection{本节结论}
综合以上配对对比与演练局复算,可提炼出四点结论:
1. 几何层的精确判据不需要以效率为代价——问题一的最优实现误差为零而耗时更短,
问题二则在保证接收率为 $100\%$ 的同时把最坏后验半径压到基线的约五分之一;
2. 多源搜索的效率来自"证明不需要检测",网格幸存集与七点覆盖使默认策略的检测次数
和位移相对网格基线分别降到约四分之一和五分之一,平均虚拟时间下降 $\ProjQThreeDropOpt$;
3. 混合源场景必须为无信号保留朝向解释,否则会出现缺席误判;
默认策略以全清率 $100\%$、缺席误判 $0$ 和平均 $\ProjQFourMeanOpt$ s 的代价
换取了这种完备性;
4. 本次采集的 $44$ 局演练中,两类场景的全部源都被清除且失败清除为零,
移动时间占总耗时的 $\PractQThreeMoveShare$ 与 $\PractQFourMoveShare$,
是继续优化的首要对象;清除动作本身只占 $\PractQThreeClearShare$ 与 $\PractQFourClearShare$,
不是当前的时间瓶颈。
\subsection{直接指标结论}
六次正式测试均主动退出且清除失败计数为零。以题目要求的直接时间指标衡量:问题三三次测试累计清除 $\QThreeCount$ 个源,总虚拟时间 $\QThreeTotal$ s,程序运行时间合计 $\QThreeProgramTotal$ s;问题四累计清除 $\QFourCount$ 个源,总虚拟时间 $\QFourTotal$ s,程序运行时间合计 $\QFourProgramTotal$ s。六次测试合计清除 $\FormalClearCount$ 个源,总虚拟时间 $\FormalVirtualTotal$ s。
由此可得结论:1. 全向源场景下,七点解析覆盖与逐频道网格幸存集使三次测试均在正式时限内完成,问题三三次总虚拟时间为 $2906.863$ 至 $3493.335$ s;2. 混合源场景下,前向半盘最小命中集、位置与朝向联合幸存集和后备清除使三次测试总虚拟时间为 $8608.382$ 至 $9362.226$ s,明显高于全向场景,说明定向遮挡仍是时间成本的主要来源;3. 平均定位清除时间和移动时间分解只用于解释成本结构,优化程度的结论应以总虚拟时间、程序运行时间和清除数量为准,不能用自建基准推断倍数。
-9
View File
@@ -1,13 +1,4 @@
\section{计时模型与会话状态机}
\subsection{会话状态与合法动作}
题目接口只有 \texttt{/enter}、\texttt{/measure}、\texttt{/clear} 与 \texttt{/exit}
四条指令。会话状态依次为未进入、进入倒计时、接口开放与断连,
进入倒计时为 $5$ s,如图~\ref{fig:statemachine}。
只有 \texttt{accepted=true} 的响应推进虚拟时钟;被拒绝的请求返回的虚拟时刻为零,
不能当作当前时刻使用,也不改变位置与测向机频道。
一次合法 \texttt{/measure} 结束后,测向机频道更新为本次检测频道;
\texttt{/clear} 给出的是目标频道,既不改变测向机频道,也不产生换频耗时。
因此清除之后原地再测的耗时取决于上一次 \texttt{/measure} 的频道,而不是清除的频道。
\begin{figure}[htbp]
\centering
Binary file not shown.