免疫算法

原创 2017年05月12日 15:47:31

      免疫算法是受生物免疫系统的启发而推出的一种新型的智能搜索算法,是一种确定性和随机性选择相结合并具有"勘探"与"开采"能力的启发式随机搜索算法。

     

   算法主要的步骤:

     (1)抗原识别与初始抗体产生。

     (2)抗体评价

     (3)免疫操作

   免疫算法的特点:

     (1)全局搜索能力

     (2)多样性保持机制

     (3)鲁棒性强

     (4)并行分布式搜索机制

   免疫算法流程图:

    


   (1)抗原识别,即理解待优化的问题,对问题进行可行性分析,提取先验知识,构造出合适的亲和度函数,并制定各种约束条件。

   (2)初始抗体群,通过编码把问题的可行解表示成解空间中的抗体,在解的空间内随机产生一个初始种群。

   (3)对种群中的每一个可行解进行亲和度评价。

   (4)判断是否满足算法终止条件;如果满足条件则终止算法寻优过程,输出计算结果;否则继续寻优运算。

   (5)计算抗体浓度和激励度。

   (6)进行免疫处理,包括免疫选择、克隆、变异和克隆抑制

      免疫选择:根据种群中抗体的亲和度和浓度计算结果选择优质抗体,使其活化;

     克隆:对活化的抗体进行克隆复制,得到若干副本;

     变异:对克隆得到的副本进行变异操作,使其发生亲和度突变;

     克隆抑制:对变异结果进行再选择,抑制亲和度低的抗体,保留亲和度高的变异结果。

   (7)种群刷新,以随机生成的新抗体替代种群中激励度较低的抗体,形成新一代抗体,转步骤(3)。


   免疫算法求解TSP问题:

%%%一个旅行商人要拜访全国31个省会城市,需要选择最短的路径%%%%
%种群数目NP=200
%免疫个体维数N=31
%迭代次数G=1000
%克隆个体个数为Ncl=10
%任意两个城市的距离矩阵D

%%%免疫算法解决TSP问题%%%%%%%
%%%初始化%%%%%%%
clear all; %清除所有变量
close all; %清图
clc ;      %清屏
%%全国31个省会城市的坐标
C=[
1304 2312;
3639 1315;
4177 2244;
3712 1399;
3488 1535;
3326 1556;
3238 1229;
4196 1004;
4312 790;
4386 570;
3007 1970;
2562 1756;
2788 1491;
2381 1676;
1332 695;
3715 1678;
3918 2179;
4061 2370;
3780 2212;
3676 2578;
4029 2838;
4263 2931;
3429 1908;
3507 2367;
3394 2643;
3439 3201;
2935 3240;
3140 3550;
2545 2357;
2778 2826;
2370 2975
];%31个省会坐标

