把容差调得更小,程序可能多做很多工作。但如果输入本身只能测到小数点后一位,多算出来的十几位意味着什么?
预计用时:40 分钟。本节完成第九单元,也把第二章的计算选择连接到现实任务。
设想根据传感器读数计算物体到目标的距离。传感器有测量误差,现实过程被模型简化,计算过程又有舍入或近似误差。这几项来源不同,改善某一项不一定改善整体结果。
输入不确定性还可能被问题放大。不同来源的误差也未必独立,不能未经分析就把几个百分比直接相加。本节先做一份来源清单,确定需要进一步量化哪一项。
一种有用的决策顺序是:结果用来做什么,需要区分多小的变化,输入能否提供相应信息,算法需要保留多少精度,最后才分配计算时间与存储。
如果输出决定画面上的一个像素,允许的误差可能与显示分辨率有关;如果输出决定是否触发一项动作,阈值附近的误差就值得单独处理。
例如估计距离为 10.0±0.3 厘米,而触发阈值是 10 厘米,此时仅比较中心值可能没有充分依据。系统可以继续测量、保留不确定状态,或采用明确的决策规则。把区间压缩成一个看起来很精确的小数,会掩盖这项选择。
这为后续“给现实中的物品注入灵魂”留下接口:一个物品如何感知、判断与行动,首先取决于它如何处理不确定性,而不只是有没有接入模型或传感器。
| 选择 | 主要改变什么 | 需要核对 |
|---|---|---|
| 更小的数值格式 | 每个值的表示精度与范围 | 舍入、溢出、误差传播、硬件支持 |
| 提前停止迭代 | 算法推进到哪一步 | 停止依据、残差含义、未收敛路径 |
| 少取一部分样本 | 用哪些数据推断总体 | 抽样方式、偏差、统计不确定性 |
| 使用近似模型 | 用何种关系描述现实 | 模型适用范围与系统性偏差 |
它们可能一起使用,但需要不同的证据。一个迭代残差很小的结果,可能仍然依赖错误的现实模型;大量低精度计算也可能无法替代少量高精度关键步骤。
给“离线生成一张统计图”和“每 100 毫秒更新一次物品状态”各写一套预算。包括输出用途、输入来源、时间限制、可接受误差以及超时或不确定时怎样反馈。
提出两种解释:“精度越高,系统越好”;“在输入和用途约束下,多出的精度可能无法换来有效改善”。用 迭代现场 比较容差变化,再指出还需要什么现实输入证据,才能评价整体方案。
不要为了满足时间限制而静默把未收敛结果当作成功。可以返回当前估计与状态,由上层决定是否继续等待、使用较粗结果或暂缓动作。这与第一章区分未确认和失败的做法相互呼应。
交付一张预算表和一份停止规则。至少包含输入误差、算法容差、时间预算、成功与停滞的呈现方式,以及阈值附近的处理。
复核者应能给出一个反例,检查你的规则会怎样回应。例如输入完全不变而迭代不能再进展,是否还在盲目追加计算?若缺少输入误差数据,就明确记录尚不能作出的保证。
本章可以在“能够提出带约束的算法选择”处收束。下一篇把这些成果整理成 独立算法课堂可以接续的接口。