智能算法之免疫算法求解TSP问题

article/2025/9/24 11:34:12

Immunity Algorithm免疫算法


前言:本文主要围绕解决TSP旅行商问题展开,对于机器人的路线规划以及非线性方程求解的问题等解决方案大家可以直接参考github源码地址,
对于一些其他智能算法例如遗传算法解决一些现实问题都有实现!! 欢迎小伙伴的star哦~~ 🤭

文章目录

    • 1、什么是免疫算法
      • 1.1 生物免疫系统
      • 1.2 免疫算法的基本原理
      • 1.3 免疫算法的基本步骤和流程
    • 2、免疫遗传算法
    • 3、免疫算法在TSP问题中的应用
      • 3.1、免疫算法的结构
      • 3.2、求解 TSP 问题流程图
      • 3.3、免疫遗传算法-TSP MatLab 实现
    • 4、结果
    • 最后

效果图:

效果图

1、什么是免疫算法

  将免疫概念及其理论应用于遗传算法,在保留原算法优良特性的前提下,力图有选择、有目的地利用待求问题中的一些特征信息或知识来抑制其优化过程中出现的退化现象,这种算法称为免疫算法(Immune Algorithm) IA。人工免疫算法是一种具有生成+检测 (generate and test)的迭代过程的群智能搜索算法。从理论上分析,迭代过程中,在保留上一代最佳个体的前提下,免疫算法是全局收敛的。

摘自百度百科

  也就是说,免疫算法的思想来自于生物体的免疫机制,构造具有动态性和自适应性的信息防御机制,用来抵抗外部无用的有害信息的侵入(退化解),从而保证信息的有效性和无害性(最优解)。
:退化解的来自于变异等操作过后的适应度值低于父类的解。

1.1 生物免疫系统

  在生物课上学过,免疫系统的构成元素主要是淋巴细胞,淋巴细胞包括B细胞和T细胞。

  • T细胞主要在收到抗原刺激后可以分化成淋巴母细胞,产生多种淋巴因子,引起细胞免疫反应。
  • B细胞又称为抗体形成细胞,可以产生抗体,抗体会同抗原产生一系列的反应,最后通过吞噬细胞的作用来消灭抗原。并且抗体具有专一性,而且免疫系统具备识别能力和记忆能力,可以对旧抗原做出更快的反应。

免疫系统和一般免疫算法的比较:

免疫系统免疫算法
抗原待解决的问题,例如方程最优解、TSP等等
抗体最优解
抗原识别问题识别
从记忆细胞产生抗体找到以往的成功例子
淋巴细胞的分化最优解的保持
细胞抑制剩余候选解的消除
抗体增强利用遗传算子产生新的抗体

1.2 免疫算法的基本原理

  免疫遗传算法解决了遗传算法早熟收敛的问题,有可能陷入局部最优解的情况,并且遗传算法具有一定的盲目性,尤其是在交叉和变异的过程中。容易产生相较于父类更加差的解,也就是退化现象的出现。如果在遗传算法中引入免疫的方法和概念,对遗传算法全局搜索进行干预,就避免了很多重复的工作。

  免疫算法在面对求解问题的时候,相当于面对各种抗原,可以提前注射疫苗,来一只退化的现象,从而保持优胜略汰的特点,使算法一直优化下去。

一般的免疫算法分为下面 3 种情况。

  1. 模仿免疫系统抗体与抗原的识别,结合抗体的产生过程而抽象出来的免疫算法。
  2. 基于免疫系统中的其他特殊机制抽象出来的算法,例如克隆选择算法。
  3. 和其他智能算法等其他的算法进行融合,例如免疫遗传算法。

1.3 免疫算法的基本步骤和流程

2、免疫遗传算法

  免疫遗传算法和遗传算法的结构一致,最大的不同之处在于在免疫遗传算法中引入了浓度调节机制。在进行选择操作的时候,遗传算法制只利用了适应度指标对个体进行评价;在免疫遗传算法当中,免疫遗传算法中的选择策略变为:适应度越高,浓度越小,个体复制的概率越大,反之越小。

  免疫遗传算法的基本思想就是在传统的算法基础上加入一个免疫算子,加入免疫算子的目的就是为了防止种群的退化。免疫算子有接种疫苗和免疫选择两个步骤组成。免疫遗传算法可以有效地调节选择压力。因此免疫算法可以保持种群多样性的能力。

免疫遗传算法的步骤和流程:

免疫遗传算法流程

3、免疫算法在TSP问题中的应用

  TSP问题是所有智能算法都要解决的问题,TSP问题就是旅行商问题,旅行商要遍历所有的城市,并且城市仅能通过一次,并且保证所经过的城市的路径最小。

