遗传算法和免疫算法结合用MTALB解决函数极值问题

摘要

免疫算法是模仿生物免疫机制,结合基因的进化机理,人工构造出的一种新型智能优化算法,因而具有一般免疫系统的特征。免疫算法那具有自适应性、随机性、并行性、全局收敛性、种群多样性等特点。相比于其他算法免疫算法利用自身产生多样性和维持机制的特点,保证了种群的多样性,克服了一般寻优过程中不可避免的早熟问题,可以求得全局最优解。对免疫算法进行研究,以求函数的最小值的目的,在传统的免疫算法的基础上做出改进,结合遗传算法的交叉,根据抗体与抗原的亲和度和抗体的浓度进行选择操作,亲和度高且浓度小的抗体选择概率大,进行克隆、变异、交叉、克隆抑制等免疫操作。在免疫选择中,选择亲和度评价高的解,进行克隆,变异时,设置一个交叉概率,通过与随机数比较,确定是否进行交叉,提高了解的多样性,加快了算法的收敛速度,使得算法在较小的迭代次数下可以找到较优的解,在解决函数最小值问题上,相比原来的免疫算法提加入交叉操作的免疫算法可以在更小的迭代次数中找到比较优良的解,并且准确度也有一定的提升。

目录

1.改进目的和内容 1

2.免疫算法理论 1

2.1免疫算法概念 1

2.2免疫算法特点 2

2.3免疫算法算子 3

2.4免疫算法流程 4

3.免疫算法的实现 4

4.结果分析 7

5.实验感悟 7

6.附录 8

  1. 改进目的和内容

用遗传算法中的交叉功能改良免疫算法,。免疫遗传算法根据抗体与抗原的亲和度和抗体的浓度进行选择操作,亲和度高且浓度小的抗体选择概率大,进行克隆、变异、交叉、克隆抑制等免疫操作。在免疫操作时设置一个交叉概率,随机交叉克隆得到的副本,提高解的多样性。

  1. 免疫算法理论

2.1免疫算法概念:

免疫算法是受生物免疫系统的启发而推出的一-种新 型的智能搜索算法。它是种其确定性和随机性选择相结合的、具有“勘探”与“开采”能力的启发式随机物索算法。免疫算法将优化问题中待优化的问题对应免疫应答中的抗原,可行解对目抗体(B细胞),可行解质量对应免疫细胞与抗原的亲和度。如此则可以将优化问题的寻优过程与生物免疫系统识别抗原并实现抗体进化的过程对应起来,将生物免疫应答中的进化过程抽象为数学上的进化寻优过程,形成-种智能优化算法。免疫算法是对生物免疫系统机理抽象而得的,算法中的许多概念和算子与免疫系统中的概念和免疫机理存在着对应关系。免疫算法与生物免疫系统概念的对应关系如表4.1所示。由于抗体是由B细胞产生的,在免疫算法中对抗体和B细胞不进行区分,都对应为优化问题的可行解。

2.2免疫算法特点:

  1. 全局搜索能力。模仿免疫应答过程提出的免疫算法是种具有全局搜索能力的优化算法,免疫算法在对优质抗体邻域进行局部搜索的同时利用变异算子和种群刷新算子不断产生新个体,探索可行解区间的新区域,保证算法在完整的可行解区间进行搜索,具有全局收敛性能。
    (2)多样性保持机制。免疫算法借鉴了生物免疫系统的多样性保持机制,对抗体进行浓度计算,并将浓度计算的结果作为评价抗体个体优劣的一个重要标准:它使浓度高的抗体被抑制,保证抗体种群具有很好的多样性,这也是保证算法全局收敛性能的一个重要方面。
    (3)鲁棒性强。基于生物免疫机理的免疫算法不针对特定问题,而且不强调算法参数设置和初始解的质量,利用其启发式的智能搜索机制,即使起步于劣质解种群,最终也可以搜索到问题的全局最优解,对问题和初始解的依赖性不强,具有很强的适应性和鲁棒性。
    (4)并行分布式搜索机制。免疫算法不需要集中控制,可以实现并行处理。而且,免疫算法的优化进程是一种多进程的并行优化,在探求问题最优解的同时可以得到问题的多个次优解,即除找到问题的最佳解决方案外,还会得到若干较子的备选方案,尤其适合于多模态的优化问题。

