ELAI S.r.l.

数据都到了,AI 却仍根据过去做决定?

数据都到了,AI 却仍根据过去做决定? 通过完整算例解释方法、假设与局限。

数据都到了,AI 却仍根据过去做决定?

数据到了,却描述遥远的过去

AI 根据湿度测量判断温室当前状态。服务不丢消息、按顺序全部处理,但历史积压快于处理,决策仍会越来越陈旧。完成消息数不衡量新鲜度。本文用可逐事件核查的确定性轨迹研究信息年龄。

三个不相同的时间

每次测量有生成时间 g 与交付时间 d,系统时间为 d−g。观察时刻 t,令 u(t) 为已交付最新测量的生成时间,年龄 Δ(t)=t−u(t)。统一理想时钟、秒为单位,无漂移或额外网络延迟。交付一个已旧三秒的数据,年龄降到三而非零。

u(t) = max { g_i : d_i ≤ t }; Δ(t) = t − u(t)

定义需要已交付更新或明确初态。为避免虚构新鲜度,只在两策略均首交付的 t=3 到 t=15 求平均。若包乱序,取生成时间最大值可避免旧包使 u(t) 倒退。

同一服务器,两种队列策略

在 0、1、…、9 秒生成十次测量,每次处理恰三秒。FIFO 即先进先出,全部保留,在 3、6、…、30 秒交付生成于 0、1、…、9 的数据,无并行或抢占。t=15 刚交付 g=4,年龄十一秒。服务器持续忙碌,却描述越来越旧的时刻。

第二策略只保留最新等待项,不打断在服务项。约定同一时刻先让新到达可用再选下一项,因此处理 g=0、3、6、9,在 3、6、9、12 秒交付,另六项等待时被替换。t=15 最新 g=9,年龄六秒。代价是放弃完整性,并非免费改善。

计算平均时不能抹掉跳变

时间平均为 Δ(t) 下方面积除观测时长。交付间 u 不变,年龄以斜率一增加,[a, b) 积分为 (b²−a²)/2−u(b−a)。代码逐事件精确积分,不是只平均交付时年龄,后者回答另一问题;图点平均也只是近似。

mean_age_[3,15] = (1/12) ∫_(3..15) [t−u(t)] dt

FIFO 四段面积为 13.5、19.5、25.5、31.5 平方秒,总 90,除十二秒得 7.5 秒。最新等待策略四段均 13.5,总 54,平均 4.5 秒。恰 t=15 的跳变改变瞬时年龄,却不改变积分,单点时长为零,因此平均差与终点差不必相同。

策略3–15 s 平均年龄15 s 时年龄
17.511
24.56
关注年龄而非消息数:交付更新最新测量时间。确定性轨迹,平均值在跳变间精确积分。
关注年龄而非消息数:交付更新最新测量时间。确定性轨迹,平均值在跳变间精确积分。

什么时候丢弃更新反而错误

状态测量可能被更新替代,但记账事件或单次报警可能不可替代。要求完整历史时,即使平均年龄改善也不能丢弃。本例到达在九秒停止,两策略最终年龄都会增长,策略不能创造新测量。未证明网络、随机负载或多传感器下最优。

Yates 等 2021 年综述第二节提供指标和分析基础,本文未复现其中基准,只执行确定性 Python 轨迹。真实部署须对齐时钟、定义来源并测损失、错误及决策后果。新鲜不等于准确,新测量也可错误。并非 EL-AI 安装测试。

全部处理仍可能根据旧数据决策。队列设计须分别规定历史完整性与状态新鲜度,同时测量,才能看清交付率掩盖的权衡。

Yates et al. (2021) — Age of Information, Section II.

import json,sys
from pathlib import Path
arrivals=list(range(10));service=3
fifo=[dict(generated=g,delivered=3*(g+1)) for g in arrivals]
# Arrivals at completion time are eligible before selecting the next job.
latest=[dict(generated=g,delivered=g+3) for g in [0,3,6,9]]
def age(events,t):return t-max(e['generated'] for e in events if e['delivered']<=t)
def mean_age(events,a=3,b=15):
 points=sorted({a,b}|{e['delivered'] for e in events if a<e['delivered']<b});total=0
 for x,y in zip(points,points[1:]):
  u=max(e['generated'] for e in events if e['delivered']<=x);total+=(y*y-x*x)/2-u*(y-x)
 return total/(b-a)
times=[3+i/20 for i in range(241)]
r=dict(python=sys.version.split()[0],seed=None,scope='Deterministic finite queue simulation, no network or sensor measurements',arrivalSeconds=arrivals,serviceSeconds=service,tieRule='Arrival at t is available when service completing at t selects next waiting update',FIFO=fifo,latestWaiting=latest,times=times,fifoAge=[age(fifo,t) for t in times],latestAge=[age(latest,t) for t in times],fifoMean=mean_age(fifo),latestMean=mean_age(latest),fifoAt15=age(fifo,15),latestAt15=age(latest,15))
assert r['fifoMean']==7.5 and r['latestMean']==4.5 and r['fifoAt15']==11 and r['latestAt15']==6
Path(__file__).with_name('results.json').write_text(json.dumps(r,indent=2),encoding='utf8')

代码、数据与说明 · JSON. 教学计算使用 Python 3.14.0,图使用 Matplotlib 3.11.2。分析由 AI 辅助,不声称经过同行评审或人工审核。原创 ImageGen 封面仅作示意,不记录 EL-AI 人员、场所或实际安装。来源查阅于 2026 年 10 月 25 日。