N=size(C,1); %TSP问题的规模,即城市数目
D=zeros(N);  %任意两个城市距离间隔矩阵,初始化都为0

 %任意两个城市距离间隔矩阵%
 for i=1:N
     for j=1:N
         D(i,j)=((C(i,1)-C(j,1))^2+(C(i,2)-C(j,2))^2)^0.5;
     end
 end  
 
 NP=200;  %免疫个体数目
 G=1000; %最大免疫代数
 f=zeros(N,NP); %用于存储种群
 
  for i=1:NP
     f(:,i)=randperm(N); %随机生成初始种群
  end
  
  len=zeros(NP,1);  %存储路径长度
  for i=1:NP
    len(i)=func3(D,f(:,i),N); %随机生成初始种群
  end
  
  [Sortlen,Index]=sort(len);
  Sortf=f(:,Index);    %种群个体排序
  gen=0;               %免疫代数
  Nc1=10;             %克隆个数
  
  %%%%%%%%%%%%%%%%%%%%%%免疫循环%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  while gen<G
      %%%%%%%%%%%%%%%%%选激励度前NP/2个个体进行免疫操作%%%%%%%%%%%
      for i=1:NP/2
          
          a=Sortf(:,i);
          Ca=repmat(a,1,Nc1);
          for j=1:Nc1
              p1=floor(1+N*rand());
              p2=floor(1+N*rand());
              while p1==p2
              p1=floor(1+N*rand());
              p2=floor(1+N*rand());
              end
              %%元素的交换
              temp=Ca(p1,j);
              Ca(p1,j)=Ca(p2,j);
              Ca(p2,j)=temp;
          end
          Ca(:,1)=Sortf(:,i);   %保留克隆源个体
          %%%%%%%%%%%%%%%%克隆抑制,保留亲和度最高的个体%%%%%%%%%%%%%%%%
          for j=1:Nc1
              Calen(j)=func3(D,Ca(:,j),N);
          end
          [SortCalen,Index]=sort(Calen);
          SortCa=Ca(:,Index);
          af(:,i)=SortCa(:,1);
          alen(i)=SortCalen(1);
      end
      %%%%%%%%%%%%%%%%%种群刷新%%%%%%%%%%%
      for i=1:NP/2
          bf(:,i)=randperm(N); %随机生成初始种群
          blen(i)=func3(D,bf(:,i),N); %计算路径长度
      end
      %%%%%%%%%%%%%%%%%免疫种群与新种群合并%%%%%%%%%%%
      f=[af,bf];
      len=[alen,blen];
      [Sortlen,Index]=sort(len);
      Sortf=f(:,Index);
      gen=gen+1;
      trace(gen)=Sortlen(1);
  end
  
  %%%%%%%%%%%%%%%%%%%%%%输出优化结果%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  Bestf=Sortf(:,1);   %最优变量
  Bestlen=trace(end);  %最优值
  %%%%%图1
  figure 
  for i=1:N-1
     plot([C(Bestf(i),1),C(Bestf(i+1),1)],...
           [C(Bestf(i),2),C(Bestf(i+1),2)],'bo-');
     hold on;
  end
  
   plot([C(Bestf(N),1),C(Bestf(1),1)],...
         [C(Bestf(N),2),C(Bestf(1),2)],'ro-');
   title(['优化最短距离:',num2str(trace(end))]);
   %%%%图2
   figure 
   plot(trace)
   xlabel('迭代次数')
   ylabel('目标函数值')
   title('亲和度进化曲线')
   
 

 
function len=func3(D,f,N)
  len=D(f(N),f(1));
  for i=1:(N-1)
      len=len+D(f(i),f(i+1));
  end
  end


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

公有云和私有云的区别

在现在云计算大行其道的时候,许多的企业都将自己的数据信息进行云迁移。但是面对种类繁多的云服务,企业应该如何选择适合自己的业务呢?首先我们要了解什么是云计算,云计算有几种模式,各种模式的架构原理。 ...

浅谈人工免疫算法

人工免疫算法简介生物的免疫系统是一种自适应的、自组织的、分布式的系统,是一种能够抵挡外来病原体的具有复杂功能的防御系统,人工免疫系统是一种灵感来源于生物体免疫系统,用于解决计算机领域问题的新兴算法。免...

爬山算法

局部搜索算法1.局部搜索算法为什么叫做局部呢? 1).有些搜索算法它都需要返回从初始状态到目标状态的这条路径作为这个问题的解;而实际中有很多最优化的问题,是不需要知道到达目标的这条路径。也就是说它...

c++基础要点整理(一)之——内部类

包含在一个类里面都类称为内部类,其定义形式为:        class A { public: class InClass { ...

免疫算法主程序在matlab上的实现

%这是免疫算法。这个算法几乎与遗传算法一样,只是多用了一个免疫函数 %免疫算法是遗传算法的变体,它不用杂交,而是采用注入疫苗的方法。 %疫苗是优秀染色体中的一段基因,把疫苗接种到其它染色体中 %...

数学建模——免疫算法

c++实现的免疫算法

  • 2008-05-07 14:26
  • 360KB
  • 下载

360杀毒4.0版Office宏病毒免疫体验

现在,很多“办公族”喜欢到网上下载各种Word、Excel、PPT模板来简化自己的工作,但需要警惕的是,这类模板有些会携带“Office宏病毒”,一旦感染,电脑中的其他文件也可能遭殃,严重性影响日常工...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)