继电(开关)控制
继电控制是操控一个系统最简单的办法:没有旋钮,只有一个开关。控制器只看误差——我们是低于目标,还是高于目标?——然后用两种极端中的一种来回应:要么全开,要么全关;要么使劲推,要么完全不推;要么加热,要么不加热。中间没有“一点点”这种档位。它的名字(“bang-bang”,啪、啪)正来自这种非此即彼、来回猛撞的动作:往这边一啪,往那边又一啪。
家里的恒温器就是最日常的例子。当房间温度跌到设定值以下,加热器就完全打开;当房间温度升到设定值以上,加热器就彻底关闭。由于真实的加热器不可能瞬间响应,温度在开关切换之前总会越过那条线一点点,于是房间实际上是绕着你设定的温度上下轻轻漂移,呈现出一条平缓的锯齿状波形,而不是纹丝不动地停住。为了避免温度恰好停在那条线上时开关飞快地“咔嗒咔嗒”反复跳动,设计者会加上一个小小的死区:比如要等房间冷过一度才启动加热,热过一度才关闭。
继电控制的魅力在于:它极其便宜、极其简单,而且出奇地难以弄坏——单单一个继电器或一只晶体管就能运行它,完全不需要对增益做精细的整定。代价是它永远无法精确停在目标上,只能在目标周围不停地来回追逐,而且不停地猛撞切换会磨损硬件。所以它在“晃一点也无所谓”的场合大放异彩——冰箱、热水器、简单的水泵;而一旦你需要稳定、精确地保持住某个值,它就该让位给 PID 这类更平顺的方案了。
一台简单的循线机器人只读取一个传感器:如果它发现线偏向左边,就猛打右舵;如果线偏向右边,就猛打左舵。它从不轻柔地转向——它永远只往一边或另一边猛地一打,于是沿着线一路曲折地蛇行前进。
只有两个极端、没有中间档:机器人确实在循线,但走的是参差的蛇形折线,而不是平滑的曲线。
尽管听起来很粗糙,但对某些问题,继电控制在数学上可以被证明是最快的策略——如果你唯一的目标是用最短时间到达目标、并且推力有一个硬性上限,那么先全力开、再全力关,恰恰就是最优解。