控制算法通常应用在各种复杂的非线性系统中,如机器人导航,无人驾驶等。在机器学习中,我们也可以使用PID可以应用于调整神经网络的学习率,以保证在训练过程中收敛的速度和效果。也可以应用于大数据流的负载平衡,通过控制任务的分配来优化系统性能;预测维护大型数据库的性能,通过预测未来的数据负载并提前做出调整,可以避免系统过载,还可以应用于机器学习中的强化学习问题,作为智能体决策的一部分。
PID(比例-积分-微分)和MPC(模型预测控制)是两种常见的控制算法。在机器学习和大数据场景中,这两种方法可以被用来优化系统性能,进行预测,以及作为决策支持工具。
- PID控制:这是一种简单而有效的控制策略,其核心思想是通过误差的比例、积分和微分来调节控制输入。在机器学习和大数据场景中,PID控制器可以应用于一些需要实时调整和优化的任务。
- MPC控制:这是一种基于模型的优化方法,通过预测未来的系统状态来计算控制输入。
PID控制器的基本原理
PID控制器的名字来源于其三个主要的组成部分:比例(Proportional, P)、积分(Integral, I)、微分(Differential, D)。每个组成部分对于控制器的行为有特定的影响:
假设
e(t)
是时刻 t
的偏差,u(t)
是时刻 t
的控制信号输出,Kp
,Ki
和 Kd
分别是比例、积分和微分的增益系数,PID 控制器的数学描述可以表达为:
u(t) = Kp * e(t) + Ki * ∫ e(t) dt + Kd * d/dt[ e(t) ]
其中:
-
Kp * e(t)
是比例项,它是现时刻的偏差。这个值与误差成正比。 -
Ki * ∫ e(t) dt
是积分项,它是过去所有偏差的积分。这个项的作用是消除静态偏差,使系统的稳态误差趋于零。 -
Kd * d/dt[ e(t) ]
是微分项,它是偏差的变化率。这个项预测偏差的未来走势,减少超调和周期性波动以加快系统的响应速度。
具体应用
我们尝试写一个简单的PID控制器,来观察三项对控制系统的影响。
import matplotlib.pyplot as plt
import time
def run_pid(Kp, Ki, Kd, title):
pid = PID(Kp, Ki, Kd)
pid.SetPoint=0
pid.setSampleTime(0.01)
END = 100
feedback = 0
feedback_list = [0]
time_list = [0]
setpoint_list = [pid.SetPoint]
for i in range(1, END):
pid.update(feedback)
output = pid.output
if pid.SetPoint > 0:
feedback += (output - (1/i))
if i>9:
pid.SetPoint = 1
time.sleep(0.02)
feedback_list.append(feedback)
setpoint_list.append(pid.SetPoint)
time_list.append(i)
plt.figure(figsize=(10,4))
plt.plot(time_list, feedback_list, label="Output")
plt.plot(time_list, setpoint_list, label="Setpoint", linestyle="--")
plt.ylim([0, 2])
plt.xlabel('Time (s)')
plt.ylabel('PID Response')
plt.title('PID Controller (' + title + ')')
plt.legend(loc='upper right')
plt.grid(True)
plt.show()
通过适当调整 Kp
,Ki
和 Kd
的值,PID 控制器可以应用于许多不同的控制系统来优化性能。我们对Kp, Ki, Kd做消融实验,会发现下图的变化规律。
- 比例(P): 比例项的作用是对错误进行线性的反应。 如果错误大,比例项会尝试以更大的幅度去改正它;如果错误小,比例项会尝试以更小的幅度去改正它。比例增益(Kp)的大小决定了控制器对错误的反应速度:Kp越大,反应越快,但是如果太大,可能会导致系统过度反应,产生振荡。
- 积分(I): 积分项的作用是对过去的错误进行累积,以消除持续的偏差。 积分增益(Ki)越大,积分项的效果越明显,能更快的消除偏差,但如果太大,可能会导致系统过度反应,产生振荡。
- 微分(D): 微分项的作用是预测错误的变化趋势。 通过减小对快速变化错误的反应,微分项可以使系统更稳定。微分增益(Kd)越大,微分项的效果越明显,可以更好的消除振荡,但如果太大,可能会导致系统反应过慢。
Kp
KI
Kd: