Halcom 发表于 2017-2-4 20:50:55

20免疫算法的函数优化--视频分享

20免疫算法的函数优化
PDF下载:链接:http://pan.baidu.com/s/1jH4dKjW 密码:4jbh

AIA算法基本步骤如下:(1)问题识别。根据给定的目标函数和约束条件作为算法的抗原。(2)产生抗体群。初始抗体群通常是在解空间用随机的方法产生的,抗体群采用二进制编码来表示,实际应用中,常常直接采用十进制进行抗体计算更新。(3)计算抗体适应值。即计算抗原和抗体的亲和度。(4)生成免疫记忆细胞。将适应值较大的抗体作为记忆细胞加以保留。(5)抗体的选择(促进和抑制)。计算当前抗体群中适应值相近的抗体浓度,浓度高的则减小该个体的选择概率——抑制;反之,则增加该个体的选择概率——促进,以此保持群体中个体的多样性。(6)抗体的演变。进行交叉和变异操作,产生新抗体群。(7)抗体群更新。用记忆细胞中适应值高的个体代替抗体群中适应值低的个体,形成下一代抗体群。(8)终止。一旦算法满足终止条件则结束算法。否则转到(3)重复执行。
MATLAB代码如下:
clc,clear,close all;
warning off
global popsize length min max N code;
N=12;                % 每个染色体段数(十进制编码位数)
M=100;               % 进化代数
popsize=30;          % 设置初始参数,群体大小
length=10;         % length为每段基因的二进制编码位数
chromlength=N*length;% 字符串长度(个体长度),染色体的二进制编码长度
pc=0.7;                % 设置交叉概率,本例中交叉概率是定值,若想设置变化的交叉概率可用表达式表示,或从写一个交叉概率函数,例如用神经网络训练得到的值作为交叉概率
pm=0.3;                % 设置变异概率,同理也可设置为变化的
bound={-100*ones(popsize,1),zeros(popsize,1)};
min=bound{1};max=bound{2};
pop=initpop(popsize,chromlength);                     %运行初始化函数,随机产生初始群体
ymax=500;   % 适应度值初始化

ysw_x = zeros(3,12);
% 故障类型编码,每一行为一种!code(1,:),正常;code(2,:),50%;code(3,:),150%
code =[-0.8180   -1.6201-14.8590-17.9706-24.0737-33.4498-43.3949-53.3849-63.3451-73.0295-79.6806-74.3230
       -0.7791   -1.2697-14.8682-26.2274-30.2779-39.4852-49.4172-59.4058-69.3676-79.0657-85.8789-81.0905
       -0.8571   -1.9871-13.4385-13.8463-20.4918-29.9230-39.8724-49.8629-59.8215-69.4926-75.9868-70.6706];

for i=1:3   % 3种故障模式,每种模式应该产生 popsize 种监测器(抗体),每种监测器的长度和故障编码的长度相同
    pop=initpop(popsize,chromlength);                     %运行初始化函数,随机产生初始群体
    for k=1:M
       =calobjvalue(pop,i);               %计算目标函数
       fitvalue=calfitvalue(objvalue); favg(k)=sum(fitvalue)/popsize;%计算群体中每个个体的适应度
       newpop=selection(pop,fitvalue); objvalue=calobjvalue(newpop,i); %选择
       newpop=crossover(newpop,pc,k);objvalue=calobjvalue(newpop,i); %交叉
       newpop=mutation(newpop,pm);   objvalue=calobjvalue(newpop,i); %变异
       =best(newpop,fitvalue);%求出群体中适应值最小的个体及其适应值
       if bestfit<ymax
          ymax=bestfit;
         for j=1:N%译码!
               temp(:,j)=decodechrom(bestindividual,1+(j-1)*length,length);      %将newpop每行(个体)每列(每段基因)转化成十进制数
               x(:,j)=temp(:,j)/(2^length-1)*(max(j)-min(j))+min(j);   % popsize×N 将二值域中的数转化为变量域的数      
         end
          ysw_x(i,:) = x;%译码!
       end
       y(i,k)=ymax;
       if ymax<10   % 如果最大值小于设定阀值,停止进化
         break
       end
       pop=newpop;
   end
end

ysw_x   % 结果为(i*popsie)个监测器(抗体)
plot(1:M,favg)变异操作(采用的是二进制编码):function =mutation(pop,pm)
global popsize N length;
for i=1:popsize
   if(rand<pm) % 产生一随机数与变异概率比较
      mpoint=round(rand*N*length);% 个体变异位置
   if mpoint<=0
      mpoint=1;
   end
   newpop(i,:)=pop(i,:);
   if newpop(i,mpoint)==0
      newpop(i,mpoint)=1;
   else
      newpop(i,mpoint)=0;
   end
   else
   newpop(i,:)=pop(i,:);
   end
end适应度值排序操作:
function B=hjjsort(A)
% 将A=置换成【7   9   6   3   4   1】
N=length(A);t=;
for i=1:N         
    temp(i,2)=A(i);
    temp(i,1)=i;
end
for i=1:N-1    % 沉底法将 A 排序
    for j=2:N+1-i
      if temp(j,2)<temp(j-1,2)
            t=temp(j-1,:);
            temp(j-1,:)=temp(j,:);
            temp(j,:)=t;
      end
    end
end
for i=1:N/2   % 将排好的A逆序
    t=temp(i,2);
    temp(i,2)=temp(N+1-i,2);
    temp(N+1-i,2)=t;
end
for i=1:N
    A(temp(i,1))=temp(i,2);
end
B=A;种群选择操作:
function =selection(pop,fitvalue)
global popsize;
fitvalue=hjjsort(fitvalue);
totalfit=sum(fitvalue);          %求适应值之和
fitvalue=fitvalue/totalfit;      %单个个体被选择的概率
fitvalue=cumsum(fitvalue);       %如 fitvalue=,则 cumsum(fitvalue)=
ms=sort(rand(popsize,1));      %从小到大排列,将"rand(px,1)"产生的一列随机数变成轮盘赌形式的表示方法,由小到大排列
fitin=1;                         %fivalue是一向量,fitin代表向量中元素位,即fitvalue(fitin)代表第fitin个个体的单个个体被选择的概率
newin=1;                         %同理
while newin<=popsize % && fitin<=popsize
      if (ms(newin))<fitvalue(fitin)    %ms(newin)表示的是ms列向量中第"newin"位数值,同理fitvalue(fitin)
          newpop(newin,:)=pop(fitin,:); %赋值 ,即将旧种群中的第fitin个个体保留到下一代(newpop)
          newin=newin+1;
      else
          fitin=fitin+1;
      end
end

百度网盘链接如下:
链接:http://pan.baidu.com/s/1o8K0SgM 密码:rh3i






页: [1]
查看完整版本: 20免疫算法的函数优化--视频分享