m基于遗传优化的时域声辐射模态的振动控制算法的matlab仿真

发布时间 2023-05-04 23:34:27作者: 我爱C编程

1.算法仿真效果

matlab2013b仿真结果如下:

 

 

 

 

 

 

 

 

 

2.算法涉及理论知识概要

2.1 遗传优化

        长度为Ln个二进制串bi(i12,…,n)组成了遗传算法的初解群,也称为初始群体。在每个串中,每个二进制位就是个体染色体的基因。根据进化术语,对群体执行的操作有三种:

 

1.选择(Selection)

 

        这是从群体中选择出较适应环境的个体。这些选中的个体用于繁殖下一代。故有时也称这一操作为再生(Reproduction)。由于在选择用于繁殖下一代的个体时,是根据个体对环境的适应度而决定其繁殖量的,故而有时也称为非均匀再生(differential reproduction)

 

2.交叉(Crossover)

 

        这是在选中用于繁殖下一代的个体中,对两个不同的个体的相同位置的基因进行交换,从而产生新的个体。

 

3.变异(Mutation)

 

       这是在选中的个体中,对个体中的某些基因执行异向转化。在串bi中,如果某位基因为1,产生变异时就是把它变成0;反亦反之。

 

遗传算法的原理可以简要给出如下:

 

choose an intial population

 

determine the fitness of each individual

 

perform selection

 

repeat

 

perform crossover

 

perform mutation

 

determine the fitness of each individual

 

perform selection

 

until some stopping criterion applies

 

        这里所指的某种结束准则一般是指个体的适应度达到给定的阀值;或者个体的适应度的变化率为零。

 

1.初始化

 

        选择一个群体,即选择一个串或个体的集合bii=12...n。这个初始的群体也就是问题假设解的集合。一般取n30-160

 

        通常以随机方法产生串或个体的集合bi,i12...n。问题的最优解将通过这些初始假设解进化而求出。

 

2.选择

 

        根据适者生存原则选择下一代的个体。在选择时,以适应度为选择原则。适应度准则体现了适者生存,不适应者淘汰的自然法则。

 

给出目标函数f,则f(bi)称为个体bi的适应度。以

 

为选中bi为下一代个体的次数。

 

显然.从式(386)可知:

 

(1)适应度较高的个体,繁殖下一代的数目较多。

 

(2)适应度较小的个体,繁殖下一代的数目较少;甚至被淘汰。

 

这样,就产生了对环境适应能力较强的后代。对于问题求解角度来讲,就是选择出和最优解较接近的中间解。

 

3.交叉

 

        对于选中用于繁殖下一代的个体,随机地选择两个个体的相同位置,按交叉概率P。在选中的位置实行交换。这个过程反映了随机信息交换;目的在于产生新的基因组合,也即产生新的个体。交叉时,可实行单点交叉或多点交叉。

 

例如有个体

 

S1=100101

 

S2=010111

 

选择它们的左边3位进行交叉操作,则有

 

S1=010101

 

S2=100111

 

一般而言,交 婊显譖。取值为0.250.75

 

4.变异

 

        根据生物遗传中基因变异的原理,以变异概率Pm对某些个体的某些位执行变异。在变异时,对执行变异的串的对应位求反,即把1变为0,把0变为1。变异概率Pm与生物变异极小的情况一致,所以,Pm的取值较小,一般取0.01-0.2

 

例如有个体S101011

 

对其的第14位置的基因进行变异,则有

 

S'=001111

 

单靠变异不能在求解中得到好处。但是,它能保证算法过程不会产生无法进化的单一群体。因为在所有的个体一样时,交叉是无法产生新的个体的,这时只能靠变异产生新的个体。也就是说,变异增加了全局优化的特质。

 

5.全局最优收敛(Convergence to the global optimum)

 

        当最优个体的适应度达到给定的阀值,或者最优个体的适应度和群体适应度不再上升时,则算法的迭代过程收敛、算法结束。否则,用经过选择、交叉、变异所得到的新一代群体取代上一代群体,并返回到第2步即选择操作处继续循环执行。

 

 

 