3.1、免疫算法的结构

  对于个体的编码仍然采用和遗传算法中相同的实数编码结构。由于本例中要求路径最低,适应度函数就取为路径的倒数。

  采用单点交叉,交叉的位置随机,类似与遗传算法。每次遗传操作后,随机抽取一些个体进行注射抗体,进行免疫检测,即对接种了个体进行检测,如果适应度提高,则继续,否则就代表着在进行交叉和变异的过程中出现了退化现象,这时个体就会被父类代替,就是下面的表达式:

父类适应度 < 子类适应度 ? 子类 : 父类

3.2、求解 TSP 问题流程图

3.3、免疫遗传算法-TSP MatLab 实现

  主要是对参数进行初始化,包括对一些概率参数、初始种群矩阵,城市初始位置、城市之间的距离矩阵等等。
参数初始化:

N = 20;               
%城市的个数
M = N - 1;               
%种群的个数
pos = 50 * randn(N,2);
%%生成城市的坐标
global D;
%城市距离数据
D = zeros(N,N);
for i = 1 : Nfor j = i + 1 : Ndis = (pos(i, 1)-pos(j, 1)).^2+(pos(i, 2)-pos(j, 2)).^2;D(i, j) = dis^(0.5);D(j, i) = D(i, j);end
end%中间结果保存
global TmpResult;
TmpResult = [];
global TmpResult1;
TmpResult1 = [];[M, N] = size(D);  % 种群规模
pCharChange = 1;  % 个体换位概率
pStrChange = 0.4;  % 个体移位概率
pStrReverse = 0.4;  % 个体逆转概率
pCharReCompose = 0.4;  % 个体重组概率
MaxIterateNum = 100;  % 迭代次数mPopulation = zeros(N-1,N);
mRandM = randperm(N-1);  % 最优路径
mRandM = mRandM + 1;
for rol = 1:N-1mPopulation(rol,:) = randperm(N);%产生初始抗体
end

迭代过程:

count = 0;
figure(2);
while count < MaxIterateNum% 产生新抗体B = Mutation(mPopulation, [pCharChange pStrChange pStrReverse pCharReCompose]);% 计算新产生的抗体对应的适应度,并选择最优抗体mPopulation = SelectAntigen(mPopulation,B);% 保存每一代最优的个体best_pop(count + 1, :) = mPopulation(1, :);count = count + 1;
end

  变异过程,变异的过程主要保存移位、换位、逆转以及重组操作,这几个操作之间相互独立,最后拼接在一起后返回。
变异操作:

function result = Mutation(A, P)
[m,n] = size(A);
% 换位
n1 = round(P(1)*m);  % 变异的个体数
m1 = randperm(m);  % 混淆个体顺序
cm1 = randperm(n-1)+1;  % 个体变异的位置
B1 = zeros(n1,n);  % 保存变异后的个体
c1 = cm1(n-1);
c2 = cm1(n-2);
for s = 1:n1B1(s,:) = A(m1(s),:);tmp = B1(s,c1);B1(s,c1) = B1(s,c2);B1(s,c2) = tmp;
end% 移位
n2 = round(P(2)*m);
m2 = randperm(m);
cm2 = randperm(n-1)+1;
B2 = zeros(n2,n);
c1 = min([cm2(n-1),cm2(n-2)]);
c2 = max([cm2(n-1),cm2(n-2)]);
for s = 1:n2B2(s,:) = A(m2(s),:);B2(s,c1:c2) = DisplaceStr(B2(s,:),c1,c2);
end% 逆转
n3 = round(P(3)*m);
m3 = randperm(m);
cm3 = randperm(n-1)+1;
B3 = zeros(n3,n);
c1 = min([cm3(n-1),cm3(n-2)]);
c2 = max([cm3(n-1),cm3(n-2)]);
for s = 1:n3B3(s,:) = A(m3(s),:);tmp1 = [[c2:-1:c1]',B3(s,c1:c2)'];tmp1 = sortrows(tmp1,1);B3(s,c1:c2) = tmp1(:,2)';
end% 重组
n4 = round(P(4)*m);
m4 = randperm(m);
cm4 = randperm(n-1)+1;
B4 = zeros(n4,n);
c1 = min([cm4(n-1),cm4(n-2)]);
c2 = max([cm4(n-1),cm4(n-2)]);
for s = 1:n4B4(s,:) = A(m4(s),:);B4(s,c1:c2) = CharRecompose(B4(s,c1:c2));
end% 变异后个体拼接
result = [B1;B2;B3;B4];

上面的涉及几个函数分别是DisplaceStr()以及CharRecompose()

