diff --git a/.gitignore b/.gitignore index 0f32c6d..200986c 100644 --- a/.gitignore +++ b/.gitignore @@ -11,4 +11,13 @@ wheels/ # Sim Jammers*/ -tmp/ \ No newline at end of file +tmp/ +# LaTeX build artifacts +docs/paper/build/ +docs/paper/*.aux +docs/paper/*.log +docs/paper/*.out +docs/paper/*.fls +docs/paper/*.fdb_latexmk +docs/paper/*.xdv +docs/paper/*.synctex.gz diff --git a/docs/paper/README.md b/docs/paper/README.md new file mode 100644 index 0000000..6805d46 --- /dev/null +++ b/docs/paper/README.md @@ -0,0 +1,58 @@ +# 论文(docs/paper) + +2026 年高教社杯全国大学生数学建模竞赛 B 题论文 LaTeX 工程,格式依据 +`issue/论文格式/附件3. 全国大学生数学建模竞赛论文格式规范.pdf`(2026 年修订稿)。 + +## 编译 + +需要 TeX Live(含 XeLaTeX 与 ctex)。在本目录执行: + +```bash +latexmk -xelatex -outdir=build main.tex +# 或 +xelatex main.tex && xelatex main.tex +``` + +输出 PDF:`build/main.pdf`(用第二种方式则为 `main.pdf`)。 + +## 目录结构 + +| 路径 | 内容 | +| --- | --- | +| `main.tex` | 论文主文件(全部内容在一个文件中,便于协作合并) | +| `fonts/` | 从本机提取的中文字体(宋体 SC 常规/加粗、黑体 SC Light/Medium)与 Times New Roman 四体,约 150 MB,编译自包含 | +| `figures/` | 插图目录 | +| `build/` | 编译产物(已 gitignore) | + +## 规范要点与工程实现 + +- A4、四边距 2.5cm:`geometry` 宏包。 +- 页码从摘要专用页起、页脚中部、从 1 连续编号:摘要页 `\setcounter{page}{1}`。 +- 正文不要目录、不超过 30 页:未生成目录,正文当前远少于 30 页。 +- **电子版第一页必须是摘要专用页**(不含承诺书与编号专用页):默认 + `\paperfalse`。打印纸质版时改为 `\papertrue`,自动加入承诺书与编号专用页 + (占位文字,须替换为组委会当年发布的专用页原文)。 +- 摘要页含标题与关键词,不超过一页,无需英文。 +- 摘要页、正文、附录中不得出现姓名、学校、赛区等信息。 +- 附录含支撑材料文件列表与完整源码:源码以 `\lstinputlisting` 引用仓库内 + `geometry/` 等模块(相对路径 `../../../`),提交前须确认与支撑材料压缩包一致。 + +## 待办(正文中红色【待填/待补】标记) + +- 问题 3、4 演练统计值与正式测试结果(表 1 两张表)。 +- 问题 1 定位区域图、问题 2 候选区域示意图与选点对比实验。 +- 支撑材料文件列表更新;定稿前删除全部红色批注(`\todonote`)。 + +## 字体说明 + +`fonts/` 下中文 字体自 macOS 系统字体(Songti.ttc、STHeiti)提取简体字面而来, +授权仅限本队参赛使用。若在 Windows/Overleaf 编译,可改用系统自带中易宋体/黑体, +将导言区字体设置替换为: + +```latex +\setCJKmainfont{SimSun} +\setCJKsansfont{SimHei} +\setmainfont{Times New Roman} +``` + +若仓库体积敏感,可将 `fonts/` 加入 `.gitignore`(此时每位队员需自备字体)。 diff --git a/docs/paper/figures/.gitkeep b/docs/paper/figures/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/docs/paper/fonts/HeitiSC-Light.ttf b/docs/paper/fonts/HeitiSC-Light.ttf new file mode 100644 index 0000000..30f8723 Binary files /dev/null and b/docs/paper/fonts/HeitiSC-Light.ttf differ diff --git a/docs/paper/fonts/HeitiSC-Medium.ttf b/docs/paper/fonts/HeitiSC-Medium.ttf new file mode 100644 index 0000000..b877cec Binary files /dev/null and b/docs/paper/fonts/HeitiSC-Medium.ttf differ diff --git a/docs/paper/fonts/SongtiSC-Bold.ttf b/docs/paper/fonts/SongtiSC-Bold.ttf new file mode 100644 index 0000000..5de7938 Binary files /dev/null and b/docs/paper/fonts/SongtiSC-Bold.ttf differ diff --git a/docs/paper/fonts/SongtiSC-Regular.ttf b/docs/paper/fonts/SongtiSC-Regular.ttf new file mode 100644 index 0000000..780b420 Binary files /dev/null and b/docs/paper/fonts/SongtiSC-Regular.ttf differ diff --git a/docs/paper/fonts/Times New Roman Bold Italic.ttf b/docs/paper/fonts/Times New Roman Bold Italic.ttf new file mode 100644 index 0000000..47e8580 Binary files /dev/null and b/docs/paper/fonts/Times New Roman Bold Italic.ttf differ diff --git a/docs/paper/fonts/Times New Roman Bold.ttf b/docs/paper/fonts/Times New Roman Bold.ttf new file mode 100644 index 0000000..8e69d1a Binary files /dev/null and b/docs/paper/fonts/Times New Roman Bold.ttf differ diff --git a/docs/paper/fonts/Times New Roman Italic.ttf b/docs/paper/fonts/Times New Roman Italic.ttf new file mode 100644 index 0000000..eff3616 Binary files /dev/null and b/docs/paper/fonts/Times New Roman Italic.ttf differ diff --git a/docs/paper/fonts/Times New Roman.ttf b/docs/paper/fonts/Times New Roman.ttf new file mode 100644 index 0000000..fd01cc6 Binary files /dev/null and b/docs/paper/fonts/Times New Roman.ttf differ diff --git a/docs/paper/main.tex b/docs/paper/main.tex new file mode 100644 index 0000000..58bac3c --- /dev/null +++ b/docs/paper/main.tex @@ -0,0 +1,596 @@ +% ============================================================ +% 2026 年高教社杯全国大学生数学建模竞赛论文(B 题) +% 编译:latexmk -xelatex -outdir=build main.tex +% (或 xelatex main.tex 连续编译两遍) +% +% 规范要点(附件3,2026 年修订稿): +% 1. A4 纸,上下左右页边距至少 2.5cm; +% 2. 纸质版第一页承诺书、第二页编号专用页; +% 3. 摘要专用页含标题与关键词,不超过一页;页码从摘要页起, +% 页脚中部阿拉伯数字从 1 连续编号; +% 4. 正文不要目录,不超过 30 页;之后为附录(页数不限); +% 5. 摘要页、正文、附录中不得出现参赛者身份、学校、赛区信息; +% 6. 电子版第一页必须为摘要专用页(不含承诺书与编号专用页)。 +% ============================================================ +\documentclass[zihao=-4,a4paper]{ctexart} + +% ---------- 电子版 / 纸质版切换 ---------- +% 电子版(默认):第一页即摘要专用页,不包含承诺书与编号专用页; +% 纸质版打印:将下面 \paperfalse 改为 \papertrue,会自动加入 +% 承诺书(第 1 页)与编号专用页(第 2 页),页码仍从摘要页开始。 +\newif\ifpaper +\paperfalse + +% ---------- 页面与基础宏包 ---------- +\usepackage[left=2.5cm,right=2.5cm,top=2.5cm,bottom=2.5cm]{geometry} +\usepackage{amsmath,amssymb,bm} +\usepackage{graphicx} +\usepackage{booktabs,array,multirow,longtable} +\usepackage[font=small,labelsep=quad]{caption} +\usepackage{xcolor} +\usepackage{listings} +\usepackage{enumitem} +\usepackage[hidelinks]{hyperref} + +% ---------- 字体设置(使用本目录 fonts/ 下复制的字体,工程自包含) ---------- +% 中文正文:宋体(Songti SC);标题/强调:黑体(Heiti SC) +% 西文与数字:Times New Roman +% 若在 Windows 下编译且未携带 fonts/ 目录,可改用中易宋体/黑体: +% \setCJKmainfont{SimSun} \setCJKsansfont{SimHei} \setmainfont{Times New Roman} +\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}} + +\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} +\begin{center} + {\heiti\zihao{3} 基于有界误差交会定位与覆盖证明搜索的\\[0.3em] + 无线电干扰源快速定位与清除} +\end{center} +\vspace{0.8em} + +\begin{center} + {\heiti\zihao{4} 摘\quad 要} +\end{center} + +针对无线电干扰源的快速自动定位与清除问题,本文以测向观测的三值反馈 +\texttt{no\_signal}、\texttt{near}、\texttt{direction} 为唯一信息来源,建立了 +\textbf{有界误差交会定位—主动选点—覆盖证明搜索—动作耗时调度}的统一框架:四个问题 +复用同一几何内核,以覆盖证明与严格停止条件保证“清除所有干扰源”这一硬约束, +在此之上再优化时间指标。 + +\textbf{针对问题~1},将 $\pm 1^{\circ}$ 有界误差下的测向观测建模为以检测点为顶点的 +前向角域 $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},首次测向后取候选集合 +$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},建立以虚拟时间 +$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} +不单独删除空间候选点,避免误删真源;证明 $49$ 点覆盖基线对定向源仍然有效。对再次 +失去信号的源,给出候选集合的 $20$ 米网格有限圆盘覆盖后备清除方法及请求次数上界 +$N\le(\lceil w/20\rceil+2)(\lceil h/20\rceil+2)$,并纳入现实时间预算约束。 +\todonote{演练统计值与正式测试结果(表~1)待填入} + +最后对模型的保守性与效率进行评价:几何内核可复用、覆盖保证可验证;局限在于 +主动选点为采样启发式、后备清除请求数较大,可通过共享测点与自适应覆盖加速。 + +\vspace{0.8em} +\noindent{\heiti 关键词:}交会定位;半平面交;最小包围圆;覆盖证明;主动选点;动作调度 +\clearpage + +% ============================================================ +% 正文(不超过 30 页,不要目录) +% ============================================================ + +\section{问题重述} + +\subsection{问题背景} + +无线电干扰源的定位与清除是无线电频谱管理的重要任务。精准定位阶段需要携带便携式 +测向机的人员(本题中为搭载测向机的机器狗)进入目标分布区域,通过逐点检测示向度 +逐步定位干扰源并加以清除。目标区域为半径 $1800$ 米的圆形区域 +$\Omega=\{(x,y):x^2+y^2\le 1800^2\}$,干扰源按覆盖角度范围分为全向与定向两类, +其有效接收半径在 $1000$ 至 $1500$ 米之间,频道位于 $1$ 至 $20$ 中且互不相同。 +测向机同一地点的检测误差固定,全局误差在 $[-1^{\circ},1^{\circ}]$ 内;机器狗移动 +速度为 $5$ 米/秒,检测耗时 $5$ 秒,频道切换耗时 $1$ 秒,光学精确定位与清除分别在 +距离不超过 $20$ 米时进行,耗时 $3$ 秒与 $2$ 秒。 + +\subsection{待解决的问题} + +\begin{enumerate}[label=(\arabic*),leftmargin=3em] + \item \textbf{问题~1}:已知若干检测点坐标及某干扰源在各点的示向度,给出交会定位法 + 计算多边形定位区域直径的算法,并回答“以定位区域直径为直径的圆能否覆盖此 + 定位区域”。 + \item \textbf{问题~2}:已知某全向干扰源在一个检测点处测得的示向度,给出第二个 + 检测点的选择策略与候选区域,以获得较好的定位效果。 + \item \textbf{问题~3}:目标区域中全向干扰源总数为 $10$--$16$ 个但具体个数未知, + 制定机器狗自动搜索定位及清除策略并设计算法,确保全部清除的前提下时间最短, + 通过模拟器演练并给出清除比例、平均定位清除时间等统计值与三次正式测试结果。 + \item \textbf{问题~4}:目标区域中同时存在全向与定向干扰源,总数与定向方向均未知, + 给出检测与清除策略及算法,并完成演练与三次正式测试。 +\end{enumerate} + +\section{问题分析} + +四个问题构成一条递进的主线:问题~1 的交会定位几何是全部后续问题的基础;问题~2 在 +单次观测下研究“下一步去哪里测”的主动测量设计;问题~3、问题~4 则是在数量未知的 +条件下,把定位几何组织成“全域覆盖发现—逐个定位—清除—证明完成”的闭环调度问题。 +因此不必为每问单独建模,而是复用同一几何内核与观测更新机制。 + +\textbf{问题~1 的分析}。误差有界意味着单次测向只能确定源位于以示向度方向为轴、 +半角 $1^{\circ}$ 的前向角域内;多检测点角域的交集即为定位区域。求交即半平面交, +是经典计算几何问题;直径在凸多边形顶点上取得,可用顶点对枚举求得。“直径圆能否 +覆盖区域”需要区分“直径”与“外接”两个概念,等边三角形说明直径圆一般不覆盖, +正确的保证清除工具是最小包围圆。 + +\textbf{问题~2 的分析}。第二检测点的选取是在目标位置未知条件下的主动测量设计: +无论真实源位于当前候选集合何处,新检测点都必须保证能接收到信号(距离不超过其有效 +接收半径),否则该次检测将退化为无效动作。因此先构造保守候选集合,再解析证明存在 +“任何情况下都接收到信号”的安全区域,在安全区域内按最坏情形的后验包围半径最小化 +选取检测点。 + +\textbf{问题~3 的分析}。全清是硬约束:发现 $10$ 个源或连续多次无信号都不构成停止 +依据。需要一组对任何源位置都能保证“至少一个检测点落在其有效接收范围内”的覆盖点集, +并对每个频道维护覆盖记录,使“未发现”严格等价于“已证明不存在”。在该保证之上, +用虚拟时间公式统一度量移动、切换、检测与清除成本,安排发现与处理的调度。 + +\textbf{问题~4 的分析}。定向源的发射半平面使得“无信号”不能单独否定位置假设: +源可能恰在检测点背后发射。把观测视为对“位置—半径—朝向”联合假设的约束即可保持 +不漏源的保守性;同时证明覆盖基线对定向源依然成立,失去信号后的已定位源可用有限 +圆盘覆盖逐点清除作为后备。 + +\section{模型假设} + +\begin{enumerate}[label=\arabic*.,leftmargin=2.5em] + \item 示向度误差满足 $|\varepsilon|\le 1^{\circ}$,且同一检测点重复检测误差不变; + 仅在不同地点误差才呈现统计规律(题设)。本文取有界误差模型,不假设误差的 + 分布形式。 + \item 每个频道至多存在一个干扰源,源总数为 $10$--$16$,频道编号 $1$--$20$; + 不同源信号互不影响(题设)。 + \item 各源有效接收半径未知但属于 $[1000,1500]$ 米;信号场强仅随距离衰减, + 与角度无关(题设)。 + \item 定向源有效覆盖角度为定向方向两侧各 $90^{\circ}$(含边界);光学精确定位与 + 清除只依赖距离、不受覆盖角度限制(题设)。 + \item 策略仅依赖接口返回的三值观测(\texttt{no\_signal}、\texttt{near}、 + \texttt{direction} 及示向度读数),不引入场强、距离等接口未提供的观测量 + (工程约定)。 + \item 机器狗沿直线匀速行进、停机检测,虚拟时间按题设动作耗时累计;程序运行时间 + 与虚拟时间相互独立(题设)。 +\end{enumerate} + +\section{符号说明} + +\begin{table}[htbp] + \centering + \caption{主要符号说明} + \label{tab:symbols} + \begin{tabular}{cl} + \toprule + 符号 & 说明 \\ + \midrule + $\Omega$ & 目标区域 $\{(x,y):x^2+y^2\le 1800^2\}$(米) \\ + $R_c$ & 干扰源 $c$ 的有效接收半径,$R_c\in[1000,1500]$ 米 \\ + $\delta$ & 示向度误差界,$\delta=1^{\circ}$ \\ + $s_i,\ \theta_i$ & 第 $i$ 个检测点坐标及其测得的示向度读数 \\ + $W_i$ & 检测点 $s_i$ 处的前向角域 $[\theta_i-\delta,\theta_i+\delta]$ \\ + $P$ & 交会定位区域(诸角域的半平面交) \\ + $D(P)$ & 定位区域 $P$ 的直径 \\ + $K$ & 某频道源的可能位置候选集合 \\ + $\rho(K)$ & $K$ 的最小包围圆半径 \\ + $\mathcal{Q}$ & 第二检测点的安全候选区域 \\ + $L$ & 机器狗移动总路程(米) \\ + $N_{\mathrm{switch}},N_{\mathrm{measure}},N_{\mathrm{clear}}$ & 频道切换、检测、清除动作次数 \\ + $T$ & 完成任务的虚拟总时间(秒) \\ + \bottomrule + \end{tabular} +\end{table} + +\section{问题~1:有界误差交会定位模型} + +\subsection{测向误差的前向角域建模} + +设第 $i$ 个检测点 $s_i$ 处测得示向度 $\theta_i$。由假设~1,真实方位角位于 +$[\theta_i-\delta,\theta_i+\delta]$ 内,故源必然落在以 $s_i$ 为顶点、以该方向区间 +为边界的前向角域 +\begin{equation} + W_i=\bigl\{s_i+t\,(\cos\varphi,\sin\varphi):t\ge 0,\ \varphi\in[\theta_i-\delta,\theta_i+\delta]\bigr\} + \label{eq:wedge} +\end{equation} +内。$W_i$ 由两条过 $s_i$ 的线性不等式表示,实现时须正确处理 $0^{\circ}/360^{\circ}$ +跨界。示向度读数保留两位小数时,可取 $\delta=1.005^{\circ}$ 作保守裕量;本文推导 +对任意 $\delta\in(0,45^{\circ})$ 成立。 + +\subsection{定位区域:角域的半平面交} + +交会定位区域为 +\begin{equation} + P=\bigcap_i W_i . + \label{eq:polygon} +\end{equation} +求各边界直线交点并筛除不可行点,再按极角排序即得凸多边形 $P$。算法必须区分五种 +情形:空集(观测矛盾,应核查频道与数据)、单点、线段、有界多边形与无界区域; +对无界区域不能截断后声称得到真实直径。 + +\subsection{定位区域直径的算法} + +凸函数 $\|x-y\|$ 的最大值在紧凸集的极点处取得,故当 $P$ 为有界多边形 +$P=\mathrm{conv}\{v_1,\dots,v_n\}$ 时 +\begin{equation} + D(P)=\max_{1\le iD/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} + +\clearpage +% ============================================================ +% 附录(页数不限;电子版与纸质版均须包含) +% ============================================================ +\appendix + +\section{支撑材料文件列表} + +\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} diff --git a/uv.lock b/uv.lock new file mode 100644 index 0000000..61eb41d --- /dev/null +++ b/uv.lock @@ -0,0 +1,8 @@ +version = 1 +revision = 3 +requires-python = ">=3.10" + +[[package]] +name = "math" +version = "0.1.0" +source = { virtual = "." }