2.3免疫算法算子:

与遗传算法等其他智能优化算法类似,免疫算法的进化寻优过程也是通过算子来实现的。免疫算法的算子包括:亲和度评价算子、抗体浓度评价算子、激励度计算算子、免疫选择算子、克隆算子、变异算子、克隆抑制算子和种群刷新算子等。改进的免疫算法在传统的基础上增加了交叉概率。亲和度评价算子:亲和度表征免疫细胞与抗原的结合强度,与遗传算法中的适应度类似。亲和度评价算子通常是一个函数aff(x)S∈R,其中S为问题的可行解区间,R为实数域。函数的输入为-个抗体个体(可行解),输出即为亲和度评价结果。亲和度的评价与问题具体相关,针对不同的优化问题,应该在理解问题实质的前提下,根据问题的特点定义亲和度评价函数。通常函数优化问题可以用函数值或对函数值的简单处理(如取倒数、相反数等)作为亲和度评价,而对于组合优化问题或应用中更为复杂的优化问题,则需要具体问题具体分析。抗体浓度评价算子:抗体浓度表征抗体种群的多样性好坏。抗体浓度过高意味着种群中非常类似的个体大量存在,则寻优搜索会集中于可行解区间的一个区域,不利于全局优化。因此优化算法中应对浓度过高的个体进行抑制,保证个体的多样性。激励度计算算子:抗体激励度是对抗体质量的最终评价结果,需要综合考虑抗体亲和度和抗体浓度,通常亲和度大、浓度低的抗体会得到较大的激励度。抗体激励度的计算通常可以利用抗体亲和度和抗体浓度的评价结果进行简单的数学运算得到,免疫选择算子:免疫选择算子根据抗体的激励度确定选择哪些抗体进入克隆选择操作。在抗体群中激励度高的抗体个体具有更好的质量,更有可能被选中进行克隆选择操作,在搜索空间中更有搜索价值。克隆算子:克隆算子将免疫选择算子选中的抗体个体进行复制。

变异算子:对克隆算子得到的抗体克隆结果进行变异操作,以产生亲和度突变,实现局部搜索。变异算子是免疫算法中产生有潜力的新抗体、实现区域搜索的重要算子,它对算法的性能有很大影响。变异算子也和算法的编码方式相关,实数编码的算法和离散编码的算法采用不同的变异算子。实数编码算法变异算子:实数编码算法的变异策略是在变异源个体中加入一个小扰动,使其稍偏离原来的位置,落入源个体邻域中的另-一个位置,实现变异源邻域的搜索。散编码算法变异算子:离散编码算法以二进制编码为主,其变异策略是从变异源抗体串中随机选取几位元,改变位元的取值(取反),使其落在离散空间变异源的邻域。克隆抑制算子:用于对经过变异后的克隆体进行再选择,抑制亲和度低的抗体,保留亲和度高的抗体进入新的抗体种群。在克隆抑制的过程中,克隆算子操作的源抗体与克隆体经变异算子作用后得到的临时抗体群共同组成一个集合, 克隆抑制操作将保留此集合中亲和度最高的抗体,抑制其他抗体。由于克隆变异算子操作的源抗体是种群中的优质抗体,而克隆抑制算子操作的临时抗体集合中又包含了父代的源抗体,因此在免疫算法的算子操作中隐含了最优个体保留机制。

2.4免疫算法流程:

  1. 首先进行抗原识别,即理解待优化的问题,对问题进行可行性分析,提取先验知识,构造出合适的亲和度数,并制定各种约束条件。
  2. 然后产生初始抗体群,通过编码把问题的可行解表示成解空间中的抗体,在解的空间内随机产生一个初始种群。
  3. 对种群中的每一个可行解进行亲和度评价。
  4. 判断是否满足算法终止条件:如果满足条件,则终止算法寻优过程,输出计算结果;否则,继续寻优计算。
  5. 计算抗体浓度和激励度。
  6. 进行免疫操作,包括免疫选择、克隆、变异、交叉和克隆抑制。

     免疫选择:根据种群中抗体的亲和度和浓度计算结果选择优质抗体,使其活化;
     克隆:对活化的抗体进行克隆复制,得到若干副本;
     变异:对克隆得到的副本进行变异操作,使其发生亲和度变化;
     交叉:基于概率对克隆得到的副本进行交叉,随机选取两个副本kk和ll的第iii和jjj维进行交换,增加副本的随机性,改变亲和度。
     克隆抑制:对变异结果进行再选择,抑制亲和度低的抗体,保留亲和度高的变异结果。

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

该算法的流程图:fe67f378900e4ad29216da6832095be9.png

3.免疫算法的实现

以计算函数f(x)=(-20<=x<=20)为例,求函数的最小值

  1. 初始化免疫个体维数为D=4,,免疫种群个体数为Np=50,,最大免疫代数为10,变异概率为Pm=0.7.交叉概率pc=0.8,激励度系数为alfa=1,belta=1,相似度度阈值为detas=0.2,克隆个数为Ncl=10。
  2. :随机产生初始种群,计算个体亲和度、抗体浓度和激励度,并按激励度排序,取激励度前Np/2个个体进行克隆、变异、克隆抑制的免疫操作,设置一个随机数与交叉概率比较是否选择交叉操作,免疫后的种群进行激励度计算。
    (4):随机生成Np/2个个体的新种群,并计算个体亲和度、抗体浓度和激励度;免疫种群和随机种群合并,按激励度排序,进行免疫迭代。
    (5):判断是否满足终止条件:若满足,则结束搜索过程,输出优化值;若不满足,则继续进行迭代优化。

原始免疫算法实验结果:

b9c4946c88b344de9b595d0d86206422.png5b3144fafe8e42b8ad7a13725660d4d3.png

加入交叉操作的免疫算法:

bad9ed1b8fd741aa9b463d4e8c729098.png

fa0de4dc9e334c498aa16daef7056e11.png

4.结果分析

原始免疫算法解决f(x)=(-20<=x<=20)最小值问题时平均迭代次数在8代左右才能找到接近最优的解,而加入交叉的免疫算法在平均迭代次数在4代左右就找到了接近最优的解。且原始免疫算法结果平均在11*10.^6而改进后的算法平均在12.5*10.^6精度也有了一定的提高。证明加入了交叉的免疫算法可以明显的提高收敛速度,并且提高准确度。

  1. 实验感悟

人工智能是目前迅速发展的新兴学科,已经成为许多高新技术产品中的核心技术,也是计算机游戏等数字媒体产品中的重要设计技术。人工智能在Internet时代获得了前所未有的发展机遇,Web环境下智能信息处理技术成为推动人工智能在网络环境中发展的一大动力。由于人工智能是模拟人类智能解决问题的方法,在众多领域都具有非常广泛的应用,通过本课程的学习,了解了人工智能的基本概念、发展简史,工智能的主要研究内容与各种应用,开阔我的的视野,引导我进入人工智能各个研究领域。明白了一阶谓词逻辑、产生式、框架等基本的知识表示方法,知识图谱基本内容。清楚了基于谓词逻辑的确定性推理方法。在自动定理证明中具有重要地位的鲁宾孙归结原理。通过多个典型例题清楚地了解了将谓词公式化为子句集的步骤,利用归结原理证明定理和求解问题的方法。还有不确定性推理方法。主要学习了比较实用的可信度方法、证据理论、模糊推理方法。以及基于搜索的问题求解策略。还有重要的遗传算法、粒子群算法、蚁群算法为代表的适用于大规模优化的随机搜索算法。学习了专家系统与机器学习的概念、工作原理、建立方法,简单介绍了几个典型的专家;统实例以及开发工具。学习了人工神经网络的基本理论与方法,广泛的BP神经网络及其学习算法和Hopfeld神经网络及其在联想记忆与优化求解中的应用以及卷积神经网络、胶囊网络、生成对抗网络等深度学习前沿内容。通过本课程的学习,我掌握了人工智能的基本概念和基本原理,了解人工智能的一些前沿内容,拓宽知识面,启发思路,为今后在相关领域应用人工智能技术奠定基础。

代码

clear all;
close all;
tic;
clc;
D = 4;
NP = 50;
Xs = 20;
Xx = -20;
G = 10;
pm = 0.7;
pc=0.8;
alfa = 1;
belta = 1;
detas = 0.2;
gen = 0;
Ncl = 10;
deta0 = 1*Xs;
f = rand(D,NP)*(Xs-Xx)+Xx;
for np = 1:NP
    FIT(np) = func1(f(:,np));
end
for np = 1:NP
    for j = 1:NP
        nd(j) = sum(sqrt((f(:,np)-f(:,j)).^2));
        if nd(j) < detas
            nd(j) = 1;
        else
            nd(j) = 0;
        end
    end
    ND(np) = sum(nd)/NP;
end
FIT = alfa*FIT-belta*ND;
[SortFIT,Index] = sort(FIT);
Sortf = f (:,Index);
while gen <G
    for i = 1:NP/2
        a = Sortf(:,i);
        Na = repmat(a,1,Ncl);
        deta = deta0/gen;
        for j= 1:Ncl
            for ii = 1:D
                if rand < pm
                    Na(ii,j) = Na(ii,j)+(rand-0.5)*deta;
                end 
                if (Na(ii,j) > Xs)|(Na(ii,j)<Xx)
                    Na(ii,j) = rand*(Xs-Xx)+Xx;
                end
                hu=rand;
                if hu < pc
                    iii=randi([1,D],1,1);
                    jjj=randi([1,D],1,1);
                    kk=randi([1,Ncl],1,1);
                    ll=randi([1,Ncl],1,1);
                    temp=Na(iii,kk);
                    Na(iii,kk)=Na(jjj,ll);
                    Na(iii,ll)=temp;
                end     
            end
        end
        Na(:,1) = Sortf(:,i);
        for j = 1:Ncl
            NaFIT(j) = func1(Na(:,j));
        end
        [NaSortFIT,Index] = sort(NaFIT);
        aFIT(i) = NaSortFIT(1);
        NaSortf = Na(:,Index);
        af(:,i) = NaSortf(:,1);
    end
    for np = 1:NP/2
        for j = 1:NP/2
            nda(j) = sum(sqrt((af(:,np)-af(:,j)).^2));
            if nda(j) < detas           
            nda(j) = 1;
            else
            nda(j) = 0;
            end
        end
        aND(np) = sum(nda)/NP/2;
    end
    aFIT = alfa*aFIT - belta*aND;
    bf = rand(D,NP/2)*(Xs-Xx)+Xx;
    for np = 1:NP/2
        bFIT(np) = func1(bf(:,np));
    end
    for np = 1:NP/2
        for j =1:NP/2
            ndc(j) = sum(sqrt((f(:,np)-f(:,j)).^2));
        if ndc(j) < detas
            ndc(j) = 1;
        else
            ndc(j) = 0;
        end
    end
    bND(np) = sum(ndc)/NP/2;
end
bFIT = alfa*bFIT - belta*bND;
f1 = [af,bf];
FIT1 = [aFIT,bFIT];
[SortFIT,Index] = sort(FIT1);
Sortf = f1(:,Index);
gen = gen+1;
trace(gen) = func1(Sortf(:,1));
end
Bestf = Sortf(:,1);
trace(end);
figure,plot(trace)
xlabel('迭代次数')
ylabel('目标函数值')
title('亲和度进化曲线')
toc;
function result = func1(x)
summ = sum(x.^3);
result = summ;
end

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值