function result = DisplaceStr(inMatrix, startCol, endCol)
[m,n] = size(inMatrix);
if n <= 1result = inMatrix;return;
end
switch nargincase 1startCol = 1;endCol = n;case 2endCol = n;
end
mMatrix1 = inMatrix(:,(startCol + 1):endCol);
result = [mMatrix1, inMatrix(:, startCol)];function result = CharRecompose(A)
global D;
index = A(1,2:end);
tmp = A(1,1);
result = [tmp];
[m,n] = size(index);
while n>=2len = D(tmp,index(1));tmpID = 1;for s = 2:nif len > D(tmp,index(s))tmpID = s;len = D(tmp,index(s));endendtmp = index(tmpID);result = [result,tmp];index(:,tmpID) = [];[m,n] = size(index);
end
result = [result,index(1)];

  选择优秀的个体继续进行后续的操作,对于退化或者次优解进行去除。
选择抗体:

function result = SelectAntigen(A,B)
global D;
[m,n] = size(A);
[p,q] = size(B);
index = [A;B];
rr = zeros((m+p),2);
rr(:,2) = [1:(m+p)]';
for s = 1:(m+p)for t = 1:(n-1)rr(s,1) = rr(s,1)+D(index(s,t),index(s,t+1));endrr(s,1) = rr(s,1) + D(index(s,n),index(s,1));
end
rr = sortrows(rr,1);
ss = [];
tmplen = 0;
for s = 1:(m+p)if tmplen ~= rr(s,1)tmplen = rr(s,1);ss = [ss;index(rr(s,2),:)];end
end
global TmpResult;
TmpResult = [TmpResult;rr(1,1)];
global TmpResult1;
TmpResult1 = [TmpResult1;rr(end,1)];
result = ss(1:m,:);

4、结果

结果展示 结果展示

注: 为了说明方便将代码直接拆开展示如果需要源码可以直接最后的源码地址中找到。

最后

更多精彩内容,大家可以转到我的主页:曲怪曲怪的主页

源码地址:github地址


http://chatgpt.dhexx.cn/article/CPK3Z8p7.shtml

相关文章

免疫优化算法Python实现

免疫算法 免疫算法是模仿生物免疫机制&#xff0c;结合基因的进化机理&#xff0c;人工构造出的一种新型智能优化算法。 它具有一般免疫系统的特征&#xff0c;采用群体搜索策略&#xff0c;通过迭代计算&#xff0c;最终以较大的概率得到问题的最优解。 相比较于其他算法&am…

人工免疫算法详解

人工免疫算法&#xff08;Artificial Immune Algorithm&#xff0c;AIA&#xff09;是一种基于生物免疫系统&#xff08;BIS&#xff09;的启发式优化算法&#xff0c;是对生物免疫算法的拓展和改进。AIA 借鉴了生物免疫系统中抗体和免疫记忆细胞等概念&#xff0c;采用人工免疫…

automl-演化算法-免疫算法/免疫遗传算法

遗传算法的退化问题&#xff1a; 在对算法的实施过程中不难发现两个主要遗传算子都是在一定发生概率的条件下&#xff0c;随机地、没有指导地迭代搜索&#xff0c;因此它们在为群体中的个体提供了进化机会的同时&#xff0c;也无可避免地产生了退化的可能。在某些情况下&#x…

##智能优化算法复习--免疫算法IA

简介&#xff1a;免疫算法&#xff08;Immune Algorithm&#xff0c;IA&#xff09;是指以在人工免疫系统的理论为基础&#xff0c;实现了类似于生物免疫系统的抗原识别、细胞分化、记忆和自我调节的功能的一类算法。 免疫算法和遗传算法很类似&#xff1a; 遗传算法的思想简…

智能优化算法:冠状病毒群体免疫优化算法 -附代码

智能优化算法&#xff1a;冠状病毒群体免疫优化算法 文章目录 智能优化算法&#xff1a;冠状病毒群体免疫优化算法1.算法原理2.算法结果3.参考文献4.Matlab 摘要&#xff1a;冠状病毒群体免疫优化算法是于2020年提出的一种新型智能优化算法。 1.算法原理 冠状病毒群免疫优化算…

人工免疫算法学习通解

人工免疫算法&#xff08;Artificial Immune System&#xff0c;AIS&#xff09;是一种基于免疫系统的启发式优化算法&#xff0c;其基本思想是模拟生物体内的免疫系统对抗外部威胁的过程&#xff0c;通过生成、选择、进化、记忆和协同等机制来搜索最优解。 AIS 通常包含两个主…

【学习】人工免疫算法

开始项目后&#xff0c;我主要负责研究网络自免疫&#xff0c;对人工免疫系统有了一些初步的了解。 人工免疫特点&#xff1a; 1.识别与分类&#xff1a;可是识别自体和非自体。&#xff08;如阴性选择法建立的检测器&#xff09; 2.多样性&#xff1a;可以对进行基因重组&am…

【智能优化算法】人工免疫算法 (Immune Algorithm, IA), 1986

