計算模糊控制離線查詢表


  •  論域為離散時模糊控制的離線計算

   當論域為離散時,經過量化后的輸入量的個數是有限的。因此可以針對輸入情況的不同組合離線計算出相應的控制量,從而組成一張控制表,實際控制時只要直接查這張控制表即可,在線運算量是很少的。這種離線計算、在線查表的模糊控制方法比較容易滿足實時控制的要求。下圖表示了這種模糊控制系統的結構。

 

  下面通過一個具體例子來說明離線模糊計算的過程。設X、Y、Z∈{-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6},T(x)={NB,NM,NS,NZ,PZ,PS,PM,PB},T(y)=T(z)={NB,NM,NS,ZE,PS,PM,PB}

  語言變量x的隸屬度函數如下表:

   語言變量y和z的隸屬度函數同下表:

   模糊控制規則如下表所示:

 

   設已知輸入為x0和y0,模糊化運算采用單點模糊集合,則相應的輸入量模糊集合A'和B'分別為

$$\mu_{A'}(x)=\left\{\begin{matrix}
1 \quad x=x_0\\
0 \quad x\neq x_0
\end{matrix}\right. \quad
\mu_{B'}(y)=\left\{\begin{matrix}
1 \quad y=y_0\\
0 \quad y\neq y_0
\end{matrix}\right.$$

   比如,假設x輸入為-4,則輸入的模糊集合為:$A'=\frac{0}{-6}+\frac{0}{-5}+\frac{1}{-4}+\frac{0}{-3}+...+\frac{0}{5}+\frac{0}{6}$

  根據書中的模糊推理方法及性質,可求得輸出量的模糊集合C'為(假設and用求交法,also用求並法,合成用最大—最小法,模糊蘊含用求交法)

$$\begin{align*}
C'&=(A' \times B')\circ R=(A' \times B')\circ \bigcup_{i=1}^{56} R_i\\
&=\bigcup_{i=1}^{56}(A' \times B')\circ [(A_i \times B_i)\rightarrow C_i]\\
&=\bigcup_{i=1}^{56}[A' \circ (A_i \rightarrow C_i)]\cap [B' \circ (B_i \rightarrow C_i)]\\
&=\bigcup_{i=1}^{56}C_{iA}' \cap C_{iB}'\\
&=\bigcup_{i=1}C_i'
\end{align*}$$

 

  直接根據公式$C'=(A' \times B')\circ R=(A' \times B')\circ \bigcup_{i=1}^{56} R_i$計算輸出C'的代碼如下:

x=[1.0 0.8 0.7 0.4 0.1 0 0 0 0 0 0 0 0;   % 語言變量x的隸屬度函數,8*13
   0.2 0.7 1.0 0.7 0.3 0 0 0 0 0 0 0 0;
   0 0.1 0.3 0.7 1.0 0.7 0.2 0 0 0 0 0 0;
   0 0 0 0 0.1 0.6 1.0 0 0 0 0 0 0;
   0 0 0 0 0 0 1.0 0.6 0.1 0 0 0 0;
   0 0 0 0 0 0 0.2 0.7 1.0 0.7 0.3 0.1 0;
   0 0 0 0 0 0 0 0 0.2 0.7 1.0 0.7 0.3;
   0 0 0 0 0 0 0 0 0.1 0.4 0.7 0.8 1.0];  

y=[1.0 0.7 0.3 0 0 0 0 0 0 0 0 0 0;      % 語言變量y和z的隸屬度函數,7*13
   0.3 0.7 1.0 0.7 0.3 0 0 0 0 0 0 0 0;
   0 0 0.3 0.7 1.0 0.7 0.3 0 0 0 0 0 0;
   0 0 0 0 0.3 0.7 1.0 0.7 0.3 0 0 0 0;
   0 0 0 0 0 0 0.3 0.7 1.0 0.7 0.3 0 0;
   0 0 0 0 0 0 0 0 0.3 0.7 1.0 0.7 0.3;
   0 0 0 0 0 0 0 0 0 0 0.3 0.7 1.0];   
z=y;

TABLE=[ 1 1 1 1 2 4 4;
        1 1 1 1 2 4 4;
        2 2 2 2 4 5 5;
        2 2 3 4 5 6 6;
        2 2 3 4 5 6 6;
        3 3 4 6 6 6 6;
        4 4 6 7 7 7 7;
        4 4 6 7 7 7 7];% TABLE中元素為模糊控制規則表中每個元素在矩陣z中的行數
      
R_AB=zeros(13,13);
R_i=zeros(169,13); 
R=zeros(169,13);       % 模糊關系矩陣,169*13

   
for i=1:8              % 控制規則表x從NB—>PB
    for j=1:7          % 控制規則表y從NB—>PB
        A=x(i,:);      % 取A為矩陣x的第i行
        B=y(j,:);      % 取B為矩陣y的第j行
        Ur=TABLE(i,j); % x第i行和y的第j列對應的控制規則
        C=z(Ur,:);     % C為根據模糊控制規則推出結果對應的模糊集合
  
        for m=1:13     % x的論域量化為13個等級-6~6
          for n=1:13   % y的論域量化為13個等級-6~6
            if A(m)<B(n)
                R_AB(m,n)=A(m);     % 取小運算
            else
                R_AB(m,n)=B(n);
            end
          end 
        end
        R_AB1=reshape(R_AB',169,1); % 需要注意的是reshape是按列讀取,然后按列擺放

        for m=1:169 
          for n=1:13                % 矩陣R_i(m,n)為169行13列
             if R_AB1(m)<C(n)  
                 R_i(m,n)=R_AB1(m); % 取小運算
             else
                 R_i(m,n)=C(n);
             end
          end
        end                   

        %*************求總的模糊關系矩陣*****************
        for m=1:169
            for n=1:13
                if  R(m,n)<R_i(m,n)  
                    R(m,n)=R_i(m,n); % 模糊並運算,取大
                end 
            end
        end
           
    end
end


%***************計算輸出量的模糊集合*********************
OUTPUT = zeros(13,13);
for i=1:13
    for j=1:13 
        
        A1=zeros(1,13); A1(i)=1;         % 單點模糊集合A'
        B1=zeros(1,13); B1(j)=1;         % 單點模糊集合B'
        
        for m=1:13      
            for n=1:13
                if A1(m)<B1(n)   
                    R_AB(m,n)=A1(m);   %取小運算
                else
                    R_AB(m,n)=B1(n);
                end
            end 
        end                            
        R_AB1=reshape(R_AB',169,1); 

        U=zeros(1,13); 
        for m=1:13
            for n=1:169
                U(m)=max(min(R_AB1(n),R(n,m)),U(m)); %模糊關系矩陣的合成運算
            end
        end                   

        %*********************重心法去模糊化********************************
        temp = 0;
        for m=1:13
            temp = temp + U(m)* (m-7);
        end
        OUTPUT(i,j) = temp/sum(U);   
    
    end
end
View Code

  當輸入的維數較高,即有很多個模糊子句用and相連時,模糊推理的計算便比較復雜。根據模糊推理的性質(參考《智能控制理論與技術》第2版 2.5.4),推導出新的計算公式,每個子模糊蘊含關系都比較簡單,模糊矩陣的維數也較低,並不隨着and連接的模糊子句的個數增加而增加。這種方式計算C'的MATLAB代碼如下:

clc;    % 清空命令窗口
clear;  % 清空變量

x=[1.0 0.8 0.7 0.4 0.1 0 0 0 0 0 0 0 0;   % 語言變量x的隸屬度函數,8*13
   0.2 0.7 1.0 0.7 0.3 0 0 0 0 0 0 0 0;
   0 0.1 0.3 0.7 1.0 0.7 0.2 0 0 0 0 0 0;
   0 0 0 0 0.1 0.6 1.0 0 0 0 0 0 0;
   0 0 0 0 0 0 1.0 0.6 0.1 0 0 0 0;
   0 0 0 0 0 0 0.2 0.7 1.0 0.7 0.3 0.1 0;
   0 0 0 0 0 0 0 0 0.2 0.7 1.0 0.7 0.3;
   0 0 0 0 0 0 0 0 0.1 0.4 0.7 0.8 1.0];  

y=[1.0 0.7 0.3 0 0 0 0 0 0 0 0 0 0;      % 語言變量y和z的隸屬度函數,7*13
   0.3 0.7 1.0 0.7 0.3 0 0 0 0 0 0 0 0;
   0 0 0.3 0.7 1.0 0.7 0.3 0 0 0 0 0 0;
   0 0 0 0 0.3 0.7 1.0 0.7 0.3 0 0 0 0;
   0 0 0 0 0 0 0.3 0.7 1.0 0.7 0.3 0 0;
   0 0 0 0 0 0 0 0 0.3 0.7 1.0 0.7 0.3;
   0 0 0 0 0 0 0 0 0 0 0.3 0.7 1.0];   
z=y;

TABLE=[ 1 1 1 1 2 4 4;
        1 1 1 1 2 4 4;
        2 2 2 2 4 5 5;
        2 2 3 4 5 6 6;
        2 2 3 4 5 6 6;
        3 3 4 6 6 6 6;
        4 4 6 7 7 7 7;
        4 4 6 7 7 7 7];% TABLE中元素為模糊控制規則表中每個元素在矩陣z中的行數
      
R_iA=zeros(13,13);
R_iB=zeros(13,13);
Ci=zeros(1,13);
OUTPUT=zeros(13,13);

for xi=1:13       % 輸入變量x的13個取值:-6~6    
    for yi=1:13   % 輸入變量y的13個取值:-6~6
        
        U=zeros(1,13);
        for i=1:8              % 控制規則表x從NB—>PB
            for j=1:7          % 控制規則表y從NB—>PB
                A=x(i,:);      % 取A為矩陣x的第i行
                B=y(j,:);      % 取B為矩陣y的第j行
                Ur=TABLE(i,j); % x第i行和y的第j列對應的控制規則
                C=z(Ur,:);     % C為根據模糊控制規則推出結果對應的模糊集合
                    
                for m=1:13       
                    for n=1:13   
                        if A(m)<C(n)
                            R_iA(m,n)=A(m);     % 取小運算(算A→C的蘊含關系)
                        else
                            R_iA(m,n)=C(n);
                        end
                    end 
                end

                C_iA=zeros(1,13); 
                A=zeros(1,13); A(xi)=1;         % 單點模糊集合A'
                for m=1:13
                    for n=1:13
                        C_iA(m)=max(min(A(n),R_iA(n,m)),C_iA(m)); %模糊關系合成運算
                    end
                end     
                %**********************************************************

                for m=1:13      
                    for n=1:13   
                        if B(m)<C(n)
                            R_iB(m,n)=B(m);     % 取小運算(算B→C的蘊含關系)
                        else
                            R_iB(m,n)=C(n);
                        end
                    end 
                end

               C_iB=zeros(1,13); 
               B=zeros(1,13); B(yi)=1;          % 單點模糊集合B'
                for m=1:13
                    for n=1:13
                        C_iB(m)=max(min(B(n),R_iB(n,m)),C_iB(m)); %模糊關系合成運算
                    end
                end       
                %**********************************************************

                for m=1:13    
                    Ci(m)=min(C_iA(m),C_iB(m));
                end

                for m=1:13    
                    U(m)=max(Ci(m),U(m)); % 56條規則求並
                end     

            end
        end

        %*********************重心法去模糊化********************************
        temp = 0;
        for m=1:13
            temp = temp + U(m)* (m-7);
        end
        OUTPUT(xi,yi) = temp/sum(U);   
        
    end
end  
View Code

   最終的模糊控制查詢表如下:

 

 

 

參考:

智能控制理論與技術(第2版) 孫增圻

用MATLAB生成模糊控制離線查詢表

matlab計算模糊控制表


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM