一个环里有五个零件
把那个圈拆开,你会发现它由五样东西串成:目标、比较、控制器、对象、传感器。这一章逐个介绍它们,并且把整本书里最容易混淆的一对概念分清楚——惯性和延迟。它们听起来都叫「慢」,但一个只是让你等,另一个会让你做错事。
一台加热设备,从冷到热需要一段时间才能「爬上去」。有两种可能的原因:
甲:你一开阀门,温度立刻开始爬,但爬得慢,大约 10 秒后爬到位。(这叫惯性。)
乙:你一开阀门,整整 10 秒什么都不发生,然后温度「唰」地一下瞬间到位。(这叫纯延迟。)
两台设备的「从动手到到位」都是 10 秒。现在给它们各配一个一模一样的比例控制器,力气开到中等(回路增益 4)。
这一题是整本书的分水岭。如果你现在觉得「不就是慢一点吗」,那你和大多数人一样——包括很多写了十年调度代码的人。
五个零件
任何一个反馈环,不管它控的是温度、车速、机器数量还是库存,都由这五样东西串成:
逐个说清楚,因为这五个词后面二十一章都要用。
① 目标(setpoint / reference)
你想要的那个值。全书用 r 表示,图上永远画成蓝色虚线。
它是这个环里唯一一个你能直接设定的东西。请把这句话读两遍。你不能设定温度,你只能设定「你希望的温度」;温度是环长出来的。这个区分在人身上尤其重要——管理者设 KPI,设的是目标;行为是环长出来的,而且经常长得出人意料(第 23 章)。
② 比较(comparator)
目标减去实测,得到误差 e = r − y。整个环里只有这一个减法,但全部戏剧都从它来。
它的符号是负的——所以这套东西叫「负反馈」。如果哪天有人把这个符号接反了(或者传感器方向装反了),那就是正反馈,系统会以指数速度冲向某一头。这类事故在现实中不算罕见,而且现象非常好认:一上电就一路飞到底,中间毫不犹豫。
③ 控制器(controller)
把误差翻译成动作。它的输出叫控制量 u——阀门开度、油门大小、要开几台机器。
卷 II 讲的三个旋钮全在这个盒子里。这是你写的代码,也是这五个零件里唯一你能随便改的一个。
④ 对象(plant / process)
你要控制的那个东西:炉子、电机、服务器集群、一条供应链。全书用「对象」这个词,它是控制论从工业界继承来的老词(plant 本义是「工厂设备」)。
关于对象只有一句话要记住:你控制不了它,你只能推它。它有自己的惯性、自己的延迟、自己的饱和上限、自己的非线性。而你的控制器好不好,几乎完全取决于你对它的了解——这就是为什么第 24 章的自查表里,前两项问的都是对象,不是控制器。
⑤ 传感器(sensor)
环唯一的眼睛。它把实际值 y 变成一个读数,送回比较器。
这里有一句本书会重复很多次的话:你看到的从来不是现在,是过去。热电偶有热惯性,监控指标有聚合窗口,财报有季度,人的自我认知有更长的滞后。卷 V 整卷都在讲这只眼睛。
五个零件里,只有 ①②③ 是你写的代码。④ 是物理世界给你的,⑤ 是你买来或凑合用的。
而我的经验是:当一个反馈环表现糟糕,多数时候问题不在 ③。改控制器是最容易的动作,所以人们总是先改它——就像丢了钥匙的人总在路灯下找。真正的杠杆常常在 ④ 和 ⑤:缩短延迟、换个更快的传感器、把扰动挡在环外,一次顶得上十次调参。
惯性和延迟:两种不同的「慢」
现在处理本章开头那道题。这是全书最重要的一个区分,值得单独一节。
惯性(lag,也叫时间常数 τ):你一动手,结果立刻开始变化,只是变得慢,像一条趋于平缓的指数曲线。数学上是 1 − e^(−t/τ)。一个时间常数之后,它走完全程的 63.2%。
延迟(dead time,纯延迟,记作 L):你一动手,什么都不发生,一秒不差地过了 L 之后,效果才原封不动地出现。
# 同样是「10 秒到位」,两条完全不同的曲线
惯性 τ=10s(甲) 纯延迟 L=10s(乙)
1 │ ╭───── 1 │ ┌──────
│ ╱ │ │
│ ╱ │ │
0 │╱ 0 │░░░░░░░░░░┘
└──────────────→ t └──────────────→ t
一动手就开始变 前 10 秒一动不动
# 开环看:两者「都要 10 秒」,谁也不比谁好。
# 闭环看:天壤之别。
# 惯性期间你能看见事情在变 —— 你知道自己的动作生效了。
# 延迟期间你什么反馈都没有 —— 你只会以为「还不够,再加点」。
关键差别就在最后那两行。惯性期间,环是有信息的:你拧了阀门,温度开始爬,你看得见「在变了」,于是你会收手。延迟期间,环是瞎的:你拧了阀门,读数纹丝不动,于是你合理地推断「力度不够」,再加一把。等真相到来时,它带着你加的那几把一起来了。
所以本章开头那题的答案是 D,而且差距大得吓人。同样的控制器(回路增益 4):
- 甲(纯惯性):曲线单调爬升到终点,一次都没有越过它最后停的地方。你把增益从 0.4 加到 4——十倍——它照样一次都不越过。
- 乙(含纯延迟 2 秒的同一台设备):越过终点 41 次才安静下来,最大冲过头 91.7%。
下一章那个 demo 会让你亲手把这几个开关拨一遍。这里先给出结论,因为它是卷 I 到卷 III 的桥:
单纯的惯性不会让环振荡。一个只有一级惯性的对象,配纯比例控制,无论增益多大都稳定——数学上,闭环特征方程只有一个根,而它永远在左半平面(第 13 章会把这句话变成一行算式)。
会让环振荡的是「相位滞后」积累到 180°,而单级惯性最多只能贡献 90°,怎么也不够。要凑够 180°,你需要:两级以上的惯性,或者一点点纯延迟——纯延迟的相位滞后没有上限,频率越高它给得越多。第 10 章会把这句话讲透。
为什么「对象」这个词值得学
初学时最容易犯的错,是把整个系统看成一个整体:「我的服务不稳定」「我们团队执行力差」。而控制论的第一个动作永远是切开:哪部分是我能改的规则(控制器),哪部分是我只能推的世界(对象),中间隔着什么(执行器、延迟),我怎么知道现在的状态(传感器)。
切开之后,一堆看起来无解的问题会突然变得有解,因为你会发现你一直在拧的那个旋钮,根本不在关键路径上。
举个具体的:一个团队的迭代总是「一会儿冲太猛一会儿又刹住」。人们通常改的是 ③(换个项目管理方法)。而控制论的问法是:这个环的传感器是什么?延迟多长?如果你判断进展的唯一依据是双周会,那这个环的采样周期是 14 天、延迟至少 7 天。在这样的延迟下,任何一个反应灵敏的管理动作都必然引起震荡——这不是方法论问题,是算术问题。第 11 章会给出可用力气的上限公式。
淋浴的两段。你家的热水延迟由两段组成:热水器点火到出热水(惯性 + 延迟),和水从管子走到花洒(纯延迟)。装了循环泵的房子,第二段几乎为零——这就是为什么那种房子的水温特别好调。那笔钱买的不是「热水快」,是「环的延迟短」。
监控告警。一分钟粒度的指标 + 五分钟的告警窗口 + 人看到消息的时间,加起来是这个环的传感器延迟。这就是为什么「人肉扩容」在流量突发时几乎总是过量:等你看到,事情已经过去几分钟了,而你的动作是基于那几分钟前的读数做的。
货币政策。央行调利率,传导到通胀数据要几个季度;而通胀数据本身还有一两个月的发布滞后。这是一个延迟以「季度」计的环——所以央行的行为准则里有大量「小步慢走」「前瞻指引」的内容。那不是保守,那是这个环的延迟决定的力气上限。
这一条是本书最有实用价值的一句话之一。有一类问题,无论你把控制器换成什么,都存在一个无法突破的性能上限,而这个上限由 ④ 和 ⑤ 决定:延迟多长、传感器多快、执行器多大。
怎么判断你是不是撞上了这堵墙?第 24 章的自查表第一项就是:算一下 L/τ(延迟除以惯性)。这个比值大于 1,说明延迟主导——此时任何整定都只是在几个都不好的选项里挑一个,你该去做的是缩短延迟:换传感器、加中间反馈点、缩短反馈周期。
反过来也成立:如果 L/τ 很小而你的环还是很糟,那问题确实在控制器上,好好整定能拿到大回报。这个判据能省下大量白费的功夫。
D甲(纯惯性)配那个控制器,一次也没有越过它最后停的位置;乙(同样的对象,但加了纯延迟)越过 41 次才停,最大幅度 91.7%。
两台设备的「从动手到到位」时间相同,闭环行为却是一个不晃、一个几乎失控。「多久到位」这个指标,完全没有抓住重点。
A 「差不多,反正都是 10 秒到位」——这是把开环的度量搬到闭环上。开环只关心「多久到位」,闭环关心的是「我动手之后多久能看到证据」。这两个数在惯性系统里几乎一样,在延迟系统里差得没边。 B 「甲更麻烦,它一直在变」——恰恰相反。「一直在变」是好消息:它意味着环随时都在收到反馈。真正可怕的是读数一动不动,因为那时候你只能靠猜。 C 「乙更麻烦,但也就是晃两下」——方向对了,量级没到。「晃两下」和「晃四十下」不是程度差别;再多一点延迟(或一点增益),它就会变成「永远不停」,而那是一个性质上不同的结局。第 9 章会让你亲手拖到那条线上。这一章的一句话
先把环切成五块,再决定改哪一块——因为最容易改的那一块,通常不是问题所在。
下一章把「什么情况下它会晃」变成一张八行的真值表。三个开关:力气大不大、有没有第二级惯性、有没有纯延迟。八种组合里有四种会晃,四种不会——而最反直觉的一行是:力气从 0.4 加到 4(十倍),一次也没越过。