人工免疫算法总结

人工免疫算法简介

免疫系统

免疫系统是哺乳动物抵御外来病毒侵害的防御系统,动物的生命过程中会遇到各种伤害可能,免疫系统为其正常的活动起着重要的作用。免疫系统的一大特点就是用有限的资源有效地应对了数量庞大且种类多变的病毒入侵。免疫算法基于生物的体液免疫过程。

生物体液免疫的机理的启示
  • 抗原识别:免疫系统能够识别出抗原并根据不同抗原的特性生成不同的浆细胞来产生抗体
  • 根据亲和力来选择浆细胞:若产生的抗体与抗原的亲和度高则保留,否则筛掉
  • 存在记忆细胞:B细胞分化为浆细胞和记忆细胞,记忆细胞保存亲和度高的抗体信息
  • 促进和抑制抗体的产生:能产生亲和度高抗体的浆细胞被促进,反之则被抑制
  • 通过交叉变异产生下一代抗体
免疫算法的特点
  • 多样性,对抗体的克隆和变异有助于产生新的抗体
  • 保证收敛,收敛速度快,即产生满足要求的最优解所用时间较短

免疫算法基本过程

生物免疫和免疫算法概念之间的对应关系
生物免疫系统免疫算法
抗原优化问题
抗体优化问题的可行解
亲和度可行解的质量
细胞活化免疫选择
细胞分化个体克隆
亲和度成熟变异
克隆抑制优秀个体选择
动态稳态维持种群刷新
免疫算法的步骤
  1. 抗原的识别阶段:输入目标函数和各种约束作为免疫算法的抗原,并选择亲和度函数;

  2. 初始抗体的产生阶段:在解空间中用随机方法产生抗体;

  3. 亲和力的计算:分别计算抗原和抗体之间的亲和性并排序

  4. 记忆单元的活化:将与抗原亲和性高的抗体加入到记忆单元,并执行免疫操作

  5. 抗体的产生:通过交叉和变异和种群刷新产生进入下一代的抗体

  6. 终止记忆细胞的迭代:在达到指定阈值的时候终止记忆细胞的生成和选取;

应用免疫算法求解实际问题时,常将抗原和抗体之间的亲和性对应于优化问题的目标函数、优化解、解与目标函数的匹配程度

免疫操作

即免疫处理,包括免疫选择、克隆、变异和克隆抑制。

  • 免疫选择:根据种群中抗体的亲和度和浓度计算结果选择优质抗体,使其活化;
  • 克隆:对活化的抗体进行克隆复制,得到若干副本;
  • 变异:对克隆得到的副本进行变异操作,使其发生亲和度突变;
  • 克隆抑制:对变异结果进行再选择,抑制亲和度低的抗体,保留亲和度高的变异结果。
免疫算法的流程图

流程图

代码实现

问题:

代码使用免疫算法计算这个函数 h ( x ) = x + 10 ∗ s i n ( 5 x ) + 7 ∗ c o s ( 4 x ) h(x) = x + 10*sin(5x) + 7*cos(4x) h(x)=x+10sin(5x)+7cos(4x)在区间 [ − 10 , 10 ] [-10,10] [10,10]上的最大值(和上次的模拟退火算法一样,不过上次算的最小值)。该函数图像为:

函数图像

该函数的最大值在 x = 7.8568 x = 7.8568 x=7.8568左右。

MATLAB实现代码如下:

支持函数:二进制串转十进制

function value10 = decode2to10( vector2 )
%该函数用来将二进制串转化为十进制
%   只能用来转化向量形式的字符串,如果有矩阵,应使用for迭代
    %检测传入参数是否为向量,并提取向量长度
    [a,b] = size(vector2);
    if (a == 1) && (b > 1)
        BitLen = b;
    elseif (b == 1) && (a > 1)
        BitLen = a;
    else
        BitLen = 0;
    end
    %转化为十进制
    value10 = vector2(BitLen);
    for i = 1:BitLen-1
        value10 = value10+vector2(BitLen-i)*power(2,i);
    end
end

主程序:

% 使用免疫算法计算这个函数h = @(x) x + 10.*sin(5.*x) + 7.*cos(4.*x) 在[-10,10]上的最大值
% 它真正的最大值在x = 7.8568附近
% 编码采用二进制编码法,需要二进制生成函数和二进制解码函数的支持
% 采用随机选取三个位发生反转来实现变异

