專家控制
學習筆記,用於記錄學習
資料:《智能控制》(第四版)——劉金琨
專家系統
一、專家系統的定義
專家系統是一類包含知識和推理的智能計算機程序,其內部包含某領域專家水平的只是和經驗,具有解決專門問題的能力
二、專家系統的構成
三、專家系統的建立
知識庫包含三類知識:
- 基於專家經驗的判斷性規則
- 用於推理、問題求解的控制性規則
- 用於說明問題的狀態、事實和概念及當前的條件和常識等的數據
推理機包括三種推理方式:
- 正向推理:從原始數據和已知條件得出結論
- 反向推理:現提出假設的理論,然后尋找支持的證據,若證據存在,則假設成立
- 雙向推理:運用正向推理提出假設的結論,運用反向推理來證實假設
產生式規則的表達方式為
IF E THEN H WITH CF(E,H)
E 為規則前提條件,即證據,H 為規則的結論部分,即假設,CF為規則的強度,即可信度
四、專家控制的基本原理
專家控制的基本結構:
與專家系統的區別
- 專家系統能完成專門領域的功能,輔助用戶決策,專家控制能進行獨立的、實時的自動決策。專家控制比專家系統對可靠性和抗干擾性有着更高的要求
- 專家系統處於離線工作方式,而專家控制要求在線獲取反饋信息,即要求在線工作方式
五、 分析典型二階系統
使用simulink做一個典型二階系統的圖
書上有五個分析,分別對應例子中的規則
- |e(k)|>M1時,誤差絕對值很大,應無視誤差變化趨勢,定值輸出,是誤差絕對值快速減小,同時避免超調,相當開環控制
- e(k)Δe(k)>0 或 Δe(k) = 0時,誤差絕對值正在增大,或誤差為定值。
a. |e(k)| ≥ M2時,誤差較大,控制器輸出為:
b. |e(k)| < M2 時,誤差絕對值不大,但正在增大,此時控制器輸出為:
- e(k)Δe(k) < 0,e(k)Δe(k-1) > 0或e(k) = 0時,誤差絕對值正在減少,或達到平衡
- e(k)Δe(k) < 0,Δe(k)Δ(k-1) < 0時,誤差處於極值,此時看誤差絕對值,絕對值大(|e(k)| ≥ M2),就實施強控制,絕對值小(|e(k)| ≤ M2),就實施弱控制
- |e(k)| ≤ ε(精度)時,誤差絕對值很小,應加入積分環節,減小穩態誤差
六、仿真實例
求三階傳遞函數的階躍響應:
仿真程序:(chap2_1.m)
%專家PID控制仿真程序
clear all;
close all;
ts=0.001; %采樣時間
sys=tf(5.235e005,[1,87.35,1.047e004,0]); %傳遞函數
dsys=c2d(sys,ts,'z'); %轉化為離散系統
[num,den]=tfdata(dsys,'v'); %獲取系數
u_1=0;u_2=0;u_3=0;
y_1=0;y_2=0;y_3=0;
x=[0,0,0]';
x2_1=0;
kp=0.6;
ki=0.03;
kd=0.01;
error_1=0;
for k=1:1:500
time(k)=k*ts;
r(k)=1.0;
u(k)=kp * x(1) + kd * x(2) + ki * x(3);
%規則1,當絕對值過大時定值輸出小數值(強控制)
if abs(x(1))> 0.8
u(k)=0.45;
elseif abs(x(1))> 0.40
u(k)=0.40;
elseif abs(x(1))> 0.20
u(k)=0.12;
elseif abs(x(1))> 0.01
u(k)=0.10;
end
%誤差絕對值正在增大,或誤差為定值
if x(1) * x(2)> 0| (x(2) ==0)
if abs(x(1))>=0.05
u(k)=u_1 + 2*kp*x(1);
else
u(k)=u_1+ 0.4*kp*x(1);
end
end
%誤差絕對值正在減小,貨已經平衡
if (x(1)* x(2)<0&x(2)* x2_1>0)|(x(1)==0)
u(k) = u(k);
end
%誤差處於極值
if x(1)*x(2)< 0&x(2)*x2_1< 0
if abs(x(1))>=0.05
u(k)=u_1 +2* kp* error_1;
else
u(k)=u_1 +0.6* kp* error_1;
end
end
%誤差絕對值很小
if abs(x(1))<=0.001
u(k)=0.5* x(1)+ 0.010* x(3);
end
if u(k) >= 10
u(k) = 10;
end
if u(k) <= -10
u(k) = -10;
end
y(k) = -den(2)* y_1- den(3)* y_2- den(4)* y_3+ num(1)* u(k)+ num(2)* u_1+ num(3)* u_2+ num(4)* u_3;
error(k) = r(k)- y(k);
u_3 = u_2;u_2 = u_1;u_1 = u(k);
y_3 = y_2;y_2 = y_1;y_1 = y(k);
x(1) = error(k); %P
x2_1 = x(2);
x(2) = (error(k)- error_1)/ts; %D
x(3) = x(3)+ error(k)* ts; %I
error_1 = error(k);
end
figure(1);
plot(time,r,'b',time,y,'r');
xlabel('time(s)'); ylabel('r,y');
figure(2);
plot(time,r- y,'r');
xlabel('time(s)');ylabel('error');
輸出結果: