卷 V · 看不见的东西CH 18深度 18/24

不等错误发生

反馈有一个无法回避的结构性缺陷:它必须先看见误差才能动手。所以每一次扰动都必然先打进来一个坑,然后才被填上。前馈绕开了这件事——但它要付的钱,正好是第 2 章说过开环要付的那笔。这一章讲怎么让两者各出各的力。

前馈 + 反馈不需要准,只需要方向对什么时候值得

▷ 先拧一下

一个整定良好的 PI 环,面对一个突然的扰动,峰值偏差是 0.1286(目标是 1.0)。

现在加上前馈:直接测量那个扰动,按模型算出需要多少补偿,不等误差出现就打进去

问:如果你的前馈模型只有 50% 准(补偿量只算对了一半),配上原来那个反馈,峰值偏差会变成多少?

A 还是 0.1286 左右。模型错一半等于白做 B 大约 0.09——只有一半的效果,聊胜于无 C 大约 0.064——正好压掉一半 D 反而更糟。错误的前馈会和反馈打架

反馈的那道结构性伤口

先把问题说清楚。反馈环的工作流程是:

   扰动来了 ──▶ 输出开始偏 ──▶ 传感器看见 ──▶ 控制器算 ──▶ 执行器动
                    └────────────┬────────────┘
                  在这段时间里,误差在不受控地长大
                  而这段时间**不可能为零**

这不是「反馈不够好」,这是反馈的定义决定的:它是一个基于误差工作的机制,所以它需要误差存在。「零误差控制」和「纯反馈」在逻辑上互斥。

而前馈的思路很直接:既然扰动是可以测量的,为什么要等它变成误差?

# 反馈:等它变成误差再修
              ┌──────────── 扰动 d
              ▼
  目标 ─▶ ⊕ ─▶ [控制器] ─▶ [对象] ─┬─▶ 输出
          ▲(−)                      │
          └──────── 测量 ◀──────────┘

# 前馈:直接从扰动那里抄近路,赶在它生效之前抵消掉
              ┌──── 扰动 d ────┐
              ▼                 ▼
         [前馈模型]            (对象)
              │                 │
  目标 ─▶ ⊕ ─▶ [控制器] ─▶ ⊕ ─▶ [对象] ─┬─▶ 输出
          ▲(−)                            │
          └────────── 测量 ◀──────────────┘

★ 前馈那条路上**没有传感器反馈**,所以它不受第 11 章那条延迟律的约束,
  也不会引起振荡 —— 它压根不是个环。
★ 代价:它的准确度完全等于你那个模型的准确度(第 2 章讲过的账)。

四种组合

做法扰动后的峰值偏差说明
什么都不做0.5000扰动原样打进来
只用反馈0.1286压掉 74%,但必须先挨一下
只用前馈(模型准)0.0183比反馈好得多,但没人兜底
两个都用0.0003比纯反馈好 400 多倍

而模型不准时的情况才是重点:

前馈模型准确度只用前馈前馈 + 反馈比纯反馈少
100%0.01830.000399.8%
90%0.05000.013089.9%
80%0.10000.025979.9%
50%0.25000.064449.9%
20%0.40000.102920.0%
0%0.50000.12860.0%
◆ 这一章的主线

看最后一列:前馈的收益和它的准确度是线性的,而且没有下限惩罚。模型准 80%,就少 79.9% 的偏差;准 50%,就少 49.9%;准 0%(等于没做),就少 0% ——它退化成纯反馈,一分钱也不多亏。

再看中间那一列(只用前馈):模型准 100% 时它 0.0183,比纯反馈还好;模型准 80% 时就掉到 0.1000,和纯反馈差不多;准 50% 时 0.2500,比纯反馈差一倍

两列对照,结论非常干净:前馈单干很脆,前馈配上反馈就变得很皮实。反馈在这个组合里的角色不是主力,是兜底——它负责收拾前馈没算对的那部分,而前馈算错多少,它就收拾多少。

所以那句可以带走的话是:前馈不需要准,只需要方向对。只要它把扰动的大部分削掉,剩下的交给反馈;而它就算完全失灵,你也不过是退回到没有它的状态。

什么时候值得做前馈

前馈不是白拿的。它需要三个条件,缺一不可:

  1. 那个扰动必须可测,而且要测得比它生效更早。这一条最常卡住:很多扰动你只有在它已经影响输出之后才知道——那样前馈就毫无意义了。
  2. 你得有一个模型,知道「这么大的扰动,需要多少补偿」。而这个模型可以很粗糙(见上表)。
  3. 补偿通道得比扰动通道快,至少不能慢太多。如果扰动 1 秒就影响输出,而你的补偿要 5 秒才生效,那前馈只是把一个坑变成一前一后两个坑。

条件 1 是关键的筛子。一个实用的判断法:问「这件事有没有一个先行指标」

  • 炉子的进料量——可测,而且在它影响炉温之前就知道。做前馈。
  • 室外温度对空调负荷的影响——可测,天气预报还能给你几小时的提前量。做前馈。
  • 电商的流量——大促时间是你自己定的,这是最强的前馈信号。预扩容就是前馈。
  • 某台机器突然坏了——不可预测。只能靠反馈。

