免疫算法的基本思想

生物免疫系统是一个高度进化的生物系统,它旨在区分外部有害抗原和自身组织,从而保持有机体的稳定。从计算角度看,生物免疫系统是一个高度并行、分布、自适应和自组织的系统,具有很强的学习、识别和记忆能力。
免疫系统具有如下特征:
(1)产生多样抗体的能力。通过细胞的分裂和分化作用,免疫系统可产生大量的抗体来抵御各种抗原。
(2)自我调节机构。免疫系统具有维持免疫平衡的机制,通过对抗体的抑制和促进作用,能自我调节产生适当数量的必要抗体。
(3)免疫记忆功能。产生抗体的部分细胞会作为记忆细胞被保存下来,对于今后侵入的同类抗原,相应的记忆细胞会迅速激发而产生大量的抗体。
免疫算法( immune algorithm)正是受生物免疫系统启发,在免疫学理论基础上发展起来的一种新兴的智能计算方法。它利用免疫系统的多样性产生和维持机制来保持群体的多样性,克服了一般寻优过程尤其是多峰函数寻优过程中难处理的“早熟”问题,最终求得全局最优解。与其他智能算法相比,免疫算法的研究起步较晚,其发展历史只有短短二十几年。 Farmer等于1986年率先基于免疫网络学说构造了免疫系统的动态模型,并探讨了免疫系统与其他人工智能方法的联系,从而开创了免疫系统的研究。
免疫算法和遗传算法都是采用群体搜索策略,并且强调群体中个体间的信息交换,因此有许多相似之处,比如两者具有大致相同的算法结构,都要经过“初始种群产生→评价标准计算种群间个体信息交换→新种群产生”这一循环过程,最终以较大的概率获得问题的最优解;另外,两者本质上具有并行性,具有与其他智能计算方法结合的固有优势等免疫算法和遗传算法之间也存在一些区别,主要表现为对个体的评价、选择及产生的方式不同。遗传算法中个体的评价是通过计算个体适应度得到的,算法选择父代个体的唯一标准是个体适应度;而免疫算法对个体的评价则是通过计算亲和度( affinity)得到的,个体的选择也是以亲和度为基础进行的。个体的亲和度包括抗体-抗原之间的亲和度(匹配程度)和抗体抗体之间的亲和度(相似程度),它反映了真实的免疫系统的多样性,因此免疫算法对个体的评价更加全面,其个体选择方式也更为合理。此外,遗传算法通过交叉、变异等遗传操作产生新个体,而在免疫算法中,虽然交叉、变异等固有的遗传操作也被广泛应用,但是新抗体的产生还可以借助克隆选择、免疫记忆、疫苗接种等遗传算法中所欠缺的机理,同时免疫算法中还对抗体的产生进行促进或者抑制,体现了免疫反应的自我调节功能,保证了个体的多样性本案例把免疫优化算法用于物流配送中心选址问题中。在考虑该问题的约束条件和优化目标的基础上,建立了物流配送中心选址问题的数学模型,并采用免疫优化算法求解最佳物流配送中心选址模型。

免疫算法流程图

免疫算法具体实现步骤如下:

(1)分析问题。对问题及其解的特性进行分析,设计解的合适表达形式。
(2)产生初始抗体群。随机产生N个个体并从记忆库中提取m个个体构成初始群体,其中m为记忆库中个体的数量。
(3)对上述群体中各个抗体进行评价。在本算法中对个体的评价是以个体的期望繁殖率P为标准的。
(4)形成父代群体。将初始群体按期望繁殖率P进行降序排列,并取前N个个体构成父代群体;同时取前m个个体存入记忆库中。
(5)判断是否满足结東条件,是则结束;反之,则继续下一步操作。
(6)新群体的产生。基于步骤(4)的计算结果对抗体群体进行选择、交叉、变异操作得到新群体,再从记忆库中取出记忆的个体,共同构成新一代群体。
(7)转去执行步骤(3)。
2.初始抗体群的产生如果记忆库非空,则初始抗体群从记忆库中选择生成。否则,在可行解空间随机产生初始抗体群。此处采用简单编码方式。每个选址方案可形成一个长度为p的抗体(p表示配送中心数量),每个抗体代表被选为配送中心的需求点的序列。例如,考虑包含31个需求点的问题。1,2,…,31代表需求点的序号。从中选出6个作为配送中心。抗体【2715212911代表一个可行解,它表示2,7,15,21,29,11被选为配送中心。

matlab代码主程序

