241 lines
15 KiB
TeX
241 lines
15 KiB
TeX
\section{实验结果与分析}
|
||
\subsection{实验设置与数据来源}
|
||
本文的实验分两部分,职责严格区分。
|
||
\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{问题一与问题二的配对对比}
|
||
先看几何层的两个判据在数值上的表现。问题一用固定示例与随机交会算例
|
||
(共 $\ProjQOneExampleCases$ 例固定、$\ProjQOneRandomCases$ 例随机)对比两种实现,
|
||
见表~\ref{tab:q1compare}。
|
||
|
||
\begin{table}[htbp]
|
||
\centering\small
|
||
\caption{问题一:直径与覆盖判定的实现对比(时间单位:ms/例)}
|
||
\setlength{\tabcolsep}{3pt}
|
||
\begin{tabular}{p{3.4cm}rrrrr}
|
||
\toprule
|
||
实现 & 状态正确率 & 直径平均误差/m & 直径最大误差/m & 覆盖正确率 & 平均耗时/ms\\
|
||
\midrule
|
||
最优(固定 $\ProjQOneExampleCases$ 例) & 100.0\% & 0.000 & 0.000 & 100.0\% & $\ProjQOneFixedMsOpt$ \\
|
||
最优(随机 $\ProjQOneRandomCases$ 例) & 100.0\% & 0.000 & 0.000 & 100.0\% & $\ProjQOneRandMsOpt$ \\
|
||
基线(固定 $\ProjQOneExampleCases$ 例) & $\ProjQOneFixedStatusBase$ & $\ProjQOneFixedMaeBase$ & $\ProjQOneFixedMaeMaxBase$ & $\ProjQOneFixedCoverBase$ & $\ProjQOneFixedMsBase$ \\
|
||
基线(随机 $\ProjQOneRandomCases$ 例) & $\ProjQOneRandStatusBase$ & $\ProjQOneRandMaeBase$ & $\ProjQOneRandMaeMaxBase$ & $\ProjQOneRandCoverBase$ & $\ProjQOneRandMsBase$ \\
|
||
\bottomrule
|
||
\end{tabular}
|
||
\label{tab:q1compare}
|
||
\end{table}
|
||
|
||
由表可见,最优实现(半平面交 \(+\) 顶点对枚举 \(+\) 最小包围圆)
|
||
在固定与随机两类算例上的直径误差均为零、覆盖判定全部正确;
|
||
基线的直径平均绝对误差为 $\ProjQOneFixedMaeBase$ m(固定例)
|
||
与 $\ProjQOneRandMaeBase$ m(随机例),最大误差达 $\ProjQOneRandMaeMaxBase$ m,
|
||
覆盖判定正确率仅 $\ProjQOneFixedCoverBase$ 与 $\ProjQOneRandCoverBase$。
|
||
原因在于包围盒对角线只有在区域恰好与坐标轴对齐时才等于直径,
|
||
而基线的覆盖判据几乎恒判"覆盖",因此系统性偏乐观。
|
||
计算代价方向相反:最优实现平均 $\ProjQOneRandMsOpt$ ms,
|
||
基线 $\ProjQOneRandMsBase$ ms,说明精确判据并不以牺牲效率为代价。
|
||
|
||
问题二的差距出现在"保证接收"与"定位收缩"这对指标上,见表~\ref{tab:q2compare}。
|
||
入选标准是:安全盘内最坏后验半径越小越好,同时保证接收率必须为 $100\%$。
|
||
|
||
\begin{table}[htbp]
|
||
\centering\small
|
||
\caption{问题二:第二检测点选点策略对比($\ProjQTwoCases$ 例随机首次示向度)}
|
||
\setlength{\tabcolsep}{3pt}
|
||
\begin{tabular}{p{3.2cm}rrrrrr}
|
||
\toprule
|
||
选点方法 & 保证接收率 & 最坏后验均值/m & 中位/m & 平均收缩/m & 终值比 & 移动均值/s\\
|
||
\midrule
|
||
算法2(默认选点) & $\ProjQTwoGuaranteeOpt$ & $\ProjQTwoWorstOpt$ & 90.899 & 607.577 & $\ProjQTwoRatioOpt$ & 170.44 \\
|
||
参考:盘内网格枚举 & 100.0\% & $\ProjQTwoWorstRef$ & 91.349 & 605.841 & 0.106 & 170.28 \\
|
||
基线:垂直 $1000$ m & $\ProjQTwoGuaranteePerp$ & $\ProjQTwoWorstPerp$ & 90.775 & 601.356 & 0.116 & 200.00 \\
|
||
基线:候选圆心 & $\ProjQTwoGuaranteeMec$ & $\ProjQTwoWorstMec$ & 375.088 & 340.721 & $\ProjQTwoRatioMec$ & 136.29 \\
|
||
\bottomrule
|
||
\end{tabular}
|
||
\label{tab:q2compare}
|
||
\end{table}
|
||
|
||
初始候选半径均值为 $\ProjQTwoInitialRadius$ m。
|
||
由表~\ref{tab:q2compare} 可知:垂直 $1000$ m 基线的最坏后验半径与最优实现接近,
|
||
但保证接收率只有 $\ProjQTwoGuaranteePerp$——当真源位于角域远端时必然返回无信号,
|
||
这正是问题二所要避免的失败模式;候选圆心基线的保证接收率为 $\ProjQTwoGuaranteeMec$,
|
||
但最坏后验半径达 $\ProjQTwoWorstMec$ m,终值比 $\ProjQTwoRatioMec$,
|
||
相当于只收缩了一半,说明"保证接收"若脱离横向基线便几乎没有定位价值。
|
||
最优实现同时取得 $\ProjQTwoGuaranteeOpt$ 的保证接收率与
|
||
$\ProjQTwoWorstOpt$ m 的最坏后验均值,终值比 $\ProjQTwoRatioOpt$,
|
||
并与盘内网格枚举参考解($\ProjQTwoWorstRef$ m)相差不到 $2\%$。
|
||
|
||
\subsection{问题三:演练局结果与基线对比}
|
||
问题三的闭环在 $18$ 个冻结场景上逐例配对运行,三种策略的结果见表~\ref{tab:q3compare}。
|
||
|
||
\input{data/project-q3-table}
|
||
|
||
三者的全清率都是 $100\%$,因此差别完全体现在代价上。
|
||
默认策略 \texttt{bayes} 的平均虚拟时间为 $\ProjQThreeMeanOpt$ s,
|
||
七点批量策略为 $\ProjQThreeMeanSeven$ s,
|
||
$49$ 点网格基线为 $\ProjQThreeMeanBase$ s;
|
||
相对基线,\texttt{bayes} 的平均降幅为 $\ProjQThreeDropOpt$、中位降幅 $\ProjQThreeDropMedianOpt$,
|
||
并在 $\ProjQThreeFasterOpt$ 个场景中全部更快。
|
||
代价的来源也很清楚:默认策略平均只需 $\ProjQThreeMeasuresOpt$ 次检测、
|
||
位移 $\ProjQThreeMoveOpt$ km,而网格基线需要 $\ProjQThreeMeasuresBase$ 次检测、
|
||
$\ProjQThreeMoveBase$ km。可见网格基线的开销主要来自"逐格走过去再检测",
|
||
而七点计划加网格幸存集把大量必然无信号的检测直接跳过,
|
||
再配合滚动任务排序把移动量压到约五分之一。
|
||
|
||
这一机制在真实演练局中得到复现。表~\ref{tab:q3practice} 给出问题三
|
||
全部 $\PractQThreeComplete$ 局全清演练局的直接统计。
|
||
|
||
|
||
\input{data/practice-q3-table}
|
||
|
||
|
||
$\PractQThreeComplete$ 局的源数覆盖 $10$ 至 $16$,全部实现清除数等于源数,
|
||
且没有一次失败清除;总虚拟时间集中在 $\PractQThreeMin$ 至 $\PractQThreeMax$ s,
|
||
平均 $\PractQThreeMean$ s,平均定位清除时间 $\PractQThreeMeanClear$ s/个。
|
||
随源数增加,总虚拟时间只从约 $3.0\times10^3$ s 增长到约 $4.0\times10^3$ s,
|
||
说明发现—定位—清除三个闭环的组织方式对源数量并不敏感。
|
||
|
||
\begin{figure}[htbp]
|
||
\centering
|
||
\includegraphics[width=0.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{问题四:演练局结果与基线对比}
|
||
问题四的困难来自遮挡,因此对比的重点不只是时间,还包括"是否真的全部清除"。
|
||
表~\ref{tab:q4compare} 给出三种策略在 $11$ 个混合源场景(含 $5$ 个边界定向源场景)上的结果。
|
||
|
||
|
||
\input{data/project-q4-table}
|
||
|
||
|
||
由表~\ref{tab:q4compare} 可见,把问题三的策略直接搬用会产生两类不同后果。
|
||
\texttt{bayes} 的七点全向缺席判据会把朝外发射的定向源误判为"不存在",
|
||
因而出现 $\ProjQFourAbsentBase$ 次缺席误判、全清率只有 $\ProjQFourClearBase$,
|
||
其平均虚拟时间($\ProjQFourMeanBase$ s)虽然最短,却是"快而错",
|
||
不能作为有效结果;$49$ 点网格策略的发现是完备的,
|
||
但没有后备清除,定位停滞时只能停在"已发现"状态,全清率 $\ProjQFourClearGrid$,属于"稳而不全"。
|
||
默认策略 \texttt{directional} 在全部 $\ProjQFourValidOpt$ 局有效,
|
||
全清率 $\ProjQFourClearOpt$,缺席误判为零,平均虚拟时间 $\ProjQFourMeanOpt$ s,
|
||
平均需要 $\ProjQFourFallbackOpt$ 次后备清除——正是这部分兜底动作
|
||
换来了网格与批量策略都达不到的完备性。
|
||
|
||
演练局进一步显示了遮挡造成的额外代价。表~\ref{tab:q4practice} 给出
|
||
全部 $\PractQFourComplete$ 局全清混合源演练的统计。
|
||
|
||
|
||
\input{data/practice-q4-table}
|
||
|
||
|
||
与问题三相比,混合源场景的检测次数增加约 $3$ 倍(平均 $\PractQFourMeasures$ 次
|
||
对 $\PractQThreeMeasures$ 次),移动距离约 $\PractQFourMove$ km(对 $\PractQThreeMove$ km),
|
||
总虚拟时间平均 $\PractQFourMean$ s,平均定位清除时间 $\PractQFourMeanClear$ s/个,
|
||
约为全向源场景的 $2.6$ 倍。原因在机制上是明确的:
|
||
一次无信号观测不再等于"源在远处",而可能只是朝向遮挡,
|
||
因此必须先用若干探点排除遮挡解释,才能继续收缩位置候选集。
|
||
本批 $\PractQFourComplete$ 局全部做到"清完且无失败清除",
|
||
说明可见性筛选加后备清除在定向源个数 $3$ 至 $8$ 的范围内是稳定的。
|
||
|
||
\begin{figure}[htbp]
|
||
\centering
|
||
\includegraphics[width=0.94\linewidth]{selfbuilt-q4-search-clear-path.png}
|
||
\caption{自建模拟器演练局 \texttt{\PractQFourMainCase}($\PractQFourMainSources$ 个源,
|
||
其中 $\PractQFourMainDirectional$ 个定向源)的搜索与清除路径。
|
||
$\mathbf{X}$ 为干扰源真值,每个定向源用"绿箭头(发射朝向)$+$ 浅绿细线扇形($\pm90^\circ$ 可见范围)$+$ 角度标注"表示;
|
||
每条浅色细射线表示一次 $\direction$ 检测测得的示向度,射线起点即发起检测的位置;
|
||
圆点为测到示向度的检测点($72$ 次),菱形为测到近距离的检测点($3$ 次),
|
||
灰色叉号为无信号检测点($84$ 次,其中相当一部分由朝向遮挡造成),星号为成功清除点。}
|
||
\label{fig:selfbuiltq4}
|
||
\end{figure}
|
||
|
||
图~\ref{fig:selfbuiltq4} 给出含定向源的一局(\texttt{\PractQFourMainCase},
|
||
$\PractQFourMainSources$ 个源、其中 $\PractQFourMainDirectional$ 个定向)的路径。
|
||
定向源的前向半盘造成大量无信号观测,轨迹比全向源局密集得多;
|
||
可见性筛选把探点优先放在朝向相容的位置,后备清除则在定位停滞时兜底完成清除。
|
||
该局共检测 $\PractQFourMainMeasures$ 次、换频 $\PractQFourMainSwitches$ 次,
|
||
移动 $\PractQFourMainMove$ km,总虚拟时间 $\PractQFourMainTime$ s。
|
||
|
||
\subsection{动作耗时分解}
|
||
上面的对比说明"哪种策略更快",还需要说明"时间花在哪里"。
|
||
把式~\eqref{eq:time} 重排,得到累计移动时间
|
||
\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{本节结论}
|
||
综合以上配对对比与演练局复算,可提炼出四点结论:
|
||
1. 几何层的精确判据不需要以效率为代价——问题一的最优实现误差为零而耗时更短,
|
||
问题二则在保证接收率为 $100\%$ 的同时把最坏后验半径压到基线的约五分之一;
|
||
2. 多源搜索的效率来自"证明不需要检测",网格幸存集与七点覆盖使默认策略的检测次数
|
||
和位移相对网格基线分别降到约四分之一和五分之一,平均虚拟时间下降 $\ProjQThreeDropOpt$;
|
||
3. 混合源场景必须为无信号保留朝向解释,否则会出现缺席误判;
|
||
默认策略以全清率 $100\%$、缺席误判 $0$ 和平均 $\ProjQFourMeanOpt$ s 的代价
|
||
换取了这种完备性;
|
||
4. 本次采集的 $44$ 局演练中,两类场景的全部源都被清除且失败清除为零,
|
||
移动时间占总耗时的 $\PractQThreeMoveShare$ 与 $\PractQFourMoveShare$,
|
||
是继续优化的首要对象;清除动作本身只占 $\PractQThreeClearShare$ 与 $\PractQFourClearShare$,
|
||
不是当前的时间瓶颈。
|
||
|
||
|