目标值前馈:一个几乎白拿的版本

还有一类前馈特别便宜,值得单独说:对「目标」做前馈

当你把目标从 20 改成 25 时,你知道大致需要多大的控制量(u ≈ r/K)。与其让反馈从零开始一点点顶上去,不如直接把这个值加进去,让反馈只负责修剩下的那点差。

   u = Kp·e + Ki·∫e dt + Kd·(de/dt)  +  r / K
                                          └──┬──┘
                                    目标值前馈(也叫「基准输出」)

# 好处:目标一变,控制量立刻跳到大致正确的位置,
#      反馈只需要修那个「大致」和「精确」之间的差。
# 代价:需要知道 K —— 而这是最容易辨识的一个参数。

★ 这一招在工业上叫「bias」或者「baseline」,
  在机器人里叫「重力补偿」(先算出举住这个姿势需要多大力矩,
  再让反馈修剩下的),在扩容里叫「按历史曲线预扩容」。
  形式不同,是同一件事。

顺带一提:第 2 章那个「开环」,其实就是只有目标值前馈、没有反馈的极端情况。所以这一整章可以看成第 2 章的正面回答:开环和闭环不是二选一,把它们叠起来才是标准答案。

▸ 在现实里

大促预扩容。零点开抢的流量是完全可预测的,所以没有任何理由等 CPU 涨上去再扩容。提前十分钟把机器开好,反馈环只负责应对「比预测多出来的那部分」。这是教科书级的前馈 + 反馈。而只靠自动扩容硬抗零点的团队,等于放弃了免费的信息。

汽车的变速箱降挡。好的自动变速箱会在你踩下油门的那一刻就降挡,而不是等车速掉下来。油门位置是驾驶员意图的先行指标——这是前馈。而更进一步的做法会读导航数据,在上坡前就提前降挡。

Smith 预估器。第 11 章提到过的那个专治延迟的结构,本质上是一种基于模型的前馈:控制器内部跑一个没有延迟的对象仿真,对着它做反馈,再用真实测量修正。它的脾气和本章这张表完全一致——模型准的时候效果惊人,模型错的时候比普通 PID 更糟。

你自己的日程。「等我觉得累了再休息」是纯反馈(而且传感器很慢)。「知道下周有个大项目,这周提前把小事清掉」是前馈。后者不需要你准确预测下周有多忙,只需要方向对。

✗ 这个直觉是错的
前馈需要一个准确的模型,而我的系统建不出准确的模型,所以前馈不适合我。 上面那张表说明:前馈的收益和准确度成正比,而且没有惩罚区。一个只有 50% 准的粗糙模型,配上反馈仍然能把峰值偏差压掉一半。

这个直觉的错误在于它把前馈当成了替代反馈的东西——如果它要替代反馈,那它确实必须很准(因为没人兜底了)。但在「前馈 + 反馈」的组合里,前馈只是先削掉一大块,它出的错会被反馈原样接住。

所以正确的问法不是「我的模型够准吗」,而是:

  1. 这个扰动我提前知道吗?(这才是真正的门槛)
  2. 我能不能给出一个方向正确、数量级正确的补偿?(不需要精确,一个查表、一条经验公式、一个线性拟合都够)

两个「是」,就该做前馈。而如果你担心模型错了会闯祸,那张表已经回答了:模型准确度为 0 时,收益也是 0,但不是负数——它退化成纯反馈。(前提是反馈还在。千万别为了做前馈而关掉反馈,那就变成第 2 章那个 68.7% 的故事了。)

◈ 回读

C约 0.064——正好压掉一半(精确值 0.0644,比纯反馈的 0.1286 少 49.9%)。

前馈的收益和准确度是线性的:准 80% 就少 79.9%,准 50% 就少 49.9%,准 0% 就少 0.0%。而且注意最后这一条——模型完全没用时,它不会把事情变得更糟,只是退化成纯反馈。

A 「模型错一半等于白做」——这是把前馈当成了「要么全对要么全错」的东西。而它做的是削减,削掉多少算多少。这也是为什么工程上常说「有个粗糙的前馈总比没有强」。 B 「大约 0.09」——方向对,但这个估计把「一半的效果」理解成了「从 0.1286 往 0.0003 走一半」。而实际的线性关系是在削减量上:削减量 = 准确度 × 全部可削减的量。所以准 50% 时剩下的是 0.1286 的一半。 D 「前馈会和反馈打架」——它们不会打架,因为它们在环里的位置不同:前馈是在控制量上的一项,不进入反馈回路,所以它完全不影响稳定性(这一点值得单独记住)。前馈算多了,反馈就往回收一点;算少了,反馈就多补一点。它们是叠加关系,不是竞争关系。

这一章的一句话

反馈必须先挨一下才能还手,而前馈可以先挡一下——它不需要挡得准,因为后面还站着反馈。

下一章处理一个更深的问题:如果你想控制的那个量根本测不到怎么办?比如你想控速度,但只有位置传感器。答案是用模型把它出来——而更妙的是,同样的思路能让你把「一个不太准的模型」和「一个不太准的测量」合成一个比两者都准的估计。那个合成后的不确定度是 0.8944,而两个输入里更准的那个是 1.0