1、专家系统

定义:一类包含知识和推理的智能计算机程序,其内容包含某领域专家水平的知识和经验,具有解决专门问题的能力

1.1 专家系统的建立

(1)知识库

  • 基于专家经验的判断性规则
  • 用于推理、问题求解的控制性规则
  • 用于说明问题的状态、事实和概率及当前的条件和常识等的数据

(2)推理机

  • 正向推理
  • 反向推理
  • 双向推理

(3)知识的表示
产生式规则的表达方式为:
在这里插入图片描述

2、专家控制

2.1 结构
在这里插入图片描述

3、专家PID控制

基于受控对象和控制规律的各种知识,无需知道被控对象的精确模型,利用专家经验来设置PID参数,专家PID控制是一种直接型专家控制器。

3.1 利用Python实现专家PID控制

求二阶传递函数阶跃响应的
Gp(s)=133s2+25sG_p(s) = \frac{133}{s^2 + 25s}Gp(s)=s2+25s133
取采样时间为1ms进行离散化。
(1)离散化,T为采样周期
s=Z−1−1Ts = \frac{Z^{-1}-1}{T}s=TZ11
(2)代入上式得到
Y(Z)+23Y(Z)Z−1−24Y(Z)Z−2=133U(Z)Z−2Y(Z)+23Y(Z)Z^{-1}-24Y(Z)Z^{-2}=133U(Z)Z^{-2}Y(Z)+23Y(Z)Z124Y(Z)Z2=133U(Z)Z2
进一步化简得到:
Y(Z)=(2−25T)Z−1+(25T−1)Z−2+133T2U(Z)Z−2Y(Z)=(2-25T)Z^{-1}+(25T-1)Z^{-2}+133T^2U(Z)Z^{-2}Y(Z)=(225T)Z1+(25T1)Z2+133T2U(Z)Z2
于是得到:
y(k)=(2−25T)y(k−1)+(25T−1)y(k−2)+133T2u(k−2)y(k)=(2-25T)y(k-1)+(25T-1)y(k-2)+133 T^2 u(k-2)y(k)=(225T)y(k1)+(25T1)y(k2)+133T2u(k2)

Python源码(该源码参考《智能控制》一书):
主要是在程序中,构建5个专家规则库,用于限制输出。

kp = 0.7
ki = 0.02
kd = 0.1
ts = 0.001
y_1 = 0
y_2 = 0

u_1 =0
u_2 =0

size = 2000
error=[0 for i in range(size)]
y =[0 for i in range(size)]
error_1 = 0
x2_1 =0
x=[0,0,0]
times=np.linspace(0,2,size)
r = [1.0 for i in range(size)]
u = [0 for i in range(size)]
for k in range(size):
    u[k] = kp*x[0]+kd*x[1]+ki*x[2]
    #规则1
    if abs(x[0])>0.8:
         u[k] = 0.45
    elif abs(x[0])>0.4:
         u[k] = 0.4
    elif abs(x[0])>0.2:
         u[k] = 0.12
    elif abs(x[0])>0.01:
         u[k] = 0.10
         
    #规则2
    if x[0]*x[1] >0 or (x[1]==0):
         if abs(x[0])>=0.05:
             u[k] = u_1 + 2*kp*x[0]
         else:
             u[k] = u_1 + 0.4*kp*x[0]
     
    #规则3
    if (x[0]*x[1]<0 and x[1] *x2_1>0) or x[0] == 0:
        u[k]=u[k]
        
    #规则4   
    if x[0]*x[1]<0 and x[1] *x2_1<0:
         if abs(x[0])>=0.05:
             u[k] = u_1 + 2*kp*error_1
         else:
             u[k] = u_1 + 0.6*kp*error_1
    #规则5
    if abs(x[0])<=0.001:
        u[k] = 0.5*x[0]+0.01*x[2]
    
    if u[k] >=10:
        u[k] = 10
    
    if u[k] <=-10:
        u[k] = -10

    y[k]=1.975*y_1 -0.975*y_2+0.000133*u_2

    error[k]=r[k]-y[k]
    
    u_2=u_1
    u_1=u[k]
    
    y_3 =y_2
    y_2 =y_1
    y_1 =y[k]
    
    x[0] = error[k]
    x2_1 = x[1]
    x[1] =(error[k]-error_1)/ts
    x[2] =x[2] + error[k]*ts
    
    error_1 = error[k]

plt.plot(times,y)
plt.plot(times,error)
plt.show()        

运行结果
在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