初始化提交
This commit is contained in:
+14
@@ -0,0 +1,14 @@
|
|||||||
|
# Python-generated files
|
||||||
|
__pycache__/
|
||||||
|
*.py[oc]
|
||||||
|
build/
|
||||||
|
dist/
|
||||||
|
wheels/
|
||||||
|
*.egg-info
|
||||||
|
|
||||||
|
# Virtual environments
|
||||||
|
.venv
|
||||||
|
|
||||||
|
# Sim
|
||||||
|
Jammers*/
|
||||||
|
tmp/
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
3.13
|
||||||
+172
@@ -0,0 +1,172 @@
|
|||||||
|
# B 题建模分析与实施计划
|
||||||
|
|
||||||
|
根据你们对工程实践和物理模型的熟悉程度,确定研究 B 题“无线电干扰源的快速自动定位与清除”。推荐采用**有界误差几何定位、主动选点、具有覆盖证明的搜索、按实际动作耗时调度**的统一框架。AI 辅助推导、实现与实验分析,策略只依赖题目允许的观测。
|
||||||
|
|
||||||
|
本文件完成题意分析、数学抽象、验收标准与实施规划。尚未实现策略、运行官方模拟器或消耗正式测试机会;文中的覆盖结论是根据题设推导的,耗时估算不是演练成绩。
|
||||||
|
|
||||||
|
依据:`issue/B题/B题.pdf` 全文、`issue/B题/附件/附件1.docx`《模拟器使用说明》、`issue/B题/附件/附件2.docx`《模拟器通信接口说明及编程指南》。文档中的登录、测试和日志要求在这里作为后续交付约束分析。
|
||||||
|
|
||||||
|
**1. 四问应当串成一条实现主线**
|
||||||
|
|
||||||
|
| 问题 | 要回答的实质问题 | 推荐抽象 | 必须交付的结果 |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| 1 | 带误差的多个方位如何形成定位区域,其直径如何计算,直径圆是否覆盖区域 | 扇形角域的半平面交、凸多边形直径、最小包围圆 | 算法、边界情形、覆盖判断及反例 |
|
||||||
|
| 2 | 仅有一次测向时,下一步去哪里更有利 | 在未知目标位置条件下进行主动测量设计 | 明确的候选区域、选点目标和比较实验 |
|
||||||
|
| 3 | 数量未知的全向源如何全部找到并尽快清除 | 全域覆盖、逐频道候选区域、局部定位与路径调度 | 演练统计、3 次正式结果、原名正式日志 |
|
||||||
|
| 4 | 有未知朝向的定向源时,如何避免遗漏 | 加入朝向不确定性的观测模型、半平面覆盖、失去信号后的处理 | 演练统计、另外 3 次正式结果、正式日志 |
|
||||||
|
|
||||||
|
第 1 问的定位区域和包围圆直接服务第 2 问选点与第 3、4 问清除;第 3 问的工程框架延伸到第 4 问。模型不必为每问重新搭建。
|
||||||
|
|
||||||
|
**2. 用题面明确的观测能力约束物理抽象**
|
||||||
|
|
||||||
|
目标区域为 Ω = {(x,y): x²+y²≤1800²}。每个频道最多有一个源,源总数为 10–16,频道为 1–20。对一个存在的源 c,用未知位置 g_c、接收半径 R_c∈[1000,1500]、类型和定向朝向描述;全向源不需要朝向参数。
|
||||||
|
|
||||||
|
机器狗状态只需要位置 p、当前测向频道 k、虚拟时间、现实剩余时间、各频道的观测历史和处理状态。每个频道维护:未知/已发现待定位/可清除/已清除/已证明不存在,以及尚可能包含源的集合 K_c。
|
||||||
|
|
||||||
|
| 规则 | 数学或程序含义 | 容易出现的错误 |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| 只返回 no_signal、near、direction;direction 附带示向度 | 这是带距离可见性门限的方位观测问题 | 构造接口并未提供的 RSSI、距离或场强数据 |
|
||||||
|
| 同地点误差固定,幅度不超过 1° | 用有界误差集合,保留空间相关性 | 原地重复测量取平均,假定可消除误差 |
|
||||||
|
| 示向度保留两位小数 | 题设模型取 ±1°;实现可另设 ±1.005° 保守裕量 | 把额外舍入裕量写成题面规定 |
|
||||||
|
| 定向源覆盖朝向两侧各 90°,包含边界 | 检测点须处于以源为界的发射半平面内 | 把无信号直接判定为没有源 |
|
||||||
|
| 可到目标圆域外检测与清除 | 目标位置受 Ω 限制,机器狗正常搜索不受 Ω 限制 | 所有搜索点强制留在圆域内,遗漏朝外发射的边界源 |
|
||||||
|
| 清除半径 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 测到 θ_i 后,定义 W_i 为从 s_i 出发、方向范围 [θ_i−δ,θ_i+δ] 的前向角域。它由两条线性半平面约束表示,必须正确处理 0°/360° 跨界。
|
||||||
|
|
||||||
|
第 1 问的定位多边形 P 为这些角域的交。求各边界直线交点并筛选可行点、排序成凸多边形后,小规模下直接枚举顶点对即可计算直径:
|
||||||
|
|
||||||
|
\[
|
||||||
|
D(P)=\max_{i,j}\|v_i-v_j\|.
|
||||||
|
\]
|
||||||
|
|
||||||
|
先用简单可靠的顶点对枚举作基准,规模确有需要时再换旋转卡壳。算法必须区分空集、单点、线段、有限多边形和无界区域;不能靠任意大方框截断后声称得到无界区域的真实直径。旋转卡壳的背景可参考 [McGill 计算几何研究页面](https://www-cgrl.cs.mcgill.ca/~godfried/research/calipers.html)。
|
||||||
|
|
||||||
|
**直径为 D 的圆不一定覆盖直径为 D 的区域。**例如边长 D 的等边三角形,最小包围圆半径为 D/√3,大于 D/2。后续保证清除应使用:
|
||||||
|
|
||||||
|
\[
|
||||||
|
\rho(K)=\min_z\max_{g\in K}\|g-z\|\le20.
|
||||||
|
\]
|
||||||
|
|
||||||
|
到最小包围圆圆心清除才能获得这一保证。D≤40 只是必要条件,不是充分条件。最小包围圆是已有标准计算几何问题,可参考 [CGAL Min_circle_2 文档](https://doc.cgal.org/latest/Bounding_volumes/classCGAL_1_1Min__circle__2.html)。实现时给 20 米阈值保留数值余量。
|
||||||
|
|
||||||
|
在线定位还可用 Ω 和“收到信号意味着距离≤1500”约束 K。圆盘交角域可能包含曲线边界;若用多边形近似,必须构造外包近似,才能维持“不丢失真源”的保证。用圆周采样点连成的内接多边形不能直接作为保守外包。
|
||||||
|
|
||||||
|
第 2 问建议先明确“较好的定位效果”:以新观测后的最坏包围圆半径为主要几何指标,再考虑移动和检测成本。交会角大、面积小可作为候选点筛选指标,但不是对所有未知位置都最优的证明。
|
||||||
|
|
||||||
|
第一次测向得到 K₁ 后,对全向源,一个保守且可以说明的第二检测点候选区域为:
|
||||||
|
|
||||||
|
\[
|
||||||
|
\mathcal Q=\{q:\max_{g\in K_1}\|q-g\|\le1000\}.
|
||||||
|
\]
|
||||||
|
|
||||||
|
在这里测量,不论实际目标位于 K₁ 何处,接收距离都满足题目最小接收半径;可能返回 direction,也可能返回 near。若已知外包圆 K₁⊆B(c,r),且 r<1000,则 B(c,1000−r) 是更容易构造的充分候选区域。不要误写成“候选点距第一次检测点不超过1000米”。
|
||||||
|
|
||||||
|
在候选区域内,围绕当前测向方向的两侧取有限候选点,分别评估可能观测下的区域收缩和动作耗时。最坏情形目标可写为 sup ρ(K₁∩W(q,θ′)),其中 θ′遍历与 K₁和误差界一致的观测,near 分支单独处理。稀疏采样评估是启发式,需要通过加密采样和误差边界案例验证,不能标成严格最坏情形最优解。
|
||||||
|
|
||||||
|
**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]²,包含目标圆域,并允许到圆域外访问。对于位于一个网格单元内部的源 g,该单元4个顶点到 g 的距离都不超过700√2≈989.95米。g 在这些顶点的凸包内部,所以经过 g 的任意发射半平面总包含至少一个顶点。该顶点满足接收距离与发射角条件。源恰在网格边或顶点时,取相邻单元的顶点;由于目标圆域与外框有余量,两侧相邻点都存在,仍可选择距离合格、且不与源重合的可见点。
|
||||||
|
|
||||||
|
因此,对每个尚未解决的频道完成这些点的测量,能够保证发现该频道存在的源。实际实现可跳过已经清除或已经具有有效定位任务的频道,但必须保存逐频道的覆盖记录,不能把“路过某点”当作“测过所有频道”。
|
||||||
|
|
||||||
|
作为规模检查,49点全部扫描20频道最多需要980次检测。若从原点去网格一角,再按逐行折返路线扫完,纯扫描路程约36569.85米;每点检测成本上界120秒,纯扫描虚拟总耗时上界约13193.97秒,即3.665小时。**该估算不含定位、清除及其绕行,也不保证满足现实20分钟窗口。**它说明覆盖基线在100小时虚拟上限内有设计空间,现实可行性仍要测接口延迟、总请求数和日志大小。
|
||||||
|
|
||||||
|
发现源后,先通过主动测向缩小候选集合。若定向源再次失去信号,可对已知有界候选集合构造半径小于20米的有限圆盘覆盖,逐点调用 /clear,作为不依赖朝向的后备清除方法。例如边长20米的小方格中心距格内任何点不超过10√2米;保留与候选集合相交的格子便可得到保守覆盖。该后备方法保证几何上的有限可清除性,耗时和请求预算须在演练中验证,不宜作为默认追踪策略。
|
||||||
|
|
||||||
|
停止成功的依据为以下任一项:
|
||||||
|
|
||||||
|
- 已成功清除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 管理本局现实预算,预留退出与故障恢复余量。根据附件,正式日志上传要求文件不超过2MB;接口延迟、日志增长和异常恢复都要在演练中实测。
|
||||||
|
|
||||||
|
基准实验至少覆盖:全向与混合源;数量10和16;接收半径1000和1500米;目标贴近圆域边界且朝外;测向接近0°/360°;误差取界值;检测点距离5米及清除距离20米的边界;重复请求、拒绝动作及短暂断连。样例数量按剩余时间和运行成本安排,不把有限样例通过等同于数学保证。
|
||||||
|
|
||||||
|
比较策略时先看是否全清,再比较同一批场景的总虚拟时间、平均每源时间、中位数与高分位耗时、程序时间、请求数。自建环境可用固定场景做配对比较;官方案例随机且不能重读真值,演练成绩单独记录,不声称是在完全相同的隐藏案例上比较。
|
||||||
|
|
||||||
|
**7. 建议实施次序与阶段交付**
|
||||||
|
|
||||||
|
以下工期是规划估计,不是已经完成的工作。依据附件中的北京时间截止安排,先完成可演练版本,再优化。
|
||||||
|
|
||||||
|
| 阶段 | 建议投入 | 具体工作 | 进入下一阶段的条件 |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| P0 规则固定 | 1–2小时 | 整理规则表、模块接口、日志字段;核实模拟器可运行 | 成本口径和状态更新规则一致 |
|
||||||
|
| P1 工程基线 | 2–4小时 | 实现4类请求、幂等重试、计时回放和自建测试环境 | 199秒示例一致,失败与重试不污染状态 |
|
||||||
|
| P2 几何内核 | 4–6小时 | 完成问题1,实现角域交、包围圆、问题2候选点 | 退化几何和误差边界检查通过 |
|
||||||
|
| P3 全向闭环 | 4–6小时 | 覆盖发现、局部定位、清除、停止、统计 | 问题3演练可完整退出,输出可追溯 |
|
||||||
|
| P4 定向扩展 | 4–6小时 | 验证49点覆盖;实现失去信号处理与后备清除 | 问题4边界朝外案例和演练通过 |
|
||||||
|
| P5 加速与定稿 | 4–8小时 | 做共享测量、目标排序等消融,固定参数和版本 | 性能改善有证据,完整性标准不退化 |
|
||||||
|
| P6 正式与论文 | 单独留出半天以上 | 分别完成3次正式测试、核查上传、导出原始日志、完成论文表格 | 6次记录、案例编码和交付材料一致 |
|
||||||
|
|
||||||
|
按当前日期2026年9月10日,建议9月10日完成P0/P1并启动P2,9月11日完成主要几何与问题3闭环,9月12日完成问题4与主要演练;稳定后即可安排正式测试,不把全部正式机会留到最后。附件建议9月13日15:30前完成正式测试,17:30后不能启动新的演练或正式测试;已进入上传队列的日志仍会继续上传。这里引用的是所提供附件的规则,运行前还应核对模拟器界面公告。
|
||||||
|
|
||||||
|
若时间不足,优先删减加速策略,保留可解释定位、覆盖证明、可靠协议和完整日志。开发组织可按几何算法、工程接口、实验论文分工,具体人员由团队安排。
|
||||||
|
|
||||||
|
建议后续代码划分为 protocol、geometry、belief、coverage、planner、local_simulator、evaluation 七个模块。官方客户端与自建环境使用同一动作接口;自建真值只对测试端开放,策略端只能看到观测,防止评估时意外使用隐藏答案。
|
||||||
|
|
||||||
|
**8. 当前已落实的结论与下一步**
|
||||||
|
|
||||||
|
已完整阅读 B 题四页和两份附件,确认四问衔接、协议动作、计时、日志及正式测试要求;推导了49点发现覆盖方案,独立复算了纯扫描规模与虚拟时间上界。另对497160个位置与朝向组合进行了辅助数值校核,含圆域边界、网格顶点和随机内部位置,未发现覆盖遗漏;有限采样只辅助检查上述证明,不代替证明。尚未验证官方服务延迟、误差场的具体实现或任何策略成绩。
|
||||||
|
|
||||||
|
下一步最有价值的实现是 P1 的协议与计时基线,以及 P2 的角域交与包围圆内核。完成它们后,先交付一条“发现—定位—清除—证明完成—退出”的可运行链路,再用演练数据决定加速方向。
|
||||||
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.
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.
Binary file not shown.
@@ -0,0 +1,6 @@
|
|||||||
|
def main():
|
||||||
|
print("Hello from math!")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
[project]
|
||||||
|
name = "math"
|
||||||
|
version = "0.1.0"
|
||||||
|
description = "Add your description here"
|
||||||
|
readme = "README.md"
|
||||||
|
requires-python = ">=3.13"
|
||||||
|
dependencies = []
|
||||||
Reference in New Issue
Block a user