v表示参考轨迹,y表示实际轨迹(被控对象输出),x表示状态(当无法得到时需设计观测器)。
| 算法名 | 类名 | 输入 | 输出 | 备注 |
|---|
先进PID控制 Proportion Integral Differential | PID | v、y | u | 自带先进PID功能 |
增量式PID控制 Increment PID Control | IncrementPID | v、y | u | 自带先进PID功能 |
自抗扰控制 Active Disturbance Rejection Control | ADRC | v、y | u | 缺点:参数巨多。。。 |
基于模型进行优化控制
| 算法名 | 类名 | 输入 | 输出 | 备注 |
|---|
模型预测控制 Model Predictive Control | MPC | v_seq、x | u | 支持非线性系统 缺点:计算慢,且需要知道未来n步的v |
线性二次型调节器 Linear Quadratic Regulator | LQR | v_all、y | u | 支持线性时变系统 缺点:线性,要求能控能观,必须已知v的全部轨迹信息 |
迭代线性二次型调节器 Iterative Linear Quadratic Regulator | ILQR | | | |
模型用来产生训练数据
| 算法名 | 类名 | 输入 | 输出 | 备注 |
|---|
SAC-Auto算法控制 Soft Actor Critic Control | SAC | v、y | u | 连续控制 |
DQN算法控制 Deep Q Network Control | DQN | v、y | u | 离散控制,需将控制量进行编码 |
QMIX算法控制 QMIX Control | QMIX | v、y | u | 多维离散控制,将每个维度的控制量看成一个强化学习智能体 |
模型用来评估搜索解的好坏
| 算法名 | 类名 | 输入 | 输出 | 备注 |
|---|
智能搜索算法控制 AI Search Control | PSO等小动物算法 | v_seq、x | u | 原理类似MPC,直接搜索u_seq,u_seq带入模型评估搜索结果,利用启发算法优化,执行u_seq[0],下一时刻重新搜索 缺点:速度慢 |
| 算法名 | 类名 | 输入 | 输出 | 备注 |
|---|
模糊PID控制 Fuzzy PID Control | FuzzyPID | v、y | u | 模糊规则给PID调参 |
用于跟踪控制或反馈控制,即y信号(真实状态/观测)跟踪v信号(理想状态/观测),控制器输入v(或v_seq)和y(或x),输出控制量u

| 输入 | 定义 | 向量情况(ndarray) | 标量情况(ndarray/float) |
|---|
| v | 参考轨迹点 | shape = (dim, ) | shape = (1, ) / float |
| v_seq | 参考轨迹片段 | shape = (n, dim, ) | shape = (n, ) |
| v_all | 参考轨迹 | shape = (t, dim, ) | shape = (t, ) |
| y | 反馈信号 系统输出 | shape = (dim, ) | shape = (1, ) / float |
| x | 系统状态 | shape = (dim_x, ) | shape = (1, ) / float |
u为形状为(dim_u, )的向量(一维ndarray),无论v、y是否为标量,输出u都是向量,即使dim_u=1时也不输出float
对于无模型的PID/ADRC控制器:dim==dim_u,对于基于模型的MPC/LQR/AI控制器:dim不一定等于dim_u
超参为(dim, )或(dim_u, )的向量(设置成一维list或ndarray),array长度取决于公式是与v、y相乘的array还是与u相乘的array
超参设置成float时,将自动广播成(dim, )或(dim_u, )的向量
对于MPC/LQR控制器,超参为Qf、Q、R矩阵(设置成二维list或ndarray)
importnumpyasnpfromctrlimportPID# 设置控制器dim=2# 信号维度cfg=PID.getConfig()(dt=0.1,dim=dim,Kp=[5,6],Ki=0.1,Kd=1)# 调参pid=PID(cfg)# 实例化控制器# 生成输入信号t_list=np.arange(0.0,10.0,dt=cfg.dt)v_list=np.ones((len(t_list),dim))# 需要跟踪的信号 v: (dim, )# 被控对象defPlantModel(y,u,dt=cfg.dt): ...returny# y: (dim, ), u: (dim, )# 仿真y=np.zeros(2)# 被控信号初值 (dim, )forvinv_list:u=pid(v,y)# 调用控制器y=PlantModel(y,u)# 更新被控信号pid.show()# 绘图输出
参数忘了。。。


两组对比图参数分别为Kp=5,Ki=0,Kd=0.2和Kp=5,Ki=0,Kd=0.1








python >= 3.9
numpy >= 1.22.3
matplotlib >= 3.5.1
scipy >= 1.7.3
scikit-fuzzy >= 0.4.2
可选:
pytorch >= 1.10.2