%% 算法基本参数
sizepop=80;           % 种群规模
overbest=10;          % 记忆库容量
MAXGEN=500;            % 迭代次数
pcross=0.9;           % 交叉概率
pmutation=0.4;        % 变异概率
ps=0.95;              % 多样性评价参数
length=3;             % 配送中心数
M=sizepop+overbest;%% step1 识别抗原,将种群信息定义为一个结构体
individuals = struct('fitness',zeros(1,M), 'concentration',zeros(1,M),'excellence',zeros(1,M),'chrom',[]);
%% step2 产生初始抗体群
individuals.chrom = popinit(M,length);
trace=[]; %记录每代最个体优适应度和平均适应度%% 迭代寻优
for iii=1:MAXGEN
individuals.chrom(71:80,:) = popinit1(M,length);%% step3 抗体群多样性评价for i=1:Mindividuals.fitness(i) = fitness(individuals.chrom(i,:));      % 抗体与抗原亲和度(适应度值)计算individuals.concentration(i) = concentration(i,M,individuals); % 抗体浓度计算end% 综合亲和度和浓度评价抗体优秀程度,得出繁殖概率individuals.excellence = excellence(individuals,M,ps);% 记录当代最佳个体和种群平均适应度[best,index] = min(individuals.fitness);   % 找出最优适应度 bestchrom = individuals.chrom(index,:);    % 找出最优个体average = mean(individuals.fitness);       % 计算平均适应度trace = [trace;best,average];              % 记录%% step4 根据excellence,形成父代群,更新记忆库(加入精英保留策略,可由s控制)bestindividuals = bestselect(individuals,M,overbest);   % 更新记忆库individuals = bestselect(individuals,M,sizepop);        % 形成父代群%% step5 选择,交叉,变异操作,再加入记忆库中抗体,产生新种群individuals = Select(individuals,sizepop);                                                             % 选择individuals.chrom = Cross(pcross,individuals.chrom,sizepop,length);                                    % 交叉individuals.chrom = Mutation(pmutation,individuals.chrom,sizepop,length);   % 变异individuals = incorporate(individuals,sizepop,bestindividuals,overbest);                               % 加入记忆库中抗体      end%% 画出免疫算法收敛曲线
figure(1)
plot(trace(:,1));
hold on
plot(trace(:,2),'--');
legend('最优适应度值','平均适应度值')
title('免疫算法收敛曲线','fontsize',12)
xlabel('迭代次数','fontsize',12)
ylabel('适应度值','fontsize',12)%% 画出配送中心选址图
%城市坐标
city_coordinate=[14393.67118   15982.93571
15578.26581 15126.81587
12980.19897 19082.99208
13448.64623 9191.055141
5565.344955 17855.54085
10676.16465 20286.67539
15532.37892 20511.26032
10744.66086 13741.52026
9739.047388 16077.78973
24614.53094 8772.402477
12107.67976 19195.81046
9544.584975 17222.1475
14515.96198 16188.06622
13324.12791 10260.12536
6476.734372 21610.99692
12871.60742 15916.52887
13943.48958 9910.694928
14122.35936 16035.80385
7711.336802 17900.94716
0   16482.38888
12583.58921 9110.463728
27599.40646 14197.8759
18311.09755 20850.44231
13607.35696 10049.91967
18590.09431 0];
carge=[259
391
637
644
939
573
634
748
422
384
973
965
352
518
376
874
442
617
253
343
542
238
492
739
653];
%找出最近配送点
for i=1:25distance(i,:)=dist(city_coordinate(i,:),city_coordinate(bestchrom,:)');
end
[a,b]=min(distance');index=cell(1,length);for i=1:length
%计算各个派送点的地址
index{i}=find(b==i);
end
figure(2)
title('最优规划派送路线')
cargox=city_coordinate(bestchrom,1);
cargoy=city_coordinate(bestchrom,2);
plot(cargox,cargoy,'rs','LineWidth',2,...'MarkerEdgeColor','r',...'MarkerFaceColor','b',...'MarkerSize',20)
hold onplot(city_coordinate(:,1),city_coordinate(:,2),'o','LineWidth',2,...'MarkerEdgeColor','k',...'MarkerFaceColor','g',...'MarkerSize',10)for i=1:25x=[city_coordinate(i,1),city_coordinate(bestchrom(b(i)),1)];y=[city_coordinate(i,2),city_coordinate(bestchrom(b(i)),2)];plot(x,y,'c');hold on
end

运行结果



各种结果如上,配送中心位置为4,12,13,

代码优化

此代码在基本算法的前提下,改进了优化程序,使得每次运行出来的结果最优,而不是每次运行出来结果不同。

如需帮忙请联系

matlab免疫算法求解配送中心选址问题相关推荐

  1. 货物配送问题的matlab,免疫算法求解配送中心选址问题matlab代码

    免疫算法求解配送中心选址问题matlab代码 所属分类:matlab例程 开发工具:matlab 文件大小:31KB 下载次数:3 上传日期:2020-12-01 16:11:00 上 传 者:代码大 ...

  2. 【物流选址】基于matlab免疫算法求解物流选址问题【含Matlab源码 020期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[物流选址]基于matlab免疫算法求解物流选址问题[含Matlab源码 020期] 获取代码方式2: 付费专栏Matlab路径规划(初级版 ...

  3. 遗传算法 求解物流配送中心选址问题 免疫算法物流配送中心选址

    遗传算法 求解物流配送中心选址问题 免疫算法物流配送中心选址 VRP程序 源码+详细注释(matlab编写) 模型应用场景: 1.配送中心能够配送的总量≥各揽收站需求之和 2.一个配送中心可为多个揽收 ...

  4. 【故障检测问题】基于matlab免疫算法求解故障检测问题【含Matlab源码 196期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[故障检测问题]基于matlab免疫算法求解故障检测问题[含Matlab源码 196期] 获取代码方式2: 通过订阅紫极神光博客付费专栏,凭 ...

  5. 【IA TSP】基于matlab免疫算法求解旅行商问题【含Matlab源码 195期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[旅行商问题]基于matlab免疫算法求解旅行商问题[含Matlab源码 195期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2 ...

  6. 【优化布局】基于matlab免疫算法求解充电站最优布局【含Matlab源码 2539期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[生产调度]基于matlab免疫算法求解生产调度零等待问题[含Matlab源码 1178期] 点击上面蓝色字体,直接付费下载,即可. 获取 ...

  7. 【优化布局】免疫算法求解充电站最优布局【含Matlab源码 2539期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[生产调度]基于matlab免疫算法求解生产调度零等待问题[含Matlab源码 1178期] 点击上面蓝色字体,直接付费下载,即可. 获取 ...

  8. 【优化布局】基于免疫算法求解充电站最优布局matlab代码

    1 简介 为了普及电动汽车,以缓解我国日益严重的环境能源问题,本文研究电动汽车充换电站的选址方法,旨在利用提高电动汽车充电设施的覆盖范围,加快电动汽车的普及发展.本文建立人们日常出行模型,模拟电动汽车 ...

  9. MATLAB模拟退火算法求解超市物流配送选址问题实例

    模拟退火算法编程问题实例: MATLAB模拟退火算法求解超市物流配送选址问题实例 在范围为(0,0)到(100,100)的矩形区域内,散布着40个连锁超市,各个连锁超市的坐标及需求量见表1.要求在该矩 ...

  10. 免疫算法求解多元函数论文

    基于利用免疫算法求解多元函数最值问题                                                                  前言 人们常常说的函数y=f(x ...

最新文章

  1. java综合面试题_JAVA 综合面试题 PDF 下载
  2. [IOS]clang diagnostic、Wprotocol ..
  3. Cannot resolve bean 'xxx' less... (Ctrl+F1) Inspection info:Checks autowir
  4. Javascript的面对对象的理解 【上】(prototype,函数和对象等概念)
  5. when will the ABindings be filled for json.JSONModel in SAP UI5
  6. .NET跨平台实践:用C#开发Linux守护进程
  7. Stack View的与众不同
  8. 神经网络有趣案例_求解三体问题快了1亿倍,新型神经网络问世
  9. 零基础 5 分钟上手,程序员喜提 AIoT 新利器!
  10. dataframe基本函数
  11. C语言小游戏之贪吃蛇
  12. jsp+servelt+mysql+tomcat 四六级单词查询系统
  13. ubantu apt命令失败
  14. ftp服务器空文件夹不让删,FTP不能删除(修改)文件夹的问题?(转载)
  15. 如何开始创业(催生全美最大孵化器YC的文章)
  16. Mybatis-Plus和Mybatis的区别
  17. 【关于VB连接EXCEL数据库以ADODB方式】
  18. 介绍家乡的html源代码_APICloud Studio3.0最新功能及使用流程介绍
  19. 34岁!一位程序员在北漂路上的内心真实写照
  20. 2020T电梯修理考试题及T电梯修理考试软件

热门文章

  1. windows下安装,配置gcc编译器
  2. HCIE-Security心得
  3. Android实战开发通用流行框架大全
  4. Unity+Android GET和POST方式的简单实现API请求(人像动漫化)
  5. 金属网材质贴图素材推荐 精品 小众
  6. mid制作乐谱_【图片】分享一个自己编写的打谱软件,支持生成简谱、乐谱演奏、MID输出_简谱吧_百度贴吧...
  7. python实用性自己设计_用Python设计PCR引物: Primer3-py 初识
  8. Paper再现:MD+AI自动编码机探测蛋白变构(一):文章分析
  9. 人工智能 (特征数据提取)
  10. loma 281 - 保险与年金