Compare commits

56 Commits
Author SHA1 Message Date
sloray 14b0ebb7fb 改写 2026-09-13 19:59:33 +08:00
sloray b7aadaa400 改一点标题 2026-09-13 19:37:19 +08:00
sloray 2cb3dd6602 AIGC 合规 .gitignore 2026-09-13 19:16:47 +08:00
sloray 662d17e21a AIGC 合规说明 2026-09-13 19:14:06 +08:00
sloray 599eea40d6 去敏感提交 2026-09-13 18:43:25 +08:00
sloray 89021eb9f8 论文完成 2026-09-13 18:05:59 +08:00
sloray 9fb15f53f5 图表换正式数据 2026-09-13 14:38:31 +08:00
sloray 705c4c9b6a 行文优化 2026-09-13 13:23:10 +08:00
Horldsence 257d1a9bd7 46 2026-09-13 11:45:01 +08:00
sloray fb0325f67f Merge branch 'q3-bayes-no-ml' of git.simba-robotics.com:HelixCopex/mcm-26-b into q3-bayes-no-ml 2026-09-13 10:55:45 +08:00
sloray 4f836fe123 重写tex 2026-09-13 10:53:22 +08:00
Horldsence 78e4420a3e iuh 2026-09-13 10:52:28 +08:00
sloray 2c63610f12 论文更改与图更改
Co-authored-by: Pengheng <Horldsence@users.noreply.github.com>
2026-09-13 10:30:05 +08:00
Horldsence 82311a47cc 123 2026-09-13 10:27:09 +08:00
Horldsence b810ec7777 1134 2026-09-13 10:27:04 +08:00
Horldsence 0a2d30702d 12 2026-09-13 08:54:06 +08:00
Horldsence 27f4d6e0d8 123 2026-09-13 08:52:23 +08:00
Horldsence dec57e3e29 123 2026-09-13 08:52:21 +08:00
Horldsence 71688b2ab2 082928 2026-09-13 08:29:30 +08:00
sloray f71d7d9288 Merge branch 'q3-bayes-no-ml' of git.simba-robotics.com:HelixCopex/mcm-26-b into q3-bayes-no-ml 2026-09-12 17:21:45 +08:00
sloray 102ca032fb 1 2026-09-12 17:21:41 +08:00
Horldsence a1500d25c1 q3 q4 baseline 2026-09-12 17:01:49 +08:00
Horldsence 892451dca9 baseline 2026-09-12 16:58:25 +08:00
sloray 1fa2264a17 Merge branch 'q3-bayes-no-ml' of git.simba-robotics.com:HelixCopex/mcm-26-b into q3-bayes-no-ml 2026-09-12 15:27:13 +08:00
sloray c2d1230562 1 2026-09-12 15:25:16 +08:00
Horldsence 45e48d4c91 yes fuking shit 2026-09-12 14:48:43 +08:00
Horldsence 61fd22598a revert: 移除全部机器学习代码,回退到无 ML 版本
删除 RL/HRL/训练前端及其文档、脚本、测试与依赖:
- src/mcm26b/{rl,hrl,training_ui}/、planner/{rl,hrl}_loop.py、process_control.py
- project/(PPO 策略、训练、环境、评估)
- scripts/{train_rl,train_hrl_*,benchmark_rl,benchmark_hrl,pretrain_*_expert 等}
- tests/{test_rl*,test_hrl*,test_training_ui*}、tests/js/training_ui_harness.cjs
- docs/{algo-rl,hrl-*,training-ui*} 与相关计划条目、论文 PDF 回退

CLI 恢复为 grid/seven/bayes + directional,移除 --strategy rl|hrl、
--q4-strategy、--rl-model、--hrl-* 等参数;pyproject 删除 rl 依赖组与
PyTorch CUDA index,uv.lock 同步重生成。

保留此后的非 ML 改动(referee 回放、Q1/Q3 脚本、代码清理等)。
验证:pytest 232 passed;Q3/Q4 --self-test 全清通过。
2026-09-12 08:47:51 +08:00
Horldsence d975309a81 holy fuking shit 2026-09-12 01:56:34 +08:00
Horldsence 36f354736c 1919810 2026-09-11 23:07:42 +08:00
Horldsence 5c96699b70 1 2026-09-11 21:07:21 +08:00
Horldsence 1725cd0891 114514 2026-09-11 21:00:39 +08:00
sloray 2a3ead5d3d Merge branch 'q3-bayes' of git.simba-robotics.com:HelixCopex/mcm-26-b into q3-bayes 2026-09-11 17:56:08 +08:00
sloray 4d224e586a 强化学习第二版 2026-09-11 17:56:03 +08:00
Horldsence 7026277a8d Merge branch 'q3-bayes' of https://git.simba-robotics.com/HelixCopex/mcm-26-b into q3-bayes 2026-09-11 17:25:45 +08:00
Horldsence b15db59ac3 14 2026-09-11 17:24:29 +08:00
sloray 30df22e8b2 13 2026-09-11 17:24:07 +08:00
sloray 4699b0d45f 强化学习第一版 2026-09-11 16:56:39 +08:00
Horldsence 2bc4c7ed82 Merge branch 'q3-bayes' of https://git.simba-robotics.com/HelixCopex/mcm-26-b into q3-bayes 2026-09-11 11:37:22 +08:00
Horldsence a18a139a1d 6 2026-09-11 11:36:08 +08:00
Horldsence 2d2a9a4e6a feat: 5 2026-09-11 11:35:47 +08:00
sloray fd48064000 第四次运行 2026-09-11 11:28:36 +08:00
sloray 7dedcd0629 4000s上限优化 2026-09-11 11:16:23 +08:00
sloray 9cf94281a9 论文/3batch 2026-09-11 09:52:05 +08:00
Horldsence f3dfa9c2a1 feat: 修复大粪扫描频率 2026-09-11 09:50:56 +08:00
Horldsence bd479b6d9d Merge remote-tracking branch 'origin/gpt' into q3-bayes 2026-09-11 09:12:24 +08:00
Horldsence 9c9ab451e5 feat(q3): 消融基准(14场景-19.5%)+Optuna调参脚本+文档;run 默认策略切 bayes 2026-09-11 09:11:21 +08:00
Horldsence e0665c73fb feat(q3): 贝叶斯网格粒子滤波闭环(PF负观测+信息增益选点+2-opt调度)
- particles.py: 网格幸存集滤波,Voronoi 裕量保证真源保留(缺席证明/网格清除证书/跳测规则)
- planner/bayes_loop.py: 统一任务循环(站点/定位/清除滚动 2-opt 排序)、期望后验半径选点
- planner/seven.py: 七点覆盖策略族提升为库代码
- cli: mcm26b run --strategy {grid,seven,bayes}
- BayesConfig 参数组;tests +24 项(真源保留/证书/端到端),129 全绿
2026-09-11 09:02:28 +08:00
sloray 52c69b1276 模拟器细节特征对齐 2026-09-11 08:29:56 +08:00
Horldsence 7930eb65bf feat: 3 2026-09-11 03:33:36 +08:00
Horldsence fc70d6edfd feat: 3 2026-09-11 03:32:05 +08:00
sloray 78d52ff81c 第三问的垃圾算法 2026-09-11 03:26:20 +08:00
sloray 846b45e420 Merge branch 'gpt' of git.simba-robotics.com:HelixCopex/mcm-26-b into gpt 2026-09-11 02:34:16 +08:00
sloray 12da6aafd2 Tex 配方预设/论文列表 2026-09-11 02:33:19 +08:00
Horldsence 4f91f242fe 2 2026-09-11 02:32:31 +08:00
sloray 8c18a1f499 Merge branch 'gpt' of git.simba-robotics.com:HelixCopex/mcm-26-b into gpt 2026-09-11 01:26:35 +08:00
sloray dbf4feec4e 编译错误修复 2026-09-10 23:44:13 +08:00
365 changed files with 85339 additions and 4015 deletions
+58 -10
View File
@@ -1,18 +1,42 @@
# Python-generated files # ============================================================
# 2026 B 题:无线电干扰源自动定位清除 —— 版本控制忽略清单
# 原则:只跟踪"可复现结果所需的最小集合"。
# - 源码、自建模拟器、六份正式日志、测试、复现脚本与说明文档:纳入版本控制;
# - 编译产物、运行期采集目录、缓存与本机工作区:一律忽略。
# ============================================================
# ---------- Python ----------
__pycache__/ __pycache__/
*.py[oc] *.py[cod]
*.egg-info/
.venv/
.piptmp/
.pytest_cache/
.mypy_cache/
.ruff_cache/
.ipynb_checkpoints/
# 构建与打包产物
build/ build/
dist/ dist/
wheels/ wheels/
*.egg-info
# Virtual environments # ---------- 运行期产生:不进版本控制 ----------
.venv # 官方模拟器本体与判题留档(体积大且需官方环境)
# Sim
Jammers*/ Jammers*/
# 官方演练采集产物(问题一观测、回放归档、评测机日志)
output/
# 本机临时工作区:历史留档、截图、中间草稿等
tmp/ tmp/
# LaTeX build artifacts # 构建 Python 包时使用的临时目录
.piptmp/
uv-temp/
pip-temp/
# referee-data/ 是论文正文数据的来源,纳入版本控制(含演练与正式日志)。
# 其中登录标识已统一为中性占位符,不包含参赛队号。
# ---------- LaTeX 编译产物 ----------
docs/paper/build/ docs/paper/build/
docs/paper/*.aux docs/paper/*.aux
docs/paper/*.log docs/paper/*.log
@@ -21,6 +45,30 @@ docs/paper/*.fls
docs/paper/*.fdb_latexmk docs/paper/*.fdb_latexmk
docs/paper/*.xdv docs/paper/*.xdv
docs/paper/*.synctex.gz docs/paper/*.synctex.gz
# 支撑包是脚本产物(scripts/build_paper_support.py --package),不入库
docs/paper/support-materials.zip
# pytest # ---------- 编辑器 / 操作系统 ----------
.pytest_cache/ .vscode/*
!.vscode/settings.json
.idea/
.zcode/
.DS_Store
Thumbs.db
# ---------- 字体:体积过大,不进版本控制 ----------
# docs/paper/fonts/ 共约 150 MB(HeitiSC / SongtiSC / Times New Roman),
# 远超支撑材料合理体积。cls 已内置系统字体回退方案,缺字体时按
# docs/paper/mcm26b-paper.cls 中的「若未携带 fonts/ 目录」注释改用系统字体即可。
docs/paper/fonts/
# AIGC 报告构建产物
docs/build/
docs/*.aux
docs/*.log
docs/*.toc
docs/*.out
docs/*.fls
docs/*.fdb_latexmk
docs/*.xdv
docs/*.synctex.gz
File diff suppressed because it is too large Load Diff
+85
View File
@@ -0,0 +1,85 @@
{
// LaTeX Workshop 配方 —— 与 docs/paper/README.md 记录的口令一致:
// latexmk -xelatex -interaction=nonstopmode -halt-on-error main.tex
// 论文需要多遍编译(交叉引用、目录与长表格),且必须用 XeLaTeX(ctex + fontspec),
// 因此默认配方取 latexmk,而不是单遍 xelatex。
"latex-workshop.latex.workingDirectory": "%DIR%",
"latex-workshop.latex.tools": [
{
// 默认配方使用的工具:%DOCFILE% 与 %DIR% 配合,
// 切换工作目录后传给 latexmk 的仍是纯文件名,避免绝对路径与 \input 相对路径冲突。
"name": "latexmk (xelatex, paper)",
"command": "latexmk",
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-halt-on-error",
"-file-line-error",
"-xelatex",
"%DOCFILE%"
],
"env": {}
},
{
// 备选:产物集中到 build/ 子目录,源码目录更干净;
// 需要清理时删除 docs/paper/build 即可(该目录已在 .gitignore 中)。
"name": "latexmk (xelatex, outdir=build)",
"command": "latexmk",
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-halt-on-error",
"-file-line-error",
"-xelatex",
"-outdir=build",
"%DOCFILE%"
],
"env": {}
},
{
// 单遍 xelatex 只用于排查单个文件的语法错误,交叉引用会显示为 ??
"name": "xelatex (单遍,调试用)",
"command": "xelatex",
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"%DOCFILE%"
],
"env": {}
}
],
"latex-workshop.latex.recipes": [
{
"name": "latexmk (xelatex, paper)",
"tools": ["latexmk (xelatex, paper)"]
},
{
"name": "latexmk (xelatex, outdir=build)",
"tools": ["latexmk (xelatex, outdir=build)"]
},
{
"name": "xelatex (单遍,调试用)",
"tools": ["xelatex (单遍,调试用)"]
}
],
// 默认配方:本项目的实际编译口令(多遍 + XeLaTeX + 遇错即停)。
//
// 产物写入 build/ 而不是就地写 docs/paper/main.pdf:就地编译时若 PDF 预览
// 仍打开发着 main.pdf,Windows 会锁住该文件,xdvipdfmx 随即报
// "gave an error" 且不产出 PDF,表现为"编译没反应"。
// 写到 build/ 后,预览读的是 docs/paper/build/main.pdf,不再与源码目录的
// main.pdf 抢占,保存即编译也就稳定了。
// 需要就地产出时,把下面这行改为 "latexmk (xelatex, paper)",并先关闭 PDF 预览。
"latex-workshop.latex.recipe.default": "latexmk (xelatex, outdir=build)",
// 预览与 build/ 配方保持一致
"latex-workshop.latex.outDir": "build",
// 保存即编译:单次编译约十秒,开启后可直接看 PDF 预览;
// 只想手动触发时把下一行改为 "never"。
"latex-workshop.latex.autoBuild.run": "onSave",
"latex-workshop.latex.autoClean.run": "onBuilt",
"latex-workshop.latex.clean.subfolder.enabled": true,
"latex-workshop.view.pdf.viewer": "tab",
// 禁止 LaTeX Workshop 用启发式自动切换工具,始终按上面的配方执行
"latex-workshop.latex.build.forceRecipeUsage": true
}
+175 -74
View File
@@ -1,96 +1,197 @@
# mcm26b — CUMCM 2026 B 题:无线电干扰源的快速自动定位与清除 # mcm26b — CUMCM 2026 B 题:无线电干扰源的快速自动定位与清除
统一框架:有界误差几何定位、主动选点、带覆盖证明的搜索、按真实动作耗时调度。 本仓库为参赛论文(`docs/paper/main.tex`)的可复现支撑材料:
分析依据 `issue/B题.pdf`、附件1《模拟器使用说明》、附件2《通信接口说明及编程指南》。 提供四问的完整可运行程序、自建模拟器、论文全部数据与插图的生成脚本。
算法本身的推导、证明与结果分析见论文,本文件只说明**怎么跑、怎么复现**。
- [四问建模分析与 P0–P7 实施计划](docs/B题建模分析与实施计划.md) ---
- [协议规则表、字段表与状态机(P0 交付)](docs/协议规则表与状态机.md)
- [问题一完整解答](docs/问题一解答.md)
- [论文](docs/paper/main.tex)
## 项目结构 ## 1. 环境
``` - Python ≥ 3.10;运行时依赖仅 `requests`,测试与自检另需 `pytest`、`numpy`。
src/mcm26b/ - 自建模拟器 `referee/` 为零第三方依赖的独立包,`uv sync` 时作为开发依赖一并挂载。
├── config.py # 参数中心:题面常量[题面] + 工程参数[工程],唯一字面量来源 - 复现论文 PDF 另需 TeX Live(XeLaTeX、ctex、TikZ)。论文用字体在 `docs/paper/fonts/`,
├── protocol/ # P0/P1 字段表、计时模型、状态机、串行幂等客户端(已完工) 该目录约 150 MB、**已在 `.gitignore` 中排除、不入库**;缺失时按
├── geometry/ # P2 角域交会、直径、MEC、问题二安全候选盘证书(已完工) `docs/paper/mcm26b-paper.cls` 中的「若未携带 fonts/ 目录」注释改用系统字体即可编译。
├── sim/ # 自建模拟器、故障注入、演练日志回放(测试专用,已完工)
├── belief/ # P3 逐频道候选集合 K_c:保守外包多边形 + 半平面裁剪(已完工)
├── coverage/ # P4 49点覆盖账本(网格生成 + 逐频道记录)
├── planner/ # P3 保证接收盘选点器 / P4 全向闭环 / P5 混合源定向闭环(已完工)
├── evaluation/ # 日志复算与统计(已完工)
└── sim/scenes.py # 自检场景生成器:全向与混合源(测试端专用)
tests/ # pytest(兼容 unittest 风格),95 项
scripts/ # 采集、基准、可视化与校核脚本
output/ examples/ # 演练证据、算例与生成产物
```
## 快速开始
Python ≥ 3.10,依赖仅 `requests`(测试另需 `pytest`)。
```bash ```bash
uv sync # 安装(可编辑挂载本包) uv sync # 安装主包与 referee(可编辑挂载)
uv run pytest # 全部测试
uv run mcm26b sim-check # P0 自检:复现附件计时示例 105/111/194/199
uv run mcm26b run --robot-id 2026001 --self-test # 问题3自检:随机全向场景闭环(不连官方)
uv run mcm26b run --robot-id 2026001 --self-test --problem 4 # 问题4自检:混合定向源场景
uv run mcm26b run --robot-id <队号> --log output/run/session.jsonl # 对接模拟器正式/演练
uv run mcm26b q1 examples/q1/normal.json # 问题一求解(等价 python -m mcm26b.geometry ...)
uv run python main.py examples/q1/triangle.json --rounding-margin-deg 0.005
``` ```
## 问题一(P2,已完工) ---
给定同频道多个检测点及 ±1° 误差示向度,计算前向角域交集(半平面交)、 ## 2. 运行程序(问题三 / 问题四闭环)
定位区域直径、直径圆覆盖判断(含反例顶点与超出距离)与最小包围圆、20m 清除余量。
**队号不在代码中固化**:登录标识属身份信息,一律在运行时通过 `--robot-id` 传入,
代码、测试、示例与日志中只出现与赛事无关的中性占位符(如 `TEAM-0001`)。
```bash ```bash
uv run mcm26b q1 examples/q1/normal.json -o output/q1/result.json # 对接官方模拟器(先在界面确认测试已开始、接口就绪)
uv run python scripts/build_q1_demo.py # 重建离线交互可视化 output/q1/question1.html uv run python -m mcm26b.cli run --robot-id <队号> --problem 3
uv run python scripts/benchmark_q1.py # MEC 基准与舍入敏感性 uv run python -m mcm26b.cli run --robot-id <队号> --problem 4
# 一键本地评测:自动起自建模拟器 → 开一局演练 → 跑完整闭环 → 汇总
uv run python -m mcm26b.cli run --robot-id <队号> --problem 3 --local-judge
# 不连任何模拟器的自检(随机场景,内存回环)
uv run python -m mcm26b.cli run --robot-id SELFCHECK --problem 3 --self-test
# 复现附件计时示例(期望 105/111/194/199 秒)
uv run python -m mcm26b.cli sim-check
``` ```
离线交互页:`output/q1/question1.html`。可选 PNG 重绘需要 Pillow 与 Windows 主要开关:`--strategy {bayes,seven,grid}`(仅问题三,默认 `bayes`)、
雅黑字体:`python scripts/render_q1_figures.py`;事件校核需要 Node.js: `--base-url`、`--log <路径>`、`--real-budget-s`(仅自检生效)。
`node scripts/verify_visualization.cjs`。二者仅为图形校核,非求解依赖。
## 协议基线(P0/P1,已完工) ### 问题一 / 问题二
- `protocol.rules`:四条指令的字段表、结果码与错误语义(可执行表格); ```bash
- `protocol.timing`:纯计时模型,逐步复现附件示例 105/111/194/199; uv run python -m mcm26b.cli q1 examples/q1/normal.json -o output/q1/result.json
- `protocol.state.RobotState`:位置/频道/虚拟时刻状态机;accepted=false 不更新, uv run python -m mcm26b.geometry examples/q1/triangle.json
`/clear` 不切频道,虚拟时刻以 accepted 响应为准;
- `protocol.client.SimulatorClient`:串行发送、幂等重试(同 ID 同内容原样重发)、
连接/读超时、基于 `remaining_real_duration_s` 的本地截止时钟与退出预留、JSONL 会话日志;
- `sim.LocalSimulator`:按附件语义复现模拟器(观测门限、定向覆盖角、幂等回放、
400/accepted=false 语义),真值只对测试端开放;`ScriptedFaultTransport` 注入断连/超时/500,
`PlaybackTransport` 回放官方演练日志。
```python
from mcm26b.protocol import SimulatorClient
client = SimulatorClient("参赛队号") # 默认 http://127.0.0.1:2026
client.enter()
outcome = client.measure((300, 400), 1) # MeasureOutcome(result, svd_deg, ...)
client.exit()
``` ```
## 阶段状态(对照 P0–P6 计划) `examples/q1/` 下的五个算例分别覆盖正常多边形、劣交会、零误差线段、不相容观测与直径圆反例。
| 阶段 | 状态 | 仓库根的 `main.py` 只是转发到同一 CLI 的薄壳(`python main.py <子命令>`),
等价于 `python -m mcm26b.cli <子命令>`。
---
## 3. 自建模拟器(`referee/`)
按题面附件 1《模拟器使用说明》与附件 2《通信接口说明》实现,与参赛队代码零耦合,
只通过 HTTP 协议对接;论文正文的演练数据即由它产生。
```bash
uv run python -m referee # WebUI http://127.0.0.1:8026,接口 :2026
uv run python -m referee --data-dir referee-data
```
- WebUI 复现官方测试流程:四个模块(演练不限次 / 正式各 3 次)、确认→5 秒倒计时→
25 分钟窗口、指令与反馈流、中止需两次确认、结束原因、行为日志导出;
- "回放"页可用本局行为日志动画复现运动与扫描过程,也支持手动导入任意 JSONL;
- 自建差异(联网登录、官方校时、加密上传属官方服务器侧,本地不实现;
误差场与场景分布为测试假设)见 `referee/README.md`。
---
## 4. 复现论文数据(`referee-data/` → 宏与表格)
`referee-data/sessions/` 收录论文正文引用的 44 局演练日志(问题三 15 局、问题四 29 局),
`referee-data/rejected-sessions/` 保留同批采集中被判定为无效的 11 局以便复核。
```bash
python scripts/build_practice_data.py # 复算演练局 → 宏、整表、CSV/JSON 快照
python scripts/audit_paper_formal.py --snapshot docs/paper/data/formal-results.json
python scripts/build_paper_support.py # 附录正式数据表与支撑包
```
- 第一条按题面计时模型逐动作复算,输出 `docs/paper/data/practice-*.tex` 与
`practice-results.{json,csv}`;复算值与评测机记录的最大偏差应为 **0.000000 s**。
运行结束会打印局数、全清局数与平均虚拟时间,可直接与论文数字对照。
- 第二条校验官方六份正式导出包与统计快照的对应关系(来源匹配需原电脑的官方统计队列)。
- 第三条生成附录表格与 `support-materials.zip`(`--package`)。
### 需要重新采集演练局时
```bash
uv run python scripts/run_practice_episodes.py --problem 3 --robot-id <队号> \
--counts 10,13,16 --seeds 300-314
uv run python scripts/run_practice_episodes.py --problem 4 --robot-id <队号> \
--counts 10,13,16 --directional-cycle 3,6,8 --seeds 400-439
```
脚本启动评测机并调用生产策略对接接口,真值与行为日志由评测机写入
`referee-data/sessions/`。判定标准为
`清完全部源 ∧ 无缺席误判 ∧ 主动退出 ∧ 零异常 ∧ 零失败清除`;
只看"是否清完"会放过"清完了但中途大量 `/clear` 打空"的无效局。
---
## 5. 复现论文插图
```bash
uv run python scripts/plot_paper_figures.py # 生成 docs/figures/*.png
```
脚本只读 `docs/paper/data/` 下的复算结果与第四问覆盖计划,不手抄任何数字;
图内文字与图注数据均来自同一次复算。插图清单、数据来源与生成命令见
[`docs/figures/README.md`](docs/figures/README.md) 与 `docs/figures/manifest.json`。
---
## 6. 编译论文
```bash
cd docs/paper
latexmk -xelatex -interaction=nonstopmode -halt-on-error -outdir=build main.tex # 产物 build/main.pdf
latexmk -xelatex -interaction=nonstopmode -halt-on-error main.tex # 产物 main.pdf
```
两条口令都完成交叉引用所需的多遍编译。VS Code 的 LaTeX Workshop 配置见
`.vscode/settings.json`(默认配方为前者)。细节与注意事项见
[`docs/paper/README.md`](docs/paper/README.md)。
---
## 7. 单文件核心代码与测试
```bash
uv run pytest # 全部测试(本包 + referee)
python scripts/build_core_notebook.py # 由 src/mcm26b 生成单文件核心代码
python scripts/run_notebook_cells.py # 顺序执行 notebook 全部代码单元(零依赖自检)
```
[`mcm26b-核心代码.ipynb`](mcm26b-核心代码.ipynb) 是四问生产实现的单文件版本
(约 5000 行),不含评测机、命令行外壳、采集/绘图脚本与测试;
`src/mcm26b/` 保留与之逐字对应的模块化版本。
---
## 8. AIGC 使用合规记录
竞赛要求如实记录 AI 使用情况。本项目使用的 AI 编程助手(ChatGPT/Codex 桌面版、
DeepSeek Harness)在本目录内的全部会话,已从本机客户端存储中提取并汇编为一份合规记录:
| 文件 | 说明 |
| --- | --- | | --- | --- |
| P0 规则固定(规则表/状态机/字段表,示例逐步 105/111/194/199) | ✅ 完成 | | [`docs/aigc-compliance-record.tex`](docs/aigc-compliance-record.tex) | LaTeX 源文件(58 页):编制说明、使用总览、环境与权限配置、逐会话逐轮次详细记录、合规性说明、附录 |
| P1 协议基线(客户端 + 自建回放/故障注入测试) | ✅ 完成 | | [`docs/aigc-compliance-record.pdf`](docs/aigc-compliance-record.pdf) | 编译成品 |
| P2 几何内核(角域交、直径、MEC、证书) | ✅ 完成(迁入 `mcm26b.geometry`) |
| P3 问题二选点(K1、候选区域 Q、采样评估) | ✅ 完成(belief + 选点器,测试固化) |
| P4 问题3全向闭环(49点覆盖、定位队列、清除、停止) | ✅ 自建完成(官方演练待执行) |
| P5 问题4定向扩展(联合约束、后备清除、预算) | ✅ 自建完成(官方演练待执行) |
| P6 加速与消融 | 🦴 未开始 |
## 采集与正式测试约束 记录覆盖 **11 个会话 / 34 个工作轮次 / 31 条人工提示词 / 1508 次工具调用**,
跨 2026-09-10 20:52 至 2026-09-13 18:51(UTC+8)。每条目给出该轮次的
**发生时间、执行环境与上下文(含提示词全文)、大模型实际操作概要**(工具调用分类、
写入文件、代表性命令、模型对外结论)。
本项目只使用官方**演练**采集观测,从未使用正式测试。`scripts/capture_practice.py` 编译(需 ctex / longtable / booktabs):
不会启动测试:必须先在界面确认“问题3演练”、接口已就绪,再提供
`--practice-confirmed` 与本局案例编码。正式测试由团队按计划另行安排; ```bash
加密日志上传上限 2MB,程序避免异常高频循环。 cd docs
latexmk -xelatex -interaction=nonstopmode aigc-compliance-record.tex
```
> 记录由审计脚本从 `~/.codex/sessions/`、`~/.codex/state_5.sqlite`、`~/.dsh/sessions/`
> 中**工作目录等于本仓库**的会话自动提取生成,原始记录未经改写;提取与统计脚本
> 存于 `tmp/aigc/`(该目录按 `.gitignore` 不入库)。会话如何归属本项目、
> 哪些存储被核查后排除,见记录第 1 节与附录 A.4。
---
## 9. 目录结构
```
src/mcm26b/ 四问求解实现:config / protocol / geometry / belief / coverage /
guarantee / planner / particles / routing / evaluation / harness
referee/ 自建模拟器(独立包,零第三方依赖,不依赖本队代码)
referee-data/ 论文数据来源:演练日志(sessions / rejected-sessions)、正式统计快照
tests/ 本包测试(含运行时零导入 referee 的解耦守卫)
docs/paper/ 论文 LaTeX 源、数据与宏、编译说明
docs/figures/ 论文插图(PNG)与来源清单
docs/ AIGC 使用合规记录(aigc-compliance-record.tex / .pdf)与本目录索引
examples/ 问题一算例与回放归档
scripts/ 复现脚本:数据复算、插图绘制、正式数据核对、采集与基准
project/ 四问"最优实现 / 基线实现"配对对比框架(论文对比表的来源)
issue/ 赛题、附件与格式规范(原始材料)
```
`docs/paper/REWRITE_NOTES.md` 记录论文各轮修订与验证过程(含数据重采与问题修复)。
-226
View File
@@ -1,226 +0,0 @@
# B 题建模分析与实施计划
根据你们对工程实践和物理模型的熟悉程度,确定研究 B 题“无线电干扰源的快速自动定位与清除”。推荐采用**有界误差几何定位、主动选点、具有覆盖证明的搜索、按实际动作耗时调度**的统一框架。AI 辅助推导、实现与实验分析,策略只依赖题目允许的观测。
本文件已结合本次评审修订。问题一的几何内核、离线可视化和官方演练观测回放已经完成;问题二新增了安全候选圆盘证书,但主动选点优化器、问题三和四的全清闭环尚未完成。文中的覆盖结论是根据题设推导的,耗时估算不是演练成绩。当前工作仅离线复算既有演练记录,不使用正式测试。
依据:`issue/B题.pdf` 全文、`issue/附件/附件1.docx`《模拟器使用说明》、`issue/附件/附件2.docx`《模拟器通信接口说明及编程指南》。文档中的登录、测试和日志要求在这里作为交付约束分析,不作为自动执行正式测试的指令。
## 本次建议的取舍
| 建议 | 处理结论 |
| --- | --- |
| 四问复用几何内核、有界误差、覆盖证明、严格停止、幂等协议 | 保留,作为主线与验收条件 |
| 问题二的候选集合加入 $\Omega$ 和 1500 米上界 | 采纳,但仅加入在线候选集合 $K$,不改变问题一纯角域多边形 $P$ |
| 问题二首次测向后安全区域可能为空 | 对一般 $K$ 成立;本题首次窄角域可直接证明非空,见下文 |
| $Q$ 为空就去最小包围圆圆心并结合交会角 | 仅是一般情形的探索退化;$\rho>1000$ 时不保证接收,不能冒充保底方案 |
| 枚举所有直径对判断直径圆 | 简化为任意一组最远点对检查一次;失败时给出圆外顶点 |
| 定向无信号不直接删位置、失去信号后覆盖清除 | 采纳;执行前必须计算覆盖格数、路径和现实请求预算 |
| 现实20分钟优先控制请求数 | 采纳为硬约束;全部清除后仍按题目虚拟时间优化 |
| P0–P7分期与尽早正式测试 | 采纳分期;演练不限定3次,正式问题3/4各3次由团队另行安排 |
| `/detect` | 修正为附件规定的 `/measure` |
## 1. 四问应当串成一条实现主线
| 问题 | 要回答的实质问题 | 推荐抽象 | 必须交付的结果 |
| --- | --- | --- | --- |
| 1 | 带误差的多个方位如何形成定位区域,其直径如何计算,直径圆是否覆盖区域 | 扇形角域的半平面交、凸多边形直径、最小包围圆 | 算法、边界情形、覆盖判断及反例 |
| 2 | 仅有一次测向时,下一步去哪里更有利 | 在未知目标位置条件下进行主动测量设计 | 明确的候选区域、选点目标和比较实验 |
| 3 | 数量未知的全向源如何全部找到并尽快清除 | 全域覆盖、逐频道候选区域、局部定位与路径调度 | 演练统计、3 次正式结果、原名正式日志 |
| 4 | 有未知朝向的定向源时,如何避免遗漏 | 加入朝向不确定性的观测模型、半平面覆盖、失去信号后的处理 | 演练统计、另外 3 次正式结果、正式日志 |
第 1 问的定位区域和包围圆直接服务第 2 问选点与第 3、4 问清除;第 3 问的工程框架延伸到第 4 问。模型不必为每问重新搭建。
## 2. 用题面明确的观测能力约束物理抽象
目标区域为 $\Omega=\{(x,y):x^2+y^2\le 1800^2\}$。每个频道最多有一个源,源总数为 10–16,频道为 1–20。对一个存在的源 $c$,用未知位置 $g_c$、接收半径 $R_c\in[1000,1500]$、类型和定向朝向描述;全向源不需要朝向参数。
机器狗状态只需要位置 $p$、当前测向频道 $k$、虚拟时间、现实剩余时间、各频道的观测历史和处理状态。每个频道维护:未知/已发现待定位/可清除/已清除/已证明不存在,以及尚可能包含源的集合 $K_c$。
| 规则 | 数学或程序含义 | 容易出现的错误 |
| --- | --- | --- |
| 只返回 no_signal、near、direction;direction 附带示向度 | 这是带距离可见性门限的方位观测问题 | 构造接口并未提供的 RSSI、距离或场强数据 |
| 同地点误差固定,幅度不超过 $1^\circ$ | 用有界误差集合,保留空间相关性 | 原地重复测量取平均,假定可消除误差 |
| 示向度保留两位小数 | 题设模型取 $\pm 1^\circ$;实现可另设 $\pm 1.005^\circ$ 保守裕量 | 把额外舍入裕量写成题面规定 |
| 定向源覆盖朝向两侧各 $90^\circ$,包含边界 | 检测点须处于以源为界的发射半平面内 | 把无信号直接判定为没有源 |
| 可到目标圆域外检测与清除 | 目标位置受 $\Omega$ 限制,机器狗正常搜索不受 $\Omega$ 限制 | 所有搜索点强制留在圆域内,遗漏朝外发射的边界源 |
| 清除半径 20 米,不受定向朝向限制 | 清除可成为失去信号时的可靠后备手段 | 认为背面接收不到信号就无法清除 |
| /clear 不切换测向频道 | 保存独立的当前测向频道状态 | 清除后错误更新频道,算错下一次检测耗时 |
不需要重新拟合电磁传播衰减公式:接口只暴露接收门限与方位,额外物理参数无法由题目观测充分辨识。工程经验主要用于设计可见性分析、测向几何和闭环决策。
精确的虚拟时间目标是:
$$
T=\frac{L}{5}+N_{\mathrm{switch}}+5N_{\mathrm{measure}}
+5N_{\mathrm{clear,success}}+3N_{\mathrm{clear,fail}}.
$$
$L$ 包括检测和清除引发的所有移动,切换次数只由被接受的检测动作决定。先满足全部清除,再减少 $T$;不能通过少清几个源来改善平均时间。程序运行时间是另一个硬约束,不能把虚拟检测的 5 秒实现为现实 `sleep(5)`。
## 3. 定位与选点的统一几何标准
在 $s_i$ 测到 $\theta_i$ 后,定义 $W_i$ 为从 $s_i$ 出发、方向范围 $[\theta_i-\delta,\theta_i+\delta]$ 的前向角域。它由两条线性半平面约束表示,必须正确处理 $0^\circ/360^\circ$ 跨界。
第 1 问的定位多边形 $P$ 为这些角域的交。求各边界直线交点并筛选可行点、排序成凸多边形后,小规模下直接枚举顶点对即可计算直径:
$$
D(P)=\max_{i,j}\lVert v_i-v_j\rVert.
$$
先用简单可靠的顶点对枚举作基准,规模确有需要时再换旋转卡壳。算法必须区分空集、单点、线段、有限多边形和无界区域;不能靠任意大方框截断后声称得到无界区域的真实直径。旋转卡壳的背景可参考 [McGill 计算几何研究页面](https://www-cgrl.cs.mcgill.ca/~godfried/research/calipers.html)。
**直径为 $D$ 的圆不一定覆盖直径为 $D$ 的区域。**例如边长为 $D$ 的等边三角形,最小包围圆半径为 $D/\sqrt{3}$,大于 $D/2$。后续保证清除应使用:
$$
\rho(K)=\min_z\max_{g\in K}\lVert g-z\rVert\le 20.
$$
到最小包围圆圆心清除是充分选择,并非唯一选择。所有可保证清除的位置组成 $C_{20}(K)=\bigcap_{g\in K}B(g,20)$;只要该集合非空,就可进一步选择距离机器狗最近的可行点来节省移动。$D\le 40$ 只是必要条件,不是充分条件。最小包围圆是已有标准计算几何问题,可参考 [CGAL Min_circle_2 文档](https://doc.cgal.org/latest/Bounding_volumes/classCGAL_1_1Min__circle__2.html)。实现时给 20 米阈值保留数值余量;数值阈值附近返回谨慎判断,不把浮点容差当作精确算术证明。
直径圆覆盖只需任意一组最远顶点 $A,B$:包含距离为 $D$ 的两点且半径为 $D/2$ 的圆,其圆心只能是 $(A+B)/2$。因此检查一次全部顶点即可;若失败,换另一组直径对也不可能产生覆盖圆。问题一实现现输出最坏超出距离、圆外顶点索引和一个具体反例顶点。
在线定位还可用 $\Omega$ 和“收到信号意味着距离 $\le 1500$”约束 $K$。圆盘交角域可能包含曲线边界;若用多边形近似,必须构造外包近似,才能维持“不丢失真源”的保证。用圆周采样点连成的内接多边形不能直接作为保守外包。
第 2 问建议先明确“较好的定位效果”:以新观测后的最坏包围圆半径为主要几何指标,再考虑移动和检测成本。交会角大、面积小可作为候选点筛选指标,但不是对所有未知位置都最优的证明。
第一次收到 `direction` 后,明确取 $K_1=\Omega\cap W(s_1,\theta_1\pm\delta)\cap B(s_1,1500)$。保留整个距离圆盘是保守处理,忽略 `direction` 还隐含的近距离排除不会丢失真源。对全向源,第二检测点的安全候选区域为:
$$
\mathcal{Q}=\left\{q:\max_{g\in K_1}\lVert q-g\rVert\le 1000\right\}.
$$
在这里测量,不论实际目标位于 $K_1$ 何处,接收距离都满足题目最小接收半径;可能返回 `direction`,也可能返回 `near`。若已知外包圆 $K_1\subseteq B(c,r)$,且 $r\le 1000$,则 $B(c,1000-r)$ 是充分候选区域,等号时是单点。不要误写成“距第一次检测点不超过 1000 米”。宽松外包圆的 $r>1000$ 不能证明真实 $\mathcal{Q}$ 为空。
本题还有比“检查 $\mathcal{Q}$ 是否为空”更强的解析结论。令 $R=1500$,$u$ 为第一次示向方向,$\delta\le 45^\circ$,定义
$$
a=\frac{R}{2\cos\delta},\qquad c=s_1+au.
$$
整个截断角域 $W\cap B(s_1,R)$ 包含在 $B(c,a)$ 内。证明:任意候选 $g=s_1+tu_\varphi$ 满足 $0\le t\le R$、$|\varphi-\theta_1|\le\delta$,因此
$$
\lVert g-c\rVert^2=t^2+a^2-2at\cos(\varphi-\theta_1).
$$
该式关于 $t$ 是凸函数,最大值在 $0$ 或 $R$ 取得;两端都不超过 $a^2$。于是 $K_1\subseteq B(c,a)$,从而 $B(c,1000-a)\subseteq\mathcal{Q}$。$\delta=1.005^\circ$ 时,$a\approx 750.115391$ 米,安全圆盘半径约 $249.884609$ 米,严格为正;题设 $\delta=1^\circ$ 同样成立。即使检测点或 $c$ 在 $\Omega$ 外也合法,因为机器狗不受源位置圆域限制。实现见 `geometry/planning.py::first_bearing_candidate_disk`。
因此,在本题一致的首次测向条件下无需依赖“$\mathcal{Q}$ 空集退化”。对后续更一般的非空紧集 $K$,$\mathcal{Q}$ 非空当且仅当 $\rho(K)\le 1000$;若确实 $\rho>1000$,去 MEC 圆心只是最小化最坏接收距离的探索动作,必须允许 `no_signal`。若 $K$ 为空,应先核查频道、数据、误差界与几何计算,不给空集编造中心。上述证书只保证距离;不能直接用于定向源的朝向可见性保证。
在上述安全圆盘内,围绕测向轴两侧取候选点,计算后验包围半径与动作代价。最坏情形目标可写为 $\sup_{\theta'}\rho\bigl(K_1\cap W(q,\theta')\bigr)$,其中 $\theta'$ 遍历与 $K_1$ 和误差界一致的读数;实现先用目标位置与误差区间端点采样,并加密检查。若返回 `near`,则候选源位于当前点 5 米以内,可直接在当前位置尝试清除该频道。交会角仅作筛选或同分择优,不为改善交会角越出已证明安全的候选区域。采样是启发式,不能称为严格最坏情形最优解;圆弧先验如需离散,使用外包切线多边形并记录逼近误差。
## 4. 搜索完整性和停止条件要有可验证的依据
第 3 问中,在 $s$ 对尚未清除频道测得 `no_signal`,可以排除以 $s$ 为中心、半径 1000 米的圆盘内存在该全向源。超过 1000 米仍可能存在接收半径较小的源,不能一律排除到 1500 米。
第 4 问中,同样的 `no_signal` 约束的是“位置、半径、朝向”的联合假设。若位置和朝向暂不联合维护,最简单的可靠基线就是不利用这一观测直接删除空间候选点,只记录覆盖检测已完成。后续加速版本再维护朝向可行集合。
可以先构造一个对全向、定向均适用的完整发现基线:
$$
S=\{(700i,700j):i,j=-3,-2,\ldots,3\},\quad |S|=49.
$$
这些点覆盖 $[-2100,2100]^2$,包含目标圆域,并允许到圆域外访问。对于位于一个网格单元内部的源 $g$,该单元 4 个顶点到 $g$ 的距离都不超过 $700\sqrt{2}\approx 989.95$ 米。$g$ 在这些顶点的凸包内部,所以经过 $g$ 的任意发射半平面总包含至少一个顶点。该顶点满足接收距离与发射角条件。源恰在网格边或顶点时,取相邻单元的顶点;由于目标圆域与外框有余量,两侧相邻点都存在,仍可选择距离合格、且不与源重合的可见点。
因此,对每个尚未解决的频道完成这些点的测量,能够保证发现该频道存在的源。实际实现可跳过已经清除或已经具有有效定位任务的频道,但必须保存逐频道的覆盖记录,不能把“路过某点”当作“测过所有频道”。
作为规模检查,49点全部扫描20频道最多需要980次检测。若从原点去网格一角,再按逐行折返路线扫完,纯扫描路程约36569.85米;每点检测成本上界120秒,纯扫描虚拟总耗时上界约13193.97秒,即3.665小时。**该估算不含定位、清除及其绕行,也不保证满足现实20分钟窗口。**它说明覆盖基线在100小时虚拟上限内有设计空间,现实可行性仍要测接口延迟、总请求数和日志大小。
发现源后,先通过主动测向缩小候选集合。若定向源再次失去信号,可对已知有界候选集合构造半径小于 20 米的有限圆盘覆盖,逐点调用 `/clear`,作为不依赖朝向的后备清除方法。边长 20 米方格中心距格内任何点不超过 $10\sqrt{2}$ 米;保留与候选集合相交的格子即可保守覆盖。格子按统一半开区间索引,源恰在网格线上时至少归入一个格子;若相交判定数值不确定则保留格子。
有限不等于现实预算可行。设候选外包框宽为 $w$、高为 $h$,使用全局 20 米网格枚举时,上界可取 $N\le(\lceil w/20\rceil+2)(\lceil h/20\rceil+2)$,再以实际相交格子列表得到精确请求上限。生成路径长度 $L$ 后,单源全失败清除耗时为 $L/5+3N$;若最后一次成功则为 $L/5+3(N-1)+5$。现实代价用 $N$ 乘实测单请求高分位耗时加本地计算时间估计。不满足剩余预算时应继续有希望的定位、选择其它任务或按预算退出,不能声称后备清除保证 20 分钟内成功。即使已知源落在半径 1500 米圆盘,按外包框枚举仍有约 $2.3$ 万个格子的量级,故宽候选集合不能直接盲扫。
停止成功的依据为以下任一项:
- 已成功清除16个不同频道的源,达到题设数量上界。
- 每个频道都已有清除成功记录,或通过完整覆盖证明不存在;所有已发现源均已处理完毕。
发现10个源、连续若干次无信号、候选采样点恰好为空,都不是充分停止条件。现实预算不足而退出应记为未证明完成,不能与成功退出混记。
## 5. 在可靠基线之上增加加速策略
先做“发现一个、定位清除一个”的简单闭环,保证功能可运行;再增加以下独立可开关的策略,以便消融比较:
| 策略 | 所解决的问题 | 需要验证的收益 |
| --- | --- | --- |
| 共享检测位置 | 一次移动后顺便测多个未知频道 | 是否减少总移动时间,而非仅减少单目标测量数 |
| 目标队列和短路径排序 | 多个已发现源处理顺序不佳 | 路程减少是否抵消局部定位变差 |
| 第二点主动选取 | 共线或小交会角导致候选区域狭长 | 同等观测预算下包围圆半径、清除耗时改善 |
| 自适应覆盖 | 固定49点有冗余 | 跳点之后每个频道的覆盖证明是否仍成立 |
| 朝向可行集合 | 第4问盲区导致反复失去信号 | 是否减少无效检测,同时不误删真源 |
| 提前尝试清除 | 再测一次可能不如直接尝试便宜 | 失败的3秒和绕行是否值得;保留失败后的正确更新 |
调度可以先采用“预期信息改善/增量虚拟耗时”之类的启发式,但要记录每项含义和参数,性能结论来自演练。不预设目标均匀分布,不假定测向误差独立或均匀分布。若研究统计模型,明确它是实验场景假设。
AI 的适合用法是把这些模块逐一变成可测试程序、生成边界案例、分析消融结果,以及在自建环境中搜索策略参数。先形成可解释基线,再判断学习方法是否有额外收益;避免把未建立的奖励与训练分布直接用于正式测试。
## 6. 抽象标准和验收标准
采用“来源—输入—状态—动作—观测—约束—代价—输出—验证”的统一模块记录格式。它是本项目建议的工程标准,不是竞赛另行规定的官方评分标准。每个假设注明是题面事实、保守近似还是实验启发式;每条结论注明是数学证明还是演练观察。
| 模块 | 最小接口职责 | 验收标准 |
| --- | --- | --- |
| 协议与状态 | 串行发送动作,更新位置、频道、两类时间 | 附件计时示例逐步得到105、111、194、199秒 |
| 观测与几何 | 根据 direction、near、clear结果更新候选集合 | 自建已知真值案例中真源始终保留;跨角度边界不出错 |
| 直径与包围圆 | 给出直径、圆心、包围半径 | 与顶点对枚举对照;等边三角形反例通过 |
| 主动选点 | 输出下一测量位置及选择依据 | 实际可见性、最坏误差与移动成本均有记录 |
| 覆盖与停止 | 管理每频道的覆盖记录和成功依据 | 边界朝外源不漏搜;10源和16源场景都能正确退出 |
| 后备清除 | 对有界候选集合建立20米以内圆盘覆盖 | 覆盖无空洞、每次失败后能继续、预算有上界估计 |
| 演练统计 | 从自身动作日志与演练结束真值统计结果 | 清除比例、平均时间、总时间与分项耗时可独立复算 |
| 正式交付 | 绑定案例编码、程序版本、统计与官方原始日志 | 问题3和4各3次;日志原名保留,核查上传与导出 |
协议必须同时检查 HTTP 状态和 accepted。accepted=false 时不得更新状态,返回的 virtual_time_s=0 不能重置本地虚拟时钟。网络超时重试同一动作必须复用原 request_id 和完全相同的内容;处理重试响应也不能重复累加本地成功数与费用。新动作使用新ID,不并发调用不同动作。
用/enter返回的remaining_real_duration_s建立本地单调时钟截止时间;后续响应若提供剩余时间则校准,不能把首次剩余时间当成永远不变。记录每次请求的现实往返耗时,预留退出与故障恢复余量。例如先预留60秒,再由演练高分位延迟调节;60秒是初始工程参数,不是官方规定。估计剩余请求数时同时计入测量、失败重试、清除和退出,禁止并发动作。
980次检测在单次0.5–1秒的假设下占490–980秒(约8.17–16.33分钟),还没有定位清除余量。这个延迟范围不是实测结论;本地接口和模拟器计算的实际耗时应测量。当前14个动作的单次短演练不足以估计高分位延迟或全程稳定性。已清除频道跳过,已发现频道暂停覆盖并进入定位队列,移动到同一点后共享频道测量;自适应跳点必须保留逐频道覆盖证据。根据附件,正式上传日志不超过2MB,需监测官方日志体积;自建JSON大小不能冒充加密日志的大小。
基准实验至少覆盖:全向与混合源;数量 10 和 16;接收半径 1000 和 1500 米;目标贴近圆域边界且朝外;测向接近 $0^\circ/360^\circ$;误差取界值;检测点距离 5 米及清除距离 20 米的边界;重复请求、拒绝动作及短暂断连。样例数量按剩余时间和运行成本安排,不把有限样例通过等同于数学保证。
比较策略时先看是否全清,再比较同一批场景的总虚拟时间、平均每源时间、中位数与高分位耗时、程序时间、请求数。自建环境可用固定场景做配对比较;官方案例随机且不能重读真值,演练成绩单独记录,不声称是在完全相同的隐藏案例上比较。
## 7. 建议实施次序与阶段交付
下面按P0–P7列出可执行交付与当前状态。排期以验收门槛推进,避免把“几何代码完成”误认为“全清策略完成”。
| 阶段 | 交付与执行任务 | 验收门槛 | 当前状态 |
| --- | --- | --- | --- |
| P0 规则固定 | 规则表、状态机、四类API字段与成本 | 示例逐步105/111/194/199秒;clear不切换频道 | 已完成:`protocol/rules+timing+state` 工程化,`sim-check` 与 `tests/test_protocol_timing.py` 固化 |
| P1 协议基线 | enter/measure/clear/exit客户端;串行、幂等、截止时间 | accepted=false和超时重试不污染状态;主动退出;故障注入回放 | 已完成:`protocol/client`,`ScriptedFaultTransport`/`PlaybackTransport` 回放,`tests/test_protocol_client.py` 全过 |
| P2 几何内核 | 问题一解答、区域分类、直径圆证据、MEC、清除余量 | 跨界、退化、无界、解析反例、独立算法对照 | 已实现并优化,20项自动化测试通过 |
| P3 问题二选点 | $K_1$ 先验、安全候选盘、后验半径采样与 `near` 分支 | 距离证书有效;采样加密;不把探索当接收保证 | 已实现:`belief` 保守候选集 + `planner` 保证接收盘选点器(worst-posterior 采样、1/4 间距加密复核);策略对比实验待做 |
| P4 全向闭环 | 49点覆盖记录、定位队列、清除、停止、日志统计 | 10/16源、边界源和错误响应案例;官方演练全清并正常退出 | 自建闭环已完成:`planner.OmnidirectionalLoop`(10/16/0 源、近边界源、预算耗尽、故障注入测试通过);官方演练全清待团队执行 |
| P5 定向扩展 | no_signal联合约束、覆盖发现、有限清除后备与预算 | 朝外边界源不漏;真源不误删;格数与退出预算检查 | 已实现:`planner.DirectionalExtension`(49点覆盖对定向源成立、保证接收盘内 no_signal 记为观测到定向、对跖+环探梯子、`fallback_clear_cells` 有限圆盘覆盖后备清除带格数/预算双硬顶);`tests/test_loop_q4.py` 全过;官方混合源演练待执行 |
| P6 加速消融 | 共享测点、自适应覆盖、目标排序、提前清除 | 配对案例全清不退化,时间/请求数改善可复算 | 可删减;闭环基线数据已可用于消融对照 |
| P7 正式与论文 | 固定版本、论文表1、日志原名、上传核查 | 问题3/4各3份正式记录与程序版本对应 | 团队后续安排;本任务不执行正式测试 |
按2026年9月10日起的剩余时间,建议10日补齐P1并衔接P3,11日完成P4自建边界案例与全向演练,12日完成P5及混合源演练;未达验收就删减P6并优先修正闭环。演练不限3次,正式机会为问题3和4各3次。团队在版本稳定后自行安排正式记录,留出失败恢复和论文整理时间。附件建议9月13日15:30前完成正式测试,17:30后不能启动新的演练或正式测试;已进入上传队列的日志仍会继续上传。此处引用所给附件安排,运行前核对模拟器界面公告;这份排期不改变当前禁止使用正式测试的限制。
若时间不足,优先删减加速策略,保留可解释定位、覆盖证明、可靠协议和完整日志。开发组织可按几何算法、工程接口、实验论文分工,具体人员由团队安排。
建议后续代码划分为 protocol、geometry、belief、coverage、planner、local_simulator、evaluation 七个模块。官方客户端与自建环境使用同一动作接口;自建真值只对测试端开放,策略端只能看到观测,防止评估时意外使用隐藏答案。
## 8. 当前已落实的结论与下一步
已完成题面与附件核对、49点覆盖推导及扫描成本复算;此前497160个位置与朝向组合的辅助数值校核未发现覆盖遗漏,但采样不代替证明。问题一已通过官方演练三点观测离线验证;该次只有enter、measure、exit,没有清除动作,不能当作全清策略成绩。
本次将 MEC 从全支撑点枚举改为带固定随机种子的 Welzl 增量算法,保留原枚举法作独立对照;对外输出增加直径圆反例顶点、超出距离和 20 米清除余量。CLI 可显式追加 $0.005^\circ$ 舍入裕量。真实演练默认 $\delta=1^\circ$ 时 $D=23.996723$ 米、$\rho=12.068583$ 米;$\delta=1.005^\circ$ 时 $D=24.119088$ 米、$\rho=12.130377$ 米,两种口径下直径圆都不覆盖,但 MEC 半径都小于 20 米。原始演练记录未改写。
可复现报告见 `output/q1/optimization_report.json`,问题一证明、输入输出及数值限制见 `docs/问题一解答.md`。局部MEC基准只反映本地几何计算,不能据此宣称请求延迟、完整策略或官方成绩得到同样提升。
P0–P5(自建部分)与 P2 均已交付:协议层(串行幂等客户端、状态机、预算截止、
故障回放)、几何内核、belief 保守候选集、保证接收盘选点器、`OmnidirectionalLoop`
全向闭环与 `DirectionalExtension` 混合源定向闭环(49 点覆盖对定向源同样成立、
no_signal 联合约束基线不删候选、对跖+环探遮挡梯子、`fallback_clear_cells`
有限圆盘覆盖后备清除,格数与现实预算双硬顶下不盲扫)。自建验收:
`uv run pytest`(95 项)与 `uv run mcm26b sim-check`;随机场景自检:
`uv run mcm26b run --robot-id <队号> --self-test`(问题4加 `--problem 4`)。
下一步优先把两个闭环接入官方演练(问题3用全向、问题4用混合,先实测单请求
延迟与总请求数,核对 1200s 现实预算与 2MB 日志体积),再做 P6 消融对照。
基线量级供参照:10 源场景约 550–630 次检测、虚拟总时 1.4–1.7 万秒;16 源
场景约 200–320 次检测即触发数量上界停止。该数字说明共享测点与跳点策略
(P6)有明确改进空间。不要重复开发几何内核或提前堆叠学习算法;以官方演练
的实际请求、日志和耗时决定 P6 加速投入。
+32
View File
@@ -0,0 +1,32 @@
# docs 索引
论文本身已完整给出四问的模型、推导与结果分析,因此本目录不再保留算法说明文档,
只留下复现所需的说明与材料。
| 入口 | 内容 |
| --- | --- |
| [`../README.md`](../README.md) | **总入口**:环境、运行程序、复现论文数据与插图、编译论文 |
| [`aigc-compliance-record.tex`](aigc-compliance-record.tex) | **AIGC 使用合规记录**:本机 AI 客户端会话的完整审计留痕(58 页) |
| [`aigc-compliance-record.pdf`](aigc-compliance-record.pdf) | 上述记录的编译成品 |
| [`paper/README.md`](paper/README.md) | 论文工程说明:数据分工、重算与编译步骤、VS Code 配方 |
| [`paper/REWRITE_NOTES.md`](paper/REWRITE_NOTES.md) | 论文各轮修订与验证记录(含演练数据重采与问题修复) |
| [`paper/main.tex`](paper/main.tex) | 论文 LaTeX 源文件(正文与附录) |
| [`paper/data/`](paper/data) | 论文引用的全部数据、宏与整表(由脚本生成) |
| [`figures/README.md`](figures/README.md) | 论文插图清单:每张图的数据来源与生成命令 |
| [`figures/manifest.json`](figures/manifest.json) | 插图来源清单(可机读) |
`docs/paper/fonts/` 存放论文编译用字体(约 150 MB),已在 `.gitignore` 中排除、不入库;
缺失时按 `paper/mcm26b-paper.cls` 内的注释改用系统字体。
## 复现顺序
```bash
python scripts/build_practice_data.py # 演练局复算 → 宏与表格
python scripts/audit_paper_formal.py --snapshot docs/paper/data/formal-results.json
python scripts/build_paper_support.py # 附录正式数据表(--package 另出支撑包)
uv run python scripts/plot_paper_figures.py
cd docs/paper && latexmk -xelatex -interaction=nonstopmode -halt-on-error -outdir=build main.tex
```
> `docs/paper/data/*.tex` 由脚本生成,一律使用 LF 换行:CRLF 会让 `\input` 进表格的行
> 在 TeX 缓冲中提前 `\par` 化,触发 booktabs 的 “Misplaced \noalign”。
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+49
View File
@@ -0,0 +1,49 @@
# docs/figures —— 论文插图
本目录的 10 张 PNG 全部进入论文:`docs/paper/main.tex` 用
`\graphicspath{{../figures/}}` 直接引用,论文不重绘、也不手抄图内任何数字。
全部插图由同一脚本生成:
```bash
uv run python scripts/plot_paper_figures.py # 依赖 numpy 与 matplotlib
```
数据来自 `docs/paper/data/` 下的复算结果(`practice-results.json`、
`practice-geometry.json`、正式统计快照)与第四问覆盖计划;
逐图来源见 `manifest.json`。图注为中文,并注明数据取自演练局还是正式测试。
## 约定
- 默认配色与字体沿用 matplotlib 默认样式,不引入自定义调色板;
- 图内不放标题与解释性文字,只保留坐标轴、图例与必要的元素标注,含义由图注承担;
- 图例置于坐标区外,散点与角度标注按位置自动避让,保证互不重叠;
- 输出 PNG(300 dpi、白底)。
## 图清单
| 文件 | 内容 | 数据来源 | 论文位置 |
| --- | --- | --- | --- |
| `framework-decision-loop.png` | 观测—候选集—任务—动作的闭环决策过程 | 论文问题分析的结构 | 图 1 |
| `steps-state-machine.png` | 会话状态机(未进入 / 倒计时 / 接口开放 / 关闭) | `src/mcm26b/protocol/client.py` | 图 2 |
| `timing-attachment-example-105-111-194-199.png` | 附件计时示例:逐动作耗时构成与单步合计 | 题面附件 2 的计时示例 | 图 3 |
| `geo-q1-geometry.png` | 问题一三幅几何:角域交会、定位区域放大(直径圆与最小包围圆)、等边三角形反例 | `practice-geometry.json`(演练局观测复算)、`examples/q1/triangle.json` | 图 4 |
| `geo-q2-guaranteed-reception-disk.png` | 问题二:截断角域外接圆与安全候选盘,右侧为半径分解 | `src/mcm26b/config.py` | 图 5 |
| `geo-q4-minimum-cover-31-points.png` | 问题四:31 点最小命中集分布与定向源读图约定 | `src/mcm26b/guarantee/plans/q4_mincover_v2.json` | 图 6 |
| `selfbuilt-q3-search-clear-path.png` | 问题三演练局:全向源搜索与清除路径(含每次检测的位置、结果与示向度射线) | `referee-data/sessions/<问题三主局>/log.jsonl` | 图 7 |
| `selfbuilt-q4-search-clear-path.png` | 问题四演练局:混合源路径(含定向源朝向、±90° 可见范围与检测点) | `referee-data/sessions/<问题四主局>/log.jsonl` | 图 8 |
| `practice-virtual-time.png` | 44 局演练的总虚拟时间分布与全清局均值 | `practice-results.json` | 图 9 |
| `formal-time-bars.png` | 六次正式测试的累计虚拟耗时分解 | `formal-results.csv` | 图 10 |
论文主局案例编码不写死在脚本里:`plot_paper_figures.py` 读取
`docs/paper/data/practice-macros.tex` 中的 `PractQThreeMainCase` /
`PractQFourMainCase`,与正文口径同源。
## 归档与回放
`examples/replay/` 归档了论文主局的行为日志副本,便于在没有 `referee-data/` 时仍能绘图;
`scripts/archive_replay_logs.py` 用于把新的演练局追加归档:
```bash
uv run python scripts/archive_replay_logs.py --list # 本机有哪些局
uv run python scripts/archive_replay_logs.py <案例编码> # 追加归档
```
Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 277 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 212 KiB

+120
View File
@@ -0,0 +1,120 @@
{
"generator": "scripts/plot_paper_figures.py (matplotlib)",
"command": "python scripts/plot_paper_figures.py",
"manual": "Matplotlib PNGs are generated directly; the legacy MATLAB scripts are no longer used by the paper.",
"figures": [
{
"stem": "steps-state-machine",
"png": "docs/figures/steps-state-machine.png",
"matlab": "scripts/matlab/fig_steps_state_machine.m",
"sources": [
{
"path": "论文“计时模型与会话状态机”一节",
"sha256_12": "27c8f7051b26",
"lines": 215
},
{
"path": "src/mcm26b/protocol/client.py",
"sha256_12": "0e9797a85cd7",
"lines": 333
}
]
},
{
"stem": "timing-attachment-example-105-111-194-199",
"png": "docs/figures/timing-attachment-example-105-111-194-199.png",
"matlab": "scripts/matlab/fig_timing_attachment.m",
"sources": [
{
"path": "论文“计时模型与会话状态机”一节",
"sha256_12": "27c8f7051b26",
"lines": 215
}
]
},
{
"stem": "geo-q2-guaranteed-reception-disk",
"png": "docs/figures/geo-q2-guaranteed-reception-disk.png",
"matlab": "scripts/matlab/fig_geo_q2_safe_disk.m",
"sources": [
{
"path": "src/mcm26b/config.py",
"sha256_12": "c513450dc892",
"lines": 213
},
{
"path": "论文“问题二”一节",
"sha256_12": "24f3e844deb9",
"lines": 312
}
]
},
{
"stem": "geo-q4-minimum-cover-31-points",
"png": "docs/figures/geo-q4-minimum-cover-31-points.png",
"matlab": "scripts/matlab/fig_geo_q4_mincover.m",
"sources": [
{
"path": "src/mcm26b/guarantee/plans/q4_mincover_v2.json",
"sha256_12": "71e54616ae21",
"lines": 162
},
{
"path": "论文“问题四”一节",
"sha256_12": "1774f8bf85db",
"lines": 485
}
]
},
{
"stem": "practice-virtual-time",
"png": "docs/figures/practice-virtual-time.png",
"sources": [
{
"path": "docs/paper/data/practice-results.json",
"note": "自建模拟器 25 局演练复算结果"
}
]
},
{
"stem": "selfbuilt-q3-search-clear-path",
"png": "docs/figures/selfbuilt-q3-search-clear-path.png",
"sources": [
{
"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.

After

Width:  |  Height:  |  Size: 439 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 592 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

+92 -43
View File
@@ -1,58 +1,107 @@
# 论文(docs/paper) # 论文与支撑材料
2026 年高教社杯全国大学生数学建模竞赛 B 题论文 LaTeX 工程,格式依据 论文依据赛题、2026 年格式规范及所给往届参考 PDF 编写,四问的模型、推导与结果分析
`issue/论文格式/附件3. 全国大学生数学建模竞赛论文格式规范.pdf`(2026 年修订稿)。 均以论文正文与附录为准;本文件只说明论文工程如何重算与编译。
版式采用项目原始 `mcm26b-paper.cls`。
## 编译 ## 数据分工(本轮调整的核心约定)
需要 TeX Live(含 XeLaTeX 与 ctex)。在本目录执行: | 用途 | 数据来源 | 在论文中的位置 |
| --- | --- | --- |
| 机制论证与定量结论 | **自建模拟器**(`referee/`)演练局,本次采集 44 局 | 正文全部表格与插图 |
| 最优实现与朴素基线的配对对比 | `project/`(内存回环,四问同口径) | 正文“实验结果与分析” |
| 最终效果验证 | **官方模拟器**六份正式导出包,无可读真值 | 附录 A 及附录 C 数据清单 |
```bash 正文数字与插图全部由脚本从日志复算生成,不手抄:`scripts/build_practice_data.py` 复算演练局,
latexmk -xelatex -outdir=build main.tex `scripts/plot_paper_figures.py` 据同一份数据绘图;复算累计虚拟时间与评测机日志记录的最大偏差为 0.000000 s。
# 或
xelatex main.tex && xelatex main.tex
```
输出 PDF:`build/main.pdf`(用第二种方式则为 `main.pdf`)。 演练局可重新采集(固定种子、可重放;队号运行期传入):
## 目录结构 uv run python scripts/run_practice_episodes.py --problem 3 --robot-id <队号> \
--counts 10,13,16 --seeds 300-314
uv run python scripts/run_practice_episodes.py --problem 4 --robot-id <队号> \
--counts 10,13,16 --directional-cycle 3,6,8 --seeds 400-439
| 路径 | 内容 | 采集脚本启动评测机并调用生产策略对接接口,真值与行为日志由评测机写入
| --- | --- | `referee-data/sessions/<案例编码>/`。判定标准为
| `main.tex` | 论文主文件(全部内容在一个文件中,便于协作合并) | `清完全部源 ∧ 无缺席误判 ∧ 主动退出 ∧ 零异常 ∧ 零失败清除`:
| `fonts/` | 从本机提取的中文字体(宋体 SC 常规/加粗、黑体 SC Light/Medium)与 Times New Roman 四体,约 150 MB,编译自包含 | 只看“是否清完”会放过“清完了但中途大量 /clear 打空”的无效局,
| `figures/` | 插图目录 | 这类局的总虚拟时间被无效试探撑大,故不纳入统计。
| `build/` | 编译产物(已 gitignore) | 被排除的局保留在 `referee-data/rejected-sessions/`;
`build_practice_data.py` 按案例编码白名单只统计论文声明的批次。
## 规范要点与工程实现 ## 交付文件
- A4、四边距 2.5cm:`geometry` 宏包。 - main.pdf:论文、演练局数据清单、正式数据清单与四问核心函数代码附录。
- 页码从摘要专用页起、页脚中部、从 1 连续编号:摘要页 `\setcounter{page}{1}`。 - main.tex、sections/:可编辑 LaTeX 源文件。
- 正文不要目录、不超过 30 页:未生成目录,正文当前远少于 30 页。 - data/practice-results.json、practice-results.csv:44 局演练局的结构化复算结果。
- **电子版第一页必须是摘要专用页**(不含承诺书与编号专用页):默认 - data/formal-results.json、formal-results.csv、audit.md:六份正式测试数据、复算结果与校验说明。
`\paperfalse`。打印纸质版时改为 `\papertrue`,自动加入承诺书与编号专用页 - support-materials.zip:源码、自建模拟器、演练局与正式日志、统计快照、论文工程及逐文件哈希清单。
(占位文字,须替换为组委会当年发布的专用页原文)。 - REWRITE_NOTES.md:本次修订及验证说明。
- 摘要页含标题与关键词,不超过一页,无需英文。
- 摘要页、正文、附录中不得出现姓名、学校、赛区等信息。
- 附录含支撑材料文件列表与完整源码:源码以 `\lstinputlisting` 引用仓库内
`geometry/` 等模块(相对路径 `../../../`),提交前须确认与支撑材料压缩包一致。
## 待办(正文中红色【待填/待补】标记) ## 正文数据
- 问题 3、4 演练统计值与正式测试结果(表 1 两张表)。 演练局问题三 15 局、问题四 29 局,源数覆盖 10 至 16,问题四定向源覆盖 3/6/8 个;
- 问题 1 定位区域图、问题 2 候选区域示意图与选点对比实验。 **44 局全部清完全部源且失败清除为零**,累计清除 557 个源。
- 支撑材料文件列表更新;定稿前删除全部红色批注(`\todonote`)。 问题三平均总虚拟时间 3261.579 s,问题四 8401.445 s,移动时间占比 78.1% 与 75.8%。
## 字体说明 正式测试六次累计清除 75 个源,清除失败为零;仅用于附录中的效率与结论验证。
`fonts/` 下中文 字体自 macOS 系统字体(Songti.ttc、STHeiti)提取简体字面而来, ## 重算与编译
授权仅限本队参赛使用。若在 Windows/Overleaf 编译,可改用系统自带中易宋体/黑体,
将导言区字体设置替换为:
```latex 在项目根目录执行:
\setCJKmainfont{SimSun}
\setCJKsansfont{SimHei}
\setmainfont{Times New Roman}
```
若仓库体积敏感,可将 `fonts/` 加入 `.gitignore`(此时每位队员需自备字体)。 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 # 产物 main.pdf
latexmk -xelatex -interaction=nonstopmode -halt-on-error -outdir=build main.tex # 产物 build/main.pdf
两条口令都完成交叉引用所需的多遍编译,输出均为 57 页。
需要 TeX Live 的 XeLaTeX、ctex、TikZ。
字体放在 `docs/paper/fonts/`(HeitiSC / SongtiSC / Times New Roman,约 150 MB),
该目录**已在 `.gitignore` 中排除、不入库**,`mcm26b-paper.cls` 通过 `Path = fonts/` 引用。
若克隆后缺少该目录,按 `mcm26b-paper.cls` 中的「若未携带 fonts/ 目录」注释把那几行
`\setCJKmainfont` / `\setmainfont` 换成系统字体即可照常编译。
### 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
在项目根目录生成支撑包(需要原电脑的 Jammers-simulator-full 正式包):
python scripts/build_paper_support.py --package
## 排版与复算
正文采用原模板的字体、标题、页边距及页码设置,图解与表题统一使用中文。
附录代码直接取自单文件核心代码 ipynb,数学符号由导言区的 lstlisting 样式 corecode 映射。
正文使用集合估计、凸外包、清除充分条件、网格幸存集滤波、信息增益、前向半盘最小命中集、
位置与朝向联合信念和最近邻路径排序等概念描述模型。
附录只收录四问主线的核心函数(32 个,约 1300 行),评测机、命令行外壳、采集与绘图脚本、
测试以及未被采用的方案不进入论文;完整可执行程序见支撑包的 mcm26b-核心代码.ipynb。
+254
View File
@@ -0,0 +1,254 @@
# 本次修订与验证
## 目录清理、去敏与文档合并(本轮)
### 身份信息去敏(队号改为运行期参数)
队号属身份信息,不再出现在代码、测试、示例与文档中:
- `src/mcm26b/cli.py`:`sim-check` 的 `--robot-id` 默认值由真实队号改为与赛事无关的
`SIMCHECK`;`run` 子命令本就 `required=True`。**对接官方模拟器的队号一律由命令行传入**。
- `src/mcm26b/harness/simulator.py`、`referee/src/referee/simulator.py`:
`robot_id` 由带默认值改为**必填**,杜绝把队号固化进可提交代码。
- `scripts/run_practice_episodes.py`:`--robot-id` 改为必填。
- `scripts/build_core_notebook.py` 及重新生成的 `mcm26b-核心代码.ipynb`:
离线自检单元用中性标识 `OFFLINE`;命令示例同步为 `python -m mcm26b.cli run`。
- 测试、`README.md`、`referee/README.md`、referee WebUI 提示文本:
真实队号统一替换为中性占位符 `TEAM-0001`。
- `referee-data/` 与 `examples/replay/` 下的演练/正式日志(共 110 个文件):
`robot_id` 字段统一为中性占位符,**位置、示向度、时间等证据字段原样未动**;
改后复算结果完全一致(44 局全清、计时偏差仍为 0.000000 s)。
### 清理无用文件
- 删除本机工作区 `tmp/`(43 MB,含历史留档、截图与中间草稿)、`.zcode/`;
- 删除论文不再使用的 MATLAB 出图链路:`scripts/matlab/`(17 个文件)、
`scripts/build_figure_data.py`、`scripts/render_q1_figures.py`;
论文插图现全部由 `scripts/plot_paper_figures.py` 生成;
- 删除 LaTeX 陈旧产物(`main-updated.pdf`、`main-check.*`、`main copy.*`)与
未被引用的 `docs/paper/sections/comparison.tex`;
- 删除 `docs/figures/flow-overall-architecture.png` 及其生成函数:
对应的四层主线图已从论文中移除,不再有插图引用它。
### 优化 .gitignore
按"只跟踪可复现结果所需的最小集合"重写,补齐 Python/构建/编辑器/操作系统条目,
新增忽略 `docs/paper/support-materials.zip`(脚本产物)、`.piptmp/`、`uv-temp/`、`pip-temp/`、
`.idea/`、`.zcode/`;保留 `referee-data/` 的版本控制并注明其身份信息已去敏。
### 文档合并到 README
论文已完整给出四问的模型、推导与结果分析,故删除 13 份算法与设计说明文档
(`docs/algo-*.md`、两份优化方案、示意图册、总体思路、执行时间、协议规则表、
最优与基线对比、论文列表),只保留复现所必需的说明:
- 根 `README.md` 重写为单一操作手册:环境 → 运行程序 → 自建模拟器 →
复现论文数据 → 复现插图 → 编译论文 → 单文件核心代码与测试 → 目录结构;
- `docs/README.md` 改为最小索引;
- `docs/paper/README.md` 与 `docs/figures/README.md` 同步更新(数据分工、重算与编译步骤、
插图清单与来源)。
- 源码/测试/脚本中原先指向被删文档的注释,统一改为指向论文对应章节,不留悬空引用。
### 验证
- `uv run pytest tests referee/tests`:**263 passed, 5 skipped**
(5 项为需要 `output/q1/practice` 官方演练采集的可选夹具,缺失时按 skip 处理);
- `python scripts/build_practice_data.py`:44 局复算,计时偏差 0.000000 s;
- `scripts/build_paper_support.py --package`:278 个文件、3.6 MB,未超 20 MB;
- `latexmk -xelatex -outdir=build`:56 页,无未解析引用、无超宽表格;
- 绘图脚本无告警,`docs/figures/` 只保留论文实际引用的 10 张 PNG。
## VS Code 配方与图 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。
两份文件均通过原始导出、结果侧文件和官方统计记录的对应校验。
| 案例 | 清除数 | 平均定位清除时间(s/个) | 程序运行时间(s) |
| --- | ---: | ---: | ---: |
| Q3-3 | 10 | 290.686 | 2.680 |
| Q4-3 | 14 | 614.884 | 6.051 |
六次累计清除 75 个源。问题三合计 38 个,问题四合计 37 个。
正式结果表、汇总公式、动作耗时图、数据清单与支撑包统一使用六份记录。
## 数学表述(前轮)
用“清除充分条件”“半径判据”替换“证书”;
用“检测状态矩阵”替换“账本”;
用“最近邻任务排序”替换“调度骨架”;
采用集合估计、关联矩阵、离散集合覆盖、网格候选集等已有概念。
实现扩展及评价限制集中于未来工作。数学证明中的必要条件、反例与适用假设保持明确。
## 模板与验证
mcm26b-paper.cls 保持与原仓库模板逐字节一致,文档沿用原模板的黑体标题及版式。
使用 latexmk 自动多遍编译并检查文献、公式、图表引用。
正式统计按官方整数微秒和毫秒计算,支撑包提供 SHA-256 清单供复核。
## 清理论文与源码附录
- 清除 7 个文件中已提交的 git 冲突标记,冲突块统一取 PNG 图版一侧。
- 附录不再逐字排版全部源码,改为“核心程序代码”:只列四问主线核心函数 32 个、约 1300 行,
每个附一句中文说明;数学符号在 main.tex 的 corecode 样式里统一映射。
+19
View File
@@ -0,0 +1,19 @@
# 正式测试数据核对
本次汇总 `Jammers-simulator-full/test` 中的 6 份正式导出包。
利用公开头部的案例信息、包哈希及票据哈希,与原始导出、结果侧文件和官方正式统计数据库建立对应关系。
| 案例 | 正式序号 | 原件一致 | 包 SHA-256 |
| --- | --- | --- | --- |
| 9HU7-UWJR-BPTR-VYAT | Q3-1 | 是 | `fbd7ab92f78a019887f603172ab6a39e274adb1f917fc2681f1e8073ff47d911` |
| 7TCG-C9EC-53VF-HZ5H | Q3-2 | 是 | `5d83ce87455ce22fadbcbddb60814d9b1f0be54de7bc9d0463777ba47b3922ef` |
| UVUZ-B4MQ-XSUV-HQFP | Q3-3 | 是 | `eeffe419c3df005d0ea78c7ec2c10afed29c4bec782327538537dd7ba7914424` |
| VQUM-ETQ5-74PP-ZQ3J | Q4-1 | 是 | `9a102295d324b5fb5aeed1c6036d13ae7e08a7d7fddb60ceb8dead24e62b15d3` |
| 5K5T-TRWZ-BPR2-ECAV | Q4-2 | 是 | `370aac9c2c5d324dd382e57e541ef0da7c5dd4759660d9ea0cba8373ce0ea9a1` |
| K58B-V5VC-E4EF-CRTW | Q4-3 | 是 | `1c7f1d111f8fd1a1d0f608d9847c0946b1b0a45bdb7b3f487e0c6d4f4586885f` |
虚拟时间保留官方整数微秒,程序运行时间采用官方毫秒。平均定位清除时间 = 总虚拟秒数 / 清除数。
移动时间由总时长减去检测、换频、成功及失败清除耗时计算。
`confirmed` 表示统计提交确认,`user_exit` 表示主动退出。
实验评价采用清除数量、逐案例平均定位清除时间、程序运行时间和动作耗时分解。
扩展评价所需的源总数与配对场景设计见论文未来工作。
+6
View File
@@ -0,0 +1,6 @@
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\% \\
+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}
+17
View File
@@ -0,0 +1,17 @@
\begin{longtable}{p{1.15cm}p{13.3cm}}
\caption{所选正式导出文件与完整包哈希}\label{tab:packages}\\
\toprule 案例 & 原始文件名及 SHA-256\\\midrule\endfirsthead
\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}\\
& {\scriptsize\texttt{5d83ce87455ce22fadbcbddb60814d9b}\allowbreak\texttt{1f0be54de7bc9d0463777ba47b3922ef}}\\[4pt]
Q3-3 & \pathtext{formal-p3-3-UVUZ-B4MQ-XSUV-HQFP.jlog}\\
& {\scriptsize\texttt{eeffe419c3df005d0ea78c7ec2c10afe}\allowbreak\texttt{d29c4bec782327538537dd7ba7914424}}\\[4pt]
Q4-1 & \pathtext{formal-p4-1-VQUM-ETQ5-74PP-ZQ3J.jlog}\\
& {\scriptsize\texttt{9a102295d324b5fb5aeed1c6036d13ae}\allowbreak\texttt{7e08a7d7fddb60ceb8dead24e62b15d3}}\\[4pt]
Q4-2 & \pathtext{formal-p4-2-5K5T-TRWZ-BPR2-ECAV.jlog}\\
& {\scriptsize\texttt{370aac9c2c5d324dd382e57e541ef0da}\allowbreak\texttt{7c5dd4759660d9ea0cba8373ce0ea9a1}}\\[4pt]
Q4-3 & \pathtext{formal-p4-3-K58B-V5VC-E4EF-CRTW.jlog}\\
& {\scriptsize\texttt{1c7f1d111f8fd1a1d0f608d9847c0946}\allowbreak\texttt{b1b0a45bdb7b3f487e0c6d4f4586885f}}\\[4pt]
\bottomrule\end{longtable}
+16
View File
@@ -0,0 +1,16 @@
\newcommand{\QThreeCount}{38}
\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}
+4
View File
@@ -0,0 +1,4 @@
% 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
View File
@@ -0,0 +1,4 @@
% 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}
+7
View File
@@ -0,0 +1,7 @@
problem_no,formal_index,case_code,entered,end_reason,cleared_jammer_count,measure_accepted_count,virtual_time_us,program_run_duration_ms,channel_switch_count,clear_failure_count,state,package_sha256,virtual_time_s,average_clear_time_s,program_run_duration_s,inferred_movement_time_s,inferred_distance_m,movement_share_percent,source_total,clear_fraction
3,1,9HU7-UWJR-BPTR-VYAT,1,user_exit,13,105,3094978068,5596,96,0,confirmed,fbd7ab92f78a019887f603172ab6a39e274adb1f917fc2681f1e8073ff47d911,3094.978068,238.075236,5.596,2408.978068,12044.890340,77.835061,,
3,2,7TCG-C9EC-53VF-HZ5H,1,user_exit,15,117,3493335140,3024,108,0,confirmed,5d83ce87455ce22fadbcbddb60814d9b1f0be54de7bc9d0463777ba47b3922ef,3493.33514,232.889009,3.024,2725.33514,13626.67570,78.015279,,
3,3,UVUZ-B4MQ-XSUV-HQFP,1,user_exit,10,117,2906862876,2680,107,0,confirmed,eeffe419c3df005d0ea78c7ec2c10afed29c4bec782327538537dd7ba7914424,2906.862876,290.686288,2.680,2164.862876,10824.314380,74.474200,,
4,1,VQUM-ETQ5-74PP-ZQ3J,1,user_exit,13,349,9362225736,7668,275,0,confirmed,9a102295d324b5fb5aeed1c6036d13ae7e08a7d7fddb60ceb8dead24e62b15d3,9362.225736,720.171210,7.668,7277.225736,36386.128680,77.729655,,
4,2,5K5T-TRWZ-BPR2-ECAV,1,user_exit,10,361,9271302080,5724,315,0,confirmed,370aac9c2c5d324dd382e57e541ef0da7c5dd4759660d9ea0cba8373ce0ea9a1,9271.30208,927.130208,5.724,7101.30208,35506.51040,76.594442,,
4,3,K58B-V5VC-E4EF-CRTW,1,user_exit,14,264,8608382102,6051,213,0,confirmed,1c7f1d111f8fd1a1d0f608d9847c0946b1b0a45bdb7b3f487e0c6d4f4586885f,8608.382102,614.884436,6.051,7005.382102,35026.910510,81.378615,,
1 problem_no formal_index case_code entered end_reason cleared_jammer_count measure_accepted_count virtual_time_us program_run_duration_ms channel_switch_count clear_failure_count state package_sha256 virtual_time_s average_clear_time_s program_run_duration_s inferred_movement_time_s inferred_distance_m movement_share_percent source_total clear_fraction
2 3 1 9HU7-UWJR-BPTR-VYAT 1 user_exit 13 105 3094978068 5596 96 0 confirmed fbd7ab92f78a019887f603172ab6a39e274adb1f917fc2681f1e8073ff47d911 3094.978068 238.075236 5.596 2408.978068 12044.890340 77.835061
3 3 2 7TCG-C9EC-53VF-HZ5H 1 user_exit 15 117 3493335140 3024 108 0 confirmed 5d83ce87455ce22fadbcbddb60814d9b1f0be54de7bc9d0463777ba47b3922ef 3493.33514 232.889009 3.024 2725.33514 13626.67570 78.015279
4 3 3 UVUZ-B4MQ-XSUV-HQFP 1 user_exit 10 117 2906862876 2680 107 0 confirmed eeffe419c3df005d0ea78c7ec2c10afed29c4bec782327538537dd7ba7914424 2906.862876 290.686288 2.680 2164.862876 10824.314380 74.474200
5 4 1 VQUM-ETQ5-74PP-ZQ3J 1 user_exit 13 349 9362225736 7668 275 0 confirmed 9a102295d324b5fb5aeed1c6036d13ae7e08a7d7fddb60ceb8dead24e62b15d3 9362.225736 720.171210 7.668 7277.225736 36386.128680 77.729655
6 4 2 5K5T-TRWZ-BPR2-ECAV 1 user_exit 10 361 9271302080 5724 315 0 confirmed 370aac9c2c5d324dd382e57e541ef0da7c5dd4759660d9ea0cba8373ce0ea9a1 9271.30208 927.130208 5.724 7101.30208 35506.51040 76.594442
7 4 3 K58B-V5VC-E4EF-CRTW 1 user_exit 14 264 8608382102 6051 213 0 confirmed 1c7f1d111f8fd1a1d0f608d9847c0946b1b0a45bdb7b3f487e0c6d4f4586885f 8608.382102 614.884436 6.051 7005.382102 35026.910510 81.378615
+228
View File
@@ -0,0 +1,228 @@
{
"schema": "paper-formal-audit-v1",
"selection": "Only Jammers-simulator-full/test/**/*.jlog",
"statistics_source": "Official formal-statistics-queue.sqlite3; matched by SHA-256 of the public activation ticket",
"coverage": {
"3": [
1,
2,
3
],
"4": [
1,
2,
3
]
},
"measurement_scope": "Per-case official action counts, virtual duration and program duration",
"limitations": [
"Source totals, source types, solver commit and trajectories require additional evidence.",
"Queue state confirmed records a statistics submission acknowledgement."
],
"records": [
{
"problem_no": 3,
"formal_index": 1,
"case_code": "9HU7-UWJR-BPTR-VYAT",
"client_version": "1.1.0",
"entered": 1,
"end_reason": "user_exit",
"cleared_jammer_count": 13,
"measure_accepted_count": 105,
"virtual_time_us": 3094978068,
"program_run_duration_ms": 5596,
"channel_switch_count": 96,
"clear_failure_count": 0,
"state": "confirmed",
"file": "test/q3/formal-p3-1-9HU7-UWJR-BPTR-VYAT.jlog",
"size_bytes": 106656,
"package_sha256": "fbd7ab92f78a019887f603172ab6a39e274adb1f917fc2681f1e8073ff47d911",
"activation_ticket_sha256": "41563c714553abf202fc0012fcde2503c64c6cec27a84c7229c487602b957516",
"created_at_utc": "2026-09-12T07:16:06.377Z",
"ended_at_utc": "2026-09-12T07:16:06.373Z",
"content_encryption": "aes-256-gcm-chunked",
"identity_and_ticket_content_omitted": true,
"same_as_official_original": true,
"derived": {
"virtual_time_s": "3094.978068",
"average_clear_time_s": "238.075236",
"program_run_duration_s": "5.596",
"inferred_movement_time_s": "2408.978068",
"inferred_distance_m": "12044.890340",
"movement_share_percent": "77.835061",
"source_total": null,
"clear_fraction": null
}
},
{
"problem_no": 3,
"formal_index": 2,
"case_code": "7TCG-C9EC-53VF-HZ5H",
"client_version": "1.1.0",
"entered": 1,
"end_reason": "user_exit",
"cleared_jammer_count": 15,
"measure_accepted_count": 117,
"virtual_time_us": 3493335140,
"program_run_duration_ms": 3024,
"channel_switch_count": 108,
"clear_failure_count": 0,
"state": "confirmed",
"file": "test/q3/formal-p3-2-7TCG-C9EC-53VF-HZ5H.jlog",
"size_bytes": 106326,
"package_sha256": "5d83ce87455ce22fadbcbddb60814d9b1f0be54de7bc9d0463777ba47b3922ef",
"activation_ticket_sha256": "5f6d5ff4a369418f9f683ef0384398190bfb0b81bc71ce1c1bd6f728ff1fdf41",
"created_at_utc": "2026-09-12T07:47:20.065Z",
"ended_at_utc": "2026-09-12T07:47:20.061Z",
"content_encryption": "aes-256-gcm-chunked",
"identity_and_ticket_content_omitted": true,
"same_as_official_original": true,
"derived": {
"virtual_time_s": "3493.33514",
"average_clear_time_s": "232.889009",
"program_run_duration_s": "3.024",
"inferred_movement_time_s": "2725.33514",
"inferred_distance_m": "13626.67570",
"movement_share_percent": "78.015279",
"source_total": null,
"clear_fraction": null
}
},
{
"problem_no": 3,
"formal_index": 3,
"case_code": "UVUZ-B4MQ-XSUV-HQFP",
"client_version": "1.1.0",
"entered": 1,
"end_reason": "user_exit",
"cleared_jammer_count": 10,
"measure_accepted_count": 117,
"virtual_time_us": 2906862876,
"program_run_duration_ms": 2680,
"channel_switch_count": 107,
"clear_failure_count": 0,
"state": "confirmed",
"file": "test/q3/formal-p3-3-UVUZ-B4MQ-XSUV-HQFP.jlog",
"size_bytes": 107396,
"package_sha256": "eeffe419c3df005d0ea78c7ec2c10afed29c4bec782327538537dd7ba7914424",
"activation_ticket_sha256": "0134f356b107b6706dfaba48fd00b86c5e3a4fa7ef295d17bbd4080111d112b3",
"created_at_utc": "2026-09-13T02:32:31.689Z",
"ended_at_utc": "2026-09-13T02:32:31.686Z",
"content_encryption": "aes-256-gcm-chunked",
"identity_and_ticket_content_omitted": true,
"same_as_official_original": true,
"derived": {
"virtual_time_s": "2906.862876",
"average_clear_time_s": "290.686288",
"program_run_duration_s": "2.680",
"inferred_movement_time_s": "2164.862876",
"inferred_distance_m": "10824.314380",
"movement_share_percent": "74.474200",
"source_total": null,
"clear_fraction": null
}
},
{
"problem_no": 4,
"formal_index": 1,
"case_code": "VQUM-ETQ5-74PP-ZQ3J",
"client_version": "1.1.0",
"entered": 1,
"end_reason": "user_exit",
"cleared_jammer_count": 13,
"measure_accepted_count": 349,
"virtual_time_us": 9362225736,
"program_run_duration_ms": 7668,
"channel_switch_count": 275,
"clear_failure_count": 0,
"state": "confirmed",
"file": "test/q4/formal-p4-1-VQUM-ETQ5-74PP-ZQ3J.jlog",
"size_bytes": 150315,
"package_sha256": "9a102295d324b5fb5aeed1c6036d13ae7e08a7d7fddb60ceb8dead24e62b15d3",
"activation_ticket_sha256": "d02cfdf2eed65dbe3bb4c7768a263f8bf57b56bc323b6453c1dfa2aec6e24810",
"created_at_utc": "2026-09-12T07:38:51.368Z",
"ended_at_utc": "2026-09-12T07:38:51.365Z",
"content_encryption": "aes-256-gcm-chunked",
"identity_and_ticket_content_omitted": true,
"same_as_official_original": true,
"derived": {
"virtual_time_s": "9362.225736",
"average_clear_time_s": "720.171210",
"program_run_duration_s": "7.668",
"inferred_movement_time_s": "7277.225736",
"inferred_distance_m": "36386.128680",
"movement_share_percent": "77.729655",
"source_total": null,
"clear_fraction": null
}
},
{
"problem_no": 4,
"formal_index": 2,
"case_code": "5K5T-TRWZ-BPR2-ECAV",
"client_version": "1.1.0",
"entered": 1,
"end_reason": "user_exit",
"cleared_jammer_count": 10,
"measure_accepted_count": 361,
"virtual_time_us": 9271302080,
"program_run_duration_ms": 5724,
"channel_switch_count": 315,
"clear_failure_count": 0,
"state": "confirmed",
"file": "test/q4/formal-p4-2-5K5T-TRWZ-BPR2-ECAV.jlog",
"size_bytes": 151668,
"package_sha256": "370aac9c2c5d324dd382e57e541ef0da7c5dd4759660d9ea0cba8373ce0ea9a1",
"activation_ticket_sha256": "4918e4ca6a77367dd06cd40afb28d4415246ef0437c68c052bddf613f4f914b0",
"created_at_utc": "2026-09-12T07:42:29.854Z",
"ended_at_utc": "2026-09-12T07:42:29.851Z",
"content_encryption": "aes-256-gcm-chunked",
"identity_and_ticket_content_omitted": true,
"same_as_official_original": true,
"derived": {
"virtual_time_s": "9271.30208",
"average_clear_time_s": "927.130208",
"program_run_duration_s": "5.724",
"inferred_movement_time_s": "7101.30208",
"inferred_distance_m": "35506.51040",
"movement_share_percent": "76.594442",
"source_total": null,
"clear_fraction": null
}
},
{
"problem_no": 4,
"formal_index": 3,
"case_code": "K58B-V5VC-E4EF-CRTW",
"client_version": "1.1.0",
"entered": 1,
"end_reason": "user_exit",
"cleared_jammer_count": 14,
"measure_accepted_count": 264,
"virtual_time_us": 8608382102,
"program_run_duration_ms": 6051,
"channel_switch_count": 213,
"clear_failure_count": 0,
"state": "confirmed",
"file": "test/q4/formal-p4-3-K58B-V5VC-E4EF-CRTW.jlog",
"size_bytes": 140251,
"package_sha256": "1c7f1d111f8fd1a1d0f608d9847c0946b1b0a45bdb7b3f487e0c6d4f4586885f",
"activation_ticket_sha256": "9cdd910c14e58fca08e3769f880a6b543de2bbdd21479094dc9cd2df725f0036",
"created_at_utc": "2026-09-13T02:34:32.695Z",
"ended_at_utc": "2026-09-13T02:34:32.692Z",
"content_encryption": "aes-256-gcm-chunked",
"identity_and_ticket_content_omitted": true,
"same_as_official_original": true,
"derived": {
"virtual_time_s": "8608.382102",
"average_clear_time_s": "614.884436",
"program_run_duration_s": "6.051",
"inferred_movement_time_s": "7005.382102",
"inferred_distance_m": "35026.910510",
"movement_share_percent": "81.378615",
"source_total": null,
"clear_fraction": null
}
}
]
}
+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}
+55
View File
@@ -0,0 +1,55 @@
% Generated by scripts/build_paper_support.py from project/results/*.json.
\newcommand{\ProjQOneExampleCases}{5}
\newcommand{\ProjQOneRandomCases}{40}
\newcommand{\ProjQOneFixedStatusBase}{80.0\%}
\newcommand{\ProjQOneFixedMaeBase}{7.886}
\newcommand{\ProjQOneFixedMaeMaxBase}{10.000}
\newcommand{\ProjQOneFixedCoverBase}{33.3\%}
\newcommand{\ProjQOneFixedMsOpt}{0.064}
\newcommand{\ProjQOneFixedMsBase}{14.202}
\newcommand{\ProjQOneRandStatusBase}{100.0\%}
\newcommand{\ProjQOneRandMaeBase}{4.583}
\newcommand{\ProjQOneRandMaeMaxBase}{14.599}
\newcommand{\ProjQOneRandCoverBase}{52.5\%}
\newcommand{\ProjQOneRandMsOpt}{0.086}
\newcommand{\ProjQOneRandMsBase}{15.933}
\newcommand{\ProjQTwoCases}{30}
\newcommand{\ProjQTwoInitialRadius}{681.467}
\newcommand{\ProjQTwoGuaranteeOpt}{100.0\%}
\newcommand{\ProjQTwoGuaranteeMec}{100.0\%}
\newcommand{\ProjQTwoGuaranteePerp}{0.0\%}
\newcommand{\ProjQTwoWorstOpt}{73.890}
\newcommand{\ProjQTwoWorstRef}{75.627}
\newcommand{\ProjQTwoRatioOpt}{0.104}
\newcommand{\ProjQTwoRatioMec}{0.500}
\newcommand{\ProjQTwoWorstPerp}{80.111}
\newcommand{\ProjQTwoWorstMec}{340.747}
\newcommand{\ProjQThreeScenes}{18}
\newcommand{\ProjQThreeMeanOpt}{3188.734}
\newcommand{\ProjQThreeMeanSeven}{5361.707}
\newcommand{\ProjQThreeMeanBase}{14935.659}
\newcommand{\ProjQThreeDropOpt}{78.4\%}
\newcommand{\ProjQThreeDropMedianOpt}{80.0\%}
\newcommand{\ProjQThreeDropSeven}{63.7\%}
\newcommand{\ProjQThreeFasterOpt}{18/18}
\newcommand{\ProjQThreeMeasuresOpt}{111.111}
\newcommand{\ProjQThreeMeasuresBase}{430.556}
\newcommand{\ProjQThreeMoveOpt}{12.338}
\newcommand{\ProjQThreeMoveBase}{61.550}
\newcommand{\ProjQThreeWallOpt}{0.767}
\newcommand{\ProjQFourScenes}{11}
\newcommand{\ProjQFourMeanOpt}{9069.871}
\newcommand{\ProjQFourMeanGrid}{18179.173}
\newcommand{\ProjQFourMeanBase}{3890.801}
\newcommand{\ProjQFourClearOpt}{100.0\%}
\newcommand{\ProjQFourClearGrid}{66.6\%}
\newcommand{\ProjQFourClearBase}{77.0\%}
\newcommand{\ProjQFourAbsentBase}{24}
\newcommand{\ProjQFourMeasuresOpt}{355.636}
\newcommand{\ProjQFourMeasuresBase}{132.000}
\newcommand{\ProjQFourFallbackOpt}{24.818}
\newcommand{\ProjQFourValidOpt}{11/11}
\newcommand{\ProjQFourValidGrid}{0/11}
\newcommand{\ProjQFourRiseOpt}{142.9\%}
\newcommand{\ProjQFourMoveOpt}{34.268}
\newcommand{\ProjQFourMoveBase}{15.319}
@@ -0,0 +1,5 @@
% Generated by scripts/build_paper_support.py from project/results/*.json.
最优(固定 5 例) & 100.0\% & 0.000 & 0.000 & 100.0\% & 0.064 \\
最优(随机 40 例) & 100.0\% & 0.000 & 0.000 & 100.0\% & 0.086 \\
基线(固定 5 例) & 80.0\% & 7.886 & 10.000 & 33.3\% & 14.202 \\
基线(随机 40 例) & 100.0\% & 4.583 & 14.599 & 52.5\% & 15.933 \\
+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}
+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}
File diff suppressed because it is too large Load Diff
+57
View File
@@ -0,0 +1,57 @@
\begin{figure}[htbp]\centering
\begin{tikzpicture}[x=0.00108cm,y=0.85cm,font=\small]
\node[anchor=east] at (-100,5.3) {Q3-1};
\fill[inkblue] (0,5) rectangle (2408.978068,5.6);
\fill[inkblue!50] (2408.978068,5) rectangle (2933.978068,5.6);
\fill[warmgray!70] (2933.978068,5) rectangle (3029.978068,5.6);
\fill[black!18] (3029.978068,5) rectangle (3094.978068,5.6);
\node[anchor=west,font=\scriptsize] at (3174.978068,5.3) {3095.0};
\node[anchor=east] at (-100,4.3) {Q3-2};
\fill[inkblue] (0,4) rectangle (2725.33514,4.6);
\fill[inkblue!50] (2725.33514,4) rectangle (3310.33514,4.6);
\fill[warmgray!70] (3310.33514,4) rectangle (3418.33514,4.6);
\fill[black!18] (3418.33514,4) rectangle (3493.33514,4.6);
\node[anchor=west,font=\scriptsize] at (3573.33514,4.3) {3493.3};
\node[anchor=east] at (-100,3.3) {Q3-3};
\fill[inkblue] (0,3) rectangle (2164.862876,3.6);
\fill[inkblue!50] (2164.862876,3) rectangle (2749.862876,3.6);
\fill[warmgray!70] (2749.862876,3) rectangle (2856.862876,3.6);
\fill[black!18] (2856.862876,3) rectangle (2906.862876,3.6);
\node[anchor=west,font=\scriptsize] at (2986.862876,3.3) {2906.9};
\node[anchor=east] at (-100,2.3) {Q4-1};
\fill[inkblue] (0,2) rectangle (7277.225736,2.6);
\fill[inkblue!50] (7277.225736,2) rectangle (9022.225736,2.6);
\fill[warmgray!70] (9022.225736,2) rectangle (9297.225736,2.6);
\fill[black!18] (9297.225736,2) rectangle (9362.225736,2.6);
\node[anchor=west,font=\scriptsize] at (9442.225736,2.3) {9362.2};
\node[anchor=east] at (-100,1.3) {Q4-2};
\fill[inkblue] (0,1) rectangle (7101.30208,1.6);
\fill[inkblue!50] (7101.30208,1) rectangle (8906.30208,1.6);
\fill[warmgray!70] (8906.30208,1) rectangle (9221.30208,1.6);
\fill[black!18] (9221.30208,1) rectangle (9271.30208,1.6);
\node[anchor=west,font=\scriptsize] at (9351.30208,1.3) {9271.3};
\node[anchor=east] at (-100,0.3) {Q4-3};
\fill[inkblue] (0,0) rectangle (7005.382102,0.6);
\fill[inkblue!50] (7005.382102,0) rectangle (8325.382102,0.6);
\fill[warmgray!70] (8325.382102,0) rectangle (8538.382102,0.6);
\fill[black!18] (8538.382102,0) rectangle (8608.382102,0.6);
\node[anchor=west,font=\scriptsize] at (8688.382102,0.3) {8608.4};
\draw[->] (0,-0.25)--(10500,-0.25);
\draw (0,-0.25)--(0,-0.35) node[below,font=\scriptsize] {0};
\draw (2000,-0.25)--(2000,-0.35) node[below,font=\scriptsize] {2000};
\draw (4000,-0.25)--(4000,-0.35) node[below,font=\scriptsize] {4000};
\draw (6000,-0.25)--(6000,-0.35) node[below,font=\scriptsize] {6000};
\draw (8000,-0.25)--(8000,-0.35) node[below,font=\scriptsize] {8000};
\draw (10000,-0.25)--(10000,-0.35) node[below,font=\scriptsize] {10000};
\node[anchor=west,font=\scriptsize] at (10400,-0.65) {s};
\fill[inkblue] (0,-1.3) rectangle (350,-1.05);
\node[anchor=west] at (450,-1.175) {移动};
\fill[inkblue!50] (2600,-1.3) rectangle (2950,-1.05);
\node[anchor=west] at (3050,-1.175) {检测};
\fill[warmgray!70] (5200,-1.3) rectangle (5550,-1.05);
\node[anchor=west] at (5650,-1.175) {换频};
\fill[black!18] (7600,-1.3) rectangle (7950,-1.05);
\node[anchor=west] at (8050,-1.175) {清除};
\end{tikzpicture}
\caption{正式测试的累计虚拟耗时分解。移动时间由总耗时与各动作计数计算。}
\label{fig:costbars}\end{figure}
+50
View File
@@ -0,0 +1,50 @@
\begin{figure}[htbp]\centering
\begin{tikzpicture}[x=0.00145cm,y=0.00145cm,font=\small]
\fill[inkblue!5] (0,0) circle (1800);
\draw[thick] (0,0) circle (1800);
\draw[->,warmgray] (-2900,0)--(2950,0) node[right] {$x$/m};
\draw[->,warmgray] (0,-2800)--(0,2850) node[above] {$y$/m};
\draw (-2000,-35)--(-2000,35);
\node[below,font=\scriptsize] at (-2000,-50) {-2000};
\draw (-1000,-35)--(-1000,35);
\node[below,font=\scriptsize] at (-1000,-50) {-1000};
\draw (1000,-35)--(1000,35);
\node[below,font=\scriptsize] at (1000,-50) {1000};
\draw (2000,-35)--(2000,35);
\node[below,font=\scriptsize] at (2000,-50) {2000};
\fill[inkblue] (-800.0,-200.0) circle (33);
\fill[inkblue] (800.0,200.0) circle (33);
\fill[inkblue] (-200.0,900.0) circle (33);
\fill[inkblue] (200.0,-900.0) circle (33);
\fill[inkblue] (-1200.0,700.0) circle (33);
\fill[inkblue] (1200.0,-700.0) circle (33);
\fill[inkblue] (800.0,1200.0) circle (33);
\fill[inkblue] (-1800.0,-300.0) circle (33);
\fill[inkblue] (1800.0,300.0) circle (33);
\fill[inkblue] (-400.0,1800.0) circle (33);
\fill[inkblue] (0.0,0.0) circle (33);
\fill[inkblue] (1400.0,-1400.0) circle (33);
\fill[inkblue] (-1500.0,-1300.0) circle (33);
\fill[inkblue] (1500.0,1300.0) circle (33);
\fill[inkblue] (-400.0,-1800.0) circle (33);
\fill[inkblue] (400.0,1800.0) circle (33);
\fill[inkblue] (-1800.0,400.0) circle (33);
\fill[inkblue] (1800.0,-400.0) circle (33);
\fill[inkblue] (-500.0,700.0) circle (33);
\fill[inkblue] (-700.0,-700.0) circle (33);
\fill[inkblue] (700.0,700.0) circle (33);
\fill[inkblue] (1300.0,1100.0) circle (33);
\fill[inkblue] (-1300.0,1500.0) circle (33);
\fill[inkblue] (500.0,-1800.0) circle (33);
\fill[inkblue] (-900.0,-2100.0) circle (33);
\fill[inkblue] (600.0,1900.0) circle (33);
\fill[inkblue] (-2500.0,500.0) circle (33);
\fill[inkblue] (1900.0,-900.0) circle (33);
\fill[inkblue] (-1700.0,-500.0) circle (33);
\fill[inkblue] (-700.0,-1200.0) circle (33);
\fill[inkblue] (900.0,-700.0) circle (33);
\node[anchor=west,align=left] at (3250,900) {圆域:源位置先验\\蓝点:31个检测站};
\node[anchor=west,align=left] at (3250,-700) {部分站点在圆域外\\用于接收向外发射的源};
\end{tikzpicture}
\caption{第四问集合覆盖模型得到的31个检测站及源位置区域。}
\label{fig:q4plan}\end{figure}
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+251 -551
View File
@@ -1,596 +1,296 @@
% ============================================================ % XeLaTeX; run from docs/paper. Formal tables are generated, not hand copied.
% 2026 年高教社杯全国大学生数学建模竞赛论文(B 题) \documentclass[zihao=-4,a4paper]{mcm26b-paper}
% 编译:latexmk -xelatex -outdir=build main.tex \usepackage{amsthm,tabularx,float,tikz,xurl}
% (或 xelatex main.tex 连续编译两遍) \usepackage{algorithm}
% \usepackage{algpseudocode}
% 规范要点(附件3,2026 年修订稿): \usetikzlibrary{arrows.meta,positioning,calc,patterns}
% 1. A4 纸,上下左右页边距至少 2.5cm; % Raster figures are rendered by scripts/plot_paper_figures.py with matplotlib.
% 2. 纸质版第一页承诺书、第二页编号专用页; % into docs/figures; this file only includes them, it does not redraw them.
% 3. 摘要专用页含标题与关键词,不超过一页;页码从摘要页起, \graphicspath{{../figures/}}
% 页脚中部阿拉伯数字从 1 连续编号; % The paper carries several small tables and figures; let them share pages
% 4. 正文不要目录,不超过 30 页;之后为附录(页数不限); % instead of being pushed onto float-only pages.
% 5. 摘要页、正文、附录中不得出现参赛者身份、学校、赛区信息; \setcounter{topnumber}{3}
% 6. 电子版第一页必须为摘要专用页(不含承诺书与编号专用页)。 \setcounter{bottomnumber}{2}
% ============================================================ \setcounter{totalnumber}{4}
\documentclass[zihao=-4,a4paper]{ctexart} \renewcommand{\topfraction}{0.92}
\renewcommand{\bottomfraction}{0.75}
% ---------- 电子版 / 纸质版切换 ---------- \renewcommand{\textfraction}{0.06}
% 电子版(默认):第一页即摘要专用页,不包含承诺书与编号专用页; \renewcommand{\floatpagefraction}{0.72}
% 纸质版打印:将下面 \paperfalse 改为 \papertrue,会自动加入 \setlength{\floatsep}{9pt plus 2pt minus 2pt}
% 承诺书(第 1 页)与编号专用页(第 2 页),页码仍从摘要页开始。 \setlength{\textfloatsep}{11pt plus 2pt minus 4pt}
\newif\ifpaper \setlength{\intextsep}{9pt plus 2pt minus 2pt}
\paperfalse \definecolor{inkblue}{RGB}{35,76,112}
\definecolor{warmgray}{RGB}{103,103,103}
% ---------- 页面与基础宏包 ---------- \newtheorem{proposition}{命题}
\usepackage[left=2.5cm,right=2.5cm,top=2.5cm,bottom=2.5cm]{geometry} % ---------- AIGC 标注(正文标注 + 参考文献条目,见\ref{sec:aigc}与附录~\ref{app:aigc}) ----------
\usepackage{amsmath,amssymb,bm} % 上标码对应参考文献中的 AI 工具条目:A = ChatGPT/Codex 桌面版,C = DeepSeek Harness。
\usepackage{graphicx} % 采用字母码而非 \ref,避免在 PDF 书签中写入数字导致 \cite 失效。
\usepackage{booktabs,array,multirow,longtable} \newcommand{\aigc}[1]{\textsuperscript{[#1]}}
\usepackage[font=small,labelsep=quad]{caption} \newcommand{\aigcA}{\aigc{A}}
\usepackage{xcolor} \newcommand{\aigcC}{\aigc{C}}
\usepackage{listings} \newcommand{\toolA}{ChatGPT/Codex 桌面版}
\usepackage{enumitem} \newcommand{\toolC}{DeepSeek Harness}
\usepackage[hidelinks]{hyperref} \newcommand{\B}{\overline{B}}
\newcommand{\norm}[1]{\left\lVert#1\right\rVert}
% ---------- 字体设置(使用本目录 fonts/ 下复制的字体,工程自包含) ---------- \newcommand{\sgnless}{\texttt{no\_signal}}
% 中文正文:宋体(Songti SC);标题/强调:黑体(Heiti SC) \newcommand{\direction}{\texttt{direction}}
% 西文与数字:Times New Roman \newcommand{\near}{\texttt{near}}
% 若在 Windows 下编译且未携带 fonts/ 目录,可改用中易宋体/黑体: \newcommand{\pathtext}[1]{{\small\nolinkurl{#1}}}
% \setCJKmainfont{SimSun} \setCJKsansfont{SimHei} \setmainfont{Times New Roman} \newenvironment{algorithmblock}[1]{%
\setmainfont{Times New Roman}[ \par\medskip\noindent\begin{minipage}{\linewidth}\small
Path = fonts/, Extension = .ttf, \hrule\vspace{5pt}\textbf{#1}\par\vspace{3pt}\hrule\vspace{5pt}
BoldFont = {Times New Roman Bold}, }{\vspace{4pt}\hrule\end{minipage}\par\medskip}
ItalicFont = {Times New Roman Italic}, \renewcommand{\proofname}{证明}
BoldItalicFont = {Times New Roman Bold Italic}, \floatname{algorithm}{算法}
] \renewcommand{\algorithmicrequire}{\textbf{输入:}}
\setCJKmainfont{SongtiSC}[ \renewcommand{\algorithmicensure}{\textbf{输出:}}
Path = fonts/, Extension = .ttf, % 附录"核心程序代码"的代码排版样式:等宽小字号、行号、长行折行;
UprightFont = SongtiSC-Regular, % 数学符号与 \ { } 通过 literate 映射,避免逐字符转义代码正文。
BoldFont = SongtiSC-Bold, \lstdefinestyle{corecode}{%
ItalicFont = SongtiSC-Regular, basicstyle=\ttfamily\fontsize{7.6}{9}\selectfont,numberstyle=\tiny,
BoldItalicFont = SongtiSC-Bold, numbers=left,numbersep=6pt,aboveskip=6pt,belowskip=8pt,
] xleftmargin=2em,frame=none,breaklines=true,columns=fullflexible,
\setCJKsansfont{HeitiSC}[
Path = fonts/, Extension = .ttf,
UprightFont = HeitiSC-Light,
BoldFont = HeitiSC-Medium,
]
\setCJKmonofont{SongtiSC}[Path = fonts/, Extension = .ttf, UprightFont = SongtiSC-Regular]
\setCJKfamilyfont{zhsong}{SongtiSC}[Path = fonts/, Extension = .ttf, UprightFont = SongtiSC-Regular, BoldFont = SongtiSC-Bold]
\setCJKfamilyfont{zhei}{HeitiSC}[Path = fonts/, Extension = .ttf, UprightFont = HeitiSC-Light, BoldFont = HeitiSC-Medium]
\setCJKfamilyfont{zhkai}{SongtiSC}[Path = fonts/, Extension = .ttf, UprightFont = SongtiSC-Regular]
% ---------- 标题层级:一级四号黑体居中,二级小四黑体左对齐 ----------
\ctexset{
section = {
format = {\centering\heiti\zihao{4}},
aftername = {\quad},
beforeskip = {1.2ex plus 0.3ex},
afterskip = {1.0ex plus 0.2ex},
},
subsection = {
format = {\heiti\zihao{-4}},
aftername = {\quad},
beforeskip = {1.0ex plus 0.2ex},
afterskip = {0.8ex plus 0.2ex},
},
subsubsection = {
format = {\heiti\zihao{-4}},
aftername = {\quad},
},
}
\linespread{1.4}
\setlength{\parskip}{0.3ex}
\setlength{\emergencystretch}{3em}
% 规范:页码位于页脚中部,阿拉伯数字从摘要页 1 开始连续编号
\pagestyle{plain}
% ---------- 草稿批注宏(定稿前必须全部删除或落实) ----------
\newcommand{\todonote}[1]{\textcolor{red}{【#1】}}
% ---------- 代码排版设置(附录) ----------
\lstset{
language=Python,
basicstyle=\ttfamily\zihao{-5},
keywordstyle=\bfseries,
commentstyle=\color{black!60},
stringstyle=\color{black!60},
columns=fullflexible,
keepspaces=true, keepspaces=true,
breaklines=true, literate={\\}{$\backslash$}{0}%
breakatwhitespace=false, {$\{$}{$\{$}{0}%
showstringspaces=false, {$\}$}{$\}$}{0}%
numbers=left, {→}{$\to$}{0}{≤}{$\le$}{0}{≥}{$\ge$}{0}{∈}{$\in$}{0}%
numberstyle=\tiny\color{black!50}, {∩}{$\cap$}{0}{∪}{$\cup$}{0}{≈}{$\approx$}{0}{∅}{$\varnothing$}{0}%
frame=single, {−}{$-$}{0}{×}{$\times$}{0}{√}{$\surd$}{0}%
framerule=0.3pt, {α}{$\alpha$}{0}{δ}{$\delta$}{0}{θ}{$\theta$}{0}{λ}{$\lambda$}{0}%
rulecolor=\color{black!40}, {π}{$\pi$}{0}{ρ}{$\rho$}{0}{φ}{$\varphi$}{0}%
tabsize=4, {°}{$^\circ$}{0}{±}{$\pm$}{0}{²}{$^2$}{0}{Ω}{$\Omega$}{0}%
} {⟹}{$\Longrightarrow$}{0}{∀}{$\forall$}{0}{—}{---}{0}%
{/}{/}{0}{§}{\S}{0}}
% ---------- 常用数学简写 ---------- \hypersetup{pdftitle={基于集合估计与覆盖优化的无线电干扰源自动定位清除},
\newcommand{\R}{\mathbb{R}} pdfauthor={},pdfsubject={2026年全国大学生数学建模竞赛B题},pdfkeywords={交会定位,最小包围圆,主动测量,覆盖搜索}}
\newcommand{\diff}{\,\mathrm{d}} \input{data/formal-macros}
\input{data/practice-macros}
\input{data/practice-geometry-macros}
\input{data/project-macros}
\begin{document} \begin{document}
% ============================================================
% 纸质版专用页(电子版不编译)
% 注意:承诺书与编号专用页的正式文字以组委会当年发布的专用页为准,
% 此处为占位排版。电子版必须不含本部分。
% ============================================================
\ifpaper
\thispagestyle{empty}
\begin{center}
{\heiti\zihao{2} 承\ 诺\ 书}
\end{center}
\vspace{1em}
\todonote{纸质版承诺书:请将组委会当年发布的专用页原文粘贴于此(含编号、
队员信息表与全体队员签名、日期)。电子版论文不得包含本页。}
\vspace{2em}
\begin{center}
{\heiti\zihao{2} 编号专用页}
\end{center}
\vspace{2em}
\begin{center}
{\zihao{4} 报名号:\rule[-2pt]{8cm}{0.4pt}}
\end{center}
\todonote{纸质版编号专用页:仅填写报名号,不得出现姓名、学校、赛区等信息。}
\clearpage
\fi
% ============================================================
% 摘要专用页(电子版第一页;页码从此页开始编号)
% ============================================================
\setcounter{page}{1} \setcounter{page}{1}
\begin{center} \begin{center}
{\heiti\zihao{3} 基于有界误差交会定位与覆盖证明搜索的\\[0.3em] {\heiti\zihao{3} 基于集合估计与覆盖优化的无线电干扰源自动定位清除}
无线电干扰源快速定位与清除}
\end{center} \end{center}
\vspace{0.8em} \vspace{0.8em}
\begin{center} \begin{center}
{\heiti\zihao{4} 摘\quad 要} {\heiti\zihao{4} 摘\quad 要}
\end{center} \end{center}
针对无线电干扰源的快速自动定位与清除问题,本文以测向观测的三值反馈 无线电干扰源的自动排查难在信息条件:源的数量、位置与有效接收半径均未知,
\texttt{no\_signal}、\texttt{near}、\texttt{direction} 为唯一信息来源,建立了 单次检测至多给出一个带误差的方位,而"无信号"既可能来自距离,也可能来自定向源的朝向。
\textbf{有界误差交会定位—主动选点—覆盖证明搜索—动作耗时调度}的统一框架:四个问题 面对这一条件,本文不猜测源的点位置,而是维护"真实位置可能落在哪里"的候选集合,
复用同一几何内核,以覆盖证明与严格停止条件保证“清除所有干扰源”这一硬约束, 并让每一次观测、移动与清除都作用在同一套集合约束上,
在此之上再优化时间指标。 由此建立由\textbf{几何定位、主动测量、覆盖搜索与动作调度}构成的闭环模型,
并把移动、检测、换频与清除统一折算为虚拟耗时,使"能否清除"与"何时清除"成为可计算的判据。
\textbf{针对问题~1},将 $\pm 1^{\circ}$ 有界误差下的测向观测建模为以检测点为顶点的 \textbf{针对问题一},本文将带误差的示向度改写为前向角域的半平面约束,
前向角域 $W_i$,交会定位区域即诸角域的半平面交 $P=\bigcap_i W_i$,给出定位区域直径 经边界交点枚举、可行性筛选与凸包构造得到定位区域,并分别处理空集、无界与退化情形;
$D(P)=\max_{i,j}\|v_i-v_j\|$ 的顶点对枚举算法,并处理空集、单点、线段与无界区域等 在此基础上给出直径的顶点可达性与"直径圆覆盖该区域"的充要判据,
退化情形。对“直径为 $D$ 的圆能否覆盖区域”,以等边三角形给出否定反例,进而给出 并以反例说明覆盖与可清除并不等价,最终把清除条件落实到最小包围圆半径判据。
只需检查一组最远顶点对的覆盖判定算法;以最小包围圆半径 $\rho(K)\le 20$ 米作为
可保证清除的充分判据,采用 Welzl 随机增量算法求解并以枚举法对照。对官方演练的
三点观测离线复算,$\delta=1^{\circ}$ 时 $D=23.9967$ 米、$\rho=12.0686$ 米:
直径圆不覆盖定位区域,但存在一点可保证清除。
\textbf{针对问题~2},首次测向后取候选集合 \textbf{针对问题二},为兼顾接收保证与横向基线,
$K_1=\Omega\cap W(s_1,\theta_1\pm\delta)\cap \overline{B}(s_1,1500)$,并给出安全 本文由首次示向度与接收半径上界构造候选位置集,
候选区域恒非空的解析证明:记 $a=R/(2\cos\delta)$、$c=s_1+a\bm{u}$,则 把"对任一候选源位置均保证接收"表示为圆盘之交,并用最小包围圆判据判断其非空;
$K_1\subseteq B(c,a)$,从而 $B(c,1000-a)\subseteq\mathcal{Q}$($\delta=1^{\circ}$ 进而解析求出截断角域的最小包围圆,给出显式安全候选盘,
时安全圆盘半径约 $249.88$ 米)。在安全区域内以“最坏后验包围圆半径”为主目标、 并在其中以最坏后验半径与移动时间为准则选取第二检测点。
移动与检测成本为次目标主动选取第二检测点,交会角仅作同分筛选指标。
\textbf{针对问题~3},建立以虚拟时间 \textbf{针对问题三},为在源数量未知时区分"尚未发现"与"根本不存在",
$T=L/5+N_{\mathrm{switch}}+5N_{\mathrm{measure}}+5N_{\mathrm{clear}}^{\mathrm{s}} 本文以原点与六个环站组成七点计划并证明其覆盖上界,
+3N_{\mathrm{clear}}^{\mathrm{f}}$ 使"全站无信号"成为频道缺席的解析证据;
为目标的全向源搜索清除模型。构造间距 $700$ 米的 $7\times 7=49$ 点覆盖基线,由 执行上为每个频道维护网格幸存集以融合正负观测,
$700\sqrt{2}\approx 989.95<1000$ 米证明任何位置的源均能被某格点发现,从而保证 按期望信息增益与移动代价选点,并将覆盖、定位与清除三类任务统一建表后滚动重排。
不漏源;维护逐频道覆盖记录与“发现—定位—清除”闭环,给出严格停止条件与请求数
预算控制。\todonote{演练统计值待填入}
\textbf{针对问题~4},将定向源建模为位置—半径—朝向的联合假设:\texttt{no\_signal} \textbf{针对问题四},针对定向源带来的无信号歧义,
不单独删除空间候选点,避免误删真源;证明 $49$ 点覆盖基线对定向源仍然有效。对再次 本文将发现条件提升为位置与朝向的前向半盘覆盖,采用最小命中集作为发现计划,
失去信号的源,给出候选集合的 $20$ 米网格有限圆盘覆盖后备清除方法及请求次数上界 以位置与朝向的联合幸存集保留遮挡解释;
$N\le(\lceil w/20\rceil+2)(\lceil h/20\rceil+2)$,并纳入现实时间预算约束。 探点按可见性概率筛选,并在定位停滞时利用清除与朝向无关的性质执行预算化后备清除,
\todonote{演练统计值与正式测试结果(表~1)待填入} 另给出方格点集的连续覆盖证明作为备选方案。
最后对模型的保守性与效率进行评价:几何内核可复用、覆盖保证可验证;局限在于 全部模型与算法均在自建模拟器上完成了闭环验证,
主动选点为采样启发式、后备清除请求数较大,可通过共享测点与自适应覆盖加速。 机制论证与定量结论取自可复现真实位置与逐动作观测的演练局,
官方模拟器的正式测试仅用于附录中的最终效果验证。
\vspace{0.8em} \vspace{0.4em}
\noindent{\heiti 关键词:}交会定位;半平面交;最小包围圆;覆盖证明;主动选点;动作调度 \noindent{\heiti 关键词:}有界误差;交会定位;最小包围圆;主动测量;定向覆盖
\clearpage \clearpage
% ============================================================
% 正文(不超过 30 页,不要目录)
% ============================================================
\section{问题重述} \section{问题重述}
\subsection{AIGC 使用声明}\label{sec:aigc}
本文在写作与实现过程中使用了 AI 编程助手,所有 AI 参与环节均已在正文相应位置标注上标码
\,\textsuperscript{[A]}(\toolA)或 \,\textsuperscript{[C]}(\toolC),逐节对照见附录~\ref{app:aigc}。
AI 承担的是文字组织、公式排版、程序实现与图表绘制等辅助性工作;
选题判断、模型与算法的最终取舍、实验数据的解释以及全部结论均由参赛队员独立作出并复核,
AI 生成的程序与数据均经队员实际运行、复算与校验。
\subsection{问题背景} \subsection{问题背景}
无线电干扰源的精准定位是频谱管理的末端任务。在初步监测和区域排查已确定
目标分布范围后,仍需携带测向设备逐点检测,以缩小位置不确定性并完成清除。
本题希望由一只搭载测向机和光学定位装置的机器狗自动完成这一过程,
减少人工进入危险环境的需要,并缩短全部任务的完成时间\cite{problem}。
无线电干扰源的定位与清除是无线电频谱管理的重要任务。精准定位阶段需要携带便携式 目标区域为 $\Omega=\B(0,1800)$,单位为米,坐标轴分别指向东、北。
测向机的人员(本题中为搭载测向机的机器狗)进入目标分布区域,通过逐点检测示向度 每个源占用 $1$ 至 $20$ 中的一个独立频道,源总数为 $10$ 至 $16$。
逐步定位干扰源并加以清除。目标区域为半径 $1800$ 米的圆形区域 有效接收半径未知,介于 $1000$ 与 $1500$ m 之间。
$\Omega=\{(x,y):x^2+y^2\le 1800^2\}$,干扰源按覆盖角度范围分为全向与定向两类, 检测返回无信号、近距离或示向度;示向度误差不超过 $\pm1^\circ$,
其有效接收半径在 $1000$ 至 $1500$ 米之间,频道位于 $1$ 至 $20$ 中且互不相同。 同一地点的重复检测不会改变误差。全向源在整个圆周发射;
测向机同一地点的检测误差固定,全局误差在 $[-1^{\circ},1^{\circ}]$ 内;机器狗移动 定向源仅在其未知朝向两侧各 $90^\circ$ 的闭半平面内发射。
速度为 $5$ 米/秒,检测耗时 $5$ 秒,频道切换耗时 $1$ 秒,光学精确定位与清除分别在
距离不超过 $20$ 米时进行,耗时 $3$ 秒与 $2$ 秒。
\subsection{待解决的问题} 机器狗从原点、频道 $1$ 出发,以 $5$ m/s 沿直线移动,停机后才能检测。
一次检测耗时 $5$ s,切换检测频道耗时 $1$ s。
距源不超过 $20$ m 时,光学定位与清除共耗时 $5$ s;
清除失败仅支付 $3$ s 光学检查时间。清除是否成功与源朝向无关。
距源不超过 $5$ m 且能够接收信号时,返回近距离信息,可直接执行清除。
圆域约束源的位置,机器狗允许到圆域外检测\cite{protocol}。
\begin{enumerate}[label=(\arabic*),leftmargin=3em] \subsection{研究任务}
\item \textbf{问题~1}:已知若干检测点坐标及某干扰源在各点的示向度,给出交会定位法 \begin{enumerate}[label=(\arabic*),leftmargin=2.8em,itemsep=3pt]
计算多边形定位区域直径的算法,并回答“以定位区域直径为直径的圆能否覆盖此 \item 已知多个测点及同一源的示向度,计算交会定位区域的直径,
定位区域”。 判断以该直径为直径的圆能否覆盖定位区域。
\item \textbf{问题~2}:已知某全向干扰源在一个检测点处测得的示向度,给出第二个 \item 已知一个全向源的首次示向度,确定第二检测点的候选区域与选点策略,
检测点的选择策略与候选区域,以获得较好的定位效果。 在保证接收的条件下获得较好的定位效果。
\item \textbf{问题~3}:目标区域中全向干扰源总数为 $10$--$16$ 个但具体个数未知, \item 对数量未知的全向源设计自动发现、定位和清除算法,
制定机器狗自动搜索定位及清除策略并设计算法,确保全部清除的前提下时间最短, 在完成任务的前提下尽量减少总耗时,并报告测试结果。
通过模拟器演练并给出清除比例、平均定位清除时间等统计值与三次正式测试结果。 \item 将策略推广到全向与定向源混合的情形,处理无信号的歧义,
\item \textbf{问题~4}:目标区域中同时存在全向与定向干扰源,总数与定向方向均未知, 给出相应的搜索、定位、清除算法及测试结果。
给出检测与清除策略及算法,并完成演练与三次正式测试。
\end{enumerate} \end{enumerate}
问题三、四各完成三次正式测试。本文以自建模拟器演练局作为机制论证与定量分析的数据源,
并以官方模拟器的六份正式导出包在附录中验证算法效率与结论,
正式结果按题目表 1 的格式报告各次清除数量、平均定位清除时间与程序运行时间。
\section{问题分析} \section{问题分析}\aigcC
四个问题构成一条递进的主线:问题~1 的交会定位几何是全部后续问题的基础;问题~2 在 问题一处于整条链路的几何起点。带误差的示向度只限制真实方位所在的角度区间,
单次观测下研究“下一步去哪里测”的主动测量设计;问题~3、问题~4 则是在数量未知的 单条射线无法确定位置;若直接对射线求交,多解和数值敏感会同时出现。
条件下,把定位几何组织成“全域覆盖发现—逐个定位—清除—证明完成”的闭环调度问题。 为避免这一点,本文将观测改写为前向角域的半平面约束,并通过直线交点枚举与凸包构造获得可行域。
因此不必为每问单独建模,而是复用同一几何内核与观测更新机制。 由这一改写还可进一步看出,可行域直径只反映区域尺度,并不等于覆盖该区域的圆半径:
最远顶点对的中点未必能覆盖全部候选位置。正是这一差别,
促使本文分别导出直径的顶点可达性与直径圆覆盖的充要判据,
并以等边三角形反例说明"直径不超过 $40$ m"不能保证一次清除,
最终把清除条件落到最小包围圆半径不超过 $20$ m 的充分判据上。
\textbf{问题~1 的分析}。误差有界意味着单次测向只能确定源位于以示向度方向为轴、 在问题一的几何基础上,问题二回答"第二测点选在哪里"。
半角 $1^{\circ}$ 的前向角域内;多检测点角域的交集即为定位区域。求交即半平面交, 这里存在一对相互牵制的目标:若只追求大交会角,第二点可能远离源而收不到信号;
是经典计算几何问题;直径在凸多边形顶点上取得,可用顶点对枚举求得。“直径圆能否 若只求保证接收,又可能缺少横向基线。为兼顾二者,
覆盖区域”需要区分“直径”与“外接”两个概念,等边三角形说明直径圆一般不覆盖, 本文先由首次示向度与接收半径上界构造候选位置集,
正确的保证清除工具是最小包围圆。 把"对未知真源均保证接收"表示为所有候选位置的 $1000$ m 圆盘之交,
再用最小包围圆判据判断该交集是否非空;在此基础上证明截断角域的最小包围半径为
$1500/(2\cos\delta)$,并在有效误差半角 $1.005^\circ$ 时给出半径约 $249.885$ m 的安全候选盘。
在线执行时,用更紧的凸外包圆替代解析盘,在 $37$ 个候选点中按最坏后验半径与移动时间择优。
因此,问题二的接收保证是可证明的几何事实,定位收缩则通过有限候选近似完成。
\textbf{问题~2 的分析}。第二检测点的选取是在目标位置未知条件下的主动测量设计: 问题三把单源判据推广到数量未知的全向源。此时真正的困难不是清除一个已发现源,
无论真实源位于当前候选集合何处,新检测点都必须保证能接收到信号(距离不超过其有效 而是在有限时间内区分"尚未发现"与"根本不存在"。
接收半径),否则该次检测将退化为无效动作。因此先构造保守候选集合,再解析证明存在 为此,本文以原点与六个环站组成七点计划,在环半径 $1159.7$ m 时证明最坏覆盖距离不超过 $984.539$ m,
“任何情况下都接收到信号”的安全区域,在安全区域内按最坏情形的后验包围半径最小化 使"七站全无信号"成为该频道缺席的解析证据。实际执行不再逐站全频道扫描,
选取检测点。 而是为每个频道维护网格幸存集,统一融合正负观测:候选集为空即判缺席,并可跳过必为无信号的检测。
定位点由期望信息增益与移动代价共同评分,覆盖、定位、清除三类任务统一建表后
用最近邻与开放路径 2-opt 滚动重排,以减少发现任务与定位任务间的往返。
\textbf{问题~3 的分析}。全清是硬约束:发现 $10$ 个源或连续多次无信号都不构成停止 问题四进一步处理混合源,此时"无信号"既可能来自距离,也可能来自朝向。
依据。需要一组对任何源位置都能保证“至少一个检测点落在其有效接收范围内”的覆盖点集, 七点全向计划不再满足前向半盘下的发现要求,因此本文把发现条件提升为位置与朝向的联合覆盖,
并对每个频道维护覆盖记录,使“未发现”严格等价于“已证明不存在”。在该保证之上, 采用 $31$ 点最小命中集,并按 $15$ m 位置间距和 $72$ 个朝向档进行运行期校核;
用虚拟时间公式统一度量移动、切换、检测与清除成本,安排发现与处理的调度。 同时用逐频道的位置 $\times$ 朝向联合幸存集保留朝向遮挡解释。
探点先按可见性概率筛选,再取移动最省者;定位停滞时,利用清除与朝向无关的性质,
执行 $20$ m 方格、至多 $400$ 格的预算化后备清除。作为备选,
本文还由凸组合性质给出 $49$ 点方格方案的连续覆盖证明。
\textbf{问题~4 的分析}。定向源的发射半平面使得“无信号”不能单独否定位置假设: 上述链路在自建模拟器上闭环运行后,可归纳出四点结论:
源可能恰在检测点背后发射。把观测视为对“位置—半径—朝向”联合假设的约束即可保持 1. 带误差交会定位的严格清除判据是最小包围圆半径,而非定位区域直径;
不漏源的保守性;同时证明覆盖基线对定向源依然成立,失去信号后的已定位源可用有限 2. 主动测量应先保证接收,再在安全区域内优化横向基线与后验收缩;
圆盘覆盖逐点清除作为后备。 3. 多源搜索需把覆盖证明、正负观测滤波和滚动任务排序统一到同一时间目标下;
4. 混合源场景必须保留位置与朝向的联合解释,并以有限后备清除兜底。
上述闭环对应的观测更新与决策关系如图~\ref{fig:framework}。
\section{模型假设} \begin{figure}[htbp]
\centering
\includegraphics[width=0.62\linewidth]{framework-decision-loop.png}
\caption{基于观测更新、集合估计与任务排序的闭环决策过程。}
\label{fig:framework}
\end{figure}
\begin{enumerate}[label=\arabic*.,leftmargin=2.5em] \section{模型假设}\aigcC
\item 示向度误差满足 $|\varepsilon|\le 1^{\circ}$,且同一检测点重复检测误差不变; \begin{enumerate}[label=假设\arabic*,leftmargin=4.5em,itemsep=4pt]
仅在不同地点误差才呈现统计规律(题设)。本文取有界误差模型,不假设误差的 \item 源的位置、频道、发射朝向和有效接收半径在一次测试中保持不变,
分布形式。 不同频道互不干扰。这与静态测试案例及题设的频道独立性一致。
\item 每个频道至多存在一个干扰源,源总数为 $10$--$16$,频道编号 $1$--$20$; \item 采用二维欧氏距离,忽略高度差;机器人匀速直线移动,
不同源信号互不影响(题设)。 检测、换频、光学定位与清除按给定时间串行执行。
\item 各源有效接收半径未知但属于 $[1000,1500]$ 米;信号场强仅随距离衰减, \item 几何保证只使用有界误差和接收半径上下界。
与角度无关(题设)。 为覆盖接口两位小数的表示误差,在线角域取
\item 定向源有效覆盖角度为定向方向两侧各 $90^{\circ}$(含边界);光学精确定位与 $\delta_{\mathrm{eff}}=1^\circ+0.005^\circ$。
清除只依赖距离、不受覆盖角度限制(题设)。 该附加量用于处理示向度的数值舍入误差。
\item 策略仅依赖接口返回的三值观测(\texttt{no\_signal}、\texttt{near}、 \item 定位过程依据检测点坐标、频道及观测结果更新候选集合。
\texttt{direction} 及示向度读数),不引入场强、距离等接口未提供的观测量 \item 信息增益与可见性评分采用均匀候选权重及均匀接收半径作为
(工程约定)。 决策先验;几何可行性由测向误差和接收距离约束确定。
\item 机器狗沿直线匀速行进、停机检测,虚拟时间按题设动作耗时累计;程序运行时间
与虚拟时间相互独立(题设)。
\end{enumerate} \end{enumerate}
前三项中的物理约束取自题目和附件,数值余量与评分先验属于实现选择。
\section{符号说明} \section{符号说明}\aigcC
\begin{table}[htbp] \begin{table}[htbp]
\centering \centering\small
\caption{主要符号说明} \caption{主要符号及单位}
\label{tab:symbols} \begin{tabularx}{\linewidth}{>{$}l<{$} X l}
\begin{tabular}{cl}
\toprule \toprule
符号 & 说明 \\ \text{符号} & 含义 & 单位\\
\midrule \midrule
$\Omega$ & 目标区域 $\{(x,y):x^2+y^2\le 1800^2\}$(米) \\ \Omega,\ R & 源位置圆域及其半径,$R=1800$ & m\\
$R_c$ & 干扰源 $c$ 的有效接收半径,$R_c\in[1000,1500]$ 米 \\ g,\ s_i,\ q & 真源位置、已有检测点、待选检测点 & m\\
$\delta$ & 示向度误差界,$\delta=1^{\circ}$ \\ \theta_i,\ \delta & 示向度及误差半角 & 度或弧度\\
$s_i,\ \theta_i$ & 第 $i$ 个检测点坐标及其测得的示向度读数 \\ u(\alpha) & 单位方向向量 $(\cos\alpha,\sin\alpha)$ & --\\
$W_i$ & 检测点 $s_i$ 处的前向角域 $[\theta_i-\delta,\theta_i+\delta]$ \\ W_i,\ P & 第 $i$ 个前向角域及纯角域交集 & --\\
$P$ & 交会定位区域(诸角域的半平面交) \\ K_c,\ P_c^{\mathrm{out}} & 频道 $c$ 的可行位置集及保守凸外包 & --\\
$D(P)$ & 定位区域 $P$ 的直径 \\ D(P),\ m,\ \rho & 区域直径、最小包围圆圆心及半径 & m\\
$K$ & 某频道源的可能位置候选集合 \\ R_-,R_+ & 接收半径下、上界,分别为 $1000$、$1500$ & m\\
$\rho(K)$ & $K$ 的最小包围圆半径 \\ \mathcal Q(K) & 对集合 $K$ 保证接收的检测点区域 & --\\
$\mathcal{Q}$ & 第二检测点的安全候选区域 \\ \ell,\ \epsilon_g & 网格边长及格心位置裕量 $\ell/\sqrt2$ & m\\
$L$ & 机器狗移动总路程(米) \\ \psi,\ H & 源朝向及朝向离散档数 & 度,个\\
$N_{\mathrm{switch}},N_{\mathrm{measure}},N_{\mathrm{clear}}$ & 频道切换、检测、清除动作次数 \\ L,\ T & 移动总距离及总虚拟耗时 & m,s\\
$T$ & 完成任务的虚拟总时间(秒) \\ N_m,N_s,N_c^+,N_c^- & 检测、换频、成功清除、失败清除次数 & 次\\
\bar T,\ T_{\mathrm{real}} & 平均定位清除时间及程序运行时间 & s/个,s\\
\bottomrule \bottomrule
\end{tabular} \end{tabularx}
\end{table} \end{table}
数学推导中三角函数的自变量采用弧度;带 $^\circ$ 的量先换算为弧度。
记 $[a,b]=a_xb_y-a_yb_x$ 为二维叉积,$\B(c,r)$ 为闭圆盘。
\section{问题~1:有界误差交会定位模型} \input{sections/timing}
\input{sections/q1}
\subsection{测向误差的前向角域建模} \input{sections/q2}
\input{sections/q3}
设第 $i$ 个检测点 $s_i$ 处测得示向度 $\theta_i$。由假设~1,真实方位角位于 \input{sections/q4}
$[\theta_i-\delta,\theta_i+\delta]$ 内,故源必然落在以 $s_i$ 为顶点、以该方向区间 \input{sections/results}
为边界的前向角域 \input{sections/evaluation}
\begin{equation} \begin{thebibliography}{99}
W_i=\bigl\{s_i+t\,(\cos\varphi,\sin\varphi):t\ge 0,\ \varphi\in[\theta_i-\delta,\theta_i+\delta]\bigr\} \small\setlength{\itemsep}{1pt}
\label{eq:wedge} \bibitem{problem} 全国大学生数学建模竞赛组委会.
\end{equation} 2026年高教社杯全国大学生数学建模竞赛B题:无线电干扰源的快速自动定位与清除[Z]. 2026.
内。$W_i$ 由两条过 $s_i$ 的线性不等式表示,实现时须正确处理 $0^{\circ}/360^{\circ}$ \bibitem{protocol} 赛题配套材料. 模拟器使用说明;模拟器通信接口说明及编程指南[Z]. 2026.
跨界。示向度读数保留两位小数时,可取 $\delta=1.005^{\circ}$ 作保守裕量;本文推导 \bibitem{referee} 本文自建模拟器(评测机实现). 无线电干扰源环境模拟器协议与场景规范[Z]. 2026.
对任意 $\delta\in(0,45^{\circ})$ 成立。 \bibitem{format} 全国大学生数学建模竞赛组委会. 全国大学生数学建模竞赛论文格式规范(2026年修订稿)[Z]. 2026.
\bibitem{welzl} WELZL E. Smallest enclosing disks (balls and ellipsoids)[C]//
\subsection{定位区域:角域的半平面交} New Results and New Trends in Computer Science. LNCS 555. Berlin: Springer, 1991: 359--370.
\url{https://doi.org/10.1007/BFb0038202}.
交会定位区域为 \bibitem{boyd} BOYD S, VANDENBERGHE L. Convex Optimization[M].
\begin{equation} Cambridge: Cambridge University Press, 2004. \url{https://web.stanford.edu/~boyd/cvxbook/}.
P=\bigcap_i W_i . \bibitem{chvatal} CHV\'ATAL V. A greedy heuristic for the set-covering problem[J].
\label{eq:polygon} Mathematics of Operations Research, 1979, 4(3): 233--235.
\end{equation} \url{https://doi.org/10.1287/moor.4.3.233}.
求各边界直线交点并筛除不可行点,再按极角排序即得凸多边形 $P$。算法必须区分五种 \bibitem{formal} 官方无线电干扰源环境模拟器.
情形:空集(观测矛盾,应核查频道与数据)、单点、线段、有界多边形与无界区域; 问题三、四正式行为日志与配套统计(客户端1.1.0,六个案例)[DS]. 2026-09-12--2026-09-13.
对无界区域不能截断后声称得到真实直径。 案例编码及文件校验值见附录~\ref{app:formal}。
\bibitem{aigc-chatgpt} OpenAI. ChatGPT/Codex 桌面版,
\subsection{定位区域直径的算法} 模型 \texttt{gpt-6-astra}、\texttt{gpt-5.6-sol}、\texttt{gpt-5.6-luna}(客户端 0.153.4)[CP/OL].
OpenAI, 2026-09-10--2026-09-13.
凸函数 $\|x-y\|$ 的最大值在紧凸集的极点处取得,故当 $P$ 为有界多边形 使用环节:问题一、问题二的推导整理,自建模拟器与题设的一致性核查,论文重写与公式排版;
$P=\mathrm{conv}\{v_1,\dots,v_n\}$ 时 逐次会话记录见《AIGC 使用合规记录》。
\begin{equation} \bibitem{aigc-dsh} 深度求索(DeepSeek). DeepSeek Harness,模型 \texttt{deepseek-flash}(会话事件流格式 v3)[CP/OL].
D(P)=\max_{1\le i<j\le n}\|v_i-v_j\| . 深度求索(DeepSeek), 2026-09-13.
\label{eq:diameter} 使用环节:论文逐节重写与润色,问题三、问题四算法描述重写,实验数据整理与插图绘制;
\end{equation} 逐次会话记录见《AIGC 使用合规记录》。
$n$ 很小(等于检测点数的常数倍),直接枚举顶点对即可,复杂度 $O(n^2)$,结果可靠;
规模确有需要时可换用旋转卡壳算法 $O(n)$\cite{preparata,toussaint,mcgill}。本文以
顶点对枚举为基准实现,旋转卡壳仅作对照。
\subsection{直径圆能否覆盖定位区域}
\textbf{结论:不一定。}反例:边长为 $D$ 的等边三角形,其直径为 $D$,但最小包围圆
半径为 $D/\sqrt{3}>D/2$,直径圆不能覆盖三角形区域。
直径圆覆盖判定可一次完成:设 $A,B$ 为 $P$ 的一对最远顶点,$\|A-B\|=D$。若存在直径
为 $D$ 的圆覆盖 $P$,其圆心必为 $(A+B)/2$(因该圆须同时包含相距 $D$ 的两点)。故
只需检查全部顶点到 $(A+B)/2$ 的距离是否不超过 $D/2$;若失败,换任何一组直径对也
不可能成功,同时输出最坏超出距离与圆外顶点作为反例证据。
\subsection{最小包围圆与可保证清除}
定位的最终目的是清除:清除半径为 $20$ 米,故正确判据是最小包围圆
\begin{equation}
\rho(K)=\min_{z}\max_{g\in K}\|g-z\|\le 20 .
\label{eq:mec}
\end{equation}
$\rho(K)\le 20$ 时,最小包围圆圆心即可作为清除点;更一般地,所有可保证清除的位置
组成 $C_{20}(K)=\bigcap_{g\in K}B(g,20)$,非空时可取其中距机器狗最近者以节省移动。
$D\le 40$ 只是必要条件。最小包围圆采用带固定随机种子的 Welzl 增量算法\cite{welzl}
计算,保留全支撑点枚举法作独立对照,并对 $20$ 米阈值保留数值余量。
\textbf{演练验证。}对官方演练的三点观测离线复算:$\delta=1^{\circ}$ 时
$D=23.996723$ 米、$\rho=12.068583$ 米;$\delta=1.005^{\circ}$ 时
$D=24.119088$ 米、$\rho=12.130377$ 米。两种口径下直径圆均不覆盖定位区域,
但最小包围圆半径均小于 $20$ 米,即一点可保证清除,与可视化结果一致
\todonote{此处可补充定位区域图(figures/)}。
\section{问题~2:第二检测点的主动选点模型}
\subsection{首次测向后的候选集合}
设在 $s_1$ 处首次测得 \texttt{direction},示向度 $\theta_1$。记
\begin{equation}
K_1=\Omega\cap W(s_1,\theta_1\pm\delta)\cap \overline{B}(s_1,1500),
\label{eq:k1}
\end{equation}
即目标区域、角域与最大可能接收圆盘的交。保留整个距离圆盘是保守处理:即使
\texttt{direction} 还隐含“距离超过 $5$ 米”的排除,忽略它也不会丢失真源。
\subsection{安全候选区域的解析非空证明}
第二个检测点 $q$ 必须保证:无论真实源位于 $K_1$ 内何处,$q$ 都落在其有效接收半径
内(任何 $R_c\ge 1000$)。故安全候选区域定义为
\begin{equation}
\mathcal{Q}=\Bigl\{q:\max_{g\in K_1}\|q-g\|\le 1000\Bigr\} .
\label{eq:Q}
\end{equation}
对一般的 $K_1$,$\mathcal{Q}$ 非空当且仅当 $\rho(K_1)\le 1000$。本题首次测向条件下
有更强的解析结论:取 $R=1500$、$\bm{u}$ 为示向度方向单位向量,
\begin{equation}
a=\frac{R}{2\cos\delta},\qquad c=s_1+a\,\bm{u},
\end{equation}
则 $K_1\subseteq B(c,a)$。事实上任意候选 $g=s_1+t\,\bm{u}_\varphi$
($0\le t\le R$,$|\varphi-\theta_1|\le\delta$)满足
\begin{equation}
\|g-c\|^2=t^2+a^2-2at\cos(\varphi-\theta_1),
\end{equation}
该式关于 $t$ 为凸函数,最大值在 $t=0$ 或 $t=R$ 取得;$t=0$ 处值为 $a^2$,
$t=R$ 处由 $a=R/(2\cos\delta)$ 知其不超过 $a^2$。于是
$B(c,1000-a)\subseteq\mathcal{Q}$。取 $\delta=1.005^{\circ}$ 时
$a\approx 750.115391$ 米,安全圆盘半径约 $249.884609$ 米,严格为正;题设
$\delta=1^{\circ}$ 时同样成立。即使 $c$ 位于 $\Omega$ 外也合法,因为机器狗不受
源位置圆域限制。
\subsection{选点目标与算法}
在安全圆盘内以“信息收益—成本”双指标选点:主目标为最坏情形后验包围圆半径
$\sup_{\theta'}\rho\bigl(K_1\cap W(q,\theta')\bigr)$,其中 $\theta'$ 取遍与 $K_1$
及误差界一致的读数;次目标为移动与检测成本。实现上对目标位置与误差区间端点采样
并加密检查,交会角只作同分筛选指标,不为改善交会角越出已证明安全的候选区域。
若返回 \texttt{near},则源位于当前点 $5$ 米以内,可直接在当前位置尝试清除。
\todonote{候选区域示意图与选点对比实验待补}
\section{问题~3:全向干扰源的搜索定位与清除调度}
\subsection{虚拟时间与动作成本模型}
依据题设动作耗时,完成任务所需虚拟时间
\begin{equation}
T=\frac{L}{5}+N_{\mathrm{switch}}+5N_{\mathrm{measure}}
+5N_{\mathrm{clear}}^{\mathrm{s}}+3N_{\mathrm{clear}}^{\mathrm{f}},
\label{eq:time}
\end{equation}
其中 $L$ 为移动总路程(含检测与清除引发的移动),频道切换次数只计被接受的检测
动作。优化顺序为:先保证全部清除,再减小 $T$;不能通过少清除源来改善平均时间。
虚拟活动时长上限为 $100$ 小时;程序运行时间另受 $20$ 分钟窗口约束,二者独立。
\subsection{全域覆盖发现基线}
在 $s$ 处对某频道测得 \texttt{no\_signal},只能排除以 $s$ 为中心、半径 $1000$ 米
圆盘内存在该频道源(有效接收半径可能只有 $1000$ 米),不能一律排除到 $1500$ 米。
据此构造覆盖点集
\begin{equation}
S=\{(700i,700j):i,j=-3,-2,\dots,3\},\qquad |S|=49,
\end{equation}
其覆盖范围 $[-2100,2100]^2$ 包含 $\Omega$。对任一单元内的源 $g$,其所在单元的
$4$ 个格点到 $g$ 的距离均不超过 $700\sqrt{2}\approx 989.95<1000$ 米,故必存在
合格检测点;又 $g$ 位于 $4$ 个格点的凸包内部,经过 $g$ 的任意发射半平面必包含
至少一个格点(否则全部格点落入相反开半平面,与 $g$ 在凸包内矛盾)。因此 $49$ 点
逐一检测可保证发现该频道的源;源恰在网格线上时按半开区间归入相邻单元处理。
$49$ 点 $\times\,20$ 频道至多 $980$ 次检测,虚拟耗时上界约 $1.32\times 10^4$ 秒,
在 $100$ 小时上限内有充分设计空间;实际执行中已清除频道跳过、同点共享多频道测量、
已发现频道转入定位队列。
\subsection{发现—定位—清除闭环}
机器狗维护逐频道状态:未知/已发现待定位/可清除/已清除/已证明不存在,以及候选
集合 $K_c$。闭环流程为:覆盖扫描发现源 $\to$ 用问题~2 的主动选点缩小 $K_c$ 直至
$\rho(K_c)\le 20$ $\to$ 移动到 $C_{20}(K_c)$ 内距当前点最近的点清除 $\to$ 更新覆盖
记录与队列。多个已发现源按“预期信息改善/增量虚拟耗时”排序处理;候选采样点恰
返回 \texttt{near} 时立即就地清除。
\subsection{停止条件与结果统计}
\textbf{停止成功的依据为以下之一}:(i)已成功清除 $16$ 个不同频道的源(数量
上界);(ii)每个频道都已有清除成功记录或经完整覆盖证明不存在。发现 $10$ 个源、
连续若干次无信号、候选采样为空均不是充分停止条件;程序运行时间或窗口不足而退出
记为未证明完成,不与成功混记。结果统计按题设给出
\begin{align}
\text{被清除干扰源个数的比例} &= \frac{\text{被清除干扰源的个数}}{\text{干扰源总数}} ,\\
\text{平均定位清除时间} &= \frac{\text{定位清除总时间}}{\text{被清除干扰源的个数}} .
\end{align}
\begin{table}[htbp]
\centering
\caption{问题~3 正式测试结果(按题目表~1 格式)}
\label{tab:q3formal}
\begin{tabular}{lcccc}
\toprule
& 测试案例编码 & 清除干扰源个数 & 平均定位清除时间 & 程序运行时间 \\
\midrule
测试~1 & \todonote{待填} & \todonote{待填} & \todonote{待填} & \todonote{待填} \\
测试~2 & \todonote{待填} & \todonote{待填} & \todonote{待填} & \todonote{待填} \\
测试~3 & \todonote{待填} & \todonote{待填} & \todonote{待填} & \todonote{待填} \\
\bottomrule
\end{tabular}
\end{table}
\todonote{演练测试统计值(清除比例、平均定位清除时间)待演练后填入}
\section{问题~4:含定向干扰源的检测与清除}
\subsection{定向源观测模型}
定向源的接收条件是“距离 $\le R_c$ 且检测点位于发射半平面内”。因此
\texttt{no\_signal} 约束的是位置—半径—朝向的\textbf{联合假设}:若不联合维护朝向
可行集合,就不能用它单独删除空间候选点。可靠基线是对 \texttt{no\_signal} 只记录
“该点覆盖检测已完成”,不做空间删除;加速版本再维护朝向可行集合,且必须验证
不误删真源。
\subsection{覆盖发现基线对定向源仍然有效}
由 7.2 节的凸包论证:源 $g$ 位于所在单元 $4$ 格点的凸包内部,故经过 $g$ 的任意
发射半平面必含至少一个格点;该格点同时满足距离不超过 $989.95<1000$ 米。因此
$49$ 点逐频道检测对全向与定向源统一保证发现,包括贴近 $\Omega$ 边界朝外发射的源
(格点允许越出 $\Omega$ 访问)。
\subsection{失去信号后的后备清除}
已发现的定向源在定位过程中可能再次失去信号。对已知有界候选集合 $K$,构造边长
$20$ 米的全局网格:格中心到格内任意点距离不超过 $10\sqrt{2}\approx 14.14<20$ 米,
保留与 $K$ 的外包框相交的格子即得无空洞的有限圆盘覆盖,逐点调用清除动作。请求
次数上界
\begin{equation}
N\le\Bigl(\lceil w/20\rceil+2\Bigr)\Bigl(\lceil h/20\rceil+2\Bigr),
\end{equation}
其中 $w,h$ 为候选集合外包框的宽与高;单源全失败清除耗时为 $L/5+3N$。若 $K$ 外包
尺寸较大(如半径 $1500$ 米圆盘的外包框达上万格点),盲扫不满足现实预算,应先继续
定位缩小候选集合。现实时间预算按“剩余请求数 $\times$ 实测单请求高分位耗时”估计,
不满足预算时转入其他任务或按预算退出。
\begin{table}[htbp]
\centering
\caption{问题~4 正式测试结果(按题目表~1 格式)}
\label{tab:q4formal}
\begin{tabular}{lcccc}
\toprule
& 测试案例编码 & 清除干扰源个数 & 平均定位清除时间 & 程序运行时间 \\
\midrule
测试~1 & \todonote{待填} & \todonote{待填} & \todonote{待填} & \todonote{待填} \\
测试~2 & \todonote{待填} & \todonote{待填} & \todonote{待填} & \todonote{待填} \\
测试~3 & \todonote{待填} & \todonote{待填} & \todonote{待填} & \todonote{待填} \\
\bottomrule
\end{tabular}
\end{table}
\section{模型评价与推广}
\textbf{优点}:(1)四个问题复用同一几何内核(角域半平面交—直径—最小包围圆),
模型一致、实现可复用;(2)全程坚持保守几何:有界误差不取平均、无信号只排除
$1000$ 米、\texttt{no\_signal} 对定向源不删位置、停止条件需覆盖证明,所有“清除
完毕”的结论都可验证;(3)虚拟时间公式把调度目标显式化,且区分了虚拟时间与程序
运行时间两类约束。
\textbf{缺点与改进}:(1)主动选点采用最坏情形采样,是启发式而非全局最优,可研究
对候选集合的更精细离散化;(2)$49$ 点覆盖基线存在冗余,自适应跳点须以保留逐频道
覆盖证据为前提;(3)后备清除请求数较大,宜结合朝向可行集合减小候选集合;(4)
当前演练验证限于问题~1 的几何内核,问题~3、4 的闭环策略与统计结果有待演练填充。
\begin{thebibliography}{9}
\zihao{5}
\bibitem{preparata} Preparata F P, Shamos M I. Computational Geometry: An
Introduction[M]. New York: Springer-Verlag, 1985.
\bibitem{welzl} Welzl E. Smallest enclosing disks (balls and ellipsoids)[C]//
Maurer H. New Results and New Trends in Computer Science. Lecture Notes in
Computer Science, vol 555. Berlin: Springer, 1991: 359--370.
\bibitem{toussaint} Toussaint G T. Solving geometric problems with the rotating
calipers[C]//Proceedings of IEEE MELECON. Athens: IEEE, 1983.
\bibitem{mcgill} CGAL Project. Bounding Volumes: Min\_circle\_2[EB/OL].
\url{https://doc.cgal.org/latest/Bounding_volumes/}, 2026.
\bibitem{cgrl} McGill School of Computer Science. Rotating Calipers[EB/OL].
\url{https://www-cgrl.cs.mcgill.ca/~godfried/research/calipers.html}, 2026.
\end{thebibliography} \end{thebibliography}
\clearpage \clearpage
% ============================================================
% 附录(页数不限;电子版与纸质版均须包含)
% ============================================================
\appendix \appendix
\ctexset{section={number=\Alph{section},aftername={\quad}}}
\section{支撑材料文件列表} \input{sections/appendix}
\todonote{提交前更新为实际支撑材料压缩包内容,须与附录~B 源码一致}
\begin{table}[htbp]
\centering
\caption{支撑材料文件列表}
\begin{tabular}{lll}
\toprule
文件/目录 & 内容 & 说明 \\
\midrule
\texttt{geometry/} & 几何内核源代码 & 角域交、直径、最小包围圆 \\
\texttt{planning.py} & 问题~2 安全候选盘计算 & \texttt{first\_bearing\_candidate\_disk} \\
\texttt{examples/q1/} & 问题~1 输入样例 & 含等边三角形反例 \\
\texttt{output/q1/} & 问题~1 输出与演练记录 & 优化报告、可视化 \\
\bottomrule
\end{tabular}
\end{table}
\section{程序源代码}
以下为支撑模型计算的核心源代码,完整可运行代码以支撑材料压缩包为准。
\subsection{\texttt{geometry/localization.py}:交会定位几何内核}
\lstinputlisting[language=Python]{../../../geometry/localization.py}
\subsection{\texttt{geometry/planning.py}:问题~2 安全候选区域}
\lstinputlisting[language=Python]{../../../geometry/planning.py}
\end{document} \end{document}
+107
View File
@@ -0,0 +1,107 @@
% ============================================================
% 2026 年高教社杯全国大学生数学建模竞赛论文模板(B 题)
% ============================================================
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{mcm26b-paper}[2026/09/11 MCM 2026 paper class]
% 电子版为默认模式;纸质版通过 class option `paper' 开启。
\newif\ifpaper
\paperfalse
\DeclareOption{paper}{\papertrue}
\DeclareOption{electronic}{\paperfalse}
% 将其余选项(如 zihao=-4、a4paper)交给 ctexart。
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{ctexart}}
\ProcessOptions\relax
\LoadClass{ctexart}
% ---------- 页面与基础宏包 ----------
\RequirePackage[left=2.5cm,right=2.5cm,top=2.5cm,bottom=2.5cm]{geometry}
\RequirePackage{amsmath,amssymb,bm}
\RequirePackage{graphicx}
\RequirePackage{booktabs,array,multirow,longtable}
\RequirePackage[font=small,labelsep=quad]{caption}
\RequirePackage{xcolor}
\RequirePackage{listings}
\RequirePackage{enumitem}
\RequirePackage[hidelinks]{hyperref}
% ---------- 字体设置(使用模板目录 fonts/ 下的字体) ----------
% 中文正文:宋体(Songti SC);标题/强调:黑体(Heiti SC)
% 西文与数字:Times New Roman
% 若未携带 fonts/ 目录,可将下面设置替换为系统字体,例如:
% \setCJKmainfont{SimSun} \setCJKsansfont{SimHei}
\setmainfont{Times New Roman}[
Path = fonts/, Extension = .ttf,
BoldFont = {Times New Roman Bold},
ItalicFont = {Times New Roman Italic},
BoldItalicFont = {Times New Roman Bold Italic},
]
\setCJKmainfont{SongtiSC}[
Path = fonts/, Extension = .ttf,
UprightFont = SongtiSC-Regular,
BoldFont = SongtiSC-Bold,
ItalicFont = SongtiSC-Regular,
BoldItalicFont = SongtiSC-Bold,
]
\setCJKsansfont{HeitiSC}[
Path = fonts/, Extension = .ttf,
UprightFont = HeitiSC-Light,
BoldFont = HeitiSC-Medium,
]
\setCJKmonofont{SongtiSC}[Path = fonts/, Extension = .ttf, UprightFont = SongtiSC-Regular]
\setCJKfamilyfont{zhsong}{SongtiSC}[Path = fonts/, Extension = .ttf, UprightFont = SongtiSC-Regular, BoldFont = SongtiSC-Bold]
\setCJKfamilyfont{zhei}{HeitiSC}[Path = fonts/, Extension = .ttf, UprightFont = HeitiSC-Light, BoldFont = HeitiSC-Medium]
\setCJKfamilyfont{zhkai}{SongtiSC}[Path = fonts/, Extension = .ttf, UprightFont = SongtiSC-Regular]
% ---------- 标题层级:一级四号黑体居中,二级小四黑体左对齐 ----------
\ctexset{
section = {
format = {\centering\heiti\zihao{4}},
aftername = {\quad},
beforeskip = {1.2ex plus 0.3ex},
afterskip = {1.0ex plus 0.2ex},
},
subsection = {
format = {\heiti\zihao{-4}},
aftername = {\quad},
beforeskip = {1.0ex plus 0.2ex},
afterskip = {0.8ex plus 0.2ex},
},
subsubsection = {
format = {\heiti\zihao{-4}},
aftername = {\quad},
},
}
\linespread{1.4}
\setlength{\parskip}{0.3ex}
\setlength{\emergencystretch}{3em}
% 规范:页码位于页脚中部,阿拉伯数字从摘要页 1 开始连续编号。
\pagestyle{plain}
% ---------- 草稿批注宏(定稿前必须全部删除或落实) ----------
\newcommand{\todonote}[1]{\textcolor{red}{【#1】}}
% ---------- 代码排版设置(附录) ----------
\lstset{
language=Python,
basicstyle=\ttfamily\zihao{-5},
keywordstyle=\bfseries,
commentstyle=\color{black!60},
stringstyle=\color{black!60},
columns=fullflexible,
keepspaces=true,
breaklines=true,
breakatwhitespace=false,
showstringspaces=false,
numbers=left,
numberstyle=\tiny\color{black!50},
frame=single,
framerule=0.3pt,
rulecolor=\color{black!40},
tabsize=4,
}
% ---------- 常用数学简写 ----------
\newcommand{\R}{\mathbb{R}}
\newcommand{\diff}{\,\mathrm{d}}
View File
+205
View File
@@ -0,0 +1,205 @@
\section{官方正式测试的效果验证}\label{app:formal}\aigcC
\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}
\section{自建模拟器演练局数据清单}\label{app:practice}\aigcC
本节列出正文定量结论所依据的全部演练局,共 $\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{支撑材料与运行方法}\aigcC
\begin{table}[H]
\centering\small
\caption{支撑材料目录及用途}
\begin{tabularx}{\linewidth}{p{5.8cm}X}
\toprule
文件或目录 & 用途\\
\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{docs/figures/manifest.json} & 插图来源与生成命令清单\\
\pathtext{docs/paper/data/} & 演练局与正式案例的可读统计、表格及校验值\\
\pathtext{docs/paper/sections/} & 分章论文源文件\\
\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} 进行问题一几何分析,
或通过 \texttt{mcm26b.cli} 运行在线策略。
在线测试由模拟器界面启动,接口就绪后执行策略入口。
具体运行指令和编译步骤见支撑包的 \texttt{README.md}。
\section{AIGC 使用逐节对照}\label{app:aigc}
本附录给出正文各章与 AI 工具使用情况的完整对照,供核查。
上标码 \aigcA 对应 ChatGPT/Codex 桌面版,\aigcC 对应 DeepSeek Harness,
两者的版本、开发机构与使用日期见参考文献~\cite{aigc-chatgpt,aigc-dsh}。
\begin{table}[htbp]
\centering\small
\caption{各章内容与 AI 工具使用情况对照\aigcC}
\label{tab:aigc-map}
\begin{tabularx}{\linewidth}{@{}p{0.30\linewidth} c X@{}}
\toprule
\textbf{论文位置} & \textbf{标注} & \textbf{AI 参与方式、模型与日期}\\
\midrule
摘要 & \aigcC & 文字组织与润色;\texttt{deepseek-flash},2026-09-13 \\
问题重述 & \aigcC & 文字组织;\texttt{deepseek-flash},2026-09-13 \\
问题分析 & \aigcC & 思路梳理与文字组织;\texttt{deepseek-flash},2026-09-13 \\
模型假设、符号说明 & \aigcC & 文字组织与符号统一;\texttt{deepseek-flash},2026-09-13 \\
计时模型与会话状态机 & \aigcC & 由题面与接口说明整理,含公式排版;\texttt{deepseek-flash},2026-09-13 \\
问题一 & \aigcA & 推导文档整理、定理与反例的公式编排;\texttt{gpt-6-astra},2026-09-10。LaTeX 定稿改写由 \texttt{deepseek-flash} 于 2026-09-13 完成 \\
问题二 & \aigcA & 推导文档整理、解析候选盘的公式编排;\texttt{gpt-6-astra},2026-09-10。LaTeX 定稿改写由 \texttt{deepseek-flash} 于 2026-09-13 完成 \\
问题三 & \aigcC & 算法描述重写、伪代码与公式排版;\texttt{deepseek-flash},2026-09-13 \\
问题四 & \aigcC & 算法描述重写、伪代码与公式排版;\texttt{deepseek-flash},2026-09-13 \\
实验结果与分析 & \aigcC & 数据表整理、插图绘制与文字组织;\texttt{deepseek-flash},2026-09-13 \\
模型评价与推广 & \aigcC & 文字组织;\texttt{deepseek-flash},2026-09-13 \\
附录 A(正式测试验证) & \aigcC & 正式导出包核对、表格复算与文字组织;\texttt{deepseek-flash},2026-09-13 \\
附录 B(演练局数据清单) & \aigcC & 数据清单生成与文字组织;\texttt{deepseek-flash},2026-09-13 \\
附录 C(支撑材料与运行方法) & \aigcC & 运行说明整理与去敏感化;\texttt{deepseek-flash},2026-09-13 \\
附录 D(核心程序代码) & \aigcC & 代码摘录由 \pathtext{scripts/build\_core\_notebook.py} 生成;正文实现由 \texttt{deepseek-flash} 与 \texttt{gpt-6-astra} 参与编写,2026-09-10 至 2026-09-13 \\
\bottomrule
\end{tabularx}
\end{table}
说明三点。
其一,表中日期为对应内容在 AI 会话中的生成或改写日期,逐条时间、提示词与操作细节
另见本项目的《AIGC 使用合规记录》(\pathtext{docs/aigc-compliance-record.tex})。
其二,上述 AI 参与均限于文字组织、公式与代码排版、程序实现和绘图;
模型的推导结论、算法取舍与实验判断由参赛队员确认,AI 生成的程序与数据均经队员
实际运行与复算(演练局复算与评测机记录的最大计时偏差为 $0.000000$ s,见附录~\ref{app:formal})。
其三,AI 客户端的内部推理过程不作为论文依据;论文中的命题均给出可复核的证明或可复现的实验,
不以 AI 输出本身作为论据。
\section{核心程序代码}\aigcC
四问的求解核心集中在约 $5000$ 行的单文件程序中,按\textbf{公共层、几何与集合估计层、
覆盖保证层、策略层}四层组织;评测机、命令行外壳、数据采集与绘图脚本、
单元测试以及未被采用的方案不属于求解核心,不在此列出。
完整可执行程序为支撑材料中的 \pathtext{mcm26b-核心代码.ipynb},
\pathtext{src/mcm26b/} 保留与之逐字对应的模块化版本,两者函数名一一对应。
下列代码为无改动的摘录:函数体与注释与程序一致,只按核心程度取舍。
未收录的部分包括独立评测机(按附件协议复现模拟器,与求解代码零耦合)、
命令行入口、数据采集与论文绘图脚本、单元测试,以及经实测未采用的候选方案。
\input{data/source-listings}
+37
View File
@@ -0,0 +1,37 @@
\section{模型评价与推广}\aigcC
\subsection{模型的有效性}
本文采用集合估计处理有界测向误差,将每次观测转化为真实位置的可行约束,
这一条主线贯穿四问。
问题一通过凸包顶点计算直径,以最小包围圆半径给出清除充分条件;
问题二将接收距离要求表示为闭圆盘的交集,并由三角不等式构造显式可行子集。
几何定位、接收约束与清除距离因此由统一的集合运算联系起来,
而不是各自独立的经验规则。
多源搜索采用覆盖点集与检测状态矩阵维护各频道的搜索进度。
网格表示可处理负观测产生的非凸可行区域,
信息增益用于选择有利于收缩候选集的测点。
开放路径排序将移动、检测、换频和清除纳入统一目标,
并在新观测到来后重新求解任务次序。
对于定向源,位置与朝向的联合约束提供可见性信息,
凸组合性质给出方格点集的连续覆盖证明,
网格遍历清除则利用清除半径与方向无关的物理条件。
这些结论在自建模拟器上完成了闭环验证:本次采集的 $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} 给出了两位小数舍入余量对首次可行区域的影响:
$1^\circ$ 与 $1.005^\circ$ 之间的差别在毫米量级,说明该判据对舍入余量稳健。
由式~\eqref{eq:coveragebound},环半径影响覆盖路径长度和最大覆盖距离。
默认半径保留约 $15.461$ m 的距离裕量。
减小网格边长可降低 $\epsilon_g$ 并收紧位置误差上界,
而二维网格数量大致与 $\ell^{-2}$ 成正比,因此应在精度、内存和计算时间间取得平衡。
同理,问题四的 $31$ 点计划在站点数量与覆盖余量之间构成一对可调参数:
设计阶段预留的 $5^\circ$ 前向角余量越大,所需站点越多,但对朝向扰动越稳健。
+197
View File
@@ -0,0 +1,197 @@
\section{问题一:有界误差交会定位与覆盖圆}\aigcA
\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
[u(\theta_i-\delta),g-s_i]&\ge0,\\
[u(\theta_i+\delta),g-s_i]&\le0,\\
u(\theta_i)\cdot(g-s_i)&\ge0
\end{aligned}\right\}.
\label{eq:wedge}
\end{equation}
三条不等式的意义并不相同。前两条把位置限制在左右边界之间,
第三条显式保留"只在前方"这一方向性,
从而使零误差的退化情形对应一条射线而不是整条直线。
为便于统一求解,将其改写为 $a x+b y\le c$ 的形式,法向依次为
\begin{equation}
\begin{aligned}
&(\sin(\theta_i-\delta),-\cos(\theta_i-\delta)),\\
&(-\sin(\theta_i+\delta),\cos(\theta_i+\delta)),\\
&(-\cos\theta_i,-\sin\theta_i),
\end{aligned}
\end{equation}
右端为相应法向与 $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$ 与接收距离约束。
值得先说明的是,半平面交是闭凸集,可能为空集、单点、线段、有界多边形或无界集,
这些情形必须分别处理,否则"直径"与"覆盖圆"都没有定义。
\subsection{区域构造、空集及无界情形}
要求解式~\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$。二维多面锥只需检查约束边界的两个切向
$(b,-a)$ 与 $(-b,a)$ 是否满足全部齐次不等式。
由于本题至少一个前向窄角域会排除直线性,非空交集必存在极点,
故在该输入族中不存在可行边界交点却判为空集的情况;无观测输入单独返回整个平面,
不按空集处理。
有界非空区域中,一个顶点对应单点,两个顶点对应线段,其余为凸多边形。
空集没有本文定义的有效直径与覆盖圆,程序以显式状态报告观测不相容,
便于检查频道、误差界或输入数据。
\subsection{直径与直径圆的判定}
题目要求计算定位区域直径,并判断以该直径为直径的圆能否覆盖整个区域。
对前者,可以证明无需在区域内部搜索。
\begin{proposition}[顶点直径]
设 $P=\operatorname{conv}\{v_1,\ldots,v_m\}$ 非空有界,则
\begin{equation}
D(P)=\max_{i,j}\norm{v_i-v_j}.
\label{eq:diameter}
\end{equation}
\end{proposition}
\begin{proof}
任意 $x,y\in P$ 可表示为凸组合
$x=\sum_i\lambda_i v_i$、$y=\sum_j\mu_jv_j$。
由于系数非负且各自和为 $1$,
\[
\norm{x-y}
=\left\|\sum_{i,j}\lambda_i\mu_j(v_i-v_j)\right\|
\le\sum_{i,j}\lambda_i\mu_j\norm{v_i-v_j}
\le\max_{i,j}\norm{v_i-v_j}.
\]
最远顶点对本身属于 $P$,故上界可达。
\end{proof}
由命题可知,只需枚举顶点对即可,计算量为 $O(m^2)$。
至于第二个问题,结论比直觉更严格:最远顶点对的中点未必能覆盖整个区域。
\begin{proposition}[直径圆覆盖的充要条件]
取最远顶点对 $a,b$,令 $D=\norm{a-b}$、$o=(a+b)/2$。
存在直径等于 $D$ 的圆盘覆盖 $P$,当且仅当
\begin{equation}
\max_{v\in V(P)}\norm{v-o}\le D/2.
\label{eq:diametercircle}
\end{equation}
\end{proposition}
\begin{proof}
若半径 $D/2$ 的圆盘中心为 $z$ 且包含 $a,b$,则
$D\le\norm{a-z}+\norm{z-b}\le D$。
等号迫使 $z=o$。反之,圆盘为凸集,包含全部顶点即包含它们的凸包。
\end{proof}
证明过程同时说明:圆心被 $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).
\end{equation}
其直径为 $40$ m。以 $AB$ 为直径的圆心为 $(20,0)$,半径为 $20$ m,
但 $C$ 到圆心的距离为 $20\sqrt3$ m,位于圆外。
其最小包围圆圆心为 $(20,20/\sqrt3)$,半径
$40/\sqrt3\approx23.094$ m,同样大于清除半径。
图~\ref{fig:q1geometry}(c) 展示两类圆的差别。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{geo-q1-geometry.png}
\caption{问题一的几何算例。(a) 三点交会:三条浅色示向度的角域边界与它们的交集(定位区域),
观测取自自建模拟器演练局 \texttt{8VRC-ADW4-XDXM-F62L} 的频道 $\ExOneChannel$;
(b) 该定位区域的放大:虚线为直径圆、实线为最小包围圆,
几何量由生产求解器 \texttt{mcm26b.geometry.solve} 现算;
(c) 等边三角形解析反例:虚线直径圆 $r=20$ m 不覆盖顶点 $C$,
实线最小包围圆 $\rho=40/\sqrt3\approx23.094$ m 覆盖全部顶点,该图不是模拟器观测。}
\label{fig:q1geometry}
\end{figure}
该三角形并非人为设定的特例,它可以由题设的 $\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}.
\label{eq:mec}
\end{equation}
其边界由至多三个支撑点确定,可用 Welzl 随机增量算法计算\cite{welzl}。
实现采用固定随机种子及显式栈,并在输出前检查全部顶点的包含关系。
在精确模型中,若 $\rho(P)\le20$,于 $m$ 清除即可覆盖所有可能真源;
考虑浮点计算后采用 $\rho(P)+\eta_{\mathrm{num}}\le20$ 的充分判据。
由此可见,$D(P)\le40$ 只是必要条件,并非充分条件。
\subsection{算法一与复杂度}
将上述判定串成流程,即得问题一的求解算法。
\begin{algorithm}[htbp]
\caption{有界测向角域交会与覆盖圆判定}
\label{alg:q1}
\begin{algorithmic}[1]
\Require 同一频道的检测点、示向度和误差半角
\Ensure 区域状态、顶点、直径、直径圆判定与最小包围圆
\If{观测为空}
\State \Return 无界
\EndIf
\State 归一化坐标,生成 $3n$ 条半平面约束
\State 枚举非平行边界交点,仅保留满足全部约束的点
\If{无可行点}
\State \Return 空集
\EndIf
\State 检查衰退锥;若存在非零方向,\Return 无界及无穷直径
\State 对可行交点去重并求凸包,区分单点、线段和二维多边形
\State 枚举最远顶点对,计算 $D$ 与中点 $o$,检查全部顶点是否在 $\B(o,D/2)$ 内
\State 计算最小包围圆 $\B(m,\rho)$,复核包含关系与数值余量
\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,
直径约束只是它的必要条件。
+198
View File
@@ -0,0 +1,198 @@
\section{问题二:保证接收的第二检测点选择}\aigcA
\subsection{候选位置集合与安全区域}
问题一说明了如何由多次观测确定位置,问题二则提出一个更早的问题:
在只测过一次的情况下,第二点应当选在哪里。
这里存在一对相互牵制的目标:若只追求大交会角,第二点可能远离源而收不到信号;
若只求保证接收,又可能缺少横向基线。要同时处理两者,
第一步是先刻画"由首次观测能推断出哪些位置"。
设首次有效示向度为 $(s,\theta)$,则有效读数除限定角域外,
还说明源距检测点不超过接收半径上界,故
\begin{equation}
K_1=\Omega\cap W(s,\theta,\delta_{\mathrm{eff}})\cap\B(s,R_+).
\label{eq:k1}
\end{equation}
其中 $R_+=1500$ 为有效接收半径上界。
$\direction$ 对应距离大于 $5$ m;式~\eqref{eq:k1} 采用其凸松弛,
使真实可行位置始终包含在所维护的候选集合中。
采用凸松弛而非精确的"挖去 $5$ m 小圆",是为了让后续的圆盘交运算保持凸性。
有了候选集合,第二步是把"保证接收"写成集合条件。
对非空紧集 $K$ 定义
\begin{equation}
F_K(q)=\max_{g\in K}\norm{q-g},\qquad
\mathcal Q(K)=\{q:F_K(q)\le R_-\}
=\bigcap_{g\in K}\B(g,R_-).
\label{eq:exact-safe}
\end{equation}
该区域内的任何点均在所有可能真源的最小接收范围内。
$F_K$ 是凸函数且为 $1$-Lipschitz,因而 $\mathcal Q(K)$ 是闭凸集。
由式~\eqref{eq:mec} 可知
\begin{equation}
\mathcal Q(K)\ne\varnothing\quad\Longleftrightarrow\quad\rho(K)\le R_-.
\end{equation}
这一步把第二点的鲁棒可行性转化为问题一已经解决的最小包围圆判据\cite{boyd},
两个问题由此共用同一套几何工具。
在线执行时,还需把解析区域换成可快速裁剪的表示。
为此用外切正多边形表示圆盘,再逐半平面裁剪。
若边数为 $M$、圆半径为 $r$,外切多边形顶点的半径为
$r\sec(\pi/M)$,其最大径向超出量准确写为
\begin{equation}
e_M(r)=r\bigl(\sec(\pi/M)-1\bigr).
\label{eq:outer-error}
\end{equation}
默认 $M=192$。由于整个圆盘已包含在多边形中,
裁剪后得到 $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
\eta=10^{-3}\ {\rm m}.
\label{eq:safe-disk}
\end{equation}
任意 $q\in\mathcal Q_{\mathrm{in}}$ 与真源 $g$ 满足
$\norm{q-g}\le\norm{q-m}+\norm{m-g}\le R_- -\eta$。
因此第二次检测一定为 $\direction$ 或 $\near$。
该构造适用于 $\rho_{\mathrm{out}}+\eta\le R_-$;
当候选区域较大时,程序先在其圆心追加观测,再更新可行区域。
\subsection{首次截断角域的解析候选盘}
上述安全盘依赖离散多边形,只能在程序内使用;题目还要求给出解析的候选区域。
为此暂去掉 $\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}
\begin{proof}
任取 $g=s+t u(\theta+\varphi)$,其中 $0\le t\le R_+$、
$|\varphi|\le\delta$。有
$\norm{g-c}^2=t^2+a^2-2at\cos\varphi$。
该式关于 $t$ 为凸二次式,最大值在区间端点取得。
$t=0$ 时为 $a^2$;$t=R_+$ 时不超过
$R_+^2+a^2-2aR_+\cos\delta=a^2$,故全域被包含。
再取边界三点 $s,p_\pm=s+R_+u(\theta\pm\delta)$。
权重
$\lambda_\pm=1/(4\cos^2\delta)$、
$\lambda_0=1-1/(2\cos^2\delta)$ 非负且和为 $1$,
其加权中心为 $c$。三点均距 $c$ 为 $a$,
对任意圆心 $z$,加权平方距离等于 $a^2+\norm{z-c}^2$,
故至少一点距 $z$ 不小于 $a$。任何包含三点的圆半径均不小于 $a$。
\end{proof}
由于 $K_1\subseteq S$,于是
\begin{equation}
\boxed{
q\in\B\!\left(s+\frac{1500}{2\cos\delta}u(\theta),
1000-\frac{1500}{2\cos\delta}\right)}
\label{eq:q2-answer}
\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
\caption{解析安全盘参数,由式~\eqref{eq:q2-answer} 直接计算}
\begin{tabular}{lrr}
\toprule
误差半角 & 中心沿首次方向偏移 $a$/m & 候选盘半径/m\\
\midrule
$1^\circ$ & 750.114246 & 249.885754\\
$1.005^\circ$ & 750.115391 & 249.884609\\
\bottomrule
\end{tabular}
\label{tab:safeanalytic}
\end{table}
在线算法继续使用 $\Omega$ 裁剪后的完整候选形状,
通常能够获得更紧的源包围圆与更大的充分安全盘。
两者的分工是清楚的:解析公式负责解释保证为何存在,
多边形流程负责利用已有的全部几何约束。
\begin{figure}[htbp]
\centering
\includegraphics[width=0.70\linewidth]{geo-q2-guaranteed-reception-disk.png}
\caption{第二点解析候选区域。左图为首次截断角域 $S$、
其最小包围圆 $\B(c,a)$ 与保证接收的候选盘 $\B(c,1000-a)$;
右图为半径分解,$a=1500/(2\cos\delta)$。取 $\delta=1^\circ$ 时
$a\approx750.114$ m、$1000-a\approx249.886$ m,与表~\ref{tab:safeanalytic} 一致。}
\label{fig:q2disk}
\end{figure}
\subsection{定位效果指标与有限候选求解}
保证接收只解决了一半问题,另一半是"在安全区域内如何让第二次观测最有效"。
理想的鲁棒选点模型为
\begin{equation}
\min_{q\in\mathcal Q_{\mathrm{in}}}
\left(\sup_{y\in\mathcal Y(q,K_1)}\rho(K_1\cap O(q,y)),
\frac{\norm{q-p}}{5}\right)_{\mathrm{lex}},
\label{eq:q2minimax}
\end{equation}
其中 $p$ 是当前机器人位置,$y$ 表示可能观测,
$O(q,y)$ 为相应观测可行集,下标表示按字典序比较:
先最小化最坏后验半径,再减少移动耗时。
方向分支取相应角域,近距离分支取 $\B(q,5)$。
这比仅优化交会角更直接地对应最终清除需求。
连续极小极大问题求解成本较高,当前算法采用有限候选近似。
在式~\eqref{eq:safe-disk} 的盘心及半径比例
$0.4,0.75,1.0$ 的三个环上各取 $12$ 个方向,
角度为 $(k+\tfrac12)2\pi/12$,共 $37$ 点。
对每个候选 $q$,在 $P^{\mathrm{out}}$ 边界以不大于 $60$ m 的间距采样,
包含全部顶点。对边界采样点 $g$ 枚举读数
$\operatorname{bearing}(q,g)\pm\delta_{\mathrm{eff}}$,
计算新角域交后的最小包围半径,并另外计算 $\near$ 分支;
取所得最大值作为 $\widehat J(q)$。
选取使 $(\widehat J(q),\norm{q-p}/5)$ 最小的点,
然后将边界采样间距加密至 $15$ m 复核其评分。
需要强调的是,$\widehat J$ 是最坏后验半径的\textbf{离散近似},
只用于比较有限候选点的定位效果;接收条件由式~\eqref{eq:safe-disk} 保证,
不受该近似影响。
\begin{algorithm}[htbp]
\caption{保证接收的第二检测点选择}
\label{alg:q2}
\begin{algorithmic}[1]
\Require 首次测点与示向度,或已更新的候选凸外包;当前位置
\Ensure 下一检测点、采样后验评分与接收保证状态
\State 初次调用时构造 $K_1$ 的外包多边形;后续调用沿用已有外包
\State 计算最小包围圆 $\B(m,\rho_{\mathrm{out}})$ 与安全盘半径 $b=1000-\rho_{\mathrm{out}}-10^{-3}$
\If{$b<0$}
\State 在候选区域圆心追加观测
\Else
\State 生成 $37$ 个安全候选点
\For{每个候选点 $q$}
\State 枚举外包边界样本与方向端点读数,补入近距离分支
\State 计算最坏后验半径 $\widehat J(q)$
\EndFor
\State 按后验评分优先、移动时间次优选点,并以 $15$ m 采样间距复核
\EndIf
\State 获得新观测后更新候选集
\If{观测为 $\near$}
\State 就地清除
\Else
\State 根据最小包围半径决定清除或追加测量
\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. 在安全盘内以最坏后验半径为第一目标、移动时间为第二目标选点,
既避免了"收不到信号"的失败模式,又保证了交会基线。
+210
View File
@@ -0,0 +1,210 @@
\section{问题三:全向多源的网格滤波与滚动调度}\aigcC
\subsection{统一时间目标与任务状态}
问题一、二分别给出了"能否清除"与"下一点选在哪里"的判据,
问题三把它们放进一个连续运行的闭环:源的数量未知,机器人必须自己决定何时发现、何时定位、何时清除。
在这样的任务中,优化的最终标准不是某一步的精度,而是完成任务所花的虚拟时间,
因此第一步是把时间写成可优化的目标。
按式~\eqref{eq:time} 的计时记账,优化目标是在全部源清除的约束下最小化虚拟耗时 $T$。
题目统计的平均定位清除时间是 $\bar T=T/N_c^+$;
由于清除动作本身的 $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}
D_{\mathrm{cov}}(a)=
\max\left\{\frac a{\sqrt3},\
\sqrt{R^2+a^2-\sqrt3Ra}\right\}.
\label{eq:coveragebound}
\end{equation}
\end{proposition}
\begin{proof}
设 $g$ 距原点为 $r$,其方位与最近环站的夹角不超过 $\pi/6$。
若 $r\le a/\sqrt3$,选取原点即可。
若 $r\ge a/\sqrt3$,由余弦定理,距最近环站的平方不超过
$r^2+a^2-\sqrt3ar$。
该凸二次式在 $[a/\sqrt3,R]$ 上的最大值于端点取得,
分别为 $a^2/3$ 与 $R^2+a^2-\sqrt3aR$。
\end{proof}
命题给出了一个可调的覆盖半径。当前 \texttt{bayes} 策略取 $a=1159.7$ m,
由式~\eqref{eq:coveragebound} 得 $D_{\mathrm{cov}}=984.539136$ m,
比最小接收半径小约 $15.461$ m。
因此每个合法全向源至少在一站可被接收。
某频道在七站全部为无信号,就构成该频道不存在源的严格证据。
以"站点、频道"为索引建立检测状态矩阵,记录各站对各频道的检测结果。
该矩阵用于逐频道的严格缺席证明;实际执行不要求在每个站点重测所有频道,
可由网格幸存集证明必为无信号的(站,频道)对会被跳过。
顺次从原点访问六个环站的开放路径长为 $6a$;
任务总路径由覆盖站间移动以及定位、清除所需的局部移动共同构成。
\subsection{正负观测的双重候选表示}
覆盖证明只回答"源是否可能被听见",要把一次具体检测转化为位置信息,
还需要更新候选集合。每个已发现频道维护凸外包 $P_c^{\mathrm{out}}$。
$\direction$ 将候选集与 $\B(s,1500)$ 外切多边形及测向角域相交;
$\near$ 与 $\B(s,5)$ 外切多边形相交。
难点在于全向源的 $\sgnless$ 观测,它意味着
\begin{equation}
\norm{g-s}>r_{\mathrm{eff}}\ge1000,
\end{equation}
即排除一个圆盘。圆盘的补集不凸,直接与凸候选集求交会破坏凸性。
为此,采用网格幸存集 $\mathcal G_c$ 表示负观测带来的空间约束,
同时保留便于几何运算的凸外包:前者负责吸收负信息,后者负责快速判据与选点。
网格边长为 $\ell=14.65$ m,每格中心与格内点的最大距离为
$\epsilon_g=\ell/\sqrt2$。初始保留所有可能与 $\Omega$ 相交的格,
按以下充分排除条件更新格心 $z$:
\begin{equation}
\begin{array}{ll}
\sgnless: & \norm{z-s}\le1000-\epsilon_g\ \Rightarrow\ \text{删除};\\
\near: & \norm{z-s}>5+\epsilon_g\ \Rightarrow\ \text{删除};\\
\direction: & \norm{z-s}>1500+\epsilon_g\ \Rightarrow\ \text{删除}.
\end{array}
\label{eq:gridupdate}
\end{equation}
三式的裕量 $\epsilon_g$ 保证只有整格必然越界时才删除,故真源所在格永不被误删。
方向观测另外检查角差。若 $d=\norm{z-s}>\epsilon_g$,
源所在格引起的方位偏差可由 $\arcsin(\epsilon_g/d)$ 上界;
实现采用距离内缩后的角误差界,并在测点附近保留所有可能方位。
只有角差超过 $\delta_{\mathrm{eff}}$ 加格内角裕量时才删除。
上述排除条件保持真源所在网格的可行性。
因此网格幸存集为空时,该频道无源。
若全部候选格心均满足 $\norm{z-s}>1500+\epsilon_g$,
则在 $s$ 测量必无信号,且所有候选网格已在最小接收圆盘外,
其观测的信息增益为零,可在检测状态矩阵中标记该推断结果,
从而节省相应检测与换频时间。
\subsection{信息增益选点与清除判据}
候选集收窄之后,还需决定下一个测点。
问题二的算法2提供满足接收约束的检测点;
问题三的 \texttt{BayesLoop} 进一步采用网格幸存集上的信息增益,
即优先选择最能缩小候选集的测点。
存在保证接收圆盘时,在其内部生成环形候选并补充当前接近方向上的测点;
其余情况下,在网格最小包围圆附近生成环形采样点。
候选集合同时包含当前位置与探索点,分别根据预期信息增益和移动代价评分。
对候选 $q$ 计算
\begin{equation}
J_{\mathrm{IG}}(q)=
\widehat{\mathbb E}\!\left[
\log\frac{|\mathcal G_c^{\,\mathrm{post}}(q,Y)|}{|\mathcal G_c|}
\right]
+\lambda\left(\frac{\norm{p-q}}5+\frac{\norm{q-m_c}}5\right),
\label{eq:ig}
\end{equation}
其中 $\lambda=0.05$,空分支用正的小值截断。
较小的候选集基数比对应较大信息增益,移动项限制为测量而产生的绕行。
评分最多取 $800$ 个子样本及 $7$ 个代表假设,
并以均匀 $r_{\mathrm{eff}}\in[1000,1500]$ 估计接收概率。
该决策采用离散假设上的加权期望,接收半径的均匀分布作为选点先验。
清除判断使用完整候选集合。由于清除要求在 $20$ m 内完成,
判据必须同时计入几何半径与数值余量。凸候选集的清除判据为
\begin{equation}
\rho_c+b_c+0.5\le20,
\label{eq:clearpoly}
\end{equation}
其中 $b_c\ge0$ 为代码的累计附加余量。
凸多边形包含真源,$\rho_c$ 是其最小包围半径;
$b_c$ 与 $0.5$ m 共同提供附加数值裕量。
若负观测使网格更紧,也可使用
\begin{equation}
\rho_{\mathrm{grid}}+\epsilon_g+0.5\le20
\label{eq:cleargrid}
\end{equation}
的网格清除判据,其中 $\rho_{\mathrm{grid}}$ 为候选格心的最小包围半径。
满足任一充分条件即可选择清除点。
利用剩余距离裕量,可将圆心向当前位置平移 $\Delta$;
只要平移后的距离上界仍满足对应不等式,三角不等式便保证清除条件成立。
\subsection{开放路径上的滚动任务排序}
到这一步,每个频道都已知"是否需要检测、在哪里检测、何时清除",
剩下的问题是如何把这些动作排成一条省时的路线。
统一任务表包含三类任务:覆盖站的批量扫频、已发现源的定位测量、
满足半径条件的清除。站内检测优先使用测向机当前频道,减少换频次数。
对任务序列 $\pi$,排序代价为
\begin{equation}
C(\pi)=\frac{\norm{p-q_{\pi_1}}}{5}
+\sum_{j=1}^{k-1}\frac{\norm{q_{\pi_j}-q_{\pi_{j+1}}}}5
+\sum_{j=1}^{k}t_{\pi_j}(c_{j-1}),
\label{eq:route}
\end{equation}
其中服务时间 $t_{\pi_j}$ 依赖进入任务时的频道,清除不改变该频道。
从最近邻初序开始,默认最多进行 $4$ 轮开放路径 2-opt 改进;
每次只执行当前序列的首任务,得到新观测后重新生成和排序。
这样新发现的源、收缩后的清除点和已证无源的频道都能及时改变路线,
避免为一条已经失效的任务继续赶路。
已停靠位置可以顺带补测:要求此前未在该位置测过、距离保证成立、
尚处于定位阶段,且预测半径有足够收缩。追加测量的费用为检测与换频时间,
其收益来自节省额外移动。题设固定同地误差,因此优先选择新的检测位置。
\subsection{算法三与完成条件}
将上述模块串成闭环,即得问题三的求解算法。
\begin{algorithm}[htbp]
\caption{网格幸存集滤波、信息增益选点与滚动调度}
\label{alg:q3}
\begin{algorithmic}[1]
\Require 题设参数、七站计划与合法观测接口
\Ensure 逐频道处理状态与会话统计
\State 检验七点覆盖条件,初始化频道状态、凸候选集、网格幸存集和检测状态矩阵
\State 调用 $/enter$,记录位置、频道和剩余现实预算
\While{存在未处理频道且预算充足}
\State 构建覆盖、定位和清除三类任务
\State 用网格幸存集跳过必为无信号的检测
\State 按最近邻与开放路径 2-opt 排序任务表
\State 执行首任务,根据真实响应更新凸候选集与网格幸存集
\If{满足清除判据}
\State 执行清除;成功则更新状态,失败则追加观测
\EndIf
\If{已清除 $16$ 个源或所有频道均被清除或证明无源}
\State \Return 报告完成状态
\EndIf
\EndWhile
\State 预算不足或异常时退出并报告未解决频道
\end{algorithmic}
\end{algorithm}
"清除数达到 $16$"利用题设数量上界。
对任意已存在的 $16$ 个不同频道,也可提前排除其余未知频道,
但已发现而未清除的源仍必须继续处理。
覆盖条件用于判定搜索范围,清除充分条件用于确定操作位置。
当前每轮追加有效定位测量上限为 $8$;
停滞、协议异常或预算耗尽时,记录各频道状态并终止。
程序以接口返回的现实预算为准,并预留退出时间,
实际计时在整数微秒状态上累计,避免用实机运行秒数代替虚拟动作耗时。
综上,问题三得到三点结论:1. 七点计划在环半径 $1159.7$ m 时给出 $984.539$ m 的覆盖上界,
使"全站无信号"成为该频道缺席的严格证据;2. 网格幸存集把非凸的负观测纳入集合估计,
并使大量必然无信号的检测被跳过;3. 把覆盖、定位、清除统一为一条开放路径并滚动重排,
是压缩总虚拟时间的主要手段。
+229
View File
@@ -0,0 +1,229 @@
\section{问题四:混合源的前向半盘覆盖与联合信念}\aigcC
\subsection{定向观测模型与无信号歧义}
在问题三中,"无信号"只有一种解释:源太远。
一旦引入定向源,这唯一的解释就被打破——源可能只是背对着检测点。
因此本问的关键在于为无信号保留第二种解释。
设定向源位于 $g$,朝向为 $\psi$。在检测点 $q$ 可见的充要条件为
\begin{equation}
\norm{q-g}\le r_{\mathrm{eff}},\qquad
(q-g)\cdot u(\psi)\ge0.
\label{eq:visibility}
\end{equation}
边界属于可见半平面。可见且距离不超过 $5$ m 时返回 $\near$,
否则返回 $\direction$;任何一个条件失败均为 $\sgnless$。
问题二的可行区域满足距离约束,定向接收还需满足前向半平面约束。
对于已发现频道,位于该区域内的负观测反映朝向遮挡,
因此不应被当作距离证据;区域外的负观测则同时包含距离与朝向两种解释。
这一区分直接决定了后续信念表示的形式。
朝向约束也改变了覆盖的要求。问题三的七点计划只保证"至少一站距离足够近";
对定向源还要求该站位于源的前向半平面内,因此需要重新设计站点集。
向外发射的边界源需要在圆域外布置接收站点。
适用于混合源的站点集合 $S$ 应满足
\begin{equation}
\forall g\in\Omega,\ \forall\psi\in[0,2\pi),\
\exists s\in S:\quad
\norm{s-g}\le1000,\quad (s-g)\cdot u(\psi)\ge0.
\label{eq:halfcover}
\end{equation}
这是一项针对"位置、朝向"二元状态的全覆盖要求,而不是对位置的单变量覆盖。
问题三的七点计划不满足式~\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}
\begin{proof}
设包含 $g$ 的方格四角为 $v_1,\ldots,v_4$。
四角距 $g$ 均不超过对角线长 $700\sqrt2<1000$。
由于 $g$ 是四角的凸组合,存在 $\lambda_i\ge0$、
$\sum_i\lambda_i=1$ 使 $\sum_i\lambda_i(v_i-g)=0$。
对任意朝向 $u$ 取内积,得
$\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}
A_{ij}=\mathbf1\{
\norm{s_j-g_i}\le r_{\mathrm{design}},
\ (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\}.
\label{eq:setcover}
\end{equation}
采用集合覆盖的贪心算法与冗余站点删除求近似解\cite{chvatal},得到 $31$ 个站点。
设计阶段使用 $965$ m 距离与 $5^\circ$ 前向角余量,
最终按 $15$ m 位置间距、$72$ 个朝向采样复核。
验证结果覆盖全部 $3\,256\,200$ 个离散状态,
最坏覆盖距离约为 $990.051$ m。
\begin{figure}[htbp]
\centering
\includegraphics[width=0.72\linewidth]{geo-q4-minimum-cover-31-points.png}
\caption{31 点最小命中集的几何分布与定向源的读图约定。
实心圆点为圆域内检测站($15$ 个),空心圆点为圆域外的检测站($16$ 个),
后者用于接收向外发射的边界源;
浅色扇形区域为源位置圆域 $\Omega$。
图中左侧以一个圆外检测站为例说明定向源的观测读法:
绿箭头是该源的发射朝向、浅绿细线扇形是它的 $\pm90^\circ$ 可见范围、
红色虚线是检测站在该点测得的示向度,三者共同说明
"有朝向遮挡时同一位置也可能测不到信号"。
离散校验不等同于连续覆盖证明。}
\label{fig:q4plan}
\end{figure}
从离散覆盖推广到连续覆盖时,需同时计入位置与朝向的离散化误差。
设任意实际位置距某采样位置不超过 $\varepsilon$,
实际朝向距其采样朝向不超过 $\alpha$,覆盖站点距采样位置为 $d$。
由三角不等式及单位向量差的上界,一组充分条件为
\begin{equation}
d+\varepsilon\le1000,\qquad
(s-g_i)\cdot u(\psi_i)\ge
\varepsilon+2d\sin(\alpha/2).
\label{eq:continuous}
\end{equation}
采样网格应覆盖 $\Omega$ 及其边界。本文对 $31$ 点方案采用离散集合覆盖模型,
对 $49$ 点方案采用上述连续覆盖定理;连续近似误差的控制将在未来工作中讨论。
\subsection{位置与朝向联合候选的保守更新}
站点解决"能否发现",而要完成清除还必须知道源在哪里、朝向如何。
这正是问题三的候选集表示不足以处理的部分:位置可行并不代表朝向可行。
对定向假设,在每个候选位置网格的中心 $z$ 附加 $H=24$ 个朝向档,
档宽为 $15^\circ$。令 $M_z$ 为仍可能的朝向掩码。
方向与近距离观测先更新位置约束,再保留可能覆盖检测点的朝向;
无信号时只有在整格处于 $1000$ m 保证接收盘内,才可删除必然可见的朝向。
记 $\beta=\operatorname{bearing}(z\to s)$、
$\Delta_\psi=7.5^\circ$,格内方位余量为 $\alpha_z$,
查表舍入余量为 $\eta_\psi=1.5^\circ$。
以 $d_\circ$ 表示圆周最小角差,保守保留条件为
\begin{equation}
\begin{aligned}
\text{正观测:}\quad&
d_\circ(\psi_k,\beta)\le90^\circ+\Delta_\psi+\eta_\psi+\alpha_z,\\
\text{盘内负观测:}\quad&
d_\circ(\psi_k,\beta)>90^\circ-\Delta_\psi-\eta_\psi-\alpha_z.
\end{aligned}
\label{eq:heading}
\end{equation}
第二行保留含有不可见方向的朝向区间,排除整个区间均可见的候选。
若格心距测点过近,格内方位可覆盖整个圆周,此时保留全部朝向。
在定向假设下,上述更新保持真源所在位置与朝向网格的可行性。
\subsection{可见性筛选与探点选择}
联合候选的第一个用途是给候选测点排序。
在混合场景中,一个测点是否值得去,取决于那里的候选源有多大可能正对着它。
对候选 $q$,以均匀接收半径假设给出距离权重
\begin{equation}
w_r(d)=
\begin{cases}
1,&d\le1000,\\
(1500-d)/500,&1000<d<1500,\\
0,&d\ge1500.
\end{cases}
\end{equation}
记 $\widetilde{\mathcal G}_c$ 为位置样本集,$b_z(q)$ 为与检测点 $q$ 相容的候选朝向档数,
采用如下\textbf{可见性权重}:
\begin{equation}
V(q)=\frac1{|\widetilde{\mathcal G}_c|}\sum_{z\in\widetilde{\mathcal G}_c}
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$ 半径上的八方向环点。
排除已被遮挡的重复点后,保留评分达到当前最大值 $70\%$ 的点,
并从中选择
\begin{equation}
\frac{\norm{p-q}}5+\frac{\norm{q-m}}5+6
\label{eq:q4score}
\end{equation}
最小者。常数 $6$ 是检测加换频的选点评分费用,
真实结算仍按当时频道计算。该规则优先避免完全遮挡的点,
再减少移动及后续接近距离。
联合集不可用时,返回算法2、对跖探点和环探的确定性顺序。
持续遮挡时转入基于距离约束的网格遍历清除。
\subsection{网格遍历清除与计算预算}
遮挡可能使定位长期无法收缩,此时需要一条不依赖朝向信息的兜底路径。
注意到清除是否成功只与距离有关,与源朝向无关,
因此可以放弃"先定位再清除"的顺序,改为逐格试探。
当一轮有效定位测量达到 $8$ 次,或连续遮挡探点达到 $4$ 次且候选区域仍较大,
对保守凸候选多边形建立边长 $20$ m 的方格覆盖。
保留所有与多边形相交的格子,并以格心作为清除点。
格内任一点到格心距离满足
\begin{equation}
\norm{g-z}\le10\sqrt2<20.
\label{eq:fallback}
\end{equation}
因清除与源朝向无关,只要真源保留在多边形中,
逐格清除必有一次到达其 $20$ m 内。
按最近邻顺序访问,首次成功即停止该频道的网格遍历。
兜底方案必须受预算约束,否则会挤占其他频道的处理时间。
若外包框宽、高为 $w,h$,保守格数上界为
\begin{equation}
B_{\mathrm{cell}}=
\left(\left\lceil\frac w{20}\right\rceil+2\right)
\left(\left\lceil\frac h{20}\right\rceil+2\right).
\end{equation}
当前格数硬上限为 $400$,现实预算需覆盖
$N_{\mathrm{cell}}\,t_{\mathrm{RTT},95}+t_{\mathrm{reserve}}$。
超过格数或预算上限即跳过并报告未解决;
全部清除点失败则保留候选集并记录异常。
在\textbf{候选区域包含真源、格数满足上限且预算足够}的条件下,
逐格访问可保证完成该源的清除。
\subsection{算法四与终止条件}
\begin{algorithm}[htbp]
\caption{前向半盘最小命中集、联合信念与后备清除}
\label{alg:q4}
\begin{algorithmic}[1]
\Require 混合源接口、定向覆盖计划与预算
\Ensure 已清除频道、未解决频道与停止依据
\State 加载覆盖计划;默认 $31$ 点按 $15$ m/$72$ 档校核,$49$ 点备选有连续证明
\While{存在未解决频道且预算充足}
\State 选择最近待测站,当前频道优先,批量检测未知频道
\State 更新凸位置候选与位置乘朝向联合幸存集;首次正观测后建立朝向候选
\While{频道尚未清除}
\State 按可见性概率筛选探点,取移动最省者执行测量
\If{满足半径判据}
\State 执行清除并跳出
\ElsIf{遮挡或定位停滞}
\State 检查格数与预算,允许则执行 $20$ m 方格后备清除
\EndIf
\EndWhile
\EndWhile
\State 主动退出时报告清除数与停止依据
\end{algorithmic}
\end{algorithm}
综上,问题四得到三点结论:1. 定向源使无信号具有距离与朝向两种解释,
候选集必须由位置扩展为位置与朝向的联合表示;2. 发现条件须由位置圆盘覆盖
提升为前向半盘覆盖,$31$ 点最小命中集以远少于网格的站点数完成该任务;
3. 清除与朝向无关这一物理性质可用于构造有界预算的兜底清除,
使遮挡不再导致任务无法完成。
+240
View File
@@ -0,0 +1,240 @@
\section{实验结果与分析}\aigcC
\subsection{实验设置与数据来源}\aigcC
本文的实验分两部分,职责严格区分。
\textbf{机制论证与定量结论}取自项目内自建模拟器
(\pathtext{referee},按题面附件 1、附件 2 复现的评测机)的演练局:
演练局可提供真实源位置、机器人轨迹和逐次检测读数,
因此能够支撑路径示意、机制分析与逐局的定量比较。
\textbf{最终效果验证}取自官方模拟器的六份正式导出包,
因无法获取真实位置点,只在附录~\ref{app:formal} 中报告清除数量、总虚拟时间与程序运行时间。
演练局由 \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{问题一与问题二的配对对比}\aigcC
先看几何层的两个判据在数值上的表现。问题一用固定示例与随机交会算例
(共 $\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{问题三:演练局结果与基线对比}\aigcC
问题三的闭环在 $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.94\linewidth]{selfbuilt-q3-search-clear-path.png}
\caption{自建模拟器演练局 \texttt{\PractQThreeMainCase}($\PractQThreeMainSources$ 个全向源)的搜索与清除路径。
折线为机器狗轨迹;每条浅色细射线表示一次 $\direction$ 检测测得的示向度,
射线起点即发起该次检测的位置;圆点为测到示向度的检测点($55$ 次),
菱形为测到近距离的检测点($1$ 次),灰色叉号为无信号检测点($29$ 次);
星号为成功清除点,金色叉号为干扰源真值。全部数据由自建模拟器真值输出。}
\label{fig:selfbuiltq3}
\end{figure}
图~\ref{fig:selfbuiltq3} 给出其中一局(\texttt{\PractQThreeMainCase},
$\PractQThreeMainSources$ 个源)的完整路径。
机器人先按七点计划完成覆盖与批量扫频,再围绕候选区域执行定位与清除;
清除点与源真值基本吻合,轨迹在多个源之间跳跃后逐步收敛。
该局共检测 $\PractQThreeMainMeasures$ 次、换频 $\PractQThreeMainSwitches$ 次,
移动 $\PractQThreeMainMove$ km,总虚拟时间 $\PractQThreeMainTime$ s,
程序运行时间仅 $\PractQThreeMainRun$ s。
\subsection{问题四:演练局结果与基线对比}\aigcC
问题四的困难来自遮挡,因此对比的重点不只是时间,还包括"是否真的全部清除"。
表~\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{动作耗时分解}\aigcC
上面的对比说明"哪种策略更快",还需要说明"时间花在哪里"。
把式~\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}。
\input{data/practice-cost-summary-table}
\begin{figure}[htbp]
\centering
\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$,
说明"清除"不是时间瓶颈,真正的成本在于把机器人送到能清除的位置。
检测与换频合计占比不高,但因换频次数与移动路径耦合,
仍需一并计入路径排序,不能单独优化。
\subsection{本节结论}\aigcC
综合以上配对对比与演练局复算,可提炼出四点结论:
1. 几何层的精确判据不需要以效率为代价——问题一的最优实现误差为零而耗时更短,
问题二则在保证接收率为 $100\%$ 的同时把最坏后验半径压到基线的约五分之一;
2. 多源搜索的效率来自"证明不需要检测",网格幸存集与七点覆盖使默认策略的检测次数
和位移相对网格基线分别降到约四分之一和五分之一,平均虚拟时间下降 $\ProjQThreeDropOpt$;
3. 混合源场景必须为无信号保留朝向解释,否则会出现缺席误判;
默认策略以全清率 $100\%$、缺席误判 $0$ 和平均 $\ProjQFourMeanOpt$ s 的代价
换取了这种完备性;
4. 本次采集的 $44$ 局演练中,两类场景的全部源都被清除且失败清除为零,
移动时间占总耗时的 $\PractQThreeMoveShare$ 与 $\PractQFourMoveShare$,
是继续优化的首要对象;清除动作本身只占 $\PractQThreeClearShare$ 与 $\PractQFourClearShare$,
不是当前的时间瓶颈。
+61
View File
@@ -0,0 +1,61 @@
\section{计时模型与会话状态机}\aigcC
\begin{figure}[htbp]
\centering
\includegraphics[width=0.92\linewidth]{steps-state-machine.png}
\caption{会话状态机。进入后经 $5$ s 倒计时接口开放,主动退出或断连后进入关闭状态。}
\label{fig:statemachine}
\end{figure}
\subsection{动作耗时与累计虚拟时间}
题面将全部动作折算为虚拟耗时,见表~\ref{tab:actioncost}。
检测无论返回无信号、近距离还是示向度,均计 $5$ s;
清除成功计 $5$ s,其中光学定位 $3$ s、激光清除 $2$ s,
未命中目标时只支付光学检查的 $3$ s。
移动与换频没有独立指令,由相邻动作的位置与频道变化推断。
\begin{table}[htbp]
\centering\small
\caption{动作耗时规则。移动耗时等于直线距离除以 $5$ m/s。}
\begin{tabularx}{\linewidth}{l l l X}
\toprule
动作 & 指令 & 虚拟耗时/s & 说明\\
\midrule
进入 & \texttt{/enter} & 0 & 初始位置 $(0,0)$、初始频道 $1$\\
检测 & \texttt{/measure} & $5+$移动$+$换频 & 三种检测结果耗时相同\\
清除 & \texttt{/clear} & $5+$移动/$3+$移动 & 成功/未命中目标,均不切换测向频道\\
退出 & \texttt{/exit} & 0 & 路径终点自由,无需返回原点\\
换频 & 由检测推断 & 1 & 相邻 \texttt{/measure} 的频道变化\\
移动 & 由动作推断 & 距离$/5$ & 相邻动作的位置变化\\
\bottomrule
\end{tabularx}
\label{tab:actioncost}
\end{table}
设整个会话的移动距离为 $L$,检测、换频、成功清除与失败清除的次数分别为
$N_m,N_s,N_c^+,N_c^-$。忽略每段移动时间的微秒量化时,总虚拟耗时为
\begin{equation}
T=\frac{L}{5}+5N_m+N_s+5N_c^++3N_c^-.
\label{eq:time}
\end{equation}
式~\eqref{eq:time} 是后文任务排序的服务时间来源,
也是由官方累计量反推移动时间(式~\eqref{eq:residual})的依据。
图~\ref{fig:timingexample} 用附件的五步示例说明记账方式:
首次检测含移动 $100$ s 与检测 $5$ s,单步 $105$ s;
原地换到频道 $2$ 检测单步 $6$ s,累计 $111$ s;
清除目标频道 $3$ 未命中,移动 $80$ s 加光学检查 $3$ s,单步 $83$ s,累计 $194$ s;
清除不改变测向机频道,故随后原地以频道 $2$ 复测只需 $5$ s,累计 $199$ s,与附件一致。
\begin{figure}[htbp]
\centering
\includegraphics[width=0.55\linewidth]{timing-attachment-example-105-111-194-199.png}
\caption{附件计时示例的逐动作构成。移动项为距离除以 $5$ m/s,标题数字为该步合计。}
\label{fig:timingexample}
\end{figure}
\subsection{虚拟时间、现实预算与终止}
虚拟时间度量任务完成速度,现实预算约束程序能否继续发出请求,两者不能混用。
程序以 \texttt{/enter} 返回的 \texttt{remaining\_real\_duration\_s} 为准,
在每个动作前预留退出时间;虚拟时间以整数微秒累计,在线预测只用于规划与一致性核对。
因此后文的“耗时”一律指式~\eqref{eq:time} 的虚拟时间,程序运行时间在结果表中单列。
策略在预算不足或协议异常时主动退出并报告未解决频道,不以程序正常结束代替任务完成。
Binary file not shown.
-194
View File
@@ -1,194 +0,0 @@
# 协议规则表、字段表与状态机(P0 交付)
依据:`issue/附件/附件1.docx`《模拟器使用说明》、`issue/附件/附件2.docx`《模拟器通信接口说明及编程指南》。
本文是人类可读版本;**可执行版本**是 `src/mcm26b/protocol/rules.py`(字段表与错误语义)、
`src/mcm26b/protocol/timing.py`(计时模型)与 `src/mcm26b/config.py`(全部常量),
三者由 `tests/test_protocol_timing.py`、`tests/test_protocol_client.py` 固化验收。
## 1. 动作与耗时规则表
| 动作 | 指令 | 虚拟耗时 | 说明 |
| --- | --- | --- | --- |
| 开始 | `POST /enter` | 0 | 初始位置 (0,0),初始频道 1;虚拟/程序时钟开始 |
| 检测 | `POST /measure` | 5 + 移动 + 换频道 | 无论结果(no_signal/near/direction)均为 5s |
| 清除 | `POST /clear` | 未发现 3 / 成功 5 + 移动 | 5 = 光学定位 3 + 激光清除 2;**不切换测向频道** |
| 结束 | `POST /exit` | 0 | 成功响应中 exit_reason 固定 `user_exit` |
| 切换频道 | 无独立指令 | 1 | 只由合法 `/measure` 的 channel 变化推断 |
| 移动 | 无独立指令 | 直线距离/5(m/s) | 由 `/measure` 或 `/clear` 的 position 推断 |
派生事实(易错点):
- 一次合法 `/measure` 完成后,测向机频道更新为本次检测频道;
- `/clear` 的 channel 只是目标频道,既不切频道、也不产生切换耗时,因此
"清除后原地再测"的耗时只取决于上一次 **/measure** 的频道;
- 只有 accepted=true 的请求推进虚拟时钟;`accepted=false` 的 virtual_time_s=0 不是当前时刻;
- 5 秒检测只是虚拟耗时,不要求现实等待。
## 2. 字段表
公共请求字段(4 条指令都必填):
| 字段 | 类型 | 约束 |
| --- | --- | --- |
| arena_id | string | 必须为 `"default"` |
| robot_id | string | 逐字节等于登录参赛队号;UTF-8 长度 1..64;无控制字符 |
| request_id | string | 会话内幂等键;UTF-8 长度 1..128;无控制字符 |
动作字段(实现见 `rules.ACTION_FIELDS`):
| 指令 | 字段 | 约束 |
| --- | --- | --- |
| /enter | (无附加) | |
| /measure | position{x,y}, channel | x/y 有限数值且 \|v\|<=2,000,000;channel 整数 1..20(1.0 亦接受,1.5 拒绝) |
| /clear | position{x,y}, channel | 同上;channel 是目标频道 |
| /exit | (无附加) | |
响应字段:
| 场景 | 字段 |
| --- | --- |
| 所有响应 | accepted, real_timestamp_ms, virtual_time_s |
| accepted=false | 仅上述 3 个字段(virtual_time_s=0) |
| /enter 成功 | + max_virtual_duration_s, max_real_duration_s, remaining_real_duration_s |
| /measure 成功 | + measure_result ∈ {no_signal, near, direction};direction 时另有 svd_deg(保留两位小数) |
| /clear 成功 | + clear_result ∈ {success, no_target_in_range} |
| /exit 成功 | + exit_reason = "user_exit" |
错误语义(必须同时检查 HTTP 状态与 accepted):
| 情形 | 结果 | 对 request_id 的影响 |
| --- | --- | --- |
| JSON 语法/重复键/缺字段/类型/坐标频道范围 | HTTP 400 | 不占用,修正后可复用 |
| 未知字段(含 position 下)、arena/robot 不匹配、测试状态拒绝 | HTTP 200, accepted=false | 不占用 |
| 动作被接受 | HTTP 200, accepted=true | 占用 |
| 同 ID 不同内容,或并发不同动作 | HTTP 409 | — |
| 网络失败重试同一动作 | 复用原 ID+原内容,服务器回放首次响应 | 不重复生效 |
| 429/500 | 可原样重试 | — |
| 404/405/413/415 | 确定性错误,不得重试 | — |
物理规则速查:Ω 半径 1800m;源数 10–16;频道 1–20;接收半径 [1000,1500]m(逐源未知);
near 阈值 5m;清除半径 20m(与定向朝向无关);定向覆盖 = 朝向两侧各 90°(含边界);
示向度误差幅度 ±1°,保留两位小数;虚拟限时 360000s;程序限时 1200s(以 /enter 的
remaining_real_duration_s 为准,不得假定恒为 1200);测试窗口 25 分钟。
## 3. 状态机
机器狗会话状态(`protocol.state.RobotState` + 客户端会话标志):
```
/enter accepted /exit accepted
[未进入] ───────────────▶ [已进入] ───────────────▶ [已退出]
│ accepted=false │ accepted=false │ 任何动作 accepted=false
└── 不变 └── 不变 └── 不变
```
[已进入] 状态内跟踪:position、测向机 channel、virtual_time_s。转移规则:
| 事件 | position | channel | virtual_time_s |
| --- | --- | --- | --- |
| /enter accepted | (0,0) | 1 | 0 |
| /measure accepted | ← 本次 position | ← 本次 channel | ← 响应值(=旧值+移动+切换+5) |
| /clear accepted | ← 本次 position | **不变** | ← 响应值(=旧值+移动+3或5) |
| /exit accepted | 不变 | 不变 | ← 响应值 |
| accepted=false / 网络 / 400 | 不变 | 不变 | 不变 |
虚拟时刻以最近一次 accepted=true 的响应为准;本地预测(timing 模块)只用于
规划与一致性核对,偏差记入 `RobotState.mismatches` 并写日志(strict 模式抛错)。
## 4. 计时示例逐步推演(附件1表2 = 附件2第10节)
| 步 | 指令 | 移动 | 换频道 | 动作 | 本步 | 累计 |
| --- | --- | --- | --- | --- | --- | --- |
| 1 | /enter | 0 | 0 | 0 | 0 | **0** |
| 2 | /measure (300,400) ch1 | 500m→100s | 0(初始即1) | 5 | 105 | **105** |
| 3 | /measure (300,400) ch2 | 0 | 1 | 5 | 6 | **111** |
| 4 | /clear (300,0) 目标ch3 | 400m→80s | 0(clear不切频道) | 3(未发现) | 83 | **194** |
| 5 | /measure (300,0) ch2 | 0 | 0(第3步后已是2,clear未改) | 5 | 5 | **199** |
| 6 | /exit | 0 | 0 | 0 | 0 | **199** |
验收:`uv run mcm26b sim-check` 通过完整客户端→本地模拟器链路复现
`[105, 111, 194, 199]`;`tests/test_protocol_timing.py::TimingModelTests`
逐步断言每个分项。
## 5. 客户端设计要点(P1 交付)
- **串行**:完全同步,一个动作未决不发下一个;
- **幂等重试**:请求体一次性序列化为 bytes,网络失败/429/500 时原样重发
(同 request_id 同内容),最多 `max_attempts` 次,指数退避;400/404/405/409/413/415 立即失败;
- **accepted=false**:抛 `ActionRejected`,状态不更新;virtual_time_s=0 不入时钟;
- **现实预算**:/enter 成功后 `deadline = monotonic() + remaining_real_duration_s`;
新动作前检查 `剩余 > reserve_exit_s`(默认 60s [工程]),/exit 豁免;
- **日志**:`SessionLog` 逐事件追加 JSONL(attempt/transport_error/accepted),
进程崩溃不丢已发记录,回放测试与 evaluation 复算共用同一格式;
- **本地预校验**:channel 范围、坐标有限性与 2e6 上限、robot_id/request_id 格式
在发送前拒绝(与服务器 400 语义一致,省一次往返)。
## 6. 策略层如何使用本协议(P3/P4 交付)
第 5 节的客户端是策略层唯一的事实来源;`belief`(候选集)、`planner`(选点与闭环)
不绕开它直接发请求。衔接约定:
- **串行不变**:闭环每个决策步只发一个动作,`measure`/`clear` 的返回值
(`MeasureOutcome`/`ClearOutcome`)是 belief 更新的唯一输入;
- **状态同步**:机器人位置/测向频道/虚拟时刻一律读 `client.state`,
频道规则(§3 状态机表)由状态机自动维护,策略层不自行推算;
- **预算驱动退出**:`DeadlineExceeded` 只在 `/exit` 之外的动作前抛出;
闭环捕获后立即 `/exit`(豁免检查),并把该局记为"未证明完成",
不与全清成功混记;
- **选点的接收保证**:选点器只在保证接收盘 B(mec, 1000-ρ) 内取点,
盘内任一点到候选集每点距离 < 1000 ≤ 最小接收半径,因此定位阶段
不会浪费 `no_signal`(ρ>1000 的一般候选集退化为探索 MEC 圆心,允许
no_signal,理由字段中如实标注);
- **清除证书**:候选集外包多边形半径(含近似误差与工程余量)
≤ 20m 才发起 `/clear`;证书有效但清除失败视为异常,先补测再重试,
不在同一证书上重复消耗 3 秒/次的失败清除;
- **停止条件**(全部显式实现):清除数达 16(源数上界证明)、
每频道均"已清除或覆盖证明不存在"、现实预算耗尽。发现若干源、
连续 no_signal、候选采样为空都不是停止条件;
- **验收**:`tests/test_loop_q3.py` 在自建模拟器上覆盖 10/16/0 源、
近边界源、预算耗尽与故障注入;`uv run mcm26b run --robot-id <队号>
--self-test` 可离线复跑随机场景,正式模式去掉 `--self-test` 即对接
模拟器(日志用 `--log` 落盘,格式同 §5 JSONL)。
## 7. 定向扩展如何使用本协议(P5 交付)
问题4的定向源在**协议字段上与全向源完全不可区分**:`/measure` 仍只返回
no_signal/near/direction(direction 附 svd_deg),`/clear` 仍只看 20m 半径。
"该源是定向的"无法从报文读出,只能由观测推理。因此 §5/§6 的协议用法全部
照用,定向性只改变策略层的解释与决策:
- **发现阶段零改动**:49 点覆盖保证对定向源同样成立——源位于某网格单元
凸包内时,任意发射半平面(朝向 ±90°,含边界)必含至少一个顶点,且该
顶点距离 ≤ 700√2 ≈ 989.95 < 1000 ≤ 最小接收半径,覆盖阶段无需知道
源类型;
- **no_signal 联合约束基线**:定向源的 no_signal 约束的是"位置×半径×朝向"
联合假设,单独维护空间候选会被误删,基线**不据此删任何候选**
(`belief.update_measure` 对 no_signal 无操作);缺席证明仍只由完整覆盖
给出。唯一启用的推理:若 no_signal 发生在保证接收盘 B(mec, 1000-ρ) 内
(该盘内任一全向源必然可收),则只能由朝向遮挡解释 [观测推理]——该频道
记为"观测到定向",进入探点升级梯子:对 MEC 圆心对跖复核一次,再绕
MEC、半径 = ρ 的圆环按 45° 步进探点(环包围任意候选源,发射半平面在
环上截出 ≥180° 弧)。被遮挡探点不消耗定位步数,单轮由
`max_blocked_probes`(4 [工程])限流;梯子不构成接收保证,失败由后备
清除兜底;
- **后备清除的协议用法**:定位停滞(候选集有界但未达 §6 清除证书)时,
对候选外包多边形构造 20m 有限圆盘覆盖(`fallback_clear_cells`:全局
半开网格索引、相交判定带正容差,格内任一点距某格心 ≤ 10√2 < 20m),
按"距机器人最近优先"逐格发 `/clear`(同频道、不同位置)——清除与朝向
无关 [题面],是定向源不依赖可见性的完备后备。两条预算硬门槛(任一
不满足即跳过并留痕,绝不盲扫):
- 格数上界:N ≤ `fallback_max_cells`(400 [工程]);外包框枚举先按
(⌈w/20⌉+2)(⌈h/20⌉+2) 做规模检查,宽候选集(如仅一次读数的 750m
截断角域,数千格)必须继续定位而非硬扫;
- 现实预算:N × `real_rtt_p95_s` + `reserve_exit_s` ≤ 剩余现实时间。
虚拟耗时上界 ≈ 移动 L/5 + 3N(全失败)或 3(N-1)+5(末次成功);
- **真源不误删**:no_signal、失败的 `/clear`(含后备逐格全失败)均不删
空间候选;后备全失败按守恒性破坏记异常(格心距格内任一点 < 20m,
理论上必命中);
- **停止条件与预算语义不变**:仍是清除数达 16、每频道均"已清除或覆盖
证明不存在"、现实预算耗尽(记未证明完成)三种;
- **验收**:`tests/test_loop_q4.py`(15 项:覆盖格无空洞与格线两侧保留、
退化多边形、格数上界公式;混合 10/16 源全清、朝向背离圆心的近边界源
不漏、批量种子回归;no_signal 不删候选;格数硬顶与预算跳过;后备
正路径命中与全失败异常留痕);`uv run mcm26b run --robot-id <队号>
--problem 4 --self-test` 可离线复跑混合场景(`--directional` 指定
定向源数),正式模式同 §6。
-249
View File
@@ -1,249 +0,0 @@
# B题问题一 交会定位区域的直径与圆覆盖
问题一可以转化为二维半平面交问题:每次带误差的示向度给出一个前向角域,多次测量的交集就是定位区域。对于非空有界定位多边形,直径等于最远顶点对的距离。**以这个直径为直径的圆不一定覆盖定位区域。**判断是否能覆盖,应检验最远顶点对中点到所有顶点的距离,或直接计算最小包围圆。
代码、合成算例与官方演练观测均已实现和保存。本解答只解决问题一;在官方问题3演练中采集同一频道的三个检测点,用于检验交会计算,没有执行全域搜索清除任务,未使用正式测试。
## 一、题目假设和模型边界
检测点为 $S_i=(s_{ix},s_{iy})$,测得示向度为 $\theta_i$,误差半角为 $\delta=1^\circ$。角度从正东开始逆时针计算。同一频道对应同一干扰源;位置不变时重复检测不会消除误差。
本问求附录2交会法所定义的多边形,因此主模型只取前向角域之交,不额外加入1800米圆域或1500米接收上界。这些先验可用于后续搜索定位,但加入圆盘后边界可能包含圆弧,不能仍按原问题的纯多边形处理。本程序也不以图像视窗作为真实边界。
模拟器示向度保留两位小数,正文规定误差在 $\pm 1^\circ$ 内。本次主计算使用 $\pm 1^\circ$;如需把独立舍入误差也纳入保守预算,可用 `--rounding-margin-deg 0.005` 显式追加半角,输出会记录实际误差半角。这是额外的工程裕量,不是题面规定。
## 二、从测向角域得到线性约束
设二维叉积 $[a,b]=a_xb_y-a_yb_x$,令
$$
u_i^-=(\cos(\theta_i-\delta),\sin(\theta_i-\delta)),\qquad
u_i^+=(\cos(\theta_i+\delta),\sin(\theta_i+\delta)).
$$
未知源位置 $X=(x,y)$ 必须满足
$$
[u_i^-,X-S_i]\ge0,\qquad [u_i^+,X-S_i]\le0.
$$
这两条不等式选择两条边界射线之间的前向角域,而不是无限延伸的两条直线。写为标准形式 $a_jx+b_jy\le c_j$:
$$
\begin{aligned}
\sin(\theta_i-\delta)x-\cos(\theta_i-\delta)y
&\le \sin(\theta_i-\delta)s_{ix}-\cos(\theta_i-\delta)s_{iy},\\
-\sin(\theta_i+\delta)x+\cos(\theta_i+\delta)y
&\le-\sin(\theta_i+\delta)s_{ix}+\cos(\theta_i+\delta)s_{iy}.
\end{aligned}
$$
程序另外保留 $u_i\cdot(X-S_i)\ge 0$ 的前向约束。当 $0<\delta<90^\circ$ 时它是冗余的,但可让 $\delta=0$ 的扩展情形正确表示射线,而不是整条直线。实现支持 $0\le\delta<90^\circ$,题目算例始终使用 $1^\circ$。
定位区域为
$$
P=\bigcap_{i=1}^{n}W_i=\{X:AX\le b\}.
$$
通过向量而不是简单的角度大小比较处理约束,可自然处理 $359^\circ$ 与 $0^\circ$ 跨界问题。
## 三、可复现的算法
1. 验证输入为有限数值,将检测点平移至其均值附近并按尺度归一化,减小大坐标带来的抵消误差。
2. 构造所有半平面;枚举每对不平行边界直线的交点。
3. 只保留满足全部不等式的交点;去重后用单调链算法求凸包,并保留点、线段等退化结果。
4. 判断有无非零方向 $d$ 满足 $Ad\le 0$。若存在,任一可行点沿该方向无限前进仍可行,区域无界,直径为无穷大。
5. 对有界非空区域,枚举凸包顶点对,得到直径及一对最远顶点。
6. 用任意一组最远顶点对中点与半径 $D/2$ 检验圆覆盖;失败时返回圆外顶点及最大超出距离。用 Welzl 随机增量法求最小包围圆,输出 20 米清除半径余量,以区分“直径圆覆盖”和“保证清除”。
非空前向角域的交集不会包含一条双向无限直线,即它是尖的多面集。这保证非空区域存在极点,所以在本模型中可以通过是否存在可行边界交点来判空。无观测时需单独返回整个平面无界,不能依据“没有顶点”误判为空集。
二维非平凡衰退锥若存在,至少有一条边界方向与某个约束边界平行。因此检查每条边界的两个切向方向是否满足 $Ad\le 0$,即可判定无界性。无界情形中输出的有限顶点仅是区域的极点,不构成完整有限多边形。
伪代码如下:
```text
输入同一频道的测量列表 M
若 M 为空:返回无界
H ← 将每次测量转换为前向角域的半平面约束
V ← 所有边界对交点中满足 H 的点
若 V 为空:返回空集
若存在非零 d 满足 H 的齐次约束 A d <= 0:返回无界
V ← 去重并排序为凸包
(D, A, B) ← V 中的最远顶点对
O ← (A+B)/2
覆盖成立 <- max_{v in V} ||v-O|| <= D/2
返回 V、D、A、B、O、覆盖判断和最小包围圆
```
设半平面数为 $k$(本实现中 $k=3n$),最终顶点数为 $m$。枚举交点并检验全部约束需要 $O(k^3)$,直径计算需要 $O(m^2)$,无界性检查需要 $O(k^2)$。可行交点排序的代价上界为 $O(k^2\log k)$,临时交点存储上界为 $O(k^2)$。新增直径圆证据只需 $O(m)$ 遍历。
最小包围圆改为 Welzl 随机增量算法:先打乱点顺序;已有圆包含新点则保留,否则强制新点成为边界点并解更小子问题;二维最多需要 3 个支撑点。3 个强制边界点必须用外接圆,不能误用这 3 点的无约束最小圆。实现以显式栈代替递归,防止大量点超过 Python 递归深度。固定随机种子使输出可复现,理论期望线性指随机排列下的期望,不是该固定种子的最坏复杂度保证。对外函数内部也做坐标归一化,最后重新计算所有点到输出圆心的最大距离,保持数值包含性。旧 $O(m^4)$ 支撑点枚举保留为独立测试基准。
半平面交与直径仍采用容易审查的小规模算法,未为少量测点引入更复杂的旋转卡壳。大规模在线数据可后续替换半平面交,不能把MEC局部提速等同于整个求解器线性复杂度。
## 四、为什么只枚举顶点对就能得到直径
有界凸多边形内任意两点可表示为顶点的凸组合:
$$
x=\sum_i\lambda_i v_i,\quad y=\sum_j\mu_jv_j,\quad
\lambda_i,\mu_j\ge0,\quad\sum_i\lambda_i=\sum_j\mu_j=1.
$$
由三角不等式,
$$
\lVert x-y\rVert=\left\lVert\sum_{i,j}\lambda_i\mu_j(v_i-v_j)\right\rVert
\le\sum_{i,j}\lambda_i\mu_j\lVert v_i-v_j\rVert
\le\max_{i,j}\lVert v_i-v_j\rVert.
$$
最远顶点对本身又属于区域,因此上界可以达到:
$$
\boxed{D(P)=\max_{i,j}\lVert v_i-v_j\rVert.}
$$
点的直径为0,线段的直径为端点距离。对空集,本程序约定直径未定义,输出null;对无界区域,输出 `diameter_infinite=true`,不把Infinity写入不兼容标准的JSON数值。
## 五、直径圆能否覆盖的充分必要条件
取任意最远顶点对 $A,B$,距离为 $D$,令 $O=(A+B)/2$。如果半径为 $D/2$ 的某个圆能够同时包含 $A$ 和 $B$,则
$$
D=\lVert A-B\rVert\le\lVert A-O'\rVert+\lVert O'-B\rVert\le D.
$$
两个不等式只能同时取等号,因此其圆心只能是O。又因为圆盘是凸集,包含全部顶点等价于包含整个多边形。所以
$$
\boxed{\text{存在直径为 }D\text{ 的覆盖圆}\iff
\max_{v\in V}\lVert v-(A+B)/2\rVert\le D/2.}
$$
不必尝试移动直径圆,也不必尝试其他最远点对:若这个唯一可能的圆心不满足覆盖,就不存在直径为 $D$ 的覆盖圆。最小包围圆半径 $\rho$ 满足 $\rho\ge D/2$,当且仅当 $\rho=D/2$ 时存在这样的覆盖圆。
代码的 `diameter_circle.max_excess_m` 为 $\max_{v\in V}\lVert v-O\rVert-D/2$;超出数值容差时返回 `witness_vertex` 和从 0 开始的 `outside_vertex_indices`。因此输出既有判断,也有可独立复核的反例。判定中使用 `coverage_tolerance_m`,边界附近的布尔结果属于浮点容差下结论。
保证清除使用 MEC 半径加数值余量 $\varepsilon_m$,再与 20 米比较。`clearance_certificate.remaining_margin_m` 对应 $20-(\rho+\varepsilon_m)$;非负时支持当前圆心清除,负数时不作此保证。这里的证书以观测误差界正确、真源属于 $P$ 和浮点几何计算可靠为前提,不是实际清除成功记录。数学上所有可行清除中心构成 $\bigcap_{v\in V}B(v,20)$,MEC 圆心是充分选择;后续可在此集合中另选距离机器狗最近的点。
## 六、满足题设 $\pm 1^\circ$ 的具体反例
取三个检测点及示向度:
| 检测点 | x(米) | y(米) | 示向度 |
| --- | ---: | ---: | ---: |
| $S_1$ | $-1000$ | $0$ | $1^\circ$ |
| $S_2$ | $540$ | $-500\sqrt{3}$ | $121^\circ$ |
| $S_3$ | $520$ | $520\sqrt{3}$ | $241^\circ$ |
三个角域的交集恰为等边三角形,顶点是 $(0,0)$、$(40,0)$、$(20,20\sqrt{3})$。每个角域的一条边界对应三角形的一条边,另一条边界在三角形外侧,不切去三角形内部。可将真实源设在三角形中心 $(20,20\sqrt{3}/3)$,其真实方位与上述读数的偏差均小于 $1^\circ$,且三个检测距离都小于 1500 米。因此这不是脱离测向模型的任意图形反例。
它的直径为 $D=40$ 米;直径圆半径为 20 米。以底边两端为最远点对,圆心为 $(20,0)$,到第三个顶点的距离是 $20\sqrt{3}\approx 34.6410$ 米,因此不能覆盖。其最小包围圆为
$$
O_*=(20,20\sqrt{3}/3),\qquad \rho_*=40/\sqrt{3}\approx 23.0940\,\text{米}>20\,\text{米}.
$$
![等边三角形定位区域反例](../output/q1/figures/counterexample-736-light.png)
图中蓝色为定位区域,红色虚线为直径圆,绿色实线为最小包围圆。黑色加号只在合成场景中表示已知真源。
## 七、官方演练数据验证
2026年9月10日,界面明确为“问题3 演练 测试”后,通过公开HTTP接口采集。案例编码为 `U5ZW-P9KN-TCAG-R7ST`,选取频道9。
| 检测点 | x(米) | y(米) | 示向度 |
| --- | ---: | ---: | ---: |
| $S_1$ | $0$ | $0$ | $131.52^\circ$ |
| $S_2$ | $-613.761885$ | $391.530775$ | $34.92^\circ$ |
| $S_3$ | $-314.272134$ | $656.683353$ | $227.19^\circ$ |
重复在 $S_1$ 测量一次仍返回 $131.52^\circ$。这次重复观测只用于核查原地误差固定,没有作为新的独立测点加入模型。
使用 $\pm 1^\circ$ 得到四边形,其顶点按逆时针顺序为:
| 顶点 | x(米) | y(米) |
| --- | ---: | ---: |
| V1 | −460.698306 | 502.411776 |
| V2 | −456.424236 | 497.750714 |
| V3 | −440.569893 | 515.476604 |
| V4 | −441.370356 | 516.413163 |
计算结果:D=23.996723米,最远点对为V1和V3;直径圆中心为(−450.634100,508.944190),半径11.998362米,但最远顶点到这个圆心的距离为12.602364米,所以该圆不能覆盖区域。最小包围圆中心为(−449.976955,507.952835),半径12.068583米。
![官方演练测向所得定位区域](../output/q1/figures/practice-736-light.png)
共发送14个被接受的请求:1次进入、12次检测、1次退出,最终虚拟时间293.602198秒。日志末尾为 `/exit`、`accepted=true`、`exit_reason=user_exit`;界面显示测试正常结束。没有调用 `/clear`,所以这里不能将演练结束解读为“清除了所有源”。官方没有公开该源的坐标真值,本例验证的是观测交会计算、接口适配和几何自洽性,不声称验证了真实位置误差。
原始请求响应保存在 `output/q1/practice/*_actions.json`,保留了复算所需的请求ID、位置、频道与时间;三点观测及其计算结果保存在 `*_observations.json`。没有读取或解密模拟器隐藏场景数据。
## 八、运行方式和代码入口
核心算法仅用Python标准库,支持Python3.10及以上;工程依赖仅 `requests`(测试另需 `pytest`)。在项目根目录运行:
```powershell
uv run python -m mcm26b.geometry examples/q1/triangle.json -o output/q1/triangle_recomputed.json
uv run mcm26b q1 examples/q1/normal.json
uv run python -m mcm26b.geometry examples/q1/normal.json --rounding-margin-deg 0.005
uv run pytest
uv run python scripts/build_q1_demo.py
uv run python scripts/benchmark_q1.py
```
输入JSON的最小格式:
```json
{
"measurements": [
{"x": 0, "y": 0, "bearing_deg": 131.52, "half_angle_deg": 1},
{"x": -613.7618853216438, "y": 391.53077545248124, "bearing_deg": 34.92},
{"x": -314.2721344680094, "y": 656.6833525352392, "bearing_deg": 227.19}
]
}
```
省略 `half_angle_deg` 时默认为1。输出包含区域状态、顶点、直径、最远点对、直径圆覆盖判断、反例证据、最小包围圆和清除余量。CLI的 `error_policy` 记录追加裕量与每条观测最终半角;默认追加0,不改变输入口径。`tolerance_m` 是归一化容差换算回米的尺度;核心算法不接收真源坐标,样例中的 `target` 只用于合成数据的可视化与测试。空集和无界区域不输出有限圆及清除证书。
| 文件 | 职责 |
| --- | --- |
| `src/mcm26b/geometry/localization.py` | 测向角域、半平面、区域分类、直径和包围圆 |
| `src/mcm26b/geometry/planning.py` | 问题二首次测向的距离保证候选圆盘;独立于问题一模型 |
| `src/mcm26b/geometry/__main__.py`、`src/mcm26b/cli.py` | JSON命令行输入输出 |
| `tests/test_geometry.py` | 解析反例、随机几何、独立裁剪对照与退化测试 |
| `tests/test_practice_replay.py` | 离线复算演练计时与观测结果,不连接模拟器 |
| `tests/test_geometry_certificates.py` | 增量圆与穷举法对照、覆盖证据、清除阈值、舍入选项及首次选点证书 |
| `scripts/benchmark_q1.py` | 局部性能对比与官方演练误差界敏感性复算 |
| `scripts/capture_practice.py` | 在已经启动且已核验的演练中采集少量测向 |
| `scripts/build_q1_demo.py` | 用Python算法生成案例、结果和交互图数据 |
| `scripts/assets/q1.template.html` | 可视化源模板;不另写一套求解算法 |
| `output/q1/question1.html` | 可直接打开的离线交互式模拟,所有数据已内嵌 |
如需再次采集,先在模拟器明确启动“问题3演练测试”,等待接口就绪,读取案例编码,然后运行:
```powershell
uv run python scripts/capture_practice.py --robot-id 你的参赛队号 --practice-confirmed --case-code 界面中的演练案例编码
```
接口协议没有返回演练/正式模式的字段,`--practice-confirmed` 是操作者确认已核验界面的显式参数,不能替代界面核查。采集脚本没有启动测试的功能,没有正式模式选项,只会调用 `/enter`、`/measure`、`/exit`。禁止在正式测试会话中运行。
## 九、验证范围和数值限制
20项自动化测试通过,包括100组随机有界案例、60组与独立矩形裁剪实现的对照、250组增量圆与穷举圆对照、1500个共圆点及重复点/共线点、平移旋转缩放不变性,以及已保存演练日志的逐动作计时复算。新增测试还覆盖清除距离20米临界值、显式舍入选项、首次安全候选圆盘边界和零半径情形。已测试一组有限但直径超过10亿米的近乎平行测向,确认不会因为显示范围而被截断成小区域。
本次离线优化报告保存在 `output/q1/optimization_report.json`。同一演练观测的敏感性结果如下,原始记录不改写:
| 误差半角 | 直径 / 米 | MEC半径 / 米 | 直径圆最大超出 / 米 | 含数值裕量的清除余量 / 米 |
| --- | ---: | ---: | ---: | ---: |
| $1^\circ$(默认题设) | 23.996723 | 12.068583 | 0.604002 | 7.931415 |
| $1.005^\circ$(额外舍入) | 24.119088 | 12.130377 | 0.608486 | 7.869621 |
在本机60个共圆点的局部基准中,旧MEC枚举中位约306.5毫秒,新算法约0.096毫秒;4点时旧法约0.022毫秒、新法约0.029毫秒,小规模没有提速优势。这些是特定输入的局部实测,不是普遍倍率保证,也不代表网络、全清闭环或官方成绩。三点演练的完整问题一求解中位约0.099毫秒。运行基准脚本可以重新生成当前机器的报告。
浮点计算不是精确算术。实现使用归一化位置容差 $10^{-9}$、平行行列式阈值 $10^{-12}$ 和较严格的衰退方向角度容差。极端近乎平行、差异接近机器精度或接近退化的输入可能需要高精度几何谓词;结果接近临界阈值时应做容差敏感性检查,而不把最后若干小数位当作严格证明。正常题设坐标和测向精度下,本次案例远离这些数值极限。
交互图数据全部由同一Python求解器生成。已在最小DOM测试环境中检查32个“案例/测点数量/视图”组合,未发现缺失控件或NaN等非法图形坐标;并对360与736像素、明暗两种配色的SVG作静态图形检查。浏览器工具对本地文件URL的访问被策略拦截,因此没有声称完成真实浏览器的HTML/CSS布局验证。离线页面和对话内可视化均已生成;静态PNG可作为直接查看的补充。
几何算法参考:[CGAL最小包围圆定义与Welzl增量方法](https://doc.cgal.org/latest/Bounding_volumes/classCGAL_1_1Min__circle__2.html);[McGill旋转卡壳说明](https://www-cgrl.cs.mcgill.ca/~godfried/research/calipers.html)。本次代码仅用Python标准库,不依赖CGAL。
@@ -0,0 +1,133 @@
{"event":"session_start","case_code":"BBM9-HZG2-77N5-NKKC","module":"q3_practice","robot_id":"1","seed":214175614,"countdown_s":5.0,"window_s":1500.0,"max_real_duration_s":1200.0,"truth":[{"channel":13,"x":-667.5434273375823,"y":1201.9279733147766,"r_eff_m":1068.7667479727882,"directional":false,"heading_deg":0.0},{"channel":18,"x":936.4803225514449,"y":-449.0798658945765,"r_eff_m":1100.2220789348723,"directional":false,"heading_deg":0.0},{"channel":7,"x":1168.5586737701378,"y":-665.9024303254582,"r_eff_m":1380.180019258212,"directional":false,"heading_deg":0.0},{"channel":16,"x":-704.338944452677,"y":-1500.6801256821625,"r_eff_m":1260.765213581664,"directional":false,"heading_deg":0.0},{"channel":9,"x":301.3279949940345,"y":-1195.568730289507,"r_eff_m":1268.9333402487596,"directional":false,"heading_deg":0.0},{"channel":19,"x":-1016.5047516327342,"y":-1362.2054377699205,"r_eff_m":1029.8927902123228,"directional":false,"heading_deg":0.0},{"channel":17,"x":-1128.3611120627002,"y":-751.6668239293164,"r_eff_m":1073.440585013539,"directional":false,"heading_deg":0.0},{"channel":2,"x":1267.339479448259,"y":687.5619158006604,"r_eff_m":1380.3211633911274,"directional":false,"heading_deg":0.0},{"channel":14,"x":-431.7778870393432,"y":921.0181764839424,"r_eff_m":1418.973099517202,"directional":false,"heading_deg":0.0},{"channel":11,"x":437.0112473060851,"y":-112.52557536387796,"r_eff_m":1181.7035745633132,"directional":false,"heading_deg":0.0}]}
{"event":"action","seq":1,"wall_ts_ms":1789097576646,"method":"POST","path":"/enter","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0001"},"response":{"accepted":true,"real_timestamp_ms":1789097576646,"virtual_time_s":0.0,"max_virtual_duration_s":360000.0,"max_real_duration_s":1200,"remaining_real_duration_s":1200}}
{"event":"action","seq":2,"wall_ts_ms":1789097576662,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0002","position":{"x":0.0,"y":0.0},"channel":1},"response":{"accepted":true,"real_timestamp_ms":1789097576662,"virtual_time_s":5.0,"measure_result":"no_signal"}}
{"event":"action","seq":3,"wall_ts_ms":1789097576667,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0003","position":{"x":0.0,"y":0.0},"channel":2},"response":{"accepted":true,"real_timestamp_ms":1789097576667,"virtual_time_s":11.0,"measure_result":"no_signal"}}
{"event":"action","seq":4,"wall_ts_ms":1789097576672,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0004","position":{"x":0.0,"y":0.0},"channel":3},"response":{"accepted":true,"real_timestamp_ms":1789097576672,"virtual_time_s":17.0,"measure_result":"no_signal"}}
{"event":"action","seq":5,"wall_ts_ms":1789097576677,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0005","position":{"x":0.0,"y":0.0},"channel":4},"response":{"accepted":true,"real_timestamp_ms":1789097576677,"virtual_time_s":23.0,"measure_result":"no_signal"}}
{"event":"action","seq":6,"wall_ts_ms":1789097576689,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0006","position":{"x":0.0,"y":0.0},"channel":5},"response":{"accepted":true,"real_timestamp_ms":1789097576688,"virtual_time_s":29.0,"measure_result":"no_signal"}}
{"event":"action","seq":7,"wall_ts_ms":1789097576716,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0007","position":{"x":0.0,"y":0.0},"channel":6},"response":{"accepted":true,"real_timestamp_ms":1789097576716,"virtual_time_s":35.0,"measure_result":"no_signal"}}
{"event":"action","seq":8,"wall_ts_ms":1789097576727,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0008","position":{"x":0.0,"y":0.0},"channel":7},"response":{"accepted":true,"real_timestamp_ms":1789097576727,"virtual_time_s":41.0,"measure_result":"direction","svd_deg":329.53}}
{"event":"action","seq":9,"wall_ts_ms":1789097576757,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0009","position":{"x":0.0,"y":0.0},"channel":8},"response":{"accepted":true,"real_timestamp_ms":1789097576757,"virtual_time_s":47.0,"measure_result":"no_signal"}}
{"event":"action","seq":10,"wall_ts_ms":1789097576762,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0010","position":{"x":0.0,"y":0.0},"channel":9},"response":{"accepted":true,"real_timestamp_ms":1789097576762,"virtual_time_s":53.0,"measure_result":"direction","svd_deg":284.61}}
{"event":"action","seq":11,"wall_ts_ms":1789097576791,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0011","position":{"x":0.0,"y":0.0},"channel":10},"response":{"accepted":true,"real_timestamp_ms":1789097576791,"virtual_time_s":59.0,"measure_result":"no_signal"}}
{"event":"action","seq":12,"wall_ts_ms":1789097576796,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0012","position":{"x":0.0,"y":0.0},"channel":11},"response":{"accepted":true,"real_timestamp_ms":1789097576796,"virtual_time_s":65.0,"measure_result":"direction","svd_deg":345.95}}
{"event":"action","seq":13,"wall_ts_ms":1789097576825,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0013","position":{"x":0.0,"y":0.0},"channel":12},"response":{"accepted":true,"real_timestamp_ms":1789097576825,"virtual_time_s":71.0,"measure_result":"no_signal"}}
{"event":"action","seq":14,"wall_ts_ms":1789097576830,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0014","position":{"x":0.0,"y":0.0},"channel":13},"response":{"accepted":true,"real_timestamp_ms":1789097576830,"virtual_time_s":77.0,"measure_result":"no_signal"}}
{"event":"action","seq":15,"wall_ts_ms":1789097576835,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0015","position":{"x":0.0,"y":0.0},"channel":14},"response":{"accepted":true,"real_timestamp_ms":1789097576835,"virtual_time_s":83.0,"measure_result":"direction","svd_deg":115.07}}
{"event":"action","seq":16,"wall_ts_ms":1789097576864,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0016","position":{"x":0.0,"y":0.0},"channel":15},"response":{"accepted":true,"real_timestamp_ms":1789097576864,"virtual_time_s":89.0,"measure_result":"no_signal"}}
{"event":"action","seq":17,"wall_ts_ms":1789097576868,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0017","position":{"x":0.0,"y":0.0},"channel":16},"response":{"accepted":true,"real_timestamp_ms":1789097576868,"virtual_time_s":95.0,"measure_result":"no_signal"}}
{"event":"action","seq":18,"wall_ts_ms":1789097576873,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0018","position":{"x":0.0,"y":0.0},"channel":17},"response":{"accepted":true,"real_timestamp_ms":1789097576873,"virtual_time_s":101.0,"measure_result":"no_signal"}}
{"event":"action","seq":19,"wall_ts_ms":1789097576878,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0019","position":{"x":0.0,"y":0.0},"channel":18},"response":{"accepted":true,"real_timestamp_ms":1789097576878,"virtual_time_s":107.0,"measure_result":"direction","svd_deg":334.09}}
{"event":"action","seq":20,"wall_ts_ms":1789097576907,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0020","position":{"x":0.0,"y":0.0},"channel":19},"response":{"accepted":true,"real_timestamp_ms":1789097576907,"virtual_time_s":113.0,"measure_result":"no_signal"}}
{"event":"action","seq":21,"wall_ts_ms":1789097576913,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0021","position":{"x":0.0,"y":0.0},"channel":20},"response":{"accepted":true,"real_timestamp_ms":1789097576913,"virtual_time_s":119.0,"measure_result":"no_signal"}}
{"event":"action","seq":22,"wall_ts_ms":1789097577020,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0022","position":{"x":-382.32549659893994,"y":438.1825018611922},"channel":14},"response":{"accepted":true,"real_timestamp_ms":1789097577020,"virtual_time_s":241.305923,"measure_result":"direction","svd_deg":95.7}}
{"event":"action","seq":23,"wall_ts_ms":1789097577105,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0023","position":{"x":-599.9999999999998,"y":1039.2304845413264},"channel":1},"response":{"accepted":true,"real_timestamp_ms":1789097577105,"virtual_time_s":375.155971,"measure_result":"no_signal"}}
{"event":"action","seq":24,"wall_ts_ms":1789097577108,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0024","position":{"x":-599.9999999999998,"y":1039.2304845413264},"channel":2},"response":{"accepted":true,"real_timestamp_ms":1789097577108,"virtual_time_s":381.155971,"measure_result":"no_signal"}}
{"event":"action","seq":25,"wall_ts_ms":1789097577111,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0025","position":{"x":-599.9999999999998,"y":1039.2304845413264},"channel":3},"response":{"accepted":true,"real_timestamp_ms":1789097577111,"virtual_time_s":387.155971,"measure_result":"no_signal"}}
{"event":"action","seq":26,"wall_ts_ms":1789097577114,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0026","position":{"x":-599.9999999999998,"y":1039.2304845413264},"channel":4},"response":{"accepted":true,"real_timestamp_ms":1789097577114,"virtual_time_s":393.155971,"measure_result":"no_signal"}}
{"event":"action","seq":27,"wall_ts_ms":1789097577117,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0027","position":{"x":-599.9999999999998,"y":1039.2304845413264},"channel":5},"response":{"accepted":true,"real_timestamp_ms":1789097577117,"virtual_time_s":399.155971,"measure_result":"no_signal"}}
{"event":"action","seq":28,"wall_ts_ms":1789097577121,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0028","position":{"x":-599.9999999999998,"y":1039.2304845413264},"channel":6},"response":{"accepted":true,"real_timestamp_ms":1789097577121,"virtual_time_s":405.155971,"measure_result":"no_signal"}}
{"event":"action","seq":29,"wall_ts_ms":1789097577124,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0029","position":{"x":-599.9999999999998,"y":1039.2304845413264},"channel":8},"response":{"accepted":true,"real_timestamp_ms":1789097577124,"virtual_time_s":411.155971,"measure_result":"no_signal"}}
{"event":"action","seq":30,"wall_ts_ms":1789097577128,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0030","position":{"x":-599.9999999999998,"y":1039.2304845413264},"channel":10},"response":{"accepted":true,"real_timestamp_ms":1789097577128,"virtual_time_s":417.155971,"measure_result":"no_signal"}}
{"event":"action","seq":31,"wall_ts_ms":1789097577132,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0031","position":{"x":-599.9999999999998,"y":1039.2304845413264},"channel":12},"response":{"accepted":true,"real_timestamp_ms":1789097577132,"virtual_time_s":423.155971,"measure_result":"no_signal"}}
{"event":"action","seq":32,"wall_ts_ms":1789097577137,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0032","position":{"x":-599.9999999999998,"y":1039.2304845413264},"channel":13},"response":{"accepted":true,"real_timestamp_ms":1789097577136,"virtual_time_s":429.155971,"measure_result":"direction","svd_deg":112.67}}
{"event":"action","seq":33,"wall_ts_ms":1789097577155,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0033","position":{"x":-599.9999999999998,"y":1039.2304845413264},"channel":15},"response":{"accepted":true,"real_timestamp_ms":1789097577155,"virtual_time_s":435.155971,"measure_result":"no_signal"}}
{"event":"action","seq":34,"wall_ts_ms":1789097577158,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0034","position":{"x":-599.9999999999998,"y":1039.2304845413264},"channel":16},"response":{"accepted":true,"real_timestamp_ms":1789097577158,"virtual_time_s":441.155971,"measure_result":"no_signal"}}
{"event":"action","seq":35,"wall_ts_ms":1789097577161,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0035","position":{"x":-599.9999999999998,"y":1039.2304845413264},"channel":17},"response":{"accepted":true,"real_timestamp_ms":1789097577161,"virtual_time_s":447.155971,"measure_result":"no_signal"}}
{"event":"action","seq":36,"wall_ts_ms":1789097577165,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0036","position":{"x":-599.9999999999998,"y":1039.2304845413264},"channel":19},"response":{"accepted":true,"real_timestamp_ms":1789097577165,"virtual_time_s":453.155971,"measure_result":"no_signal"}}
{"event":"action","seq":37,"wall_ts_ms":1789097577169,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0037","position":{"x":-599.9999999999998,"y":1039.2304845413264},"channel":20},"response":{"accepted":true,"real_timestamp_ms":1789097577169,"virtual_time_s":459.155971,"measure_result":"no_signal"}}
{"event":"action","seq":38,"wall_ts_ms":1789097577275,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0038","position":{"x":-432.59886137022454,"y":927.952956866304},"channel":14},"response":{"accepted":true,"real_timestamp_ms":1789097577275,"virtual_time_s":505.358374,"measure_result":"direction","svd_deg":276.22}}
{"event":"action","seq":39,"wall_ts_ms":1789097577364,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0039","position":{"x":-428.8404761449007,"y":898.3063116196065},"channel":14},"response":{"accepted":true,"real_timestamp_ms":1789097577364,"virtual_time_s":516.335159,"measure_result":"direction","svd_deg":96.95}}
{"event":"action","seq":40,"wall_ts_ms":1789097577365,"method":"POST","path":"/clear","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0040","position":{"x":-430.7196687575625,"y":913.129634242954},"channel":14},"response":{"accepted":true,"real_timestamp_ms":1789097577365,"virtual_time_s":524.323552,"clear_result":"success"}}
{"event":"action","seq":41,"wall_ts_ms":1789097577455,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0041","position":{"x":-441.9875302830439,"y":1247.8826866081681},"channel":13},"response":{"accepted":true,"real_timestamp_ms":1789097577455,"virtual_time_s":597.31208,"measure_result":"direction","svd_deg":191.28}}
{"event":"action","seq":42,"wall_ts_ms":1789097577456,"method":"POST","path":"/clear","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0042","position":{"x":-668.4093907720109,"y":1202.7926660772903},"channel":13},"response":{"accepted":true,"real_timestamp_ms":1789097577456,"virtual_time_s":648.485652,"clear_result":"success"}}
{"event":"action","seq":43,"wall_ts_ms":1789097577536,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0043","position":{"x":600.0000000000001,"y":1039.2304845413264},"channel":1},"response":{"accepted":true,"real_timestamp_ms":1789097577536,"virtual_time_s":910.267979,"measure_result":"no_signal"}}
{"event":"action","seq":44,"wall_ts_ms":1789097577539,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0044","position":{"x":600.0000000000001,"y":1039.2304845413264},"channel":2},"response":{"accepted":true,"real_timestamp_ms":1789097577539,"virtual_time_s":916.267979,"measure_result":"direction","svd_deg":332.39}}
{"event":"action","seq":45,"wall_ts_ms":1789097577554,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0045","position":{"x":600.0000000000001,"y":1039.2304845413264},"channel":3},"response":{"accepted":true,"real_timestamp_ms":1789097577554,"virtual_time_s":922.267979,"measure_result":"no_signal"}}
{"event":"action","seq":46,"wall_ts_ms":1789097577557,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0046","position":{"x":600.0000000000001,"y":1039.2304845413264},"channel":4},"response":{"accepted":true,"real_timestamp_ms":1789097577557,"virtual_time_s":928.267979,"measure_result":"no_signal"}}
{"event":"action","seq":47,"wall_ts_ms":1789097577560,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0047","position":{"x":600.0000000000001,"y":1039.2304845413264},"channel":5},"response":{"accepted":true,"real_timestamp_ms":1789097577560,"virtual_time_s":934.267979,"measure_result":"no_signal"}}
{"event":"action","seq":48,"wall_ts_ms":1789097577564,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0048","position":{"x":600.0000000000001,"y":1039.2304845413264},"channel":6},"response":{"accepted":true,"real_timestamp_ms":1789097577564,"virtual_time_s":940.267979,"measure_result":"no_signal"}}
{"event":"action","seq":49,"wall_ts_ms":1789097577567,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0049","position":{"x":600.0000000000001,"y":1039.2304845413264},"channel":8},"response":{"accepted":true,"real_timestamp_ms":1789097577567,"virtual_time_s":946.267979,"measure_result":"no_signal"}}
{"event":"action","seq":50,"wall_ts_ms":1789097577571,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0050","position":{"x":600.0000000000001,"y":1039.2304845413264},"channel":10},"response":{"accepted":true,"real_timestamp_ms":1789097577571,"virtual_time_s":952.267979,"measure_result":"no_signal"}}
{"event":"action","seq":51,"wall_ts_ms":1789097577574,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0051","position":{"x":600.0000000000001,"y":1039.2304845413264},"channel":12},"response":{"accepted":true,"real_timestamp_ms":1789097577574,"virtual_time_s":958.267979,"measure_result":"no_signal"}}
{"event":"action","seq":52,"wall_ts_ms":1789097577577,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0052","position":{"x":600.0000000000001,"y":1039.2304845413264},"channel":15},"response":{"accepted":true,"real_timestamp_ms":1789097577577,"virtual_time_s":964.267979,"measure_result":"no_signal"}}
{"event":"action","seq":53,"wall_ts_ms":1789097577581,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0053","position":{"x":600.0000000000001,"y":1039.2304845413264},"channel":16},"response":{"accepted":true,"real_timestamp_ms":1789097577581,"virtual_time_s":970.267979,"measure_result":"no_signal"}}
{"event":"action","seq":54,"wall_ts_ms":1789097577583,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0054","position":{"x":600.0000000000001,"y":1039.2304845413264},"channel":17},"response":{"accepted":true,"real_timestamp_ms":1789097577583,"virtual_time_s":976.267979,"measure_result":"no_signal"}}
{"event":"action","seq":55,"wall_ts_ms":1789097577586,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0055","position":{"x":600.0000000000001,"y":1039.2304845413264},"channel":19},"response":{"accepted":true,"real_timestamp_ms":1789097577586,"virtual_time_s":982.267979,"measure_result":"no_signal"}}
{"event":"action","seq":56,"wall_ts_ms":1789097577588,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0056","position":{"x":600.0000000000001,"y":1039.2304845413264},"channel":20},"response":{"accepted":true,"real_timestamp_ms":1789097577588,"virtual_time_s":988.267979,"measure_result":"no_signal"}}
{"event":"action","seq":57,"wall_ts_ms":1789097577687,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0057","position":{"x":994.1110687766269,"y":542.6492729278544},"channel":2},"response":{"accepted":true,"real_timestamp_ms":1789097577687,"virtual_time_s":1121.061738,"measure_result":"direction","svd_deg":28.25}}
{"event":"action","seq":58,"wall_ts_ms":1789097577767,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0058","position":{"x":1268.7031752387938,"y":689.8006776789011},"channel":2},"response":{"accepted":true,"real_timestamp_ms":1789097577767,"virtual_time_s":1188.368836,"measure_result":"near"}}
{"event":"action","seq":59,"wall_ts_ms":1789097577773,"method":"POST","path":"/clear","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0059","position":{"x":1268.7031752387938,"y":689.8006776789011},"channel":2},"response":{"accepted":true,"real_timestamp_ms":1789097577773,"virtual_time_s":1193.368836,"clear_result":"success"}}
{"event":"action","seq":60,"wall_ts_ms":1789097577859,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0060","position":{"x":1200.0,"y":0.0},"channel":1},"response":{"accepted":true,"real_timestamp_ms":1789097577859,"virtual_time_s":1338.011557,"measure_result":"no_signal"}}
{"event":"action","seq":61,"wall_ts_ms":1789097577861,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0061","position":{"x":1200.0,"y":0.0},"channel":3},"response":{"accepted":true,"real_timestamp_ms":1789097577861,"virtual_time_s":1344.011557,"measure_result":"no_signal"}}
{"event":"action","seq":62,"wall_ts_ms":1789097577864,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0062","position":{"x":1200.0,"y":0.0},"channel":4},"response":{"accepted":true,"real_timestamp_ms":1789097577864,"virtual_time_s":1350.011557,"measure_result":"no_signal"}}
{"event":"action","seq":63,"wall_ts_ms":1789097577866,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0063","position":{"x":1200.0,"y":0.0},"channel":5},"response":{"accepted":true,"real_timestamp_ms":1789097577866,"virtual_time_s":1356.011557,"measure_result":"no_signal"}}
{"event":"action","seq":64,"wall_ts_ms":1789097577869,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0064","position":{"x":1200.0,"y":0.0},"channel":6},"response":{"accepted":true,"real_timestamp_ms":1789097577869,"virtual_time_s":1362.011557,"measure_result":"no_signal"}}
{"event":"action","seq":65,"wall_ts_ms":1789097577871,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0065","position":{"x":1200.0,"y":0.0},"channel":8},"response":{"accepted":true,"real_timestamp_ms":1789097577871,"virtual_time_s":1368.011557,"measure_result":"no_signal"}}
{"event":"action","seq":66,"wall_ts_ms":1789097577873,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0066","position":{"x":1200.0,"y":0.0},"channel":10},"response":{"accepted":true,"real_timestamp_ms":1789097577873,"virtual_time_s":1374.011557,"measure_result":"no_signal"}}
{"event":"action","seq":67,"wall_ts_ms":1789097577876,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0067","position":{"x":1200.0,"y":0.0},"channel":12},"response":{"accepted":true,"real_timestamp_ms":1789097577875,"virtual_time_s":1380.011557,"measure_result":"no_signal"}}
{"event":"action","seq":68,"wall_ts_ms":1789097577878,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0068","position":{"x":1200.0,"y":0.0},"channel":15},"response":{"accepted":true,"real_timestamp_ms":1789097577878,"virtual_time_s":1386.011557,"measure_result":"no_signal"}}
{"event":"action","seq":69,"wall_ts_ms":1789097577881,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0069","position":{"x":1200.0,"y":0.0},"channel":16},"response":{"accepted":true,"real_timestamp_ms":1789097577881,"virtual_time_s":1392.011557,"measure_result":"no_signal"}}
{"event":"action","seq":70,"wall_ts_ms":1789097577884,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0070","position":{"x":1200.0,"y":0.0},"channel":17},"response":{"accepted":true,"real_timestamp_ms":1789097577884,"virtual_time_s":1398.011557,"measure_result":"no_signal"}}
{"event":"action","seq":71,"wall_ts_ms":1789097577888,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0071","position":{"x":1200.0,"y":0.0},"channel":19},"response":{"accepted":true,"real_timestamp_ms":1789097577888,"virtual_time_s":1404.011557,"measure_result":"no_signal"}}
{"event":"action","seq":72,"wall_ts_ms":1789097577890,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0072","position":{"x":1200.0,"y":0.0},"channel":20},"response":{"accepted":true,"real_timestamp_ms":1789097577890,"virtual_time_s":1410.011557,"measure_result":"no_signal"}}
{"event":"action","seq":73,"wall_ts_ms":1789097577973,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0073","position":{"x":904.3723232997338,"y":-5.399878906793646},"channel":11},"response":{"accepted":true,"real_timestamp_ms":1789097577973,"virtual_time_s":1475.146955,"measure_result":"direction","svd_deg":193.85}}
{"event":"action","seq":74,"wall_ts_ms":1789097578037,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0074","position":{"x":732.9363400589687,"y":158.81239802766925},"channel":11},"response":{"accepted":true,"real_timestamp_ms":1789097578037,"virtual_time_s":1527.625779,"measure_result":"direction","svd_deg":223.37}}
{"event":"action","seq":75,"wall_ts_ms":1789097578039,"method":"POST","path":"/clear","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0075","position":{"x":446.4480711916748,"y":-111.48435372746496},"channel":11},"response":{"accepted":true,"real_timestamp_ms":1789097578039,"virtual_time_s":1611.400359,"clear_result":"success"}}
{"event":"action","seq":76,"wall_ts_ms":1789097578098,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0076","position":{"x":609.8586286156244,"y":-86.93118226598972},"channel":18},"response":{"accepted":true,"real_timestamp_ms":1789097578098,"virtual_time_s":1650.449334,"measure_result":"direction","svd_deg":312.82}}
{"event":"action","seq":77,"wall_ts_ms":1789097578145,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0077","position":{"x":711.4189708756367,"y":-138.68820908196022},"channel":7},"response":{"accepted":true,"real_timestamp_ms":1789097578145,"virtual_time_s":1679.246959,"measure_result":"direction","svd_deg":311.79}}
{"event":"action","seq":78,"wall_ts_ms":1789097578171,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0078","position":{"x":968.3799882543295,"y":-471.87178417317915},"channel":18},"response":{"accepted":true,"real_timestamp_ms":1789097578171,"virtual_time_s":1769.399264,"measure_result":"direction","svd_deg":145.41}}
{"event":"action","seq":79,"wall_ts_ms":1789097578198,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0079","position":{"x":948.6903772101683,"y":-457.77800595341034},"channel":18},"response":{"accepted":true,"real_timestamp_ms":1789097578198,"virtual_time_s":1779.242054,"measure_result":"direction","svd_deg":144.5}}
{"event":"action","seq":80,"wall_ts_ms":1789097578200,"method":"POST","path":"/clear","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0080","position":{"x":938.8455716880909,"y":-450.7311168435281},"channel":18},"response":{"accepted":true,"real_timestamp_ms":1789097578200,"virtual_time_s":1786.663449,"clear_result":"success"}}
{"event":"action","seq":81,"wall_ts_ms":1789097578222,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0081","position":{"x":1216.8995655319154,"y":-717.7217593627017},"channel":7},"response":{"accepted":true,"real_timestamp_ms":1789097578222,"virtual_time_s":1869.760278,"measure_result":"direction","svd_deg":132.81}}
{"event":"action","seq":82,"wall_ts_ms":1789097578247,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0082","position":{"x":1185.682710431516,"y":-684.9782355200915},"channel":7},"response":{"accepted":true,"real_timestamp_ms":1789097578247,"virtual_time_s":1883.808218,"measure_result":"direction","svd_deg":132.18}}
{"event":"action","seq":83,"wall_ts_ms":1789097578269,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0083","position":{"x":1170.5902788598225,"y":-668.8979941203445},"channel":7},"response":{"accepted":true,"real_timestamp_ms":1789097578269,"virtual_time_s":1893.218913,"measure_result":"near"}}
{"event":"action","seq":84,"wall_ts_ms":1789097578272,"method":"POST","path":"/clear","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0084","position":{"x":1170.6182266765854,"y":-668.8718181334558},"channel":7},"response":{"accepted":true,"real_timestamp_ms":1789097578272,"virtual_time_s":1898.226571,"clear_result":"success"}}
{"event":"action","seq":85,"wall_ts_ms":1789097578293,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0085","position":{"x":600.0000000000001,"y":-1039.2304845413264},"channel":1},"response":{"accepted":true,"real_timestamp_ms":1789097578293,"virtual_time_s":2040.281075,"measure_result":"no_signal"}}
{"event":"action","seq":86,"wall_ts_ms":1789097578296,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0086","position":{"x":600.0000000000001,"y":-1039.2304845413264},"channel":3},"response":{"accepted":true,"real_timestamp_ms":1789097578296,"virtual_time_s":2046.281075,"measure_result":"no_signal"}}
{"event":"action","seq":87,"wall_ts_ms":1789097578299,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0087","position":{"x":600.0000000000001,"y":-1039.2304845413264},"channel":4},"response":{"accepted":true,"real_timestamp_ms":1789097578299,"virtual_time_s":2052.281075,"measure_result":"no_signal"}}
{"event":"action","seq":88,"wall_ts_ms":1789097578301,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0088","position":{"x":600.0000000000001,"y":-1039.2304845413264},"channel":5},"response":{"accepted":true,"real_timestamp_ms":1789097578301,"virtual_time_s":2058.281075,"measure_result":"no_signal"}}
{"event":"action","seq":89,"wall_ts_ms":1789097578304,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0089","position":{"x":600.0000000000001,"y":-1039.2304845413264},"channel":6},"response":{"accepted":true,"real_timestamp_ms":1789097578304,"virtual_time_s":2064.281075,"measure_result":"no_signal"}}
{"event":"action","seq":90,"wall_ts_ms":1789097578307,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0090","position":{"x":600.0000000000001,"y":-1039.2304845413264},"channel":8},"response":{"accepted":true,"real_timestamp_ms":1789097578307,"virtual_time_s":2070.281075,"measure_result":"no_signal"}}
{"event":"action","seq":91,"wall_ts_ms":1789097578311,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0091","position":{"x":600.0000000000001,"y":-1039.2304845413264},"channel":10},"response":{"accepted":true,"real_timestamp_ms":1789097578311,"virtual_time_s":2076.281075,"measure_result":"no_signal"}}
{"event":"action","seq":92,"wall_ts_ms":1789097578314,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0092","position":{"x":600.0000000000001,"y":-1039.2304845413264},"channel":12},"response":{"accepted":true,"real_timestamp_ms":1789097578314,"virtual_time_s":2082.281075,"measure_result":"no_signal"}}
{"event":"action","seq":93,"wall_ts_ms":1789097578318,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0093","position":{"x":600.0000000000001,"y":-1039.2304845413264},"channel":15},"response":{"accepted":true,"real_timestamp_ms":1789097578318,"virtual_time_s":2088.281075,"measure_result":"no_signal"}}
{"event":"action","seq":94,"wall_ts_ms":1789097578322,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0094","position":{"x":600.0000000000001,"y":-1039.2304845413264},"channel":16},"response":{"accepted":true,"real_timestamp_ms":1789097578322,"virtual_time_s":2094.281075,"measure_result":"no_signal"}}
{"event":"action","seq":95,"wall_ts_ms":1789097578325,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0095","position":{"x":600.0000000000001,"y":-1039.2304845413264},"channel":17},"response":{"accepted":true,"real_timestamp_ms":1789097578325,"virtual_time_s":2100.281075,"measure_result":"no_signal"}}
{"event":"action","seq":96,"wall_ts_ms":1789097578328,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0096","position":{"x":600.0000000000001,"y":-1039.2304845413264},"channel":19},"response":{"accepted":true,"real_timestamp_ms":1789097578328,"virtual_time_s":2106.281075,"measure_result":"no_signal"}}
{"event":"action","seq":97,"wall_ts_ms":1789097578332,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0097","position":{"x":600.0000000000001,"y":-1039.2304845413264},"channel":20},"response":{"accepted":true,"real_timestamp_ms":1789097578332,"virtual_time_s":2112.281075,"measure_result":"no_signal"}}
{"event":"action","seq":98,"wall_ts_ms":1789097578355,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0098","position":{"x":431.0177074456876,"y":-790.4383437162506},"channel":9},"response":{"accepted":true,"real_timestamp_ms":1789097578355,"virtual_time_s":2178.431734,"measure_result":"direction","svd_deg":252.8}}
{"event":"action","seq":99,"wall_ts_ms":1789097578358,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0099","position":{"x":308.8495661381867,"y":-1188.2218722331802},"channel":9},"response":{"accepted":true,"real_timestamp_ms":1789097578358,"virtual_time_s":2266.655959,"measure_result":"direction","svd_deg":225.19}}
{"event":"action","seq":100,"wall_ts_ms":1789097578359,"method":"POST","path":"/clear","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0100","position":{"x":302.26396092359636,"y":-1195.0880783213174},"channel":9},"response":{"accepted":true,"real_timestamp_ms":1789097578359,"virtual_time_s":2273.558746,"clear_result":"success"}}
{"event":"action","seq":101,"wall_ts_ms":1789097578360,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0101","position":{"x":-600.0000000000006,"y":-1039.230484541326},"channel":1},"response":{"accepted":true,"real_timestamp_ms":1789097578360,"virtual_time_s":2462.684041,"measure_result":"no_signal"}}
{"event":"action","seq":102,"wall_ts_ms":1789097578363,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0102","position":{"x":-600.0000000000006,"y":-1039.230484541326},"channel":3},"response":{"accepted":true,"real_timestamp_ms":1789097578363,"virtual_time_s":2468.684041,"measure_result":"no_signal"}}
{"event":"action","seq":103,"wall_ts_ms":1789097578366,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0103","position":{"x":-600.0000000000006,"y":-1039.230484541326},"channel":4},"response":{"accepted":true,"real_timestamp_ms":1789097578366,"virtual_time_s":2474.684041,"measure_result":"no_signal"}}
{"event":"action","seq":104,"wall_ts_ms":1789097578371,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0104","position":{"x":-600.0000000000006,"y":-1039.230484541326},"channel":5},"response":{"accepted":true,"real_timestamp_ms":1789097578371,"virtual_time_s":2480.684041,"measure_result":"no_signal"}}
{"event":"action","seq":105,"wall_ts_ms":1789097578374,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0105","position":{"x":-600.0000000000006,"y":-1039.230484541326},"channel":6},"response":{"accepted":true,"real_timestamp_ms":1789097578374,"virtual_time_s":2486.684041,"measure_result":"no_signal"}}
{"event":"action","seq":106,"wall_ts_ms":1789097578377,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0106","position":{"x":-600.0000000000006,"y":-1039.230484541326},"channel":8},"response":{"accepted":true,"real_timestamp_ms":1789097578377,"virtual_time_s":2492.684041,"measure_result":"no_signal"}}
{"event":"action","seq":107,"wall_ts_ms":1789097578380,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0107","position":{"x":-600.0000000000006,"y":-1039.230484541326},"channel":10},"response":{"accepted":true,"real_timestamp_ms":1789097578380,"virtual_time_s":2498.684041,"measure_result":"no_signal"}}
{"event":"action","seq":108,"wall_ts_ms":1789097578384,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0108","position":{"x":-600.0000000000006,"y":-1039.230484541326},"channel":12},"response":{"accepted":true,"real_timestamp_ms":1789097578383,"virtual_time_s":2504.684041,"measure_result":"no_signal"}}
{"event":"action","seq":109,"wall_ts_ms":1789097578386,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0109","position":{"x":-600.0000000000006,"y":-1039.230484541326},"channel":15},"response":{"accepted":true,"real_timestamp_ms":1789097578386,"virtual_time_s":2510.684041,"measure_result":"no_signal"}}
{"event":"action","seq":110,"wall_ts_ms":1789097578389,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0110","position":{"x":-600.0000000000006,"y":-1039.230484541326},"channel":16},"response":{"accepted":true,"real_timestamp_ms":1789097578389,"virtual_time_s":2516.684041,"measure_result":"direction","svd_deg":257.75}}
{"event":"action","seq":111,"wall_ts_ms":1789097578399,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0111","position":{"x":-600.0000000000006,"y":-1039.230484541326},"channel":17},"response":{"accepted":true,"real_timestamp_ms":1789097578399,"virtual_time_s":2522.684041,"measure_result":"direction","svd_deg":150.83}}
{"event":"action","seq":112,"wall_ts_ms":1789097578409,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0112","position":{"x":-600.0000000000006,"y":-1039.230484541326},"channel":19},"response":{"accepted":true,"real_timestamp_ms":1789097578409,"virtual_time_s":2528.684041,"measure_result":"direction","svd_deg":217.09}}
{"event":"action","seq":113,"wall_ts_ms":1789097578419,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0113","position":{"x":-600.0000000000006,"y":-1039.230484541326},"channel":20},"response":{"accepted":true,"real_timestamp_ms":1789097578419,"virtual_time_s":2534.684041,"measure_result":"no_signal"}}
{"event":"action","seq":114,"wall_ts_ms":1789097578449,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0114","position":{"x":-855.523050877763,"y":-1149.4070702441772},"channel":16},"response":{"accepted":true,"real_timestamp_ms":1789097578449,"virtual_time_s":2596.336861,"measure_result":"direction","svd_deg":293.06}}
{"event":"action","seq":115,"wall_ts_ms":1789097578473,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0115","position":{"x":-702.0198196486191,"y":-1511.0796905664733},"channel":16},"response":{"accepted":true,"real_timestamp_ms":1789097578473,"virtual_time_s":2679.91684,"measure_result":"direction","svd_deg":101.78}}
{"event":"action","seq":116,"wall_ts_ms":1789097578475,"method":"POST","path":"/clear","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0116","position":{"x":-704.0596428309664,"y":-1500.3611560598777},"channel":16},"response":{"accepted":true,"real_timestamp_ms":1789097578475,"virtual_time_s":2687.099021,"clear_result":"success"}}
{"event":"action","seq":117,"wall_ts_ms":1789097578495,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0117","position":{"x":-786.4741505952657,"y":-1490.051846445478},"channel":19},"response":{"accepted":true,"real_timestamp_ms":1789097578495,"virtual_time_s":2709.710382,"measure_result":"direction","svd_deg":151.04}}
{"event":"action","seq":118,"wall_ts_ms":1789097578497,"method":"POST","path":"/clear","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0118","position":{"x":-1023.4461023835017,"y":-1359.1588736906476},"channel":19},"response":{"accepted":true,"real_timestamp_ms":1789097578497,"virtual_time_s":2768.854145,"clear_result":"success"}}
{"event":"action","seq":119,"wall_ts_ms":1789097578511,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0119","position":{"x":-1266.2459250683066,"y":-1017.2747950835054},"channel":17},"response":{"accepted":true,"real_timestamp_ms":1789097578511,"virtual_time_s":2858.719866,"measure_result":"direction","svd_deg":62.8}}
{"event":"action","seq":120,"wall_ts_ms":1789097578513,"method":"POST","path":"/clear","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0120","position":{"x":-1126.6121592386512,"y":-745.1634840678316},"channel":17},"response":{"accepted":true,"real_timestamp_ms":1789097578513,"virtual_time_s":2924.88919,"clear_result":"success"}}
{"event":"action","seq":121,"wall_ts_ms":1789097578515,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0121","position":{"x":-1200.0,"y":1.4695761589768238e-13},"channel":1},"response":{"accepted":true,"real_timestamp_ms":1789097578515,"virtual_time_s":3080.642907,"measure_result":"no_signal"}}
{"event":"action","seq":122,"wall_ts_ms":1789097578518,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0122","position":{"x":-1200.0,"y":1.4695761589768238e-13},"channel":3},"response":{"accepted":true,"real_timestamp_ms":1789097578518,"virtual_time_s":3086.642907,"measure_result":"no_signal"}}
{"event":"action","seq":123,"wall_ts_ms":1789097578520,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0123","position":{"x":-1200.0,"y":1.4695761589768238e-13},"channel":4},"response":{"accepted":true,"real_timestamp_ms":1789097578520,"virtual_time_s":3092.642907,"measure_result":"no_signal"}}
{"event":"action","seq":124,"wall_ts_ms":1789097578522,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0124","position":{"x":-1200.0,"y":1.4695761589768238e-13},"channel":5},"response":{"accepted":true,"real_timestamp_ms":1789097578522,"virtual_time_s":3098.642907,"measure_result":"no_signal"}}
{"event":"action","seq":125,"wall_ts_ms":1789097578524,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0125","position":{"x":-1200.0,"y":1.4695761589768238e-13},"channel":6},"response":{"accepted":true,"real_timestamp_ms":1789097578524,"virtual_time_s":3104.642907,"measure_result":"no_signal"}}
{"event":"action","seq":126,"wall_ts_ms":1789097578526,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0126","position":{"x":-1200.0,"y":1.4695761589768238e-13},"channel":8},"response":{"accepted":true,"real_timestamp_ms":1789097578526,"virtual_time_s":3110.642907,"measure_result":"no_signal"}}
{"event":"action","seq":127,"wall_ts_ms":1789097578527,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0127","position":{"x":-1200.0,"y":1.4695761589768238e-13},"channel":10},"response":{"accepted":true,"real_timestamp_ms":1789097578527,"virtual_time_s":3116.642907,"measure_result":"no_signal"}}
{"event":"action","seq":128,"wall_ts_ms":1789097578529,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0128","position":{"x":-1200.0,"y":1.4695761589768238e-13},"channel":12},"response":{"accepted":true,"real_timestamp_ms":1789097578529,"virtual_time_s":3122.642907,"measure_result":"no_signal"}}
{"event":"action","seq":129,"wall_ts_ms":1789097578531,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0129","position":{"x":-1200.0,"y":1.4695761589768238e-13},"channel":15},"response":{"accepted":true,"real_timestamp_ms":1789097578531,"virtual_time_s":3128.642907,"measure_result":"no_signal"}}
{"event":"action","seq":130,"wall_ts_ms":1789097578533,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0130","position":{"x":-1200.0,"y":1.4695761589768238e-13},"channel":20},"response":{"accepted":true,"real_timestamp_ms":1789097578533,"virtual_time_s":3134.642907,"measure_result":"no_signal"}}
{"event":"action","seq":131,"wall_ts_ms":1789097578535,"method":"POST","path":"/exit","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"4721c649063d-0131"},"response":{"accepted":true,"real_timestamp_ms":1789097578535,"virtual_time_s":3134.642907,"exit_reason":"user_exit"}}
{"event":"session_end","reason":"user_exit","virtual_time_s":3134.642907,"real_elapsed_s":3.209263,"request_count":131,"cleared_count":10}
@@ -0,0 +1,429 @@
{"event":"session_start","case_code":"GHSN-M38E-74GD-YLUD","module":"q4_practice","robot_id":"1","seed":1907688398,"countdown_s":5.0,"window_s":1500.0,"max_real_duration_s":1200.0,"truth":[{"channel":6,"x":-168.78031525275804,"y":1684.875239455932,"r_eff_m":1233.1529913973563,"directional":true,"heading_deg":351.84275431652014},{"channel":15,"x":411.7975180678083,"y":1548.040304144621,"r_eff_m":1336.3045523445826,"directional":true,"heading_deg":72.47781232458263},{"channel":8,"x":978.6674582823607,"y":-996.1121301869524,"r_eff_m":1336.1370990332562,"directional":true,"heading_deg":246.14394851382335},{"channel":16,"x":124.00340756473021,"y":-860.3622285357711,"r_eff_m":1345.578791332298,"directional":false,"heading_deg":0.0},{"channel":10,"x":729.8914456683548,"y":714.3629430529361,"r_eff_m":1127.494833936053,"directional":false,"heading_deg":0.0},{"channel":2,"x":478.441266630241,"y":449.08113076378316,"r_eff_m":1040.6068154097852,"directional":false,"heading_deg":0.0},{"channel":20,"x":-945.2003883886779,"y":638.5311986666989,"r_eff_m":1295.456469667405,"directional":false,"heading_deg":0.0},{"channel":4,"x":99.04602689897295,"y":1744.5260335974826,"r_eff_m":1032.9094604449615,"directional":false,"heading_deg":0.0},{"channel":5,"x":-1507.0542438070167,"y":761.3723575581047,"r_eff_m":1448.7977020579874,"directional":false,"heading_deg":0.0},{"channel":12,"x":-1188.1583136013294,"y":963.0220608398997,"r_eff_m":1226.2619264983982,"directional":false,"heading_deg":0.0},{"channel":19,"x":-177.4461437404443,"y":343.49207176417394,"r_eff_m":1277.3413627947266,"directional":false,"heading_deg":0.0}]}
{"event":"action","seq":1,"wall_ts_ms":1789265737816,"method":"POST","path":"/enter","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0001"},"response":{"accepted":true,"real_timestamp_ms":1789265737816,"virtual_time_s":0.0,"max_virtual_duration_s":360000.0,"max_real_duration_s":1200,"remaining_real_duration_s":1200}}
{"event":"action","seq":2,"wall_ts_ms":1789265737826,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0002","position":{"x":0.0,"y":0.0},"channel":1},"response":{"accepted":true,"real_timestamp_ms":1789265737826,"virtual_time_s":5.0,"measure_result":"no_signal"}}
{"event":"action","seq":3,"wall_ts_ms":1789265737827,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0003","position":{"x":0.0,"y":0.0},"channel":2},"response":{"accepted":true,"real_timestamp_ms":1789265737827,"virtual_time_s":11.0,"measure_result":"direction","svd_deg":43.2}}
{"event":"action","seq":4,"wall_ts_ms":1789265737865,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0004","position":{"x":0.0,"y":0.0},"channel":3},"response":{"accepted":true,"real_timestamp_ms":1789265737865,"virtual_time_s":17.0,"measure_result":"no_signal"}}
{"event":"action","seq":5,"wall_ts_ms":1789265737866,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0005","position":{"x":0.0,"y":0.0},"channel":4},"response":{"accepted":true,"real_timestamp_ms":1789265737866,"virtual_time_s":23.0,"measure_result":"no_signal"}}
{"event":"action","seq":6,"wall_ts_ms":1789265737867,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0006","position":{"x":0.0,"y":0.0},"channel":5},"response":{"accepted":true,"real_timestamp_ms":1789265737867,"virtual_time_s":29.0,"measure_result":"no_signal"}}
{"event":"action","seq":7,"wall_ts_ms":1789265737867,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0007","position":{"x":0.0,"y":0.0},"channel":6},"response":{"accepted":true,"real_timestamp_ms":1789265737867,"virtual_time_s":35.0,"measure_result":"no_signal"}}
{"event":"action","seq":8,"wall_ts_ms":1789265737868,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0008","position":{"x":0.0,"y":0.0},"channel":7},"response":{"accepted":true,"real_timestamp_ms":1789265737868,"virtual_time_s":41.0,"measure_result":"no_signal"}}
{"event":"action","seq":9,"wall_ts_ms":1789265737869,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0009","position":{"x":0.0,"y":0.0},"channel":8},"response":{"accepted":true,"real_timestamp_ms":1789265737869,"virtual_time_s":47.0,"measure_result":"no_signal"}}
{"event":"action","seq":10,"wall_ts_ms":1789265737869,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0010","position":{"x":0.0,"y":0.0},"channel":9},"response":{"accepted":true,"real_timestamp_ms":1789265737869,"virtual_time_s":53.0,"measure_result":"no_signal"}}
{"event":"action","seq":11,"wall_ts_ms":1789265737870,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0011","position":{"x":0.0,"y":0.0},"channel":10},"response":{"accepted":true,"real_timestamp_ms":1789265737870,"virtual_time_s":59.0,"measure_result":"direction","svd_deg":45.09}}
{"event":"action","seq":12,"wall_ts_ms":1789265737905,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0012","position":{"x":0.0,"y":0.0},"channel":11},"response":{"accepted":true,"real_timestamp_ms":1789265737905,"virtual_time_s":65.0,"measure_result":"no_signal"}}
{"event":"action","seq":13,"wall_ts_ms":1789265737906,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0013","position":{"x":0.0,"y":0.0},"channel":12},"response":{"accepted":true,"real_timestamp_ms":1789265737906,"virtual_time_s":71.0,"measure_result":"no_signal"}}
{"event":"action","seq":14,"wall_ts_ms":1789265737907,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0014","position":{"x":0.0,"y":0.0},"channel":13},"response":{"accepted":true,"real_timestamp_ms":1789265737907,"virtual_time_s":77.0,"measure_result":"no_signal"}}
{"event":"action","seq":15,"wall_ts_ms":1789265737908,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0015","position":{"x":0.0,"y":0.0},"channel":14},"response":{"accepted":true,"real_timestamp_ms":1789265737908,"virtual_time_s":83.0,"measure_result":"no_signal"}}
{"event":"action","seq":16,"wall_ts_ms":1789265737908,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0016","position":{"x":0.0,"y":0.0},"channel":15},"response":{"accepted":true,"real_timestamp_ms":1789265737908,"virtual_time_s":89.0,"measure_result":"no_signal"}}
{"event":"action","seq":17,"wall_ts_ms":1789265737909,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0017","position":{"x":0.0,"y":0.0},"channel":16},"response":{"accepted":true,"real_timestamp_ms":1789265737909,"virtual_time_s":95.0,"measure_result":"direction","svd_deg":279.14}}
{"event":"action","seq":18,"wall_ts_ms":1789265737945,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0018","position":{"x":0.0,"y":0.0},"channel":17},"response":{"accepted":true,"real_timestamp_ms":1789265737945,"virtual_time_s":101.0,"measure_result":"no_signal"}}
{"event":"action","seq":19,"wall_ts_ms":1789265737946,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0019","position":{"x":0.0,"y":0.0},"channel":18},"response":{"accepted":true,"real_timestamp_ms":1789265737946,"virtual_time_s":107.0,"measure_result":"no_signal"}}
{"event":"action","seq":20,"wall_ts_ms":1789265737947,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0020","position":{"x":0.0,"y":0.0},"channel":19},"response":{"accepted":true,"real_timestamp_ms":1789265737947,"virtual_time_s":113.0,"measure_result":"direction","svd_deg":117.36}}
{"event":"action","seq":21,"wall_ts_ms":1789265737983,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0021","position":{"x":0.0,"y":0.0},"channel":20},"response":{"accepted":true,"real_timestamp_ms":1789265737983,"virtual_time_s":119.0,"measure_result":"direction","svd_deg":145.55}}
{"event":"action","seq":22,"wall_ts_ms":1789265738125,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0022","position":{"x":-79.66719841213751,"y":400.9313670917169},"channel":19},"response":{"accepted":true,"real_timestamp_ms":1789265738125,"virtual_time_s":206.753978,"measure_result":"direction","svd_deg":210.37}}
{"event":"action","seq":23,"wall_ts_ms":1789265738127,"method":"POST","path":"/clear","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0023","position":{"x":-177.64052160825486,"y":343.3794788045638},"channel":19},"response":{"accepted":true,"real_timestamp_ms":1789265738127,"virtual_time_s":234.479287,"clear_result":"success"}}
{"event":"action","seq":24,"wall_ts_ms":1789265738245,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0024","position":{"x":-243.62294879732218,"y":424.1621461926654},"channel":20},"response":{"accepted":true,"real_timestamp_ms":1789265738245,"virtual_time_s":261.340275,"measure_result":"direction","svd_deg":162.22}}
{"event":"action","seq":25,"wall_ts_ms":1789265738273,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0025","position":{"x":-901.7130728821326,"y":655.9084449749266},"channel":20},"response":{"accepted":true,"real_timestamp_ms":1789265738273,"virtual_time_s":405.880801,"measure_result":"direction","svd_deg":202.15}}
{"event":"action","seq":26,"wall_ts_ms":1789265738284,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0026","position":{"x":-922.0070945081434,"y":643.9441735456403},"channel":20},"response":{"accepted":true,"real_timestamp_ms":1789265738284,"virtual_time_s":415.592451,"measure_result":"direction","svd_deg":193.27}}
{"event":"action","seq":27,"wall_ts_ms":1789265738286,"method":"POST","path":"/clear","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0027","position":{"x":-943.9158056887892,"y":638.8511609168044},"channel":20},"response":{"accepted":true,"real_timestamp_ms":1789265738286,"virtual_time_s":425.09103,"clear_result":"success"}}
{"event":"action","seq":28,"wall_ts_ms":1789265738445,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0028","position":{"x":155.06480714962538,"y":530.7765221920923},"channel":10},"response":{"accepted":true,"real_timestamp_ms":1789265738445,"virtual_time_s":651.94741,"measure_result":"direction","svd_deg":18.62}}
{"event":"action","seq":29,"wall_ts_ms":1789265738475,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0029","position":{"x":691.0981141562518,"y":722.9949655036279},"channel":10},"response":{"accepted":true,"real_timestamp_ms":1789265738475,"virtual_time_s":770.838522,"measure_result":"direction","svd_deg":348.1}}
{"event":"action","seq":30,"wall_ts_ms":1789265738490,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0030","position":{"x":704.6480025466224,"y":718.3903941183868},"channel":10},"response":{"accepted":true,"real_timestamp_ms":1789265738490,"virtual_time_s":778.7007,"measure_result":"direction","svd_deg":350.26}}
{"event":"action","seq":31,"wall_ts_ms":1789265738492,"method":"POST","path":"/clear","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0031","position":{"x":728.5054559976093,"y":714.7247743974735},"channel":10},"response":{"accepted":true,"real_timestamp_ms":1789265738492,"virtual_time_s":788.528183,"clear_result":"success"}}
{"event":"action","seq":32,"wall_ts_ms":1789265738690,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0032","position":{"x":282.155927735649,"y":778.2311705887862},"channel":2},"response":{"accepted":true,"real_timestamp_ms":1789265738690,"virtual_time_s":884.697127,"measure_result":"direction","svd_deg":301.58}}
{"event":"action","seq":33,"wall_ts_ms":1789265738692,"method":"POST","path":"/clear","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0033","position":{"x":481.9384520825037,"y":452.79231376594635},"channel":2},"response":{"accepted":true,"real_timestamp_ms":1789265738692,"virtual_time_s":966.070815,"clear_result":"success"}}
{"event":"action","seq":34,"wall_ts_ms":1789265738822,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0034","position":{"x":119.77278770558408,"y":-365.4630725746676},"channel":16},"response":{"accepted":true,"real_timestamp_ms":1789265738822,"virtual_time_s":1151.035152,"measure_result":"direction","svd_deg":270.43}}
{"event":"action","seq":35,"wall_ts_ms":1789265738857,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0035","position":{"x":125.50362627876382,"y":-724.3528216084252},"channel":16},"response":{"accepted":true,"real_timestamp_ms":1789265738857,"virtual_time_s":1227.822252,"measure_result":"direction","svd_deg":268.9}}
{"event":"action","seq":36,"wall_ts_ms":1789265738877,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0036","position":{"x":125.3777171626325,"y":-762.3214764994508},"channel":16},"response":{"accepted":true,"real_timestamp_ms":1789265738877,"virtual_time_s":1240.416025,"measure_result":"direction","svd_deg":269.25}}
{"event":"action","seq":37,"wall_ts_ms":1789265738893,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0037","position":{"x":125.31476260456685,"y":-790.7980024619326},"channel":16},"response":{"accepted":true,"real_timestamp_ms":1789265738893,"virtual_time_s":1251.111344,"measure_result":"direction","svd_deg":269.45}}
{"event":"action","seq":38,"wall_ts_ms":1789265738907,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0038","position":{"x":125.28328532553402,"y":-812.1554085318639},"channel":16},"response":{"accepted":true,"real_timestamp_ms":1789265738907,"virtual_time_s":1260.38283,"measure_result":"direction","svd_deg":269.15999999999997}}
{"event":"action","seq":39,"wall_ts_ms":1789265738919,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0039","position":{"x":125.2675466860176,"y":-828.1734669503353},"channel":16},"response":{"accepted":true,"real_timestamp_ms":1789265738919,"virtual_time_s":1268.586443,"measure_result":"direction","svd_deg":268.21}}
{"event":"action","seq":40,"wall_ts_ms":1789265738931,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0040","position":{"x":124.96644242180939,"y":-839.1602852992372},"channel":16},"response":{"accepted":true,"real_timestamp_ms":1789265738931,"virtual_time_s":1275.784632,"measure_result":"direction","svd_deg":266.93}}
{"event":"action","seq":41,"wall_ts_ms":1789265738933,"method":"POST","path":"/clear","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0041","position":{"x":124.4615306510994,"y":-853.1635717026913},"channel":16},"response":{"accepted":true,"real_timestamp_ms":1789265738933,"virtual_time_s":1283.587109,"clear_result":"success"}}
{"event":"action","seq":42,"wall_ts_ms":1789265738934,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0042","position":{"x":200.0,"y":-900.0},"channel":1},"response":{"accepted":true,"real_timestamp_ms":1789265738934,"virtual_time_s":1307.363173,"measure_result":"no_signal"}}
{"event":"action","seq":43,"wall_ts_ms":1789265738935,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0043","position":{"x":200.0,"y":-900.0},"channel":3},"response":{"accepted":true,"real_timestamp_ms":1789265738935,"virtual_time_s":1313.363173,"measure_result":"no_signal"}}
{"event":"action","seq":44,"wall_ts_ms":1789265738936,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0044","position":{"x":200.0,"y":-900.0},"channel":4},"response":{"accepted":true,"real_timestamp_ms":1789265738936,"virtual_time_s":1319.363173,"measure_result":"no_signal"}}
{"event":"action","seq":45,"wall_ts_ms":1789265738936,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0045","position":{"x":200.0,"y":-900.0},"channel":5},"response":{"accepted":true,"real_timestamp_ms":1789265738936,"virtual_time_s":1325.363173,"measure_result":"no_signal"}}
{"event":"action","seq":46,"wall_ts_ms":1789265738937,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0046","position":{"x":200.0,"y":-900.0},"channel":6},"response":{"accepted":true,"real_timestamp_ms":1789265738937,"virtual_time_s":1331.363173,"measure_result":"no_signal"}}
{"event":"action","seq":47,"wall_ts_ms":1789265738938,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0047","position":{"x":200.0,"y":-900.0},"channel":7},"response":{"accepted":true,"real_timestamp_ms":1789265738938,"virtual_time_s":1337.363173,"measure_result":"no_signal"}}
{"event":"action","seq":48,"wall_ts_ms":1789265738939,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0048","position":{"x":200.0,"y":-900.0},"channel":8},"response":{"accepted":true,"real_timestamp_ms":1789265738939,"virtual_time_s":1343.363173,"measure_result":"direction","svd_deg":352.99}}
{"event":"action","seq":49,"wall_ts_ms":1789265738972,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0049","position":{"x":200.0,"y":-900.0},"channel":9},"response":{"accepted":true,"real_timestamp_ms":1789265738972,"virtual_time_s":1349.363173,"measure_result":"no_signal"}}
{"event":"action","seq":50,"wall_ts_ms":1789265738973,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0050","position":{"x":200.0,"y":-900.0},"channel":11},"response":{"accepted":true,"real_timestamp_ms":1789265738973,"virtual_time_s":1355.363173,"measure_result":"no_signal"}}
{"event":"action","seq":51,"wall_ts_ms":1789265738974,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0051","position":{"x":200.0,"y":-900.0},"channel":12},"response":{"accepted":true,"real_timestamp_ms":1789265738974,"virtual_time_s":1361.363173,"measure_result":"no_signal"}}
{"event":"action","seq":52,"wall_ts_ms":1789265738975,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0052","position":{"x":200.0,"y":-900.0},"channel":13},"response":{"accepted":true,"real_timestamp_ms":1789265738975,"virtual_time_s":1367.363173,"measure_result":"no_signal"}}
{"event":"action","seq":53,"wall_ts_ms":1789265738977,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0053","position":{"x":200.0,"y":-900.0},"channel":14},"response":{"accepted":true,"real_timestamp_ms":1789265738977,"virtual_time_s":1373.363173,"measure_result":"no_signal"}}
{"event":"action","seq":54,"wall_ts_ms":1789265738978,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0054","position":{"x":200.0,"y":-900.0},"channel":15},"response":{"accepted":true,"real_timestamp_ms":1789265738978,"virtual_time_s":1379.363173,"measure_result":"no_signal"}}
{"event":"action","seq":55,"wall_ts_ms":1789265738978,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0055","position":{"x":200.0,"y":-900.0},"channel":17},"response":{"accepted":true,"real_timestamp_ms":1789265738978,"virtual_time_s":1385.363173,"measure_result":"no_signal"}}
{"event":"action","seq":56,"wall_ts_ms":1789265738979,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0056","position":{"x":200.0,"y":-900.0},"channel":18},"response":{"accepted":true,"real_timestamp_ms":1789265738979,"virtual_time_s":1391.363173,"measure_result":"no_signal"}}
{"event":"action","seq":57,"wall_ts_ms":1789265739081,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0057","position":{"x":516.6212801392332,"y":-966.9819199979597},"channel":8},"response":{"accepted":true,"real_timestamp_ms":1789265739081,"virtual_time_s":1462.088937,"measure_result":"direction","svd_deg":357.38}}
{"event":"action","seq":58,"wall_ts_ms":1789265739136,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0058","position":{"x":866.5933228570544,"y":-995.2814295412376},"channel":8},"response":{"accepted":true,"real_timestamp_ms":1789265739136,"virtual_time_s":1537.311809,"measure_result":"direction","svd_deg":358.73}}
{"event":"action","seq":59,"wall_ts_ms":1789265739167,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0059","position":{"x":1040.8377161691203,"y":-1003.1570563336973},"channel":8},"response":{"accepted":true,"real_timestamp_ms":1789265739167,"virtual_time_s":1577.196266,"measure_result":"no_signal"}}
{"event":"action","seq":60,"wall_ts_ms":1789265739202,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0060","position":{"x":970.7414216957415,"y":-1003.1570563336973},"channel":8},"response":{"accepted":true,"real_timestamp_ms":1789265739202,"virtual_time_s":1596.215525,"measure_result":"direction","svd_deg":41.87}}
{"event":"action","seq":61,"wall_ts_ms":1789265739204,"method":"POST","path":"/clear","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0061","position":{"x":978.7251752457973,"y":-996.0135773020329},"channel":8},"response":{"accepted":true,"real_timestamp_ms":1789265739204,"virtual_time_s":1603.358137,"clear_result":"success"}}
{"event":"action","seq":62,"wall_ts_ms":1789265739205,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0062","position":{"x":900.0,"y":-700.0},"channel":1},"response":{"accepted":true,"real_timestamp_ms":1789265739205,"virtual_time_s":1670.61879,"measure_result":"no_signal"}}
{"event":"action","seq":63,"wall_ts_ms":1789265739206,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0063","position":{"x":900.0,"y":-700.0},"channel":3},"response":{"accepted":true,"real_timestamp_ms":1789265739206,"virtual_time_s":1676.61879,"measure_result":"no_signal"}}
{"event":"action","seq":64,"wall_ts_ms":1789265739207,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0064","position":{"x":900.0,"y":-700.0},"channel":4},"response":{"accepted":true,"real_timestamp_ms":1789265739207,"virtual_time_s":1682.61879,"measure_result":"no_signal"}}
{"event":"action","seq":65,"wall_ts_ms":1789265739207,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0065","position":{"x":900.0,"y":-700.0},"channel":5},"response":{"accepted":true,"real_timestamp_ms":1789265739207,"virtual_time_s":1688.61879,"measure_result":"no_signal"}}
{"event":"action","seq":66,"wall_ts_ms":1789265739208,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0066","position":{"x":900.0,"y":-700.0},"channel":6},"response":{"accepted":true,"real_timestamp_ms":1789265739208,"virtual_time_s":1694.61879,"measure_result":"no_signal"}}
{"event":"action","seq":67,"wall_ts_ms":1789265739211,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0067","position":{"x":900.0,"y":-700.0},"channel":7},"response":{"accepted":true,"real_timestamp_ms":1789265739211,"virtual_time_s":1700.61879,"measure_result":"no_signal"}}
{"event":"action","seq":68,"wall_ts_ms":1789265739212,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0068","position":{"x":900.0,"y":-700.0},"channel":9},"response":{"accepted":true,"real_timestamp_ms":1789265739212,"virtual_time_s":1706.61879,"measure_result":"no_signal"}}
{"event":"action","seq":69,"wall_ts_ms":1789265739212,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0069","position":{"x":900.0,"y":-700.0},"channel":11},"response":{"accepted":true,"real_timestamp_ms":1789265739212,"virtual_time_s":1712.61879,"measure_result":"no_signal"}}
{"event":"action","seq":70,"wall_ts_ms":1789265739213,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0070","position":{"x":900.0,"y":-700.0},"channel":12},"response":{"accepted":true,"real_timestamp_ms":1789265739213,"virtual_time_s":1718.61879,"measure_result":"no_signal"}}
{"event":"action","seq":71,"wall_ts_ms":1789265739214,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0071","position":{"x":900.0,"y":-700.0},"channel":13},"response":{"accepted":true,"real_timestamp_ms":1789265739214,"virtual_time_s":1724.61879,"measure_result":"no_signal"}}
{"event":"action","seq":72,"wall_ts_ms":1789265739216,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0072","position":{"x":900.0,"y":-700.0},"channel":14},"response":{"accepted":true,"real_timestamp_ms":1789265739216,"virtual_time_s":1730.61879,"measure_result":"no_signal"}}
{"event":"action","seq":73,"wall_ts_ms":1789265739217,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0073","position":{"x":900.0,"y":-700.0},"channel":15},"response":{"accepted":true,"real_timestamp_ms":1789265739217,"virtual_time_s":1736.61879,"measure_result":"no_signal"}}
{"event":"action","seq":74,"wall_ts_ms":1789265739218,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0074","position":{"x":900.0,"y":-700.0},"channel":17},"response":{"accepted":true,"real_timestamp_ms":1789265739218,"virtual_time_s":1742.61879,"measure_result":"no_signal"}}
{"event":"action","seq":75,"wall_ts_ms":1789265739219,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0075","position":{"x":900.0,"y":-700.0},"channel":18},"response":{"accepted":true,"real_timestamp_ms":1789265739219,"virtual_time_s":1748.61879,"measure_result":"no_signal"}}
{"event":"action","seq":76,"wall_ts_ms":1789265739219,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0076","position":{"x":1200.0,"y":-700.0},"channel":18},"response":{"accepted":true,"real_timestamp_ms":1789265739219,"virtual_time_s":1813.61879,"measure_result":"no_signal"}}
{"event":"action","seq":77,"wall_ts_ms":1789265739220,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0077","position":{"x":1200.0,"y":-700.0},"channel":1},"response":{"accepted":true,"real_timestamp_ms":1789265739220,"virtual_time_s":1819.61879,"measure_result":"no_signal"}}
{"event":"action","seq":78,"wall_ts_ms":1789265739221,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0078","position":{"x":1200.0,"y":-700.0},"channel":3},"response":{"accepted":true,"real_timestamp_ms":1789265739221,"virtual_time_s":1825.61879,"measure_result":"no_signal"}}
{"event":"action","seq":79,"wall_ts_ms":1789265739221,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0079","position":{"x":1200.0,"y":-700.0},"channel":4},"response":{"accepted":true,"real_timestamp_ms":1789265739221,"virtual_time_s":1831.61879,"measure_result":"no_signal"}}
{"event":"action","seq":80,"wall_ts_ms":1789265739222,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0080","position":{"x":1200.0,"y":-700.0},"channel":5},"response":{"accepted":true,"real_timestamp_ms":1789265739222,"virtual_time_s":1837.61879,"measure_result":"no_signal"}}
{"event":"action","seq":81,"wall_ts_ms":1789265739223,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0081","position":{"x":1200.0,"y":-700.0},"channel":6},"response":{"accepted":true,"real_timestamp_ms":1789265739223,"virtual_time_s":1843.61879,"measure_result":"no_signal"}}
{"event":"action","seq":82,"wall_ts_ms":1789265739223,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0082","position":{"x":1200.0,"y":-700.0},"channel":7},"response":{"accepted":true,"real_timestamp_ms":1789265739223,"virtual_time_s":1849.61879,"measure_result":"no_signal"}}
{"event":"action","seq":83,"wall_ts_ms":1789265739224,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0083","position":{"x":1200.0,"y":-700.0},"channel":9},"response":{"accepted":true,"real_timestamp_ms":1789265739224,"virtual_time_s":1855.61879,"measure_result":"no_signal"}}
{"event":"action","seq":84,"wall_ts_ms":1789265739225,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0084","position":{"x":1200.0,"y":-700.0},"channel":11},"response":{"accepted":true,"real_timestamp_ms":1789265739225,"virtual_time_s":1861.61879,"measure_result":"no_signal"}}
{"event":"action","seq":85,"wall_ts_ms":1789265739226,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0085","position":{"x":1200.0,"y":-700.0},"channel":12},"response":{"accepted":true,"real_timestamp_ms":1789265739226,"virtual_time_s":1867.61879,"measure_result":"no_signal"}}
{"event":"action","seq":86,"wall_ts_ms":1789265739226,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0086","position":{"x":1200.0,"y":-700.0},"channel":13},"response":{"accepted":true,"real_timestamp_ms":1789265739226,"virtual_time_s":1873.61879,"measure_result":"no_signal"}}
{"event":"action","seq":87,"wall_ts_ms":1789265739227,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0087","position":{"x":1200.0,"y":-700.0},"channel":14},"response":{"accepted":true,"real_timestamp_ms":1789265739227,"virtual_time_s":1879.61879,"measure_result":"no_signal"}}
{"event":"action","seq":88,"wall_ts_ms":1789265739228,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0088","position":{"x":1200.0,"y":-700.0},"channel":15},"response":{"accepted":true,"real_timestamp_ms":1789265739228,"virtual_time_s":1885.61879,"measure_result":"no_signal"}}
{"event":"action","seq":89,"wall_ts_ms":1789265739228,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0089","position":{"x":1200.0,"y":-700.0},"channel":17},"response":{"accepted":true,"real_timestamp_ms":1789265739228,"virtual_time_s":1891.61879,"measure_result":"no_signal"}}
{"event":"action","seq":90,"wall_ts_ms":1789265739229,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0090","position":{"x":1800.0,"y":-400.0},"channel":17},"response":{"accepted":true,"real_timestamp_ms":1789265739229,"virtual_time_s":2030.782869,"measure_result":"no_signal"}}
{"event":"action","seq":91,"wall_ts_ms":1789265739230,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0091","position":{"x":1800.0,"y":-400.0},"channel":1},"response":{"accepted":true,"real_timestamp_ms":1789265739230,"virtual_time_s":2036.782869,"measure_result":"no_signal"}}
{"event":"action","seq":92,"wall_ts_ms":1789265739230,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0092","position":{"x":1800.0,"y":-400.0},"channel":3},"response":{"accepted":true,"real_timestamp_ms":1789265739230,"virtual_time_s":2042.782869,"measure_result":"no_signal"}}
{"event":"action","seq":93,"wall_ts_ms":1789265739231,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0093","position":{"x":1800.0,"y":-400.0},"channel":4},"response":{"accepted":true,"real_timestamp_ms":1789265739231,"virtual_time_s":2048.782869,"measure_result":"no_signal"}}
{"event":"action","seq":94,"wall_ts_ms":1789265739232,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0094","position":{"x":1800.0,"y":-400.0},"channel":5},"response":{"accepted":true,"real_timestamp_ms":1789265739232,"virtual_time_s":2054.782869,"measure_result":"no_signal"}}
{"event":"action","seq":95,"wall_ts_ms":1789265739233,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0095","position":{"x":1800.0,"y":-400.0},"channel":6},"response":{"accepted":true,"real_timestamp_ms":1789265739233,"virtual_time_s":2060.782869,"measure_result":"no_signal"}}
{"event":"action","seq":96,"wall_ts_ms":1789265739233,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0096","position":{"x":1800.0,"y":-400.0},"channel":7},"response":{"accepted":true,"real_timestamp_ms":1789265739233,"virtual_time_s":2066.782869,"measure_result":"no_signal"}}
{"event":"action","seq":97,"wall_ts_ms":1789265739234,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0097","position":{"x":1800.0,"y":-400.0},"channel":9},"response":{"accepted":true,"real_timestamp_ms":1789265739234,"virtual_time_s":2072.782869,"measure_result":"no_signal"}}
{"event":"action","seq":98,"wall_ts_ms":1789265739234,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0098","position":{"x":1800.0,"y":-400.0},"channel":11},"response":{"accepted":true,"real_timestamp_ms":1789265739234,"virtual_time_s":2078.782869,"measure_result":"no_signal"}}
{"event":"action","seq":99,"wall_ts_ms":1789265739235,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0099","position":{"x":1800.0,"y":-400.0},"channel":12},"response":{"accepted":true,"real_timestamp_ms":1789265739235,"virtual_time_s":2084.782869,"measure_result":"no_signal"}}
{"event":"action","seq":100,"wall_ts_ms":1789265739236,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0100","position":{"x":1800.0,"y":-400.0},"channel":13},"response":{"accepted":true,"real_timestamp_ms":1789265739236,"virtual_time_s":2090.782869,"measure_result":"no_signal"}}
{"event":"action","seq":101,"wall_ts_ms":1789265739236,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0101","position":{"x":1800.0,"y":-400.0},"channel":14},"response":{"accepted":true,"real_timestamp_ms":1789265739236,"virtual_time_s":2096.782869,"measure_result":"no_signal"}}
{"event":"action","seq":102,"wall_ts_ms":1789265739237,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0102","position":{"x":1800.0,"y":-400.0},"channel":15},"response":{"accepted":true,"real_timestamp_ms":1789265739237,"virtual_time_s":2102.782869,"measure_result":"no_signal"}}
{"event":"action","seq":103,"wall_ts_ms":1789265739238,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0103","position":{"x":1800.0,"y":-400.0},"channel":18},"response":{"accepted":true,"real_timestamp_ms":1789265739238,"virtual_time_s":2108.782869,"measure_result":"no_signal"}}
{"event":"action","seq":104,"wall_ts_ms":1789265739238,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0104","position":{"x":1900.0,"y":-900.0},"channel":18},"response":{"accepted":true,"real_timestamp_ms":1789265739238,"virtual_time_s":2215.763259,"measure_result":"no_signal"}}
{"event":"action","seq":105,"wall_ts_ms":1789265739239,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0105","position":{"x":1900.0,"y":-900.0},"channel":1},"response":{"accepted":true,"real_timestamp_ms":1789265739239,"virtual_time_s":2221.763259,"measure_result":"no_signal"}}
{"event":"action","seq":106,"wall_ts_ms":1789265739240,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0106","position":{"x":1900.0,"y":-900.0},"channel":3},"response":{"accepted":true,"real_timestamp_ms":1789265739240,"virtual_time_s":2227.763259,"measure_result":"no_signal"}}
{"event":"action","seq":107,"wall_ts_ms":1789265739240,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0107","position":{"x":1900.0,"y":-900.0},"channel":4},"response":{"accepted":true,"real_timestamp_ms":1789265739240,"virtual_time_s":2233.763259,"measure_result":"no_signal"}}
{"event":"action","seq":108,"wall_ts_ms":1789265739241,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0108","position":{"x":1900.0,"y":-900.0},"channel":5},"response":{"accepted":true,"real_timestamp_ms":1789265739241,"virtual_time_s":2239.763259,"measure_result":"no_signal"}}
{"event":"action","seq":109,"wall_ts_ms":1789265739241,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0109","position":{"x":1900.0,"y":-900.0},"channel":6},"response":{"accepted":true,"real_timestamp_ms":1789265739241,"virtual_time_s":2245.763259,"measure_result":"no_signal"}}
{"event":"action","seq":110,"wall_ts_ms":1789265739242,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0110","position":{"x":1900.0,"y":-900.0},"channel":7},"response":{"accepted":true,"real_timestamp_ms":1789265739242,"virtual_time_s":2251.763259,"measure_result":"no_signal"}}
{"event":"action","seq":111,"wall_ts_ms":1789265739242,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0111","position":{"x":1900.0,"y":-900.0},"channel":9},"response":{"accepted":true,"real_timestamp_ms":1789265739242,"virtual_time_s":2257.763259,"measure_result":"no_signal"}}
{"event":"action","seq":112,"wall_ts_ms":1789265739243,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0112","position":{"x":1900.0,"y":-900.0},"channel":11},"response":{"accepted":true,"real_timestamp_ms":1789265739243,"virtual_time_s":2263.763259,"measure_result":"no_signal"}}
{"event":"action","seq":113,"wall_ts_ms":1789265739244,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0113","position":{"x":1900.0,"y":-900.0},"channel":12},"response":{"accepted":true,"real_timestamp_ms":1789265739244,"virtual_time_s":2269.763259,"measure_result":"no_signal"}}
{"event":"action","seq":114,"wall_ts_ms":1789265739244,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0114","position":{"x":1900.0,"y":-900.0},"channel":13},"response":{"accepted":true,"real_timestamp_ms":1789265739244,"virtual_time_s":2275.763259,"measure_result":"no_signal"}}
{"event":"action","seq":115,"wall_ts_ms":1789265739245,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0115","position":{"x":1900.0,"y":-900.0},"channel":14},"response":{"accepted":true,"real_timestamp_ms":1789265739245,"virtual_time_s":2281.763259,"measure_result":"no_signal"}}
{"event":"action","seq":116,"wall_ts_ms":1789265739246,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0116","position":{"x":1900.0,"y":-900.0},"channel":15},"response":{"accepted":true,"real_timestamp_ms":1789265739246,"virtual_time_s":2287.763259,"measure_result":"no_signal"}}
{"event":"action","seq":117,"wall_ts_ms":1789265739247,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0117","position":{"x":1900.0,"y":-900.0},"channel":17},"response":{"accepted":true,"real_timestamp_ms":1789265739247,"virtual_time_s":2293.763259,"measure_result":"no_signal"}}
{"event":"action","seq":118,"wall_ts_ms":1789265739248,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0118","position":{"x":1400.0,"y":-1400.0},"channel":17},"response":{"accepted":true,"real_timestamp_ms":1789265739248,"virtual_time_s":2440.184615,"measure_result":"no_signal"}}
{"event":"action","seq":119,"wall_ts_ms":1789265739249,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0119","position":{"x":1400.0,"y":-1400.0},"channel":1},"response":{"accepted":true,"real_timestamp_ms":1789265739249,"virtual_time_s":2446.184615,"measure_result":"no_signal"}}
{"event":"action","seq":120,"wall_ts_ms":1789265739249,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0120","position":{"x":1400.0,"y":-1400.0},"channel":3},"response":{"accepted":true,"real_timestamp_ms":1789265739249,"virtual_time_s":2452.184615,"measure_result":"no_signal"}}
{"event":"action","seq":121,"wall_ts_ms":1789265739250,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0121","position":{"x":1400.0,"y":-1400.0},"channel":4},"response":{"accepted":true,"real_timestamp_ms":1789265739250,"virtual_time_s":2458.184615,"measure_result":"no_signal"}}
{"event":"action","seq":122,"wall_ts_ms":1789265739251,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0122","position":{"x":1400.0,"y":-1400.0},"channel":5},"response":{"accepted":true,"real_timestamp_ms":1789265739251,"virtual_time_s":2464.184615,"measure_result":"no_signal"}}
{"event":"action","seq":123,"wall_ts_ms":1789265739251,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0123","position":{"x":1400.0,"y":-1400.0},"channel":6},"response":{"accepted":true,"real_timestamp_ms":1789265739251,"virtual_time_s":2470.184615,"measure_result":"no_signal"}}
{"event":"action","seq":124,"wall_ts_ms":1789265739252,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0124","position":{"x":1400.0,"y":-1400.0},"channel":7},"response":{"accepted":true,"real_timestamp_ms":1789265739252,"virtual_time_s":2476.184615,"measure_result":"no_signal"}}
{"event":"action","seq":125,"wall_ts_ms":1789265739253,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0125","position":{"x":1400.0,"y":-1400.0},"channel":9},"response":{"accepted":true,"real_timestamp_ms":1789265739252,"virtual_time_s":2482.184615,"measure_result":"no_signal"}}
{"event":"action","seq":126,"wall_ts_ms":1789265739253,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0126","position":{"x":1400.0,"y":-1400.0},"channel":11},"response":{"accepted":true,"real_timestamp_ms":1789265739253,"virtual_time_s":2488.184615,"measure_result":"no_signal"}}
{"event":"action","seq":127,"wall_ts_ms":1789265739254,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0127","position":{"x":1400.0,"y":-1400.0},"channel":12},"response":{"accepted":true,"real_timestamp_ms":1789265739254,"virtual_time_s":2494.184615,"measure_result":"no_signal"}}
{"event":"action","seq":128,"wall_ts_ms":1789265739254,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0128","position":{"x":1400.0,"y":-1400.0},"channel":13},"response":{"accepted":true,"real_timestamp_ms":1789265739254,"virtual_time_s":2500.184615,"measure_result":"no_signal"}}
{"event":"action","seq":129,"wall_ts_ms":1789265739255,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0129","position":{"x":1400.0,"y":-1400.0},"channel":14},"response":{"accepted":true,"real_timestamp_ms":1789265739255,"virtual_time_s":2506.184615,"measure_result":"no_signal"}}
{"event":"action","seq":130,"wall_ts_ms":1789265739255,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0130","position":{"x":1400.0,"y":-1400.0},"channel":15},"response":{"accepted":true,"real_timestamp_ms":1789265739255,"virtual_time_s":2512.184615,"measure_result":"no_signal"}}
{"event":"action","seq":131,"wall_ts_ms":1789265739256,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0131","position":{"x":1400.0,"y":-1400.0},"channel":18},"response":{"accepted":true,"real_timestamp_ms":1789265739256,"virtual_time_s":2518.184615,"measure_result":"no_signal"}}
{"event":"action","seq":132,"wall_ts_ms":1789265739256,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0132","position":{"x":500.0,"y":-1800.0},"channel":18},"response":{"accepted":true,"real_timestamp_ms":1789265739256,"virtual_time_s":2720.161771,"measure_result":"no_signal"}}
{"event":"action","seq":133,"wall_ts_ms":1789265739257,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0133","position":{"x":500.0,"y":-1800.0},"channel":1},"response":{"accepted":true,"real_timestamp_ms":1789265739257,"virtual_time_s":2726.161771,"measure_result":"no_signal"}}
{"event":"action","seq":134,"wall_ts_ms":1789265739258,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0134","position":{"x":500.0,"y":-1800.0},"channel":3},"response":{"accepted":true,"real_timestamp_ms":1789265739258,"virtual_time_s":2732.161771,"measure_result":"no_signal"}}
{"event":"action","seq":135,"wall_ts_ms":1789265739258,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0135","position":{"x":500.0,"y":-1800.0},"channel":4},"response":{"accepted":true,"real_timestamp_ms":1789265739258,"virtual_time_s":2738.161771,"measure_result":"no_signal"}}
{"event":"action","seq":136,"wall_ts_ms":1789265739259,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0136","position":{"x":500.0,"y":-1800.0},"channel":5},"response":{"accepted":true,"real_timestamp_ms":1789265739259,"virtual_time_s":2744.161771,"measure_result":"no_signal"}}
{"event":"action","seq":137,"wall_ts_ms":1789265739260,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0137","position":{"x":500.0,"y":-1800.0},"channel":6},"response":{"accepted":true,"real_timestamp_ms":1789265739260,"virtual_time_s":2750.161771,"measure_result":"no_signal"}}
{"event":"action","seq":138,"wall_ts_ms":1789265739260,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0138","position":{"x":500.0,"y":-1800.0},"channel":7},"response":{"accepted":true,"real_timestamp_ms":1789265739260,"virtual_time_s":2756.161771,"measure_result":"no_signal"}}
{"event":"action","seq":139,"wall_ts_ms":1789265739261,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0139","position":{"x":500.0,"y":-1800.0},"channel":9},"response":{"accepted":true,"real_timestamp_ms":1789265739261,"virtual_time_s":2762.161771,"measure_result":"no_signal"}}
{"event":"action","seq":140,"wall_ts_ms":1789265739262,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0140","position":{"x":500.0,"y":-1800.0},"channel":11},"response":{"accepted":true,"real_timestamp_ms":1789265739262,"virtual_time_s":2768.161771,"measure_result":"no_signal"}}
{"event":"action","seq":141,"wall_ts_ms":1789265739262,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0141","position":{"x":500.0,"y":-1800.0},"channel":12},"response":{"accepted":true,"real_timestamp_ms":1789265739262,"virtual_time_s":2774.161771,"measure_result":"no_signal"}}
{"event":"action","seq":142,"wall_ts_ms":1789265739263,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0142","position":{"x":500.0,"y":-1800.0},"channel":13},"response":{"accepted":true,"real_timestamp_ms":1789265739263,"virtual_time_s":2780.161771,"measure_result":"no_signal"}}
{"event":"action","seq":143,"wall_ts_ms":1789265739263,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0143","position":{"x":500.0,"y":-1800.0},"channel":14},"response":{"accepted":true,"real_timestamp_ms":1789265739263,"virtual_time_s":2786.161771,"measure_result":"no_signal"}}
{"event":"action","seq":144,"wall_ts_ms":1789265739264,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0144","position":{"x":500.0,"y":-1800.0},"channel":15},"response":{"accepted":true,"real_timestamp_ms":1789265739264,"virtual_time_s":2792.161771,"measure_result":"no_signal"}}
{"event":"action","seq":145,"wall_ts_ms":1789265739264,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0145","position":{"x":500.0,"y":-1800.0},"channel":17},"response":{"accepted":true,"real_timestamp_ms":1789265739264,"virtual_time_s":2798.161771,"measure_result":"no_signal"}}
{"event":"action","seq":146,"wall_ts_ms":1789265739265,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0146","position":{"x":-400.0,"y":-1800.0},"channel":17},"response":{"accepted":true,"real_timestamp_ms":1789265739265,"virtual_time_s":2983.161771,"measure_result":"no_signal"}}
{"event":"action","seq":147,"wall_ts_ms":1789265739266,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0147","position":{"x":-400.0,"y":-1800.0},"channel":1},"response":{"accepted":true,"real_timestamp_ms":1789265739266,"virtual_time_s":2989.161771,"measure_result":"no_signal"}}
{"event":"action","seq":148,"wall_ts_ms":1789265739266,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0148","position":{"x":-400.0,"y":-1800.0},"channel":3},"response":{"accepted":true,"real_timestamp_ms":1789265739266,"virtual_time_s":2995.161771,"measure_result":"no_signal"}}
{"event":"action","seq":149,"wall_ts_ms":1789265739267,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0149","position":{"x":-400.0,"y":-1800.0},"channel":4},"response":{"accepted":true,"real_timestamp_ms":1789265739267,"virtual_time_s":3001.161771,"measure_result":"no_signal"}}
{"event":"action","seq":150,"wall_ts_ms":1789265739267,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0150","position":{"x":-400.0,"y":-1800.0},"channel":5},"response":{"accepted":true,"real_timestamp_ms":1789265739267,"virtual_time_s":3007.161771,"measure_result":"no_signal"}}
{"event":"action","seq":151,"wall_ts_ms":1789265739268,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0151","position":{"x":-400.0,"y":-1800.0},"channel":6},"response":{"accepted":true,"real_timestamp_ms":1789265739268,"virtual_time_s":3013.161771,"measure_result":"no_signal"}}
{"event":"action","seq":152,"wall_ts_ms":1789265739268,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0152","position":{"x":-400.0,"y":-1800.0},"channel":7},"response":{"accepted":true,"real_timestamp_ms":1789265739268,"virtual_time_s":3019.161771,"measure_result":"no_signal"}}
{"event":"action","seq":153,"wall_ts_ms":1789265739269,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0153","position":{"x":-400.0,"y":-1800.0},"channel":9},"response":{"accepted":true,"real_timestamp_ms":1789265739269,"virtual_time_s":3025.161771,"measure_result":"no_signal"}}
{"event":"action","seq":154,"wall_ts_ms":1789265739270,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0154","position":{"x":-400.0,"y":-1800.0},"channel":11},"response":{"accepted":true,"real_timestamp_ms":1789265739270,"virtual_time_s":3031.161771,"measure_result":"no_signal"}}
{"event":"action","seq":155,"wall_ts_ms":1789265739270,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0155","position":{"x":-400.0,"y":-1800.0},"channel":12},"response":{"accepted":true,"real_timestamp_ms":1789265739270,"virtual_time_s":3037.161771,"measure_result":"no_signal"}}
{"event":"action","seq":156,"wall_ts_ms":1789265739271,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0156","position":{"x":-400.0,"y":-1800.0},"channel":13},"response":{"accepted":true,"real_timestamp_ms":1789265739271,"virtual_time_s":3043.161771,"measure_result":"no_signal"}}
{"event":"action","seq":157,"wall_ts_ms":1789265739271,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0157","position":{"x":-400.0,"y":-1800.0},"channel":14},"response":{"accepted":true,"real_timestamp_ms":1789265739271,"virtual_time_s":3049.161771,"measure_result":"no_signal"}}
{"event":"action","seq":158,"wall_ts_ms":1789265739272,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0158","position":{"x":-400.0,"y":-1800.0},"channel":15},"response":{"accepted":true,"real_timestamp_ms":1789265739272,"virtual_time_s":3055.161771,"measure_result":"no_signal"}}
{"event":"action","seq":159,"wall_ts_ms":1789265739273,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0159","position":{"x":-400.0,"y":-1800.0},"channel":18},"response":{"accepted":true,"real_timestamp_ms":1789265739273,"virtual_time_s":3061.161771,"measure_result":"no_signal"}}
{"event":"action","seq":160,"wall_ts_ms":1789265739273,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0160","position":{"x":-900.0,"y":-2100.0},"channel":18},"response":{"accepted":true,"real_timestamp_ms":1789265739273,"virtual_time_s":3182.780809,"measure_result":"no_signal"}}
{"event":"action","seq":161,"wall_ts_ms":1789265739274,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0161","position":{"x":-900.0,"y":-2100.0},"channel":1},"response":{"accepted":true,"real_timestamp_ms":1789265739274,"virtual_time_s":3188.780809,"measure_result":"no_signal"}}
{"event":"action","seq":162,"wall_ts_ms":1789265739275,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0162","position":{"x":-900.0,"y":-2100.0},"channel":3},"response":{"accepted":true,"real_timestamp_ms":1789265739275,"virtual_time_s":3194.780809,"measure_result":"no_signal"}}
{"event":"action","seq":163,"wall_ts_ms":1789265739275,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0163","position":{"x":-900.0,"y":-2100.0},"channel":4},"response":{"accepted":true,"real_timestamp_ms":1789265739275,"virtual_time_s":3200.780809,"measure_result":"no_signal"}}
{"event":"action","seq":164,"wall_ts_ms":1789265739276,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0164","position":{"x":-900.0,"y":-2100.0},"channel":5},"response":{"accepted":true,"real_timestamp_ms":1789265739276,"virtual_time_s":3206.780809,"measure_result":"no_signal"}}
{"event":"action","seq":165,"wall_ts_ms":1789265739277,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0165","position":{"x":-900.0,"y":-2100.0},"channel":6},"response":{"accepted":true,"real_timestamp_ms":1789265739277,"virtual_time_s":3212.780809,"measure_result":"no_signal"}}
{"event":"action","seq":166,"wall_ts_ms":1789265739277,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0166","position":{"x":-900.0,"y":-2100.0},"channel":7},"response":{"accepted":true,"real_timestamp_ms":1789265739277,"virtual_time_s":3218.780809,"measure_result":"no_signal"}}
{"event":"action","seq":167,"wall_ts_ms":1789265739278,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0167","position":{"x":-900.0,"y":-2100.0},"channel":9},"response":{"accepted":true,"real_timestamp_ms":1789265739278,"virtual_time_s":3224.780809,"measure_result":"no_signal"}}
{"event":"action","seq":168,"wall_ts_ms":1789265739279,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0168","position":{"x":-900.0,"y":-2100.0},"channel":11},"response":{"accepted":true,"real_timestamp_ms":1789265739279,"virtual_time_s":3230.780809,"measure_result":"no_signal"}}
{"event":"action","seq":169,"wall_ts_ms":1789265739279,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0169","position":{"x":-900.0,"y":-2100.0},"channel":12},"response":{"accepted":true,"real_timestamp_ms":1789265739279,"virtual_time_s":3236.780809,"measure_result":"no_signal"}}
{"event":"action","seq":170,"wall_ts_ms":1789265739280,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0170","position":{"x":-900.0,"y":-2100.0},"channel":13},"response":{"accepted":true,"real_timestamp_ms":1789265739280,"virtual_time_s":3242.780809,"measure_result":"no_signal"}}
{"event":"action","seq":171,"wall_ts_ms":1789265739280,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0171","position":{"x":-900.0,"y":-2100.0},"channel":14},"response":{"accepted":true,"real_timestamp_ms":1789265739280,"virtual_time_s":3248.780809,"measure_result":"no_signal"}}
{"event":"action","seq":172,"wall_ts_ms":1789265739281,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0172","position":{"x":-900.0,"y":-2100.0},"channel":15},"response":{"accepted":true,"real_timestamp_ms":1789265739281,"virtual_time_s":3254.780809,"measure_result":"no_signal"}}
{"event":"action","seq":173,"wall_ts_ms":1789265739281,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0173","position":{"x":-900.0,"y":-2100.0},"channel":17},"response":{"accepted":true,"real_timestamp_ms":1789265739281,"virtual_time_s":3260.780809,"measure_result":"no_signal"}}
{"event":"action","seq":174,"wall_ts_ms":1789265739283,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0174","position":{"x":-700.0,"y":-1200.0},"channel":17},"response":{"accepted":true,"real_timestamp_ms":1789265739283,"virtual_time_s":3450.171698,"measure_result":"no_signal"}}
{"event":"action","seq":175,"wall_ts_ms":1789265739284,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0175","position":{"x":-700.0,"y":-1200.0},"channel":1},"response":{"accepted":true,"real_timestamp_ms":1789265739284,"virtual_time_s":3456.171698,"measure_result":"no_signal"}}
{"event":"action","seq":176,"wall_ts_ms":1789265739285,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0176","position":{"x":-700.0,"y":-1200.0},"channel":3},"response":{"accepted":true,"real_timestamp_ms":1789265739285,"virtual_time_s":3462.171698,"measure_result":"no_signal"}}
{"event":"action","seq":177,"wall_ts_ms":1789265739286,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0177","position":{"x":-700.0,"y":-1200.0},"channel":4},"response":{"accepted":true,"real_timestamp_ms":1789265739286,"virtual_time_s":3468.171698,"measure_result":"no_signal"}}
{"event":"action","seq":178,"wall_ts_ms":1789265739286,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0178","position":{"x":-700.0,"y":-1200.0},"channel":5},"response":{"accepted":true,"real_timestamp_ms":1789265739286,"virtual_time_s":3474.171698,"measure_result":"no_signal"}}
{"event":"action","seq":179,"wall_ts_ms":1789265739287,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0179","position":{"x":-700.0,"y":-1200.0},"channel":6},"response":{"accepted":true,"real_timestamp_ms":1789265739287,"virtual_time_s":3480.171698,"measure_result":"no_signal"}}
{"event":"action","seq":180,"wall_ts_ms":1789265739288,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0180","position":{"x":-700.0,"y":-1200.0},"channel":7},"response":{"accepted":true,"real_timestamp_ms":1789265739288,"virtual_time_s":3486.171698,"measure_result":"no_signal"}}
{"event":"action","seq":181,"wall_ts_ms":1789265739289,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0181","position":{"x":-700.0,"y":-1200.0},"channel":9},"response":{"accepted":true,"real_timestamp_ms":1789265739288,"virtual_time_s":3492.171698,"measure_result":"no_signal"}}
{"event":"action","seq":182,"wall_ts_ms":1789265739289,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0182","position":{"x":-700.0,"y":-1200.0},"channel":11},"response":{"accepted":true,"real_timestamp_ms":1789265739289,"virtual_time_s":3498.171698,"measure_result":"no_signal"}}
{"event":"action","seq":183,"wall_ts_ms":1789265739290,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0183","position":{"x":-700.0,"y":-1200.0},"channel":12},"response":{"accepted":true,"real_timestamp_ms":1789265739290,"virtual_time_s":3504.171698,"measure_result":"no_signal"}}
{"event":"action","seq":184,"wall_ts_ms":1789265739290,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0184","position":{"x":-700.0,"y":-1200.0},"channel":13},"response":{"accepted":true,"real_timestamp_ms":1789265739290,"virtual_time_s":3510.171698,"measure_result":"no_signal"}}
{"event":"action","seq":185,"wall_ts_ms":1789265739291,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0185","position":{"x":-700.0,"y":-1200.0},"channel":14},"response":{"accepted":true,"real_timestamp_ms":1789265739291,"virtual_time_s":3516.171698,"measure_result":"no_signal"}}
{"event":"action","seq":186,"wall_ts_ms":1789265739292,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0186","position":{"x":-700.0,"y":-1200.0},"channel":15},"response":{"accepted":true,"real_timestamp_ms":1789265739292,"virtual_time_s":3522.171698,"measure_result":"no_signal"}}
{"event":"action","seq":187,"wall_ts_ms":1789265739292,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0187","position":{"x":-700.0,"y":-1200.0},"channel":18},"response":{"accepted":true,"real_timestamp_ms":1789265739292,"virtual_time_s":3528.171698,"measure_result":"no_signal"}}
{"event":"action","seq":188,"wall_ts_ms":1789265739293,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0188","position":{"x":-700.0,"y":-700.0},"channel":18},"response":{"accepted":true,"real_timestamp_ms":1789265739293,"virtual_time_s":3633.171698,"measure_result":"no_signal"}}
{"event":"action","seq":189,"wall_ts_ms":1789265739303,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0189","position":{"x":-700.0,"y":-700.0},"channel":1},"response":{"accepted":true,"real_timestamp_ms":1789265739303,"virtual_time_s":3639.171698,"measure_result":"no_signal"}}
{"event":"action","seq":190,"wall_ts_ms":1789265739305,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0190","position":{"x":-700.0,"y":-700.0},"channel":3},"response":{"accepted":true,"real_timestamp_ms":1789265739305,"virtual_time_s":3645.171698,"measure_result":"no_signal"}}
{"event":"action","seq":191,"wall_ts_ms":1789265739306,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0191","position":{"x":-700.0,"y":-700.0},"channel":4},"response":{"accepted":true,"real_timestamp_ms":1789265739306,"virtual_time_s":3651.171698,"measure_result":"no_signal"}}
{"event":"action","seq":192,"wall_ts_ms":1789265739306,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0192","position":{"x":-700.0,"y":-700.0},"channel":5},"response":{"accepted":true,"real_timestamp_ms":1789265739306,"virtual_time_s":3657.171698,"measure_result":"no_signal"}}
{"event":"action","seq":193,"wall_ts_ms":1789265739307,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0193","position":{"x":-700.0,"y":-700.0},"channel":6},"response":{"accepted":true,"real_timestamp_ms":1789265739307,"virtual_time_s":3663.171698,"measure_result":"no_signal"}}
{"event":"action","seq":194,"wall_ts_ms":1789265739308,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0194","position":{"x":-700.0,"y":-700.0},"channel":7},"response":{"accepted":true,"real_timestamp_ms":1789265739308,"virtual_time_s":3669.171698,"measure_result":"no_signal"}}
{"event":"action","seq":195,"wall_ts_ms":1789265739309,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0195","position":{"x":-700.0,"y":-700.0},"channel":9},"response":{"accepted":true,"real_timestamp_ms":1789265739309,"virtual_time_s":3675.171698,"measure_result":"no_signal"}}
{"event":"action","seq":196,"wall_ts_ms":1789265739310,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0196","position":{"x":-700.0,"y":-700.0},"channel":11},"response":{"accepted":true,"real_timestamp_ms":1789265739310,"virtual_time_s":3681.171698,"measure_result":"no_signal"}}
{"event":"action","seq":197,"wall_ts_ms":1789265739310,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0197","position":{"x":-700.0,"y":-700.0},"channel":12},"response":{"accepted":true,"real_timestamp_ms":1789265739310,"virtual_time_s":3687.171698,"measure_result":"no_signal"}}
{"event":"action","seq":198,"wall_ts_ms":1789265739311,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0198","position":{"x":-700.0,"y":-700.0},"channel":13},"response":{"accepted":true,"real_timestamp_ms":1789265739311,"virtual_time_s":3693.171698,"measure_result":"no_signal"}}
{"event":"action","seq":199,"wall_ts_ms":1789265739312,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0199","position":{"x":-700.0,"y":-700.0},"channel":14},"response":{"accepted":true,"real_timestamp_ms":1789265739312,"virtual_time_s":3699.171698,"measure_result":"no_signal"}}
{"event":"action","seq":200,"wall_ts_ms":1789265739313,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0200","position":{"x":-700.0,"y":-700.0},"channel":15},"response":{"accepted":true,"real_timestamp_ms":1789265739313,"virtual_time_s":3705.171698,"measure_result":"no_signal"}}
{"event":"action","seq":201,"wall_ts_ms":1789265739313,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0201","position":{"x":-700.0,"y":-700.0},"channel":17},"response":{"accepted":true,"real_timestamp_ms":1789265739313,"virtual_time_s":3711.171698,"measure_result":"no_signal"}}
{"event":"action","seq":202,"wall_ts_ms":1789265739314,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0202","position":{"x":-800.0,"y":-200.0},"channel":17},"response":{"accepted":true,"real_timestamp_ms":1789265739314,"virtual_time_s":3818.152088,"measure_result":"no_signal"}}
{"event":"action","seq":203,"wall_ts_ms":1789265739315,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0203","position":{"x":-800.0,"y":-200.0},"channel":1},"response":{"accepted":true,"real_timestamp_ms":1789265739315,"virtual_time_s":3824.152088,"measure_result":"no_signal"}}
{"event":"action","seq":204,"wall_ts_ms":1789265739316,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0204","position":{"x":-800.0,"y":-200.0},"channel":3},"response":{"accepted":true,"real_timestamp_ms":1789265739316,"virtual_time_s":3830.152088,"measure_result":"no_signal"}}
{"event":"action","seq":205,"wall_ts_ms":1789265739316,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0205","position":{"x":-800.0,"y":-200.0},"channel":4},"response":{"accepted":true,"real_timestamp_ms":1789265739316,"virtual_time_s":3836.152088,"measure_result":"no_signal"}}
{"event":"action","seq":206,"wall_ts_ms":1789265739317,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0206","position":{"x":-800.0,"y":-200.0},"channel":5},"response":{"accepted":true,"real_timestamp_ms":1789265739317,"virtual_time_s":3842.152088,"measure_result":"direction","svd_deg":126.11}}
{"event":"action","seq":207,"wall_ts_ms":1789265739355,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0207","position":{"x":-800.0,"y":-200.0},"channel":6},"response":{"accepted":true,"real_timestamp_ms":1789265739355,"virtual_time_s":3848.152088,"measure_result":"no_signal"}}
{"event":"action","seq":208,"wall_ts_ms":1789265739356,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0208","position":{"x":-800.0,"y":-200.0},"channel":7},"response":{"accepted":true,"real_timestamp_ms":1789265739356,"virtual_time_s":3854.152088,"measure_result":"no_signal"}}
{"event":"action","seq":209,"wall_ts_ms":1789265739356,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0209","position":{"x":-800.0,"y":-200.0},"channel":9},"response":{"accepted":true,"real_timestamp_ms":1789265739356,"virtual_time_s":3860.152088,"measure_result":"no_signal"}}
{"event":"action","seq":210,"wall_ts_ms":1789265739357,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0210","position":{"x":-800.0,"y":-200.0},"channel":11},"response":{"accepted":true,"real_timestamp_ms":1789265739357,"virtual_time_s":3866.152088,"measure_result":"no_signal"}}
{"event":"action","seq":211,"wall_ts_ms":1789265739358,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0211","position":{"x":-800.0,"y":-200.0},"channel":12},"response":{"accepted":true,"real_timestamp_ms":1789265739358,"virtual_time_s":3872.152088,"measure_result":"direction","svd_deg":108.11}}
{"event":"action","seq":212,"wall_ts_ms":1789265739392,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0212","position":{"x":-800.0,"y":-200.0},"channel":13},"response":{"accepted":true,"real_timestamp_ms":1789265739392,"virtual_time_s":3878.152088,"measure_result":"no_signal"}}
{"event":"action","seq":213,"wall_ts_ms":1789265739393,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0213","position":{"x":-800.0,"y":-200.0},"channel":14},"response":{"accepted":true,"real_timestamp_ms":1789265739393,"virtual_time_s":3884.152088,"measure_result":"no_signal"}}
{"event":"action","seq":214,"wall_ts_ms":1789265739394,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0214","position":{"x":-800.0,"y":-200.0},"channel":15},"response":{"accepted":true,"real_timestamp_ms":1789265739394,"virtual_time_s":3890.152088,"measure_result":"no_signal"}}
{"event":"action","seq":215,"wall_ts_ms":1789265739394,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0215","position":{"x":-800.0,"y":-200.0},"channel":18},"response":{"accepted":true,"real_timestamp_ms":1789265739394,"virtual_time_s":3896.152088,"measure_result":"no_signal"}}
{"event":"action","seq":216,"wall_ts_ms":1789265739503,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0216","position":{"x":-947.4060451871933,"y":109.11837968521047},"channel":5},"response":{"accepted":true,"real_timestamp_ms":1789265739503,"virtual_time_s":3970.645216,"measure_result":"direction","svd_deg":131.32}}
{"event":"action","seq":217,"wall_ts_ms":1789265739561,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0217","position":{"x":-1324.9239456154519,"y":558.3476201396235},"channel":5},"response":{"accepted":true,"real_timestamp_ms":1789265739561,"virtual_time_s":4093.003927,"measure_result":"direction","svd_deg":131.0}}
{"event":"action","seq":218,"wall_ts_ms":1789265739594,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0218","position":{"x":-1432.2923947371212,"y":690.0535132542623},"channel":5},"response":{"accepted":true,"real_timestamp_ms":1789265739594,"virtual_time_s":4131.98888,"measure_result":"direction","svd_deg":136.57}}
{"event":"action","seq":219,"wall_ts_ms":1789265739609,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0219","position":{"x":-1483.0245877461791,"y":738.3058311207313},"channel":5},"response":{"accepted":true,"real_timestamp_ms":1789265739609,"virtual_time_s":4150.991796,"measure_result":"direction","svd_deg":135.43}}
{"event":"action","seq":220,"wall_ts_ms":1789265739622,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0220","position":{"x":-1494.2794165389562,"y":749.8626130220727},"channel":5},"response":{"accepted":true,"real_timestamp_ms":1789265739622,"virtual_time_s":4159.218128,"measure_result":"direction","svd_deg":137.48}}
{"event":"action","seq":221,"wall_ts_ms":1789265739623,"method":"POST","path":"/clear","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0221","position":{"x":-1505.3219950372888,"y":760.3331531575229},"channel":5},"response":{"accepted":true,"real_timestamp_ms":1789265739623,"virtual_time_s":4167.261618,"clear_result":"success"}}
{"event":"action","seq":222,"wall_ts_ms":1789265739805,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0222","position":{"x":-1408.4825659904257,"y":512.8845928212788},"channel":12},"response":{"accepted":true,"real_timestamp_ms":1789265739805,"virtual_time_s":4226.4062,"measure_result":"direction","svd_deg":63.41}}
{"event":"action","seq":223,"wall_ts_ms":1789265739822,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0223","position":{"x":-1195.7660646685601,"y":953.7522119734411},"channel":12},"response":{"accepted":true,"real_timestamp_ms":1789265739822,"virtual_time_s":4329.306673,"measure_result":"direction","svd_deg":51.15}}
{"event":"action","seq":224,"wall_ts_ms":1789265739830,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0224","position":{"x":-1189.5871642775382,"y":964.1176386186069},"channel":12},"response":{"accepted":true,"real_timestamp_ms":1789265739830,"virtual_time_s":4336.720143,"measure_result":"near"}}
{"event":"action","seq":225,"wall_ts_ms":1789265739831,"method":"POST","path":"/clear","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0225","position":{"x":-1188.4182050448148,"y":963.2096685709439},"channel":12},"response":{"accepted":true,"real_timestamp_ms":1789265739831,"virtual_time_s":4342.016175,"clear_result":"success"}}
{"event":"action","seq":226,"wall_ts_ms":1789265739832,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0226","position":{"x":-1200.0,"y":700.0},"channel":1},"response":{"accepted":true,"real_timestamp_ms":1789265739832,"virtual_time_s":4400.709046,"measure_result":"no_signal"}}
{"event":"action","seq":227,"wall_ts_ms":1789265739833,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0227","position":{"x":-1200.0,"y":700.0},"channel":3},"response":{"accepted":true,"real_timestamp_ms":1789265739833,"virtual_time_s":4406.709046,"measure_result":"no_signal"}}
{"event":"action","seq":228,"wall_ts_ms":1789265739834,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0228","position":{"x":-1200.0,"y":700.0},"channel":4},"response":{"accepted":true,"real_timestamp_ms":1789265739834,"virtual_time_s":4412.709046,"measure_result":"no_signal"}}
{"event":"action","seq":229,"wall_ts_ms":1789265739834,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0229","position":{"x":-1200.0,"y":700.0},"channel":6},"response":{"accepted":true,"real_timestamp_ms":1789265739834,"virtual_time_s":4418.709046,"measure_result":"no_signal"}}
{"event":"action","seq":230,"wall_ts_ms":1789265739835,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0230","position":{"x":-1200.0,"y":700.0},"channel":7},"response":{"accepted":true,"real_timestamp_ms":1789265739835,"virtual_time_s":4424.709046,"measure_result":"no_signal"}}
{"event":"action","seq":231,"wall_ts_ms":1789265739836,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0231","position":{"x":-1200.0,"y":700.0},"channel":9},"response":{"accepted":true,"real_timestamp_ms":1789265739836,"virtual_time_s":4430.709046,"measure_result":"no_signal"}}
{"event":"action","seq":232,"wall_ts_ms":1789265739836,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0232","position":{"x":-1200.0,"y":700.0},"channel":11},"response":{"accepted":true,"real_timestamp_ms":1789265739836,"virtual_time_s":4436.709046,"measure_result":"no_signal"}}
{"event":"action","seq":233,"wall_ts_ms":1789265739837,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0233","position":{"x":-1200.0,"y":700.0},"channel":13},"response":{"accepted":true,"real_timestamp_ms":1789265739837,"virtual_time_s":4442.709046,"measure_result":"no_signal"}}
{"event":"action","seq":234,"wall_ts_ms":1789265739838,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0234","position":{"x":-1200.0,"y":700.0},"channel":14},"response":{"accepted":true,"real_timestamp_ms":1789265739838,"virtual_time_s":4448.709046,"measure_result":"no_signal"}}
{"event":"action","seq":235,"wall_ts_ms":1789265739838,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0235","position":{"x":-1200.0,"y":700.0},"channel":15},"response":{"accepted":true,"real_timestamp_ms":1789265739838,"virtual_time_s":4454.709046,"measure_result":"no_signal"}}
{"event":"action","seq":236,"wall_ts_ms":1789265739839,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0236","position":{"x":-1200.0,"y":700.0},"channel":17},"response":{"accepted":true,"real_timestamp_ms":1789265739839,"virtual_time_s":4460.709046,"measure_result":"no_signal"}}
{"event":"action","seq":237,"wall_ts_ms":1789265739840,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0237","position":{"x":-1200.0,"y":700.0},"channel":18},"response":{"accepted":true,"real_timestamp_ms":1789265739840,"virtual_time_s":4466.709046,"measure_result":"no_signal"}}
{"event":"action","seq":238,"wall_ts_ms":1789265739840,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0238","position":{"x":-1800.0,"y":400.0},"channel":18},"response":{"accepted":true,"real_timestamp_ms":1789265739840,"virtual_time_s":4605.873125,"measure_result":"no_signal"}}
{"event":"action","seq":239,"wall_ts_ms":1789265739841,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0239","position":{"x":-1800.0,"y":400.0},"channel":1},"response":{"accepted":true,"real_timestamp_ms":1789265739841,"virtual_time_s":4611.873125,"measure_result":"no_signal"}}
{"event":"action","seq":240,"wall_ts_ms":1789265739842,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0240","position":{"x":-1800.0,"y":400.0},"channel":3},"response":{"accepted":true,"real_timestamp_ms":1789265739842,"virtual_time_s":4617.873125,"measure_result":"no_signal"}}
{"event":"action","seq":241,"wall_ts_ms":1789265739842,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0241","position":{"x":-1800.0,"y":400.0},"channel":4},"response":{"accepted":true,"real_timestamp_ms":1789265739842,"virtual_time_s":4623.873125,"measure_result":"no_signal"}}
{"event":"action","seq":242,"wall_ts_ms":1789265739843,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0242","position":{"x":-1800.0,"y":400.0},"channel":6},"response":{"accepted":true,"real_timestamp_ms":1789265739843,"virtual_time_s":4629.873125,"measure_result":"no_signal"}}
{"event":"action","seq":243,"wall_ts_ms":1789265739843,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0243","position":{"x":-1800.0,"y":400.0},"channel":7},"response":{"accepted":true,"real_timestamp_ms":1789265739843,"virtual_time_s":4635.873125,"measure_result":"no_signal"}}
{"event":"action","seq":244,"wall_ts_ms":1789265739844,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0244","position":{"x":-1800.0,"y":400.0},"channel":9},"response":{"accepted":true,"real_timestamp_ms":1789265739844,"virtual_time_s":4641.873125,"measure_result":"no_signal"}}
{"event":"action","seq":245,"wall_ts_ms":1789265739845,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0245","position":{"x":-1800.0,"y":400.0},"channel":11},"response":{"accepted":true,"real_timestamp_ms":1789265739845,"virtual_time_s":4647.873125,"measure_result":"no_signal"}}
{"event":"action","seq":246,"wall_ts_ms":1789265739845,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0246","position":{"x":-1800.0,"y":400.0},"channel":13},"response":{"accepted":true,"real_timestamp_ms":1789265739845,"virtual_time_s":4653.873125,"measure_result":"no_signal"}}
{"event":"action","seq":247,"wall_ts_ms":1789265739846,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0247","position":{"x":-1800.0,"y":400.0},"channel":14},"response":{"accepted":true,"real_timestamp_ms":1789265739846,"virtual_time_s":4659.873125,"measure_result":"no_signal"}}
{"event":"action","seq":248,"wall_ts_ms":1789265739846,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0248","position":{"x":-1800.0,"y":400.0},"channel":15},"response":{"accepted":true,"real_timestamp_ms":1789265739846,"virtual_time_s":4665.873125,"measure_result":"no_signal"}}
{"event":"action","seq":249,"wall_ts_ms":1789265739848,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0249","position":{"x":-1800.0,"y":400.0},"channel":17},"response":{"accepted":true,"real_timestamp_ms":1789265739848,"virtual_time_s":4671.873125,"measure_result":"no_signal"}}
{"event":"action","seq":250,"wall_ts_ms":1789265739849,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0250","position":{"x":-1800.0,"y":-300.0},"channel":17},"response":{"accepted":true,"real_timestamp_ms":1789265739848,"virtual_time_s":4816.873125,"measure_result":"no_signal"}}
{"event":"action","seq":251,"wall_ts_ms":1789265739849,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0251","position":{"x":-1800.0,"y":-300.0},"channel":1},"response":{"accepted":true,"real_timestamp_ms":1789265739849,"virtual_time_s":4822.873125,"measure_result":"no_signal"}}
{"event":"action","seq":252,"wall_ts_ms":1789265739850,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0252","position":{"x":-1800.0,"y":-300.0},"channel":3},"response":{"accepted":true,"real_timestamp_ms":1789265739850,"virtual_time_s":4828.873125,"measure_result":"no_signal"}}
{"event":"action","seq":253,"wall_ts_ms":1789265739850,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0253","position":{"x":-1800.0,"y":-300.0},"channel":4},"response":{"accepted":true,"real_timestamp_ms":1789265739850,"virtual_time_s":4834.873125,"measure_result":"no_signal"}}
{"event":"action","seq":254,"wall_ts_ms":1789265739851,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0254","position":{"x":-1800.0,"y":-300.0},"channel":6},"response":{"accepted":true,"real_timestamp_ms":1789265739851,"virtual_time_s":4840.873125,"measure_result":"no_signal"}}
{"event":"action","seq":255,"wall_ts_ms":1789265739851,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0255","position":{"x":-1800.0,"y":-300.0},"channel":7},"response":{"accepted":true,"real_timestamp_ms":1789265739851,"virtual_time_s":4846.873125,"measure_result":"no_signal"}}
{"event":"action","seq":256,"wall_ts_ms":1789265739852,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0256","position":{"x":-1800.0,"y":-300.0},"channel":9},"response":{"accepted":true,"real_timestamp_ms":1789265739852,"virtual_time_s":4852.873125,"measure_result":"no_signal"}}
{"event":"action","seq":257,"wall_ts_ms":1789265739852,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0257","position":{"x":-1800.0,"y":-300.0},"channel":11},"response":{"accepted":true,"real_timestamp_ms":1789265739852,"virtual_time_s":4858.873125,"measure_result":"no_signal"}}
{"event":"action","seq":258,"wall_ts_ms":1789265739853,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0258","position":{"x":-1800.0,"y":-300.0},"channel":13},"response":{"accepted":true,"real_timestamp_ms":1789265739853,"virtual_time_s":4864.873125,"measure_result":"no_signal"}}
{"event":"action","seq":259,"wall_ts_ms":1789265739854,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0259","position":{"x":-1800.0,"y":-300.0},"channel":14},"response":{"accepted":true,"real_timestamp_ms":1789265739854,"virtual_time_s":4870.873125,"measure_result":"no_signal"}}
{"event":"action","seq":260,"wall_ts_ms":1789265739854,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0260","position":{"x":-1800.0,"y":-300.0},"channel":15},"response":{"accepted":true,"real_timestamp_ms":1789265739854,"virtual_time_s":4876.873125,"measure_result":"no_signal"}}
{"event":"action","seq":261,"wall_ts_ms":1789265739855,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0261","position":{"x":-1800.0,"y":-300.0},"channel":18},"response":{"accepted":true,"real_timestamp_ms":1789265739855,"virtual_time_s":4882.873125,"measure_result":"no_signal"}}
{"event":"action","seq":262,"wall_ts_ms":1789265739855,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0262","position":{"x":-1700.0,"y":-500.0},"channel":18},"response":{"accepted":true,"real_timestamp_ms":1789265739855,"virtual_time_s":4932.594485,"measure_result":"no_signal"}}
{"event":"action","seq":263,"wall_ts_ms":1789265739856,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0263","position":{"x":-1700.0,"y":-500.0},"channel":1},"response":{"accepted":true,"real_timestamp_ms":1789265739856,"virtual_time_s":4938.594485,"measure_result":"no_signal"}}
{"event":"action","seq":264,"wall_ts_ms":1789265739856,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0264","position":{"x":-1700.0,"y":-500.0},"channel":3},"response":{"accepted":true,"real_timestamp_ms":1789265739856,"virtual_time_s":4944.594485,"measure_result":"no_signal"}}
{"event":"action","seq":265,"wall_ts_ms":1789265739857,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0265","position":{"x":-1700.0,"y":-500.0},"channel":4},"response":{"accepted":true,"real_timestamp_ms":1789265739857,"virtual_time_s":4950.594485,"measure_result":"no_signal"}}
{"event":"action","seq":266,"wall_ts_ms":1789265739858,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0266","position":{"x":-1700.0,"y":-500.0},"channel":6},"response":{"accepted":true,"real_timestamp_ms":1789265739858,"virtual_time_s":4956.594485,"measure_result":"no_signal"}}
{"event":"action","seq":267,"wall_ts_ms":1789265739858,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0267","position":{"x":-1700.0,"y":-500.0},"channel":7},"response":{"accepted":true,"real_timestamp_ms":1789265739858,"virtual_time_s":4962.594485,"measure_result":"no_signal"}}
{"event":"action","seq":268,"wall_ts_ms":1789265739859,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0268","position":{"x":-1700.0,"y":-500.0},"channel":9},"response":{"accepted":true,"real_timestamp_ms":1789265739859,"virtual_time_s":4968.594485,"measure_result":"no_signal"}}
{"event":"action","seq":269,"wall_ts_ms":1789265739859,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0269","position":{"x":-1700.0,"y":-500.0},"channel":11},"response":{"accepted":true,"real_timestamp_ms":1789265739859,"virtual_time_s":4974.594485,"measure_result":"no_signal"}}
{"event":"action","seq":270,"wall_ts_ms":1789265739860,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0270","position":{"x":-1700.0,"y":-500.0},"channel":13},"response":{"accepted":true,"real_timestamp_ms":1789265739860,"virtual_time_s":4980.594485,"measure_result":"no_signal"}}
{"event":"action","seq":271,"wall_ts_ms":1789265739860,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0271","position":{"x":-1700.0,"y":-500.0},"channel":14},"response":{"accepted":true,"real_timestamp_ms":1789265739860,"virtual_time_s":4986.594485,"measure_result":"no_signal"}}
{"event":"action","seq":272,"wall_ts_ms":1789265739861,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0272","position":{"x":-1700.0,"y":-500.0},"channel":15},"response":{"accepted":true,"real_timestamp_ms":1789265739861,"virtual_time_s":4992.594485,"measure_result":"no_signal"}}
{"event":"action","seq":273,"wall_ts_ms":1789265739861,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0273","position":{"x":-1700.0,"y":-500.0},"channel":17},"response":{"accepted":true,"real_timestamp_ms":1789265739861,"virtual_time_s":4998.594485,"measure_result":"no_signal"}}
{"event":"action","seq":274,"wall_ts_ms":1789265739862,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0274","position":{"x":-1500.0,"y":-1300.0},"channel":17},"response":{"accepted":true,"real_timestamp_ms":1789265739862,"virtual_time_s":5168.51871,"measure_result":"no_signal"}}
{"event":"action","seq":275,"wall_ts_ms":1789265739863,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0275","position":{"x":-1500.0,"y":-1300.0},"channel":1},"response":{"accepted":true,"real_timestamp_ms":1789265739863,"virtual_time_s":5174.51871,"measure_result":"no_signal"}}
{"event":"action","seq":276,"wall_ts_ms":1789265739863,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0276","position":{"x":-1500.0,"y":-1300.0},"channel":3},"response":{"accepted":true,"real_timestamp_ms":1789265739863,"virtual_time_s":5180.51871,"measure_result":"no_signal"}}
{"event":"action","seq":277,"wall_ts_ms":1789265739864,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0277","position":{"x":-1500.0,"y":-1300.0},"channel":4},"response":{"accepted":true,"real_timestamp_ms":1789265739864,"virtual_time_s":5186.51871,"measure_result":"no_signal"}}
{"event":"action","seq":278,"wall_ts_ms":1789265739864,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0278","position":{"x":-1500.0,"y":-1300.0},"channel":6},"response":{"accepted":true,"real_timestamp_ms":1789265739864,"virtual_time_s":5192.51871,"measure_result":"no_signal"}}
{"event":"action","seq":279,"wall_ts_ms":1789265739865,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0279","position":{"x":-1500.0,"y":-1300.0},"channel":7},"response":{"accepted":true,"real_timestamp_ms":1789265739865,"virtual_time_s":5198.51871,"measure_result":"no_signal"}}
{"event":"action","seq":280,"wall_ts_ms":1789265739865,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0280","position":{"x":-1500.0,"y":-1300.0},"channel":9},"response":{"accepted":true,"real_timestamp_ms":1789265739865,"virtual_time_s":5204.51871,"measure_result":"no_signal"}}
{"event":"action","seq":281,"wall_ts_ms":1789265739866,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0281","position":{"x":-1500.0,"y":-1300.0},"channel":11},"response":{"accepted":true,"real_timestamp_ms":1789265739866,"virtual_time_s":5210.51871,"measure_result":"no_signal"}}
{"event":"action","seq":282,"wall_ts_ms":1789265739867,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0282","position":{"x":-1500.0,"y":-1300.0},"channel":13},"response":{"accepted":true,"real_timestamp_ms":1789265739867,"virtual_time_s":5216.51871,"measure_result":"no_signal"}}
{"event":"action","seq":283,"wall_ts_ms":1789265739867,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0283","position":{"x":-1500.0,"y":-1300.0},"channel":14},"response":{"accepted":true,"real_timestamp_ms":1789265739867,"virtual_time_s":5222.51871,"measure_result":"no_signal"}}
{"event":"action","seq":284,"wall_ts_ms":1789265739868,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0284","position":{"x":-1500.0,"y":-1300.0},"channel":15},"response":{"accepted":true,"real_timestamp_ms":1789265739868,"virtual_time_s":5228.51871,"measure_result":"no_signal"}}
{"event":"action","seq":285,"wall_ts_ms":1789265739868,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0285","position":{"x":-1500.0,"y":-1300.0},"channel":18},"response":{"accepted":true,"real_timestamp_ms":1789265739868,"virtual_time_s":5234.51871,"measure_result":"no_signal"}}
{"event":"action","seq":286,"wall_ts_ms":1789265739869,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0286","position":{"x":-2500.0,"y":500.0},"channel":18},"response":{"accepted":true,"real_timestamp_ms":1789265739869,"virtual_time_s":5651.343916,"measure_result":"no_signal"}}
{"event":"action","seq":287,"wall_ts_ms":1789265739869,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0287","position":{"x":-2500.0,"y":500.0},"channel":1},"response":{"accepted":true,"real_timestamp_ms":1789265739869,"virtual_time_s":5657.343916,"measure_result":"no_signal"}}
{"event":"action","seq":288,"wall_ts_ms":1789265739870,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0288","position":{"x":-2500.0,"y":500.0},"channel":3},"response":{"accepted":true,"real_timestamp_ms":1789265739870,"virtual_time_s":5663.343916,"measure_result":"no_signal"}}
{"event":"action","seq":289,"wall_ts_ms":1789265739871,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0289","position":{"x":-2500.0,"y":500.0},"channel":4},"response":{"accepted":true,"real_timestamp_ms":1789265739870,"virtual_time_s":5669.343916,"measure_result":"no_signal"}}
{"event":"action","seq":290,"wall_ts_ms":1789265739871,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0290","position":{"x":-2500.0,"y":500.0},"channel":6},"response":{"accepted":true,"real_timestamp_ms":1789265739871,"virtual_time_s":5675.343916,"measure_result":"no_signal"}}
{"event":"action","seq":291,"wall_ts_ms":1789265739872,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0291","position":{"x":-2500.0,"y":500.0},"channel":7},"response":{"accepted":true,"real_timestamp_ms":1789265739872,"virtual_time_s":5681.343916,"measure_result":"no_signal"}}
{"event":"action","seq":292,"wall_ts_ms":1789265739872,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0292","position":{"x":-2500.0,"y":500.0},"channel":9},"response":{"accepted":true,"real_timestamp_ms":1789265739872,"virtual_time_s":5687.343916,"measure_result":"no_signal"}}
{"event":"action","seq":293,"wall_ts_ms":1789265739873,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0293","position":{"x":-2500.0,"y":500.0},"channel":11},"response":{"accepted":true,"real_timestamp_ms":1789265739873,"virtual_time_s":5693.343916,"measure_result":"no_signal"}}
{"event":"action","seq":294,"wall_ts_ms":1789265739873,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0294","position":{"x":-2500.0,"y":500.0},"channel":13},"response":{"accepted":true,"real_timestamp_ms":1789265739873,"virtual_time_s":5699.343916,"measure_result":"no_signal"}}
{"event":"action","seq":295,"wall_ts_ms":1789265739874,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0295","position":{"x":-2500.0,"y":500.0},"channel":14},"response":{"accepted":true,"real_timestamp_ms":1789265739874,"virtual_time_s":5705.343916,"measure_result":"no_signal"}}
{"event":"action","seq":296,"wall_ts_ms":1789265739874,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0296","position":{"x":-2500.0,"y":500.0},"channel":15},"response":{"accepted":true,"real_timestamp_ms":1789265739874,"virtual_time_s":5711.343916,"measure_result":"no_signal"}}
{"event":"action","seq":297,"wall_ts_ms":1789265739875,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0297","position":{"x":-2500.0,"y":500.0},"channel":17},"response":{"accepted":true,"real_timestamp_ms":1789265739875,"virtual_time_s":5717.343916,"measure_result":"no_signal"}}
{"event":"action","seq":298,"wall_ts_ms":1789265739876,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0298","position":{"x":-1300.0,"y":1500.0},"channel":17},"response":{"accepted":true,"real_timestamp_ms":1789265739876,"virtual_time_s":6034.753903,"measure_result":"no_signal"}}
{"event":"action","seq":299,"wall_ts_ms":1789265739876,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0299","position":{"x":-1300.0,"y":1500.0},"channel":1},"response":{"accepted":true,"real_timestamp_ms":1789265739876,"virtual_time_s":6040.753903,"measure_result":"no_signal"}}
{"event":"action","seq":300,"wall_ts_ms":1789265739877,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0300","position":{"x":-1300.0,"y":1500.0},"channel":3},"response":{"accepted":true,"real_timestamp_ms":1789265739877,"virtual_time_s":6046.753903,"measure_result":"no_signal"}}
{"event":"action","seq":301,"wall_ts_ms":1789265739877,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0301","position":{"x":-1300.0,"y":1500.0},"channel":4},"response":{"accepted":true,"real_timestamp_ms":1789265739877,"virtual_time_s":6052.753903,"measure_result":"no_signal"}}
{"event":"action","seq":302,"wall_ts_ms":1789265739878,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0302","position":{"x":-1300.0,"y":1500.0},"channel":6},"response":{"accepted":true,"real_timestamp_ms":1789265739878,"virtual_time_s":6058.753903,"measure_result":"no_signal"}}
{"event":"action","seq":303,"wall_ts_ms":1789265739878,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0303","position":{"x":-1300.0,"y":1500.0},"channel":7},"response":{"accepted":true,"real_timestamp_ms":1789265739878,"virtual_time_s":6064.753903,"measure_result":"no_signal"}}
{"event":"action","seq":304,"wall_ts_ms":1789265739879,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0304","position":{"x":-1300.0,"y":1500.0},"channel":9},"response":{"accepted":true,"real_timestamp_ms":1789265739879,"virtual_time_s":6070.753903,"measure_result":"no_signal"}}
{"event":"action","seq":305,"wall_ts_ms":1789265739879,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0305","position":{"x":-1300.0,"y":1500.0},"channel":11},"response":{"accepted":true,"real_timestamp_ms":1789265739879,"virtual_time_s":6076.753903,"measure_result":"no_signal"}}
{"event":"action","seq":306,"wall_ts_ms":1789265739880,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0306","position":{"x":-1300.0,"y":1500.0},"channel":13},"response":{"accepted":true,"real_timestamp_ms":1789265739880,"virtual_time_s":6082.753903,"measure_result":"no_signal"}}
{"event":"action","seq":307,"wall_ts_ms":1789265739880,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0307","position":{"x":-1300.0,"y":1500.0},"channel":14},"response":{"accepted":true,"real_timestamp_ms":1789265739880,"virtual_time_s":6088.753903,"measure_result":"no_signal"}}
{"event":"action","seq":308,"wall_ts_ms":1789265739881,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0308","position":{"x":-1300.0,"y":1500.0},"channel":15},"response":{"accepted":true,"real_timestamp_ms":1789265739881,"virtual_time_s":6094.753903,"measure_result":"no_signal"}}
{"event":"action","seq":309,"wall_ts_ms":1789265739882,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0309","position":{"x":-1300.0,"y":1500.0},"channel":18},"response":{"accepted":true,"real_timestamp_ms":1789265739881,"virtual_time_s":6100.753903,"measure_result":"no_signal"}}
{"event":"action","seq":310,"wall_ts_ms":1789265739882,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0310","position":{"x":-400.0,"y":1800.0},"channel":18},"response":{"accepted":true,"real_timestamp_ms":1789265739882,"virtual_time_s":6295.490563,"measure_result":"no_signal"}}
{"event":"action","seq":311,"wall_ts_ms":1789265739883,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0311","position":{"x":-400.0,"y":1800.0},"channel":1},"response":{"accepted":true,"real_timestamp_ms":1789265739883,"virtual_time_s":6301.490563,"measure_result":"no_signal"}}
{"event":"action","seq":312,"wall_ts_ms":1789265739883,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0312","position":{"x":-400.0,"y":1800.0},"channel":3},"response":{"accepted":true,"real_timestamp_ms":1789265739883,"virtual_time_s":6307.490563,"measure_result":"no_signal"}}
{"event":"action","seq":313,"wall_ts_ms":1789265739884,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0313","position":{"x":-400.0,"y":1800.0},"channel":4},"response":{"accepted":true,"real_timestamp_ms":1789265739884,"virtual_time_s":6313.490563,"measure_result":"direction","svd_deg":354.21}}
{"event":"action","seq":314,"wall_ts_ms":1789265739913,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0314","position":{"x":-400.0,"y":1800.0},"channel":6},"response":{"accepted":true,"real_timestamp_ms":1789265739913,"virtual_time_s":6319.490563,"measure_result":"no_signal"}}
{"event":"action","seq":315,"wall_ts_ms":1789265739914,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0315","position":{"x":-400.0,"y":1800.0},"channel":7},"response":{"accepted":true,"real_timestamp_ms":1789265739914,"virtual_time_s":6325.490563,"measure_result":"no_signal"}}
{"event":"action","seq":316,"wall_ts_ms":1789265739915,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0316","position":{"x":-400.0,"y":1800.0},"channel":9},"response":{"accepted":true,"real_timestamp_ms":1789265739915,"virtual_time_s":6331.490563,"measure_result":"no_signal"}}
{"event":"action","seq":317,"wall_ts_ms":1789265739915,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0317","position":{"x":-400.0,"y":1800.0},"channel":11},"response":{"accepted":true,"real_timestamp_ms":1789265739915,"virtual_time_s":6337.490563,"measure_result":"no_signal"}}
{"event":"action","seq":318,"wall_ts_ms":1789265739916,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0318","position":{"x":-400.0,"y":1800.0},"channel":13},"response":{"accepted":true,"real_timestamp_ms":1789265739916,"virtual_time_s":6343.490563,"measure_result":"no_signal"}}
{"event":"action","seq":319,"wall_ts_ms":1789265739916,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0319","position":{"x":-400.0,"y":1800.0},"channel":14},"response":{"accepted":true,"real_timestamp_ms":1789265739916,"virtual_time_s":6349.490563,"measure_result":"no_signal"}}
{"event":"action","seq":320,"wall_ts_ms":1789265739917,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0320","position":{"x":-400.0,"y":1800.0},"channel":15},"response":{"accepted":true,"real_timestamp_ms":1789265739917,"virtual_time_s":6355.490563,"measure_result":"no_signal"}}
{"event":"action","seq":321,"wall_ts_ms":1789265739918,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0321","position":{"x":-400.0,"y":1800.0},"channel":17},"response":{"accepted":true,"real_timestamp_ms":1789265739917,"virtual_time_s":6361.490563,"measure_result":"no_signal"}}
{"event":"action","seq":322,"wall_ts_ms":1789265740014,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0322","position":{"x":-24.55089621140732,"y":1727.78050764454},"channel":4},"response":{"accepted":true,"real_timestamp_ms":1789265740014,"virtual_time_s":6443.956944,"measure_result":"direction","svd_deg":7.73}}
{"event":"action","seq":323,"wall_ts_ms":1789265740060,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0323","position":{"x":101.49926410957077,"y":1747.4479135884048},"channel":4},"response":{"accepted":true,"real_timestamp_ms":1789265740060,"virtual_time_s":6474.471998,"measure_result":"near"}}
{"event":"action","seq":324,"wall_ts_ms":1789265740064,"method":"POST","path":"/clear","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0324","position":{"x":101.54406236532077,"y":1747.1545857629853},"channel":4},"response":{"accepted":true,"real_timestamp_ms":1789265740064,"virtual_time_s":6479.531344,"clear_result":"success"}}
{"event":"action","seq":325,"wall_ts_ms":1789265740066,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0325","position":{"x":400.0,"y":1800.0},"channel":1},"response":{"accepted":true,"real_timestamp_ms":1789265740066,"virtual_time_s":6546.151006,"measure_result":"no_signal"}}
{"event":"action","seq":326,"wall_ts_ms":1789265740068,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0326","position":{"x":400.0,"y":1800.0},"channel":3},"response":{"accepted":true,"real_timestamp_ms":1789265740068,"virtual_time_s":6552.151006,"measure_result":"no_signal"}}
{"event":"action","seq":327,"wall_ts_ms":1789265740070,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0327","position":{"x":400.0,"y":1800.0},"channel":6},"response":{"accepted":true,"real_timestamp_ms":1789265740070,"virtual_time_s":6558.151006,"measure_result":"direction","svd_deg":191.2}}
{"event":"action","seq":328,"wall_ts_ms":1789265740116,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0328","position":{"x":400.0,"y":1800.0},"channel":7},"response":{"accepted":true,"real_timestamp_ms":1789265740116,"virtual_time_s":6564.151006,"measure_result":"no_signal"}}
{"event":"action","seq":329,"wall_ts_ms":1789265740118,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0329","position":{"x":400.0,"y":1800.0},"channel":9},"response":{"accepted":true,"real_timestamp_ms":1789265740118,"virtual_time_s":6570.151006,"measure_result":"no_signal"}}
{"event":"action","seq":330,"wall_ts_ms":1789265740119,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0330","position":{"x":400.0,"y":1800.0},"channel":11},"response":{"accepted":true,"real_timestamp_ms":1789265740119,"virtual_time_s":6576.151006,"measure_result":"no_signal"}}
{"event":"action","seq":331,"wall_ts_ms":1789265740120,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0331","position":{"x":400.0,"y":1800.0},"channel":13},"response":{"accepted":true,"real_timestamp_ms":1789265740120,"virtual_time_s":6582.151006,"measure_result":"no_signal"}}
{"event":"action","seq":332,"wall_ts_ms":1789265740120,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0332","position":{"x":400.0,"y":1800.0},"channel":14},"response":{"accepted":true,"real_timestamp_ms":1789265740120,"virtual_time_s":6588.151006,"measure_result":"no_signal"}}
{"event":"action","seq":333,"wall_ts_ms":1789265740121,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0333","position":{"x":400.0,"y":1800.0},"channel":15},"response":{"accepted":true,"real_timestamp_ms":1789265740121,"virtual_time_s":6594.151006,"measure_result":"direction","svd_deg":272.2}}
{"event":"action","seq":334,"wall_ts_ms":1789265740153,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0334","position":{"x":400.0,"y":1800.0},"channel":17},"response":{"accepted":true,"real_timestamp_ms":1789265740153,"virtual_time_s":6600.151006,"measure_result":"no_signal"}}
{"event":"action","seq":335,"wall_ts_ms":1789265740154,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0335","position":{"x":400.0,"y":1800.0},"channel":18},"response":{"accepted":true,"real_timestamp_ms":1789265740154,"virtual_time_s":6606.151006,"measure_result":"no_signal"}}
{"event":"action","seq":336,"wall_ts_ms":1789265740313,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0336","position":{"x":-24.20475655272145,"y":1636.8980627348978},"channel":6},"response":{"accepted":true,"real_timestamp_ms":1789265740313,"virtual_time_s":6703.046972,"measure_result":"direction","svd_deg":160.88}}
{"event":"action","seq":337,"wall_ts_ms":1789265740330,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0337","position":{"x":-158.52431169665903,"y":1687.3397389277611},"channel":6},"response":{"accepted":true,"real_timestamp_ms":1789265740330,"virtual_time_s":6736.74269,"measure_result":"direction","svd_deg":192.73}}
{"event":"action","seq":338,"wall_ts_ms":1789265740332,"method":"POST","path":"/clear","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0338","position":{"x":-165.6025782014923,"y":1685.833818291656},"channel":6},"response":{"accepted":true,"real_timestamp_ms":1789265740332,"virtual_time_s":6743.190028,"clear_result":"success"}}
{"event":"action","seq":339,"wall_ts_ms":1789265740480,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0339","position":{"x":171.91074610145796,"y":1285.0122857297256},"channel":15},"response":{"accepted":true,"real_timestamp_ms":1789265740480,"virtual_time_s":6853.989483,"measure_result":"no_signal"}}
{"event":"action","seq":340,"wall_ts_ms":1789265740610,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0340","position":{"x":429.14297023213675,"y":1391.5613616440485},"channel":15},"response":{"accepted":true,"real_timestamp_ms":1789265740610,"virtual_time_s":6914.674714,"measure_result":"no_signal"}}
{"event":"action","seq":341,"wall_ts_ms":1789265740744,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0341","position":{"x":686.3751943628156,"y":1285.0122857297256},"channel":15},"response":{"accepted":true,"real_timestamp_ms":1789265740744,"virtual_time_s":6975.359945,"measure_result":"no_signal"}}
{"event":"action","seq":342,"wall_ts_ms":1789265740884,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0342","position":{"x":429.1429702321368,"y":1755.3426616890501},"channel":15},"response":{"accepted":true,"real_timestamp_ms":1789265740884,"virtual_time_s":7087.575444,"measure_result":"direction","svd_deg":265.21}}
{"event":"action","seq":343,"wall_ts_ms":1789265740908,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0343","position":{"x":409.83408878169837,"y":1586.197737192631},"channel":15},"response":{"accepted":true,"real_timestamp_ms":1789265740908,"virtual_time_s":7126.624138,"measure_result":"direction","svd_deg":272.13}}
{"event":"action","seq":344,"wall_ts_ms":1789265740925,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0344","position":{"x":411.1387584130592,"y":1552.2577508333961},"channel":15},"response":{"accepted":true,"real_timestamp_ms":1789265740925,"virtual_time_s":7138.417149,"measure_result":"near"}}
{"event":"action","seq":345,"wall_ts_ms":1789265740928,"method":"POST","path":"/clear","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0345","position":{"x":411.13875841306526,"y":1552.2577508333966},"channel":15},"response":{"accepted":true,"real_timestamp_ms":1789265740928,"virtual_time_s":7143.417149,"clear_result":"success"}}
{"event":"action","seq":346,"wall_ts_ms":1789265740929,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0346","position":{"x":600.0,"y":1900.0},"channel":1},"response":{"accepted":true,"real_timestamp_ms":1789265740929,"virtual_time_s":7228.560877,"measure_result":"no_signal"}}
{"event":"action","seq":347,"wall_ts_ms":1789265740930,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0347","position":{"x":600.0,"y":1900.0},"channel":3},"response":{"accepted":true,"real_timestamp_ms":1789265740930,"virtual_time_s":7234.560877,"measure_result":"no_signal"}}
{"event":"action","seq":348,"wall_ts_ms":1789265740931,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0348","position":{"x":600.0,"y":1900.0},"channel":7},"response":{"accepted":true,"real_timestamp_ms":1789265740931,"virtual_time_s":7240.560877,"measure_result":"no_signal"}}
{"event":"action","seq":349,"wall_ts_ms":1789265740932,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0349","position":{"x":600.0,"y":1900.0},"channel":9},"response":{"accepted":true,"real_timestamp_ms":1789265740932,"virtual_time_s":7246.560877,"measure_result":"no_signal"}}
{"event":"action","seq":350,"wall_ts_ms":1789265740934,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0350","position":{"x":600.0,"y":1900.0},"channel":11},"response":{"accepted":true,"real_timestamp_ms":1789265740934,"virtual_time_s":7252.560877,"measure_result":"no_signal"}}
{"event":"action","seq":351,"wall_ts_ms":1789265740935,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0351","position":{"x":600.0,"y":1900.0},"channel":13},"response":{"accepted":true,"real_timestamp_ms":1789265740935,"virtual_time_s":7258.560877,"measure_result":"no_signal"}}
{"event":"action","seq":352,"wall_ts_ms":1789265740936,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0352","position":{"x":600.0,"y":1900.0},"channel":14},"response":{"accepted":true,"real_timestamp_ms":1789265740936,"virtual_time_s":7264.560877,"measure_result":"no_signal"}}
{"event":"action","seq":353,"wall_ts_ms":1789265740937,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0353","position":{"x":600.0,"y":1900.0},"channel":17},"response":{"accepted":true,"real_timestamp_ms":1789265740937,"virtual_time_s":7270.560877,"measure_result":"no_signal"}}
{"event":"action","seq":354,"wall_ts_ms":1789265740938,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0354","position":{"x":600.0,"y":1900.0},"channel":18},"response":{"accepted":true,"real_timestamp_ms":1789265740938,"virtual_time_s":7276.560877,"measure_result":"no_signal"}}
{"event":"action","seq":355,"wall_ts_ms":1789265740939,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0355","position":{"x":800.0,"y":1200.0},"channel":18},"response":{"accepted":true,"real_timestamp_ms":1789265740939,"virtual_time_s":7427.163075,"measure_result":"no_signal"}}
{"event":"action","seq":356,"wall_ts_ms":1789265740940,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0356","position":{"x":800.0,"y":1200.0},"channel":1},"response":{"accepted":true,"real_timestamp_ms":1789265740940,"virtual_time_s":7433.163075,"measure_result":"no_signal"}}
{"event":"action","seq":357,"wall_ts_ms":1789265740942,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0357","position":{"x":800.0,"y":1200.0},"channel":3},"response":{"accepted":true,"real_timestamp_ms":1789265740942,"virtual_time_s":7439.163075,"measure_result":"no_signal"}}
{"event":"action","seq":358,"wall_ts_ms":1789265740943,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0358","position":{"x":800.0,"y":1200.0},"channel":7},"response":{"accepted":true,"real_timestamp_ms":1789265740943,"virtual_time_s":7445.163075,"measure_result":"no_signal"}}
{"event":"action","seq":359,"wall_ts_ms":1789265740944,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0359","position":{"x":800.0,"y":1200.0},"channel":9},"response":{"accepted":true,"real_timestamp_ms":1789265740944,"virtual_time_s":7451.163075,"measure_result":"no_signal"}}
{"event":"action","seq":360,"wall_ts_ms":1789265740946,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0360","position":{"x":800.0,"y":1200.0},"channel":11},"response":{"accepted":true,"real_timestamp_ms":1789265740946,"virtual_time_s":7457.163075,"measure_result":"no_signal"}}
{"event":"action","seq":361,"wall_ts_ms":1789265740947,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0361","position":{"x":800.0,"y":1200.0},"channel":13},"response":{"accepted":true,"real_timestamp_ms":1789265740947,"virtual_time_s":7463.163075,"measure_result":"no_signal"}}
{"event":"action","seq":362,"wall_ts_ms":1789265740949,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0362","position":{"x":800.0,"y":1200.0},"channel":14},"response":{"accepted":true,"real_timestamp_ms":1789265740949,"virtual_time_s":7469.163075,"measure_result":"no_signal"}}
{"event":"action","seq":363,"wall_ts_ms":1789265740950,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0363","position":{"x":800.0,"y":1200.0},"channel":17},"response":{"accepted":true,"real_timestamp_ms":1789265740950,"virtual_time_s":7475.163075,"measure_result":"no_signal"}}
{"event":"action","seq":364,"wall_ts_ms":1789265740950,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0364","position":{"x":700.0,"y":700.0},"channel":17},"response":{"accepted":true,"real_timestamp_ms":1789265740950,"virtual_time_s":7582.143465,"measure_result":"no_signal"}}
{"event":"action","seq":365,"wall_ts_ms":1789265740951,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0365","position":{"x":700.0,"y":700.0},"channel":1},"response":{"accepted":true,"real_timestamp_ms":1789265740951,"virtual_time_s":7588.143465,"measure_result":"no_signal"}}
{"event":"action","seq":366,"wall_ts_ms":1789265740952,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0366","position":{"x":700.0,"y":700.0},"channel":3},"response":{"accepted":true,"real_timestamp_ms":1789265740952,"virtual_time_s":7594.143465,"measure_result":"no_signal"}}
{"event":"action","seq":367,"wall_ts_ms":1789265740953,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0367","position":{"x":700.0,"y":700.0},"channel":7},"response":{"accepted":true,"real_timestamp_ms":1789265740953,"virtual_time_s":7600.143465,"measure_result":"no_signal"}}
{"event":"action","seq":368,"wall_ts_ms":1789265740954,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0368","position":{"x":700.0,"y":700.0},"channel":9},"response":{"accepted":true,"real_timestamp_ms":1789265740954,"virtual_time_s":7606.143465,"measure_result":"no_signal"}}
{"event":"action","seq":369,"wall_ts_ms":1789265740955,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0369","position":{"x":700.0,"y":700.0},"channel":11},"response":{"accepted":true,"real_timestamp_ms":1789265740955,"virtual_time_s":7612.143465,"measure_result":"no_signal"}}
{"event":"action","seq":370,"wall_ts_ms":1789265740956,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0370","position":{"x":700.0,"y":700.0},"channel":13},"response":{"accepted":true,"real_timestamp_ms":1789265740956,"virtual_time_s":7618.143465,"measure_result":"no_signal"}}
{"event":"action","seq":371,"wall_ts_ms":1789265740957,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0371","position":{"x":700.0,"y":700.0},"channel":14},"response":{"accepted":true,"real_timestamp_ms":1789265740957,"virtual_time_s":7624.143465,"measure_result":"no_signal"}}
{"event":"action","seq":372,"wall_ts_ms":1789265740957,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0372","position":{"x":700.0,"y":700.0},"channel":18},"response":{"accepted":true,"real_timestamp_ms":1789265740957,"virtual_time_s":7630.143465,"measure_result":"no_signal"}}
{"event":"action","seq":373,"wall_ts_ms":1789265740958,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0373","position":{"x":800.0,"y":200.0},"channel":18},"response":{"accepted":true,"real_timestamp_ms":1789265740958,"virtual_time_s":7737.123855,"measure_result":"no_signal"}}
{"event":"action","seq":374,"wall_ts_ms":1789265740959,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0374","position":{"x":800.0,"y":200.0},"channel":1},"response":{"accepted":true,"real_timestamp_ms":1789265740959,"virtual_time_s":7743.123855,"measure_result":"no_signal"}}
{"event":"action","seq":375,"wall_ts_ms":1789265740959,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0375","position":{"x":800.0,"y":200.0},"channel":3},"response":{"accepted":true,"real_timestamp_ms":1789265740959,"virtual_time_s":7749.123855,"measure_result":"no_signal"}}
{"event":"action","seq":376,"wall_ts_ms":1789265740960,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0376","position":{"x":800.0,"y":200.0},"channel":7},"response":{"accepted":true,"real_timestamp_ms":1789265740960,"virtual_time_s":7755.123855,"measure_result":"no_signal"}}
{"event":"action","seq":377,"wall_ts_ms":1789265740961,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0377","position":{"x":800.0,"y":200.0},"channel":9},"response":{"accepted":true,"real_timestamp_ms":1789265740961,"virtual_time_s":7761.123855,"measure_result":"no_signal"}}
{"event":"action","seq":378,"wall_ts_ms":1789265740961,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0378","position":{"x":800.0,"y":200.0},"channel":11},"response":{"accepted":true,"real_timestamp_ms":1789265740961,"virtual_time_s":7767.123855,"measure_result":"no_signal"}}
{"event":"action","seq":379,"wall_ts_ms":1789265740962,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0379","position":{"x":800.0,"y":200.0},"channel":13},"response":{"accepted":true,"real_timestamp_ms":1789265740962,"virtual_time_s":7773.123855,"measure_result":"no_signal"}}
{"event":"action","seq":380,"wall_ts_ms":1789265740963,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0380","position":{"x":800.0,"y":200.0},"channel":14},"response":{"accepted":true,"real_timestamp_ms":1789265740963,"virtual_time_s":7779.123855,"measure_result":"no_signal"}}
{"event":"action","seq":381,"wall_ts_ms":1789265740963,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0381","position":{"x":800.0,"y":200.0},"channel":17},"response":{"accepted":true,"real_timestamp_ms":1789265740963,"virtual_time_s":7785.123855,"measure_result":"no_signal"}}
{"event":"action","seq":382,"wall_ts_ms":1789265740964,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0382","position":{"x":1800.0,"y":300.0},"channel":17},"response":{"accepted":true,"real_timestamp_ms":1789265740964,"virtual_time_s":7991.121367,"measure_result":"no_signal"}}
{"event":"action","seq":383,"wall_ts_ms":1789265740965,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0383","position":{"x":1800.0,"y":300.0},"channel":1},"response":{"accepted":true,"real_timestamp_ms":1789265740965,"virtual_time_s":7997.121367,"measure_result":"no_signal"}}
{"event":"action","seq":384,"wall_ts_ms":1789265740966,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0384","position":{"x":1800.0,"y":300.0},"channel":3},"response":{"accepted":true,"real_timestamp_ms":1789265740966,"virtual_time_s":8003.121367,"measure_result":"no_signal"}}
{"event":"action","seq":385,"wall_ts_ms":1789265740969,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0385","position":{"x":1800.0,"y":300.0},"channel":7},"response":{"accepted":true,"real_timestamp_ms":1789265740969,"virtual_time_s":8009.121367,"measure_result":"no_signal"}}
{"event":"action","seq":386,"wall_ts_ms":1789265740970,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0386","position":{"x":1800.0,"y":300.0},"channel":9},"response":{"accepted":true,"real_timestamp_ms":1789265740970,"virtual_time_s":8015.121367,"measure_result":"no_signal"}}
{"event":"action","seq":387,"wall_ts_ms":1789265740971,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0387","position":{"x":1800.0,"y":300.0},"channel":11},"response":{"accepted":true,"real_timestamp_ms":1789265740971,"virtual_time_s":8021.121367,"measure_result":"no_signal"}}
{"event":"action","seq":388,"wall_ts_ms":1789265740972,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0388","position":{"x":1800.0,"y":300.0},"channel":13},"response":{"accepted":true,"real_timestamp_ms":1789265740972,"virtual_time_s":8027.121367,"measure_result":"no_signal"}}
{"event":"action","seq":389,"wall_ts_ms":1789265740972,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0389","position":{"x":1800.0,"y":300.0},"channel":14},"response":{"accepted":true,"real_timestamp_ms":1789265740972,"virtual_time_s":8033.121367,"measure_result":"no_signal"}}
{"event":"action","seq":390,"wall_ts_ms":1789265740973,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0390","position":{"x":1800.0,"y":300.0},"channel":18},"response":{"accepted":true,"real_timestamp_ms":1789265740973,"virtual_time_s":8039.121367,"measure_result":"no_signal"}}
{"event":"action","seq":391,"wall_ts_ms":1789265740974,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0391","position":{"x":1300.0,"y":1100.0},"channel":18},"response":{"accepted":true,"real_timestamp_ms":1789265740974,"virtual_time_s":8232.80099,"measure_result":"no_signal"}}
{"event":"action","seq":392,"wall_ts_ms":1789265740975,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0392","position":{"x":1300.0,"y":1100.0},"channel":1},"response":{"accepted":true,"real_timestamp_ms":1789265740975,"virtual_time_s":8238.80099,"measure_result":"no_signal"}}
{"event":"action","seq":393,"wall_ts_ms":1789265740975,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0393","position":{"x":1300.0,"y":1100.0},"channel":3},"response":{"accepted":true,"real_timestamp_ms":1789265740975,"virtual_time_s":8244.80099,"measure_result":"no_signal"}}
{"event":"action","seq":394,"wall_ts_ms":1789265740976,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0394","position":{"x":1300.0,"y":1100.0},"channel":7},"response":{"accepted":true,"real_timestamp_ms":1789265740976,"virtual_time_s":8250.80099,"measure_result":"no_signal"}}
{"event":"action","seq":395,"wall_ts_ms":1789265740976,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0395","position":{"x":1300.0,"y":1100.0},"channel":9},"response":{"accepted":true,"real_timestamp_ms":1789265740976,"virtual_time_s":8256.80099,"measure_result":"no_signal"}}
{"event":"action","seq":396,"wall_ts_ms":1789265740977,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0396","position":{"x":1300.0,"y":1100.0},"channel":11},"response":{"accepted":true,"real_timestamp_ms":1789265740977,"virtual_time_s":8262.80099,"measure_result":"no_signal"}}
{"event":"action","seq":397,"wall_ts_ms":1789265740978,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0397","position":{"x":1300.0,"y":1100.0},"channel":13},"response":{"accepted":true,"real_timestamp_ms":1789265740978,"virtual_time_s":8268.80099,"measure_result":"no_signal"}}
{"event":"action","seq":398,"wall_ts_ms":1789265740979,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0398","position":{"x":1300.0,"y":1100.0},"channel":14},"response":{"accepted":true,"real_timestamp_ms":1789265740979,"virtual_time_s":8274.80099,"measure_result":"no_signal"}}
{"event":"action","seq":399,"wall_ts_ms":1789265740981,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0399","position":{"x":1300.0,"y":1100.0},"channel":17},"response":{"accepted":true,"real_timestamp_ms":1789265740981,"virtual_time_s":8280.80099,"measure_result":"no_signal"}}
{"event":"action","seq":400,"wall_ts_ms":1789265740983,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0400","position":{"x":1500.0,"y":1300.0},"channel":17},"response":{"accepted":true,"real_timestamp_ms":1789265740983,"virtual_time_s":8342.369532,"measure_result":"no_signal"}}
{"event":"action","seq":401,"wall_ts_ms":1789265740985,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0401","position":{"x":1500.0,"y":1300.0},"channel":1},"response":{"accepted":true,"real_timestamp_ms":1789265740985,"virtual_time_s":8348.369532,"measure_result":"no_signal"}}
{"event":"action","seq":402,"wall_ts_ms":1789265740986,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0402","position":{"x":1500.0,"y":1300.0},"channel":3},"response":{"accepted":true,"real_timestamp_ms":1789265740986,"virtual_time_s":8354.369532,"measure_result":"no_signal"}}
{"event":"action","seq":403,"wall_ts_ms":1789265740987,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0403","position":{"x":1500.0,"y":1300.0},"channel":7},"response":{"accepted":true,"real_timestamp_ms":1789265740987,"virtual_time_s":8360.369532,"measure_result":"no_signal"}}
{"event":"action","seq":404,"wall_ts_ms":1789265740988,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0404","position":{"x":1500.0,"y":1300.0},"channel":9},"response":{"accepted":true,"real_timestamp_ms":1789265740987,"virtual_time_s":8366.369532,"measure_result":"no_signal"}}
{"event":"action","seq":405,"wall_ts_ms":1789265740988,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0405","position":{"x":1500.0,"y":1300.0},"channel":11},"response":{"accepted":true,"real_timestamp_ms":1789265740988,"virtual_time_s":8372.369532,"measure_result":"no_signal"}}
{"event":"action","seq":406,"wall_ts_ms":1789265740989,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0406","position":{"x":1500.0,"y":1300.0},"channel":13},"response":{"accepted":true,"real_timestamp_ms":1789265740989,"virtual_time_s":8378.369532,"measure_result":"no_signal"}}
{"event":"action","seq":407,"wall_ts_ms":1789265740990,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0407","position":{"x":1500.0,"y":1300.0},"channel":14},"response":{"accepted":true,"real_timestamp_ms":1789265740990,"virtual_time_s":8384.369532,"measure_result":"no_signal"}}
{"event":"action","seq":408,"wall_ts_ms":1789265740990,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0408","position":{"x":1500.0,"y":1300.0},"channel":18},"response":{"accepted":true,"real_timestamp_ms":1789265740990,"virtual_time_s":8390.369532,"measure_result":"no_signal"}}
{"event":"action","seq":409,"wall_ts_ms":1789265740991,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0409","position":{"x":-200.0,"y":900.0},"channel":18},"response":{"accepted":true,"real_timestamp_ms":1789265740991,"virtual_time_s":8744.654516,"measure_result":"no_signal"}}
{"event":"action","seq":410,"wall_ts_ms":1789265740992,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0410","position":{"x":-200.0,"y":900.0},"channel":1},"response":{"accepted":true,"real_timestamp_ms":1789265740992,"virtual_time_s":8750.654516,"measure_result":"no_signal"}}
{"event":"action","seq":411,"wall_ts_ms":1789265740993,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0411","position":{"x":-200.0,"y":900.0},"channel":3},"response":{"accepted":true,"real_timestamp_ms":1789265740993,"virtual_time_s":8756.654516,"measure_result":"no_signal"}}
{"event":"action","seq":412,"wall_ts_ms":1789265740994,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0412","position":{"x":-200.0,"y":900.0},"channel":7},"response":{"accepted":true,"real_timestamp_ms":1789265740994,"virtual_time_s":8762.654516,"measure_result":"no_signal"}}
{"event":"action","seq":413,"wall_ts_ms":1789265740994,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0413","position":{"x":-200.0,"y":900.0},"channel":9},"response":{"accepted":true,"real_timestamp_ms":1789265740994,"virtual_time_s":8768.654516,"measure_result":"no_signal"}}
{"event":"action","seq":414,"wall_ts_ms":1789265740995,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0414","position":{"x":-200.0,"y":900.0},"channel":11},"response":{"accepted":true,"real_timestamp_ms":1789265740995,"virtual_time_s":8774.654516,"measure_result":"no_signal"}}
{"event":"action","seq":415,"wall_ts_ms":1789265740996,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0415","position":{"x":-200.0,"y":900.0},"channel":13},"response":{"accepted":true,"real_timestamp_ms":1789265740996,"virtual_time_s":8780.654516,"measure_result":"no_signal"}}
{"event":"action","seq":416,"wall_ts_ms":1789265740996,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0416","position":{"x":-200.0,"y":900.0},"channel":14},"response":{"accepted":true,"real_timestamp_ms":1789265740996,"virtual_time_s":8786.654516,"measure_result":"no_signal"}}
{"event":"action","seq":417,"wall_ts_ms":1789265740997,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0417","position":{"x":-200.0,"y":900.0},"channel":17},"response":{"accepted":true,"real_timestamp_ms":1789265740997,"virtual_time_s":8792.654516,"measure_result":"no_signal"}}
{"event":"action","seq":418,"wall_ts_ms":1789265740998,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0418","position":{"x":-500.0,"y":700.0},"channel":17},"response":{"accepted":true,"real_timestamp_ms":1789265740998,"virtual_time_s":8869.765542,"measure_result":"no_signal"}}
{"event":"action","seq":419,"wall_ts_ms":1789265740998,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0419","position":{"x":-500.0,"y":700.0},"channel":1},"response":{"accepted":true,"real_timestamp_ms":1789265740998,"virtual_time_s":8875.765542,"measure_result":"no_signal"}}
{"event":"action","seq":420,"wall_ts_ms":1789265740999,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0420","position":{"x":-500.0,"y":700.0},"channel":3},"response":{"accepted":true,"real_timestamp_ms":1789265740999,"virtual_time_s":8881.765542,"measure_result":"no_signal"}}
{"event":"action","seq":421,"wall_ts_ms":1789265741000,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0421","position":{"x":-500.0,"y":700.0},"channel":7},"response":{"accepted":true,"real_timestamp_ms":1789265741000,"virtual_time_s":8887.765542,"measure_result":"no_signal"}}
{"event":"action","seq":422,"wall_ts_ms":1789265741000,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0422","position":{"x":-500.0,"y":700.0},"channel":9},"response":{"accepted":true,"real_timestamp_ms":1789265741000,"virtual_time_s":8893.765542,"measure_result":"no_signal"}}
{"event":"action","seq":423,"wall_ts_ms":1789265741001,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0423","position":{"x":-500.0,"y":700.0},"channel":11},"response":{"accepted":true,"real_timestamp_ms":1789265741001,"virtual_time_s":8899.765542,"measure_result":"no_signal"}}
{"event":"action","seq":424,"wall_ts_ms":1789265741001,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0424","position":{"x":-500.0,"y":700.0},"channel":13},"response":{"accepted":true,"real_timestamp_ms":1789265741001,"virtual_time_s":8905.765542,"measure_result":"no_signal"}}
{"event":"action","seq":425,"wall_ts_ms":1789265741002,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0425","position":{"x":-500.0,"y":700.0},"channel":14},"response":{"accepted":true,"real_timestamp_ms":1789265741002,"virtual_time_s":8911.765542,"measure_result":"no_signal"}}
{"event":"action","seq":426,"wall_ts_ms":1789265741003,"method":"POST","path":"/measure","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0426","position":{"x":-500.0,"y":700.0},"channel":18},"response":{"accepted":true,"real_timestamp_ms":1789265741003,"virtual_time_s":8917.765542,"measure_result":"no_signal"}}
{"event":"action","seq":427,"wall_ts_ms":1789265741003,"method":"POST","path":"/exit","status":200,"request":{"arena_id":"default","robot_id":"1","request_id":"baa9dc681441-0427"},"response":{"accepted":true,"real_timestamp_ms":1789265741003,"virtual_time_s":8917.765542,"exit_reason":"user_exit"}}
{"event":"session_end","reason":"user_exit","virtual_time_s":8917.765542,"real_elapsed_s":10.027643,"request_count":427,"cleared_count":11}
+1 -1
View File
@@ -1,4 +1,4 @@
"""兼容入口,转发到统一 CLI(mcm26b)。""" """用于转发到统一 CLI(mcm26b)的统一入口"""
from mcm26b.cli import main from mcm26b.cli import main
if __name__ == "__main__": if __name__ == "__main__":
File diff suppressed because it is too large Load Diff
-815
View File
@@ -1,815 +0,0 @@
[
{
"id": "normal",
"name": "三点交会",
"source": "synthetic",
"target": [
80,
90
],
"measurements": [
{
"x": -600,
"y": -250,
"bearing_deg": 27.21505117707799,
"half_angle_deg": 1.0
},
{
"x": 650,
"y": -100,
"bearing_deg": 161.015051177078,
"half_angle_deg": 1.0
},
{
"x": 100,
"y": 700,
"bearing_deg": 268.4721225527146,
"half_angle_deg": 1.0
}
],
"frames": [
{
"status": "unbounded",
"vertices": [
[
-600.0,
-250.0
]
],
"tolerance_m": 1e-09,
"diameter_infinite": true,
"diameter_m": null,
"recession_direction": [
0.8971423583981722,
0.44174154068614097
],
"message": "存在非零衰退方向,区域无界,直径为无穷大"
},
{
"status": "polygon",
"vertices": [
[
45.3908396669742,
96.27384560337686
],
[
80.26352724282751,
84.95314961314784
],
[
106.24825816469405,
97.74770218809789
],
[
71.61376404345356,
110.34332460542697
]
],
"tolerance_m": 6.294839156007086e-07,
"diameter_infinite": false,
"diameter_m": 60.87526295170263,
"diameter_pair": [
[
45.3908396669742,
96.27384560337686
],
[
106.24825816469405,
97.74770218809789
]
],
"area_m2": 778.9645078415749,
"diameter_circle": {
"center": [
75.81954891583413,
97.01077389573737
],
"radius_m": 30.437631475851315,
"max_vertex_distance_m": 30.43763147585132,
"covers": true,
"coverage_tolerance_m": 2.5179356624028345e-06,
"max_excess_m": 4.367922104569409e-15,
"outside_vertex_indices": [],
"witness_vertex": null
},
"minimum_enclosing_circle": {
"center": [
75.81954891583412,
97.01077389573737
],
"radius_m": 30.437631475851326
},
"guaranteed_clearable_at_mec_center": false,
"clearance_certificate": {
"model": "angular_intersection_only",
"clear_radius_m": 20.0,
"numerical_margin_m": 2.5179356624028345e-06,
"radius_with_margin_m": 30.437633993786985,
"remaining_margin_m": -10.437633993786985,
"center": [
75.81954891583412,
97.01077389573737
]
}
},
{
"status": "polygon",
"vertices": [
[
72.95144059951443,
87.32686714676511
],
[
80.26352724282755,
84.95314961314779
],
[
94.39740997503758,
91.91249455495989
],
[
94.49056873706193,
102.02365367196415
],
[
73.93038642999645,
109.5008321248877
]
],
"tolerance_m": 7.462871059079371e-07,
"diameter_infinite": false,
"diameter_m": 26.986082918182134,
"diameter_pair": [
[
94.39740997503758,
91.91249455495989
],
[
73.93038642999645,
109.5008321248877
]
],
"area_m2": 382.03705547378974,
"diameter_circle": {
"center": [
84.163898202517,
100.7066633399238
],
"radius_m": 13.493041459091067,
"max_vertex_distance_m": 17.45675089097608,
"covers": false,
"coverage_tolerance_m": 2.9851484236317485e-06,
"max_excess_m": 3.96370943188501,
"outside_vertex_indices": [
0,
1
],
"witness_vertex": [
72.95144059951443,
87.32686714676511
]
},
"minimum_enclosing_circle": {
"center": [
81.87363979249537,
98.04155797588491
],
"radius_m": 13.943107186092131
},
"guaranteed_clearable_at_mec_center": true,
"clearance_certificate": {
"model": "angular_intersection_only",
"clear_radius_m": 20.0,
"numerical_margin_m": 2.9851484236317485e-06,
"radius_with_margin_m": 13.943110171240557,
"remaining_margin_m": 6.056889828759443,
"center": [
81.87363979249537,
98.04155797588491
]
}
}
]
},
{
"id": "triangle",
"name": "直径圆反例",
"source": "synthetic",
"target": [
20,
11.547005383792515
],
"measurements": [
{
"x": -1000,
"y": 0,
"bearing_deg": 1,
"half_angle_deg": 1.0
},
{
"x": 540,
"y": -866.0254037844386,
"bearing_deg": 121,
"half_angle_deg": 1.0
},
{
"x": 520,
"y": 900.6664199358162,
"bearing_deg": 241,
"half_angle_deg": 1.0
}
],
"frames": [
{
"status": "unbounded",
"vertices": [
[
-1000.0,
0.0
]
],
"tolerance_m": 1e-09,
"diameter_infinite": true,
"diameter_m": null,
"recession_direction": [
1.0,
0.0
],
"message": "存在非零衰退方向,区域无界,直径为无穷大"
},
{
"status": "polygon",
"vertices": [
[
-22.483050583603557,
34.1356440648463
],
[
-1.1527327997955013,
0.0
],
[
40.000000000000284,
0.0
],
[
19.44641513032613,
35.59985327195466
]
],
"tolerance_m": 8.83402513014311e-07,
"diameter_infinite": false,
"diameter_m": 71.19953515266143,
"diameter_pair": [
[
-22.483050583603557,
34.1356440648463
],
[
40.000000000000284,
0.0
]
],
"area_m2": 1463.776307271084,
"diameter_circle": {
"center": [
8.75847470819835,
17.06782203242318
],
"radius_m": 35.59976757633071,
"max_vertex_distance_m": 35.59976757633074,
"covers": true,
"coverage_tolerance_m": 3.533610052057244e-06,
"max_excess_m": 2.4519345249005315e-14,
"outside_vertex_indices": [],
"witness_vertex": null
},
"minimum_enclosing_circle": {
"center": [
8.75847470819835,
17.06782203242318
],
"radius_m": 35.59976757633074
},
"guaranteed_clearable_at_mec_center": false,
"clearance_certificate": {
"model": "angular_intersection_only",
"clear_radius_m": 20.0,
"numerical_margin_m": 3.533610052057244e-06,
"radius_with_margin_m": 35.59977110994079,
"remaining_margin_m": -15.59977110994079,
"center": [
8.75847470819835,
17.06782203242318
]
}
},
{
"status": "polygon",
"vertices": [
[
-5.755396159656812e-13,
0.0
],
[
40.000000000000234,
0.0
],
[
19.999999999999847,
34.64101615137823
]
],
"tolerance_m": 1.0200653573832087e-06,
"diameter_infinite": false,
"diameter_m": 40.00000000000081,
"diameter_pair": [
[
-5.755396159656812e-13,
0.0
],
[
40.000000000000234,
0.0
]
],
"area_m2": 692.8203230275786,
"diameter_circle": {
"center": [
19.99999999999983,
0.0
],
"radius_m": 20.000000000000405,
"max_vertex_distance_m": 34.641016151378224,
"covers": false,
"coverage_tolerance_m": 4.080261429532835e-06,
"max_excess_m": 14.641016151377823,
"outside_vertex_indices": [
2
],
"witness_vertex": [
19.999999999999847,
34.64101615137823
]
},
"minimum_enclosing_circle": {
"center": [
19.99999999999983,
11.547005383792735
],
"radius_m": 23.094010767585495
},
"guaranteed_clearable_at_mec_center": false,
"clearance_certificate": {
"model": "angular_intersection_only",
"clear_radius_m": 20.0,
"numerical_margin_m": 4.080261429532835e-06,
"radius_with_margin_m": 23.094014847846925,
"remaining_margin_m": -3.0940148478469247,
"center": [
19.99999999999983,
11.547005383792735
]
}
}
]
},
{
"id": "poor",
"name": "近共线检测点",
"source": "synthetic",
"target": [
900,
50
],
"measurements": [
{
"x": 0,
"y": 0,
"bearing_deg": 3.1798301198642345,
"half_angle_deg": 1.0
},
{
"x": 100,
"y": 0,
"bearing_deg": 3.576334374997351,
"half_angle_deg": 1.0
},
{
"x": 200,
"y": 0,
"bearing_deg": 4.085616779974877,
"half_angle_deg": 1.0
}
],
"frames": [
{
"status": "unbounded",
"vertices": [
[
0.0,
0.0
]
],
"tolerance_m": 1e-09,
"diameter_infinite": true,
"diameter_m": null,
"recession_direction": [
0.9992763681850043,
0.03803603537420482
],
"message": "存在非零衰退方向,区域无界,直径为无穷大"
},
{
"status": "unbounded",
"vertices": [
[
190.67332308426802,
7.257709171010532
],
[
649.0783141257873,
24.706243940862326
],
[
1149.8860918066787,
84.03538833511422
]
],
"tolerance_m": 5.0000000000000004e-08,
"diameter_infinite": true,
"diameter_m": null,
"recession_direction": [
0.9973401975299315,
0.07288710716551386
],
"message": "存在非零衰退方向,区域无界,直径为无穷大"
},
{
"status": "unbounded",
"vertices": [
[
349.47112173238565,
13.302121787008087
],
[
649.0783141257873,
24.706243940862326
],
[
704.9784261478786,
27.221516841665565
],
[
1149.886091806679,
84.03538833511422
],
[
1094.1078143807658,
79.57076189541714
]
],
"tolerance_m": 1.0000000000000001e-07,
"diameter_infinite": true,
"diameter_m": null,
"recession_direction": [
0.9973401975299315,
0.07288710716551386
],
"message": "存在非零衰退方向,区域无界,直径为无穷大"
}
]
},
{
"id": "empty",
"name": "不相容观测",
"source": "synthetic",
"target": null,
"measurements": [
{
"x": -100,
"y": 0,
"bearing_deg": 180,
"half_angle_deg": 1.0
},
{
"x": 100,
"y": 0,
"bearing_deg": 0,
"half_angle_deg": 1.0
}
],
"frames": [
{
"status": "unbounded",
"vertices": [
[
-100.0,
0.0
]
],
"tolerance_m": 1e-09,
"diameter_infinite": true,
"diameter_m": null,
"recession_direction": [
-0.9998476951563913,
0.01745240643728344
],
"message": "存在非零衰退方向,区域无界,直径为无穷大"
},
{
"status": "empty",
"vertices": [],
"diameter_m": null,
"diameter_infinite": false,
"tolerance_m": 1.0000000000000001e-07,
"message": "测向角域没有公共点;检查频道、数据及误差界"
}
]
},
{
"id": "segment",
"name": "零误差退化线段",
"source": "synthetic",
"target": [
40,
0
],
"measurements": [
{
"x": 0,
"y": 0,
"bearing_deg": 0,
"half_angle_deg": 0
},
{
"x": 100,
"y": 0,
"bearing_deg": 180,
"half_angle_deg": 0
}
],
"frames": [
{
"status": "unbounded",
"vertices": [
[
0.0,
0.0
]
],
"tolerance_m": 1e-09,
"diameter_infinite": true,
"diameter_m": null,
"recession_direction": [
1.0,
0.0
],
"message": "存在非零衰退方向,区域无界,直径为无穷大"
},
{
"status": "segment",
"vertices": [
[
0.0,
0.0
],
[
100.0,
0.0
]
],
"tolerance_m": 5.0000000000000004e-08,
"diameter_infinite": false,
"diameter_m": 100.0,
"diameter_pair": [
[
0.0,
0.0
],
[
100.0,
0.0
]
],
"area_m2": 0.0,
"diameter_circle": {
"center": [
50.0,
0.0
],
"radius_m": 50.0,
"max_vertex_distance_m": 50.0,
"covers": true,
"coverage_tolerance_m": 2.0000000000000002e-07,
"max_excess_m": 0.0,
"outside_vertex_indices": [],
"witness_vertex": null
},
"minimum_enclosing_circle": {
"center": [
50.0,
0.0
],
"radius_m": 50.0
},
"guaranteed_clearable_at_mec_center": false,
"clearance_certificate": {
"model": "angular_intersection_only",
"clear_radius_m": 20.0,
"numerical_margin_m": 2.0000000000000002e-07,
"radius_with_margin_m": 50.0000002,
"remaining_margin_m": -30.000000200000002,
"center": [
50.0,
0.0
]
}
}
]
},
{
"id": "practice-U5ZW-P9KN-TCAG-R7ST",
"name": "官方演练 U5ZW-P9KN-TCAG-R7ST",
"source": "official_practice",
"target": null,
"measurements": [
{
"x": 0,
"y": 0,
"bearing_deg": 131.52,
"half_angle_deg": 1.0
},
{
"x": -613.7618853216438,
"y": 391.53077545248124,
"bearing_deg": 34.92,
"half_angle_deg": 1.0
},
{
"x": -314.2721344680094,
"y": 656.6833525352392,
"bearing_deg": 227.19,
"half_angle_deg": 1.0
}
],
"frames": [
{
"status": "unbounded",
"vertices": [
[
0.0,
0.0
]
],
"tolerance_m": 1e-09,
"diameter_infinite": true,
"diameter_m": null,
"recession_direction": [
-0.6497134405131868,
0.7601792191427741
],
"message": "存在非零衰退方向,区域无界,直径为无穷大"
},
{
"status": "polygon",
"vertices": [
[
-460.69830582516533,
502.4117755118043
],
[
-456.18958970820563,
497.4948221803977
],
[
-436.511353451526,
510.7280211898303
],
[
-441.37035594940073,
516.4131625064848
]
],
"tolerance_m": 3.6400549446402593e-07,
"diameter_infinite": false,
"diameter_m": 25.57672002626576,
"diameter_pair": [
[
-460.69830582516533,
502.4117755118043
],
[
-436.511353451526,
510.7280211898303
]
],
"area_m2": 167.16830387852585,
"diameter_circle": {
"center": [
-448.6048296383457,
506.5698983508173
],
"radius_m": 12.78836001313288,
"max_vertex_distance_m": 12.788360013132888,
"covers": true,
"coverage_tolerance_m": 1.4560219778561037e-06,
"max_excess_m": 7.577386519575496e-15,
"outside_vertex_indices": [],
"witness_vertex": null
},
"minimum_enclosing_circle": {
"center": [
-448.6048296383457,
506.5698983508173
],
"radius_m": 12.788360013132888
},
"guaranteed_clearable_at_mec_center": true,
"clearance_certificate": {
"model": "angular_intersection_only",
"clear_radius_m": 20.0,
"numerical_margin_m": 1.4560219778561037e-06,
"radius_with_margin_m": 12.788361469154864,
"remaining_margin_m": 7.211638530845136,
"center": [
-448.6048296383457,
506.5698983508173
]
}
},
{
"status": "polygon",
"vertices": [
[
-460.69830582516533,
502.41177551180425
],
[
-456.4242356873799,
497.75071394627366
],
[
-440.56989343525083,
515.4766035082919
],
[
-441.3703559494006,
516.4131625064849
]
],
"tolerance_m": 4.666666666666667e-07,
"diameter_infinite": false,
"diameter_m": 23.996723024535473,
"diameter_pair": [
[
-460.69830582516533,
502.41177551180425
],
[
-440.56989343525083,
515.4766035082919
]
],
"area_m2": 89.48455568449387,
"diameter_circle": {
"center": [
-450.6340996302081,
508.9441895100481
],
"radius_m": 11.998361512267737,
"max_vertex_distance_m": 12.60236369723464,
"covers": false,
"coverage_tolerance_m": 1.8666666666666669e-06,
"max_excess_m": 0.604002184966904,
"outside_vertex_indices": [
1
],
"witness_vertex": [
-456.4242356873799,
497.75071394627366
]
},
"minimum_enclosing_circle": {
"center": [
-449.97695530423994,
507.9528348831342
],
"radius_m": 12.068583013309823
},
"guaranteed_clearable_at_mec_center": true,
"clearance_certificate": {
"model": "angular_intersection_only",
"clear_radius_m": 20.0,
"numerical_margin_m": 1.8666666666666669e-06,
"radius_with_margin_m": 12.068584879976491,
"remaining_margin_m": 7.931415120023509,
"center": [
-449.97695530423994,
507.9528348831342
]
}
}
]
}
]
-8
View File
@@ -1,8 +0,0 @@
{
"status": "empty",
"vertices": [],
"diameter_m": null,
"diameter_infinite": false,
"tolerance_m": 1.0000000000000001e-07,
"message": "测向角域没有公共点;检查频道、数据及误差界"
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Some files were not shown because too many files have changed in this diff Show More