bounds = [-10,10]; %求解区间
precision = 0.0001; %求解精度
N = ceil(log2((bounds(2)-bounds(1))/precision)); %根据区间和精度求出编码长度N
NP = 200; %种群数目
G = 20; %最大代数
Ncl = 10; %单次克隆个体数
Fn = 0.5; %种群刷新比例
f = @(x) bounds(1)+x*(bounds(2)-bounds(1))/(2^N); %解码后十进制书到求解区间的映射函数
h = @(x) x + 10.*sin(5.*x) + 7.*cos(4.*x); %直接把待求函数作为亲和度函数

%初始化抗体种群
pop = round(rand(NP,N)); %每行是一个抗体,共NP个

%开始迭代
gen = 0;
while 1
    %检查是否达到最大代数
    gen = gen + 1;
    if gen > G
        break
    end
    
    %计算种群亲和度
    affinity = zeros(NP,1);
    for i = 1:NP
        affinity(i) = h(f(decode2to10(pop(i,:))));
    end
    
    %根据亲和度大小排序
    [~,index] = sort(affinity,'descend');
    sortpop = pop(index,:);
    
    %活化:对前NP*(1-Fn)个个体进行免疫操作
    for i = 1:round(NP*(1-Fn))
        %克隆:
        ca = repmat(sortpop(i,:), Ncl, 1);
        %变异:对每个克隆体,随机选取三位取反
        for j = 2:Ncl
            indexx = ceil(18*rand(1,3));
            for k = 1:3
                if ca(j,indexx(k)) == 0
                    ca(j,indexx(k)) = 1;
                else
                    ca(j,indexx(k)) = 0;
                end
            end
        end
        %克隆抑制
        affi_ca = zeros(1,Ncl);
        for j = 1:Ncl
            affi_ca(j) = h(f(decode2to10(ca(j,:))));
        end
        [~,indexx] = sort(affi_ca,'descend');
        pop(i,:) = ca(indexx(1),:);
    end
    
    %种群刷新
    pop((round(NP*(1-Fn))+1):NP,:) = round(rand((NP-round(NP*(1-Fn))),N));
    
end

%迭代结束,计算最终种群的亲和度
final_pop = zeros(1,NP);
for i = 1:NP
    final_pop(i) = f(decode2to10(pop(i,:)));
end
affinity = h(final_pop);

%输出前10个看看?
final_pop(1:10)
affinity(1:10)
代码输出:

二十代就收敛,太惊艳了!(一开始我还用了1000代,MATLAB算了二三十秒/笑哭)

代码输出

  • 11
    点赞
  • 116
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
原生人工免疫算法(Native Artificial Immune Algorithm,NAIA)和人工免疫算法(Artificial Immune Algorithm,AIA)是两种不同的免疫算法。 原生人工免疫算法是一种基于生物免疫系统的计算模型,它模拟了人体免疫系统中的主要机制和过程。它通过构建抗体库、选择、克隆和突变等操作来搜索最优解。原生人工免疫算法主要包括以下几个步骤: 1. 初始化:生成初始抗体库。 2. 选择:根据适应度函数选择一部分抗体作为父代。 3. 克隆:根据适应度值克隆父代抗体,生成克隆群体。 4. 突变:对克隆群体进行突变操作,引入新的抗体。 5. 更新:根据适应度函数更新抗体库。 6. 终止条件:达到预定的终止条件。 人工免疫算法是一种基于免疫系统的启发式优化算法,它通过模拟免疫系统中的抗体、抗原和免疫记忆等概念来进行问题求解。人工免疫算法主要包括以下几个步骤: 1. 初始化:生成初始抗体群体。 2. 选择:根据适应度函数选择一部分抗体作为父代。 3. 克隆:根据适应度值克隆父代抗体,生成克隆群体。 4. 变异:对克隆群体进行变异操作,引入新的抗体。 5. 更新:根据适应度函数更新抗体群体。 6. 终止条件:达到预定的终止条件。 区别: 1. 原生人工免疫算法是一种基于生物免疫系统的计算模型,而人工免疫算法是一种基于免疫系统的启发式优化算法。 2. 在选择操作上,原生人工免疫算法根据适应度函数选择一部分抗体作为父代,而人工免疫算法也是根据适应度函数选择一部分抗体作为父代。 3. 在突变操作上,原生人工免疫算法对克隆群体进行突变操作,而人工免疫算法对克隆群体进行变异操作。 4. 在更新操作上,原生人工免疫算法根据适应度函数更新抗体库,而人工免疫算法根据适应度函数更新抗体群体。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值