前言 最早的免疫系统起源于1973-1976年间Jerne的三篇关于免疫网络的文章1986年Farmer在此基础上提出了基于网络的二进制的免疫系统模拟生物免疫系统的抗原识别、细胞分化、记忆和自我调节功能的一类算法 遗传算法的思想简单讲就是父代之间通过交叉互换以及变异产生子代&#…

基于免疫优化算法的TSP算法

文章目录 一、理论基础二、案例背景1、问题描述2、解决思路及步骤(1). 算法流程(2). 算法实现过程 三、MATLAB程序实现1、程序源码2、结果分析 四、参考文献 一、理论基础 TSP(traveling salesman problem,旅行商问题)是典型的NP完全问题&#xff0c;即其最坏情况下的时间复杂…

2018-4-8免疫算法(Immune IA)

学习资料来源&#xff1a; 【图文】免疫算法_百度文库 https://wenku.baidu.com/view/39eb47ec551810a6f52486ee.html?sxts1523143415445 《智能优化算法以及matlab实现》包子阳&#xff0c;余继周 编著 自己觉的好资源&#xff0c;但是看不懂 三种人工免疫算法综述_图文…

免疫算法(二进制)算例(源码实现)

之前我们讲解了免疫算法以及离散的免疫算法。见链接&#xff1a; 万字长文了解免疫算法原理 及求解复杂约束问题&#xff08;源码实现&#xff09; 离散免疫算法求解旅行商问题(源码实现) 今天讲下二进制的免疫算法。 我爱学习&#xff0c;爱玉酱。 算例 假设一个数PD210&#…

免疫算法(Immune Algorithm)

概念 人工免疫算法(Immune Algorithm)是一种具有生成检测 (generate and test)的迭代过程的群智能搜索算法。从理论上分析&#xff0c;迭代过程中&#xff0c;在保留上一代最佳个体的前提下&#xff0c;遗传算法是全局收敛的。 对于遗传算法&#xff1a;在对算法的实施过程中…

人工免疫算法概述

一、免疫系统 什么是病毒&#xff1f; 病毒是一种简单的生活形式&#xff1a;包裹在保护壳中的一些基因。这些基因是制造新病毒的指令。 在细胞外&#xff0c;病毒无法繁殖。但是一旦病毒入侵了活细胞&#xff0c;它就会将该细胞变成病毒工厂。随着时间的流逝&#xff0c;成…

人工智能-免疫算法

这是一类智能的算法&#xff0c;没有什么固定的模式&#xff0c;就是一个算法思想&#xff0c;可以给我们一些有价值的指导&#xff0c;当我们想要做一些相关工作的时候&#xff0c;可以扩宽我们的视野&#xff0c;打开我们的脑洞&#xff0c;借鉴其中的原理。我不想多说里面的…

免疫算法Python实现

1.流程 免疫算法与遗传算法其实非常相似&#xff0c;但其独特的地方在于&#xff0c;免疫算法用激励度而非亲和度来衡量结果的好坏&#xff0c;而激励度又与抗体密度有关&#xff0c;这就使得密度大的抗体激励度反而小&#xff0c;让免疫算法有全局搜索的能力&#xff0c;不容易…

免疫算法详解

基本思想是将想要求解的各类优化问题的目标函数&#xff08;约束条件&#xff09;与抗原相对应&#xff0c;找到可以与抗原进行亲和反应的抗体&#xff0c;该抗体就是要求的最优解。 最核心要解决的就是 1.计算抗原和抗体的亲和度&#xff0c;亲和度越高&#xff0c;越可能是最…

人工免疫算法总结

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

免疫算法小结及算法实例(附Matlab代码)

文章目录 1、免疫算法流程2、关键参数说明3、MATLAB仿真实例3.1 免疫算法求一元函数的极值3.2 免疫算法求二元函数的极值3.3 免疫算法求解旅行商问题 4、免疫算法的特点 1、免疫算法流程 与遗传算法等其他智能优化算法类似&#xff0c;免疫算法的进化寻优过程也是通过算子来实…

免疫优化算法

免疫优化算法 免疫算法是模仿生物免疫机制&#xff0c;结合基因的进化机理&#xff0c;人工构造出的一种新型智能优化算法。 它具有一般免疫系统的特征&#xff0c;采用群体搜索策略&#xff0c;通过迭代计算&#xff0c;最终以较大的概率得到问题的最优解。 相比较于其他算法…

智能优化算法之免疫算法(IA)

这里写目录标题 1. 免疫算法思想起源2. 算法原理3. 免疫算法算子3.1 算法算子3.1.1 亲和度评价算子3.1.2 抗体浓度评价算子&#xff1a;3.1.3 激励度计算算子3.1.4 免疫选择算子3.1.5 克隆算子3.1.6 变异算子3.1.7 实数编码变异算子3.1.8 离散编码变异算子3.1.9 克隆抑制算子3.…