自适应控制 = 控制器自己学习参数
一、控制论本质
自适应控制:当被控对象 G(s) 的参数未知或在变化时,控制器在线辨识 G(s) 并自动调整控制律。
┌─────────────────────────────┐
│ 自适应控制器 │
r(t) ──→ │ ┌─────────┐ ┌─────────┐ │ ──→ u(t) ──→ G(s, θ) ──→ y(t)
│ │ 辨识器 │ → │ 控制器 │ │ ↑
│ │ 估 θ̂(t)│ │ C(s,θ̂) │ │ │
│ └─────────┘ └─────────┘ │ │
│ ↑ │ │
│ └──── y(t) 反馈 ───────┼──────────────────┘
└─────────────────────────────┘关键属性:
- 双环结构:内环是普通反馈,外环是参数自适应
- 辨识器估计 G(s) 的参数 θ̂(t)
- 控制器根据 θ̂(t) 调整自身参数
- 系统主动适应环境变化
两种自适应:
自镇定(Self-Oscillation / Adaptive Stabilization):
- 目标:系统在参数变化下保持稳定
- 方法:在线调整控制律维持稳定性
自最优(Self-Optimal / Model Reference Adaptive):
- 目标:跟踪参考模型的行为
- 方法:调整参数使系统行为逼近参考二、钱学森原话
钱学森 Ch 18 引言: "自适应控制系统是这样一种系统: 它能在被控对象参数发生较大范围变化的情况下, 自动地调整控制律的参数, 使系统仍能满足设计要求。"
钱学森 Ch 18: "自适应控制系统的设计必须解决两个问题: (1)在线辨识被控对象的参数; (2)在线调整控制律。 这两个问题都是困难的,但也是工程上迫切需要的。"
三、软件工程对位
| 自适应控制场景 | 软件工程实例 |
|---|---|
| 自适应限流 | 阈值根据历史 QPS 自动调整 |
| K8s HPA | 副本数根据实际负载自动调整 |
| 机器学习 | 模型参数根据数据自动更新(=最典型的自适应) |
| A/B 测试自动调参 | 根据转化率自动调整流量分配 |
| 自动数据库调优 | 缓冲池大小根据查询模式自动调整 |
| CDN 智能调度 | 调度策略根据实时延迟自动调整 |
| 自适应缓存 TTL | TTL 根据访问模式自动调整 |
| 自动扩缩容 | 资源根据流量自动伸缩 |
共同特征:
- 业务环境在变化
- 固定参数的最优解不再是"最优"
- 需要在线学习和自动调整
四、调用的 L 层方法论
| 方法论 | 在自适应中的角色 |
|---|---|
| self-stabilizing-adaptive(自镇定与自适应) | 自适应的具体实现 |
| dynamic-programming(动态规划) | 在线最优决策 |
| extremum-seeking(自寻最优) | 无模型在线寻优 |
| optimal-control(最优控制) | 离线最优的理论基础 |
五、实战案例
案例 1:自适应限流
普通限流:阈值 = 10000(固定)
问题:业务增长,10000 已不够
问题:流量低峰,10000 浪费
自适应限流:
阈值(t) = base + α · error_rate(t) + β · p99(t)
在线调整:
- 错误率高 → 阈值降
- P99 高 → 阈值降
- 资源空闲 → 阈值升
实现:滑动窗口 + 反馈调节案例 2:K8s HPA
目标:CPU = 70%
当前:CPU = 30%(低负载)
传统(固定规则):
if CPU > 70%: scale_up
if CPU < 30%: scale_down
问题:阈值固定,无法适应业务变化
自适应:
desired_replicas = ceil(current_replicas · target_util / current_util)
+ 平滑(避免震荡)
+ 滞回(避免边界抖动)
+ 预测(提前扩容)案例 3:机器学习模型在线学习
传统 ML:
训练(离线)→ 部署(固定)→ 推理
问题:数据分布变化(drift)→ 模型失效
自适应 ML(在线学习):
训练(在线)→ 部署(持续)→ 推理
↑__________________↓
新数据持续训练
对应到控制论:
- 辨识器 = 训练任务
- 控制器 = 推理模型
- 自适应 = 持续训练六、自适应的工程挑战
挑战 1:辨识的精度
参数估计需要:
- 持续激励(输入信号足够丰富)
- 足够数据
- 计算资源
软件对位:
- 流量必须持续有变化
- 历史数据足够
- 计算资源(在线训练)挑战 2:稳定性的证明
理论难点:
- 辨识器和控制器互相影响
- 整体稳定性难以证明
工程实践:
- 慢自适应(慢调整)
- 加投影(限制参数范围)
- 加死区(小变化不调整)挑战 3:辨识与控制的时间常数
辨识要快于参数变化
控制要快于系统响应
软件对位:
- 模型更新频率 > 业务变化频率
- 控制频率 > 业务响应频率七、设计原则
原则 1:慢自适应
调整步长:α ∈ (0, 0.1) ← 一次只调一点
避免:α = 0.5+ ← 容易震荡
软件对位:渐进式发布 + 灰度原则 2:加约束
参数投影:θ ∈ [θ_min, θ_max]
死区:|ΔJ| < δ 不调整
软件对位:限流上下界 + 阈值滞回原则 3:可观测
必须能测量被控对象的状态
否则无法在线辨识
软件对位:业务可观测性建设八、反模式
| 反模式 | 症状 | 应该改用 |
|---|---|---|
| 快自适应 | 系统震荡 | 慢自适应 + 死区 |
| 无约束自适应 | 参数发散 | 加投影 + 边界 |
| 无可观测性 | 自适应无依据 | 先建可观测性 |
| 冷启动自适应 | 初始数据不足 | 退化为固定参数 |
九、何时升级到其他结构
升级到协调控制:
- 单点自适应不够
- 多子系统协调
降级到固定参数控制:
- 业务环境稳定
- 自适应成本太高
十、控制结构对位(供业务主题引用)
本结构被调用:
themes/architecture-evolution:ML 平台 = 自适应themes/system-stability:自适应限流 = 自适应
本结构调用:
self-stabilizing-adaptive:自镇定理论dynamic-programming:在线最优extremism-seeking:无模型寻优optimal-control:离线最优理论
总结
自适应控制 = 让系统自己学习。当业务场景是:
- 环境在持续变化
- 固定参数会失效
- 有可观测性和计算资源
用自适应:现代系统的"自学习"能力。
关键:
- 慢自适应(避免震荡)
- 加约束(避免发散)
- 可观测(自适应有依据)
- 接受成本(在线学习的代价)