化妆品营销型网站案例/免费域名注册网站
Immunity Algorithm免疫算法
智能算法是路线规划、深度学习等等一系列领域所使用的优化算法,是算法进阶之路的必备之路。前言:本文主要围绕解决TSP旅行商问题展开,对于机器人的路线规划以及非线性方程求解的问题等解决方案
对于一些其他智能算法例如遗传算法解决一些现实问题都有实现!!
效果图:

1、什么是免疫算法
将免疫概念及其理论应用于遗传算法,在保留原算法优良特性的前提下,力图有选择、有目的地利用待求问题中的一些特征信息或知识来抑制其优化过程中出现的退化现象,这种算法称为免疫算法(Immune Algorithm) IA。人工免疫算法是一种具有生成+检测 (generate and test)的迭代过程的群智能搜索算法。从理论上分析,迭代过程中,在保留上一代最佳个体的前提下,免疫算法是全局收敛的。
也就是说,免疫算法的思想来自于生物体的免疫机制,构造具有动态性和自适应性的信息防御机制,用来抵抗外部无用的有害信息的侵入(退化解),从而保证信息的有效性和无害性(最优解)。
注:退化解的来自于变异等操作过后的适应度值低于父类的解。
1.1 生物免疫系统
在生物课上学过,免疫系统的构成元素主要是淋巴细胞,淋巴细胞包括B细胞和T细胞。
- T细胞主要在收到抗原刺激后可以分化成淋巴母细胞,产生多种淋巴因子,引起细胞免疫反应。
- B细胞又称为抗体形成细胞,可以产生抗体,抗体会同抗原产生一系列的反应,最后通过吞噬细胞的作用来消灭抗原。并且抗体具有专一性,而且免疫系统具备识别能力和记忆能力,可以对旧抗原做出更快的反应。
免疫系统和一般免疫算法的比较:
免疫系统 | 免疫算法 |
---|---|
抗原 | 待解决的问题,例如方程最优解、TSP等等 |
抗体 | 最优解 |
抗原识别 | 问题识别 |
从记忆细胞产生抗体 | 找到以往的成功例子 |
淋巴细胞的分化 | 最优解的保持 |
细胞抑制 | 剩余候选解的消除 |
抗体增强 | 利用遗传算子产生新的抗体 |
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、结果


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

MATLAB智能算法 - Immunity Algorithm免疫算法
Immunity Algorithm免疫算法 智能算法是路线规划、深度学习等等一系列领域所使用的优化算法,是算法进阶之路的必备之路。 前言:本文主要围绕解决TSP旅行商问题展开,对于机器人的路线规划以及非线性方程求解的问题等解决方案 对于一些其他智能…...

学习eNSP对提升就业竞争力有多大帮助?
学习eNSP(Enterprise Network Simulation Platform)对提升就业竞争力有显著帮助,具体表现在以下几个方面: 1. **增强专业技能**:通过eNSP,你可以模拟华为的网络设备,进行网络设计、配置和故障排…...

Molmo和PixMo:为最先进的多模态模型提供开放权重和开放数据
摘要 https://arxiv.org/pdf/2409.17146 当今最先进的多模态模型仍然是专有的。性能最强的开源模型严重依赖专有视觉语言模型(Vision-Language Model,简称VLM)的合成数据来获得良好性能,有效地将这些封闭模型提炼为开放模型。因此,业界仍然缺少关于如何从零开始构建高性能…...

day02_计算机常识丶第一个程序丶注释丶关键字丶标识符
计算机常识 计算机如何存储数据 计算机世界中只有二进制。那么在计算机中存储和运算的所有数据都要转为二进制。包括数字、字符、图片、声音、视频等。 进制 进制也就是进位计数制,是人为定义的带进位的计数方法 实例: // 在java 中 可以使用不同…...

【Trick】IOS系统解决“未受信任的企业级开发者”问题
问题: 本人通过扫码下载了一个软件,下载完毕后出现以下提示: 解决方法: 这个主要是操作系统的问题,需要在设置里面更改,具体步骤如下: 【1】打开设置,选择【通用】 【2】选择【VP…...

理解 React 中的 ReactElement、children 和 ReactNode
1. 什么是 ReactElement? ReactElement 是 React 用来描述 UI 界面元素的最基本的对象,是构建虚拟 DOM 的核心元素。 定义:ReactElement 是不可变的对象,表示界面中的某个元素。它包含了用于渲染 UI 所需的信息,如元…...

纯血鸿蒙正式登场,华为这新机给我看傻了
从 vivo 率先开炮 X200 系列,手机的白热化战斗序幕马上也就要揭开了。 就在昨天,骁龙于夏威夷召开骁龙峰会。 性能提升和咱们以往的爆料差距不大。 只是高通又双叒叕给自己改名了。新命名为 Snapdragon 8 Elite,官方翻译是骁龙 8 至尊版。 …...

c语言中的%运算和/运算
在C语言中,%运算和/运算分别表示取模运算和除法运算。以下是它们的详细解释和用法: 1. % 运算(取模运算) 取模运算用于计算两个整数相除后的余数。语法如下: result a % b; a 是被除数。b 是除数。result 是 a 除…...

【MySQL】多表查询——内连接,左/右连接
目录 准备工作 1.多表查询 2.INNER JOIN(内连接) 2.1.笛卡尔积 1.2.笛卡尔积的过滤 1.3.INNER JOIN(显式内连接) 1.4.SELF JOIN(自连接) 3. LEFT JOIN(左连接) 3.1.一个例子…...

Naicat连接本地CentOS 7虚拟机上的MySQL数据库失败解决办法
注意:Navicat主机栏填的是Centos虚拟机的IP地址 一、检查mysql容器 确保网络正常、保证mysql容器处于运行中且用户名、密码和端口正确。 1、查看mysql容器是否运行 docker ps2、查看mysql容器详细信息,可查看端口 docker inspect mysql二、检查防火墙…...

transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010)的计算过程
cifar10数据集的众多demo中,在数据加载环节,transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010)这条指令是经常看到的。这是一个 PyTorch 中用于图像数据标准化的函数调用,它将图像的每个通道的值进行标准化处理&…...

Excel表格如何修改“打开密码”,简单几步,轻松搞定
在保护Excel文件的安全性时,设置打开密码是常见且有效的方式。然而,有时我们需要修改已经设置的打开密码,以确保文件安全性或更新密码信息。今天小编来分享一下修改Excel文件打开密码的方法,操作简单,一起来看看吧&…...

pandas 数据分析实战
一、pandas常用数据类型 series,带标签的一维数组。类似于字典,但是键作为索引。 datatimeindex,时间序列。 dataframe,带标签且大小可变的二维表格结构。 panel,带标签且大小可变的三维数组。 1.一维数组与操…...

antd vue 输入框高亮设置关键字
<highlight-textareaplaceholder"请输入主诉"type"textarea"v-model"formModel.mainSuit":highlightKey"schema.componentProps.highlightKey"></highlight-textarea> 参考链接原生input,textarea demo地址 …...

python——扑克牌案列
斗地主发牌程序: 模拟一个斗地主发牌程序,实现对三个玩家进行手牌的派发,实现功能: ********** 欢迎进入 XX 斗地主 ********** 请输入玩家姓名:<用户控制台输入 A> 请输入玩家姓名:<用户控制台输…...

Java最全面试题->Java基础面试题->JavaWeb面试题->Git/SVN面试题
文章目录 Git/SVN面试题Git和SVN有什么区别?SVN优缺点?Git优缺点?说一下Git创建分支的步骤?说一下Git合并的两种方法以及区别?Git如何查看文件的提交历史和分支的提交历史?什么是 git stash?什么是git sta…...

引进Menu菜单与新增验证上传图片功能--系统篇
我的迭代小系统要更新2点。一是后台需要引进一种导航,众多导航之中我选择了Menu菜单。二是上传图片接口需要新增验证上传图片环节。先看看更新2点后的效果 引进Menu菜单效果如下,这部分修改后台前端代码 引进Menu菜单后,Menu菜单的默认数据我…...