2.2时域声辐射模态

 

 

 

 

 

 

 

 

 

 

 

       影响声辐射模态声功率的因素主要有控制器参数QR,然后是控制力频率F和控制力位置,因此,我们再仿真的时候,主要通过遗传算法对这四个变量进行优化。

 

        这四个参数共同决定了最后的声功率大小,因此,在进行优化的时候,通过对这四个变量进行遗传算法的优化,那么系统总体的构架如下所示:

 

 

 

 

 

 

3.MATLAB核心程序

 

%仿真时域声辐射模态平板的区域范围
%仿真时域声辐射模态平板的区域范围
Lx      = 0.3;
Ly      = 0.3;
%平面厚度
hs      = 0.01;
%材料的密度
density = 5900;
%结构刚度
Es      = 1e11;
As      = Lx*hs;
MOM     = hs^3*sqrt(Lx^2+Ly^2)/24;
%阻尼比
Rb      = 0.01;
%这两个值设置较小即可,否则运算量非常大
m       = 2;
n       = 2;
%平板区域分割数
MN      = m*n;
%力的区域
Xp        = [0.15,0.2];
Xcon      = [0.5 ,0.4];
Num_Force = 1;
Ms        = density*Lx*Ly*As*eye(MN);
for j = 1:MN
    a1(j) = j/5;
    b1(j) = (sinh(a1(j)) + sin(a1(j)))/(cosh(a1(j)) - cos(a1(j)));
end
Ks        = Es*MOM*Lx*diag(a1(1:MN).^2,0);
for k = 1:MN
    Fvalue(k,1:Num_Force) = b1(k)*(cos(a1(k)*mean(Xcon)));
    Pvalue(k,1)           = b1(k)*(cos(a1(k)*mean(Xp))); 
end
......................................................................
 
for j=1:1:NIND 
    x(j,1)  = phen(j,1);
    deltaT  = 0.0005;
    Tall    = 2000;
    T       = deltaT:deltaT:deltaT*Tall; 
    %定义一个控制输入
    %控制力频率
    f       = 50*(1+5*x(j,1));%50~200Hz之间优化
    U       = sin(2*pi*f*[1:length(T)]*deltaT); 
    [Y,X]   = lsim(Ac,Bc,Cc,Dc,U,T); 
    for t = 1:Tall
        Ws(t)= 1*(abs(Y(t)))^2; 
        tmps(t) = 10*log10(Ws(t)/Wr);
        if abs(tmps(t)) >1e10
           tmps(t) =  -1e6;
        end
    end
    J(j,1)  = min(tmps);
end
 
Objv  = 1./(J+eps);
gen   = 0; 
 
while gen < MAXGEN;   
      gen
      FitnV=ranking(Objv);    
      Selch=select('sus',Chrom,FitnV);    
      Selch=recombin('xovsp', Selch,0.9);   
      Selch=mut( Selch,0.01);   
      phen1=bs2rv(Selch,FieldD);   
      for a=1:1:NIND  
          x1(a,1)=phen1(a,1);              
            deltaT  = 0.0005;
            Tall    = 2000;
            T       = deltaT:deltaT:deltaT*Tall; 
            %定义一个控制输入
...............................................................
            JJ(j,1)  = min(tmps);
      end 
      Objvsel=1./(JJ+eps);    
      [Chrom,Objv]=reins(Chrom,Selch,1,1,Objv,Objvsel);   
      gen=gen+1; 
end 
 
MIN=min(Objv); 
for ttt=1:1:size(Objv)     
    if Objv(ttt)<=MIN         
       tt=ttt;         
       break;     
    end
end                 
 
deltaT  = 0.0005;
Tall    = 2000;
T       = deltaT:deltaT:deltaT*Tall; 
for t = 1:Tall
    f(t) = (t-1)/Tall*50*(1+5*x1(tt,1));  
end
U     = sin(2*pi*f.*[1:Tall]*deltaT);
[Y,X] = lsim(Ac,Bc,Cc,Dc,U,T); 
 
figure; 
plot(T,Y); 
xlabel('time(s)');
ylabel('y1');
grid on
title('第1阶伴随系数');
axis([0,1,-20,20]);
for t = 1:Tall
    Ws(t)= 1*(abs(Y(t)))^2; 
end
 
figure;
plot(deltaT*(1:Tall),10*log10(Ws/Wr),'b');
xlabel('time(s)');
ylabel('声功率级别db');
grid on
axis([0,1,20,130]);
save r3.mat Y Ws Wr