安装Python及pip使用方法详解
一、安装Python Python是一种广泛使用的高级编程语言,其安装过程相对简单。以下是具体步骤: 访问Python官网: 打开浏览器,访问Python的官方网站[python.org](https://www.python.org/),确保下载的是最新版本的Python安…...

利用Arcgis进行沟道形态分析
在做项目的时候需要学习到水文分析和沟道形态分析的学习,所以自己摸索着做了下面的工作和内容。如有不对请多指正!! 一、沟道形态分析概述 沟道形态分析是水文分析的一个重要方面,用于研究河流的形态和特征。沟道形态分析可以帮助…...

Excel:vba实现筛选出有批注的单元格
实现的效果:代码: Sub test() Dim cell As RangeRange("F3:I10000").ClearlastRow Cells(Rows.Count, "f").End(xlUp).Row MsgBox lastrow For Each cell In Range("a1:a21")If Not cell.Comment Is Nothing ThenMsgBox…...

RabbitMQ 发布确认模式
RabbitMQ 发布确认模式 一、原理 RabbitMQ 的发布确认模式(Publisher Confirms)是一种机制,用于确保消息在被 RabbitMQ 服务器成功接收后,发布者能够获得确认。这一机制在高可用性和可靠性场景下尤为重要,能够有效防止…...

【面试题】什么是SpringBoot以及SpringBoot的优缺点
什么是SpringBoot以及SpringBoot的优缺点 什么是SpringBoot SpringBoot是基于Spring的一个微框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。 SpringBoot的优点 可以创建独立的Spring应用程序,并且基于其Maven或Gradle插件,可以创建可执…...

git区分大小写吗?如果不区分,那要如何设置?
git区分大小写吗?如果不区分,那要如何设置? "Git在文件名的大小写方面是区分大小写的,但在某些操作系统(如Windows和macOS)上,文件系统默认是不区分大小写的。这可能导致一些问题…...

Docker 安装使用
1. 下载 下载地址:Index of linux/static/stable/x86_64/ 下载好后,将文件docker-18.06.3-ce.tgz用WinSCP等工具,上传到不能外网的linux系统服务器 2. 安装 解压后的文件夹docker中文件如下所示: 将docker中的全部文件ÿ…...

Linux Docker配置镜像加速
Docker配置常用镜像加速地址包含阿里、腾讯、百度、网易 1. 编辑docke配置文件 vim /etc/docker/daemon.json写入以下内容 {"registry-mirrors": ["https://docker.mirrors.aliyuncs.com","https://registry.docker-cn.com","https://mi…...

了解CSS Typed OM
CSS Typed OM(CSS Typed Object Model)是一项前沿的技术,旨在改变我们编写和操作CSS的方式。以下是对CSS Typed OM的详细解析: 一、CSS Typed OM概述 CSS Typed OM是一个包含类型和方法的CSS对象模型,它暴露了作为Ja…...

[ 钓鱼实战系列-基础篇-6 ] 一篇文章让你了解邮件服务器机制(SMTP/POP/IMAP)-2
🍬 博主介绍 👨🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…...

在 Docker 中搭建 PostgreSQL16 主从同步环境
1. 环境搭建 本文介绍了如何在同一台机器上使用 Docker 容器搭建 PostgreSQL 的主从同步环境。通过创建互联网络和配置主库及从库,详细讲解了数据库初始化、角色创建、数据同步和验证步骤。主要步骤包括设置主库的连接信息、创建用于复制的角色、使用 pg_basebacku…...

SpringCloud无介绍快使用,sentinel服务熔断功能与持久化(二十四)
TOC 问题背景 从零开始学springcloud微服务项目 注意事项: 约定 > 配置 > 编码IDEA版本2021.1这个项目,我分了很多篇章,每篇文章一个操作步骤,目的是显得更简单明了controller调service,service调dao默认安装ngi…...

判断浏览器环境,前端打开微信浏览器
我们知道微信浏览器有自带针对微信的组件(比如:微信JSAPI支付使用的WeixinJSBridge),那么,有办法在普通浏览器中打开微信浏览器并跳转页面吗?(似乎微信已禁用外部浏览器调用的普通页面直接跳转,只能通过“weixin://前缀…...