首页 > 编程语言 >免疫算法求解配送中心选址问题(附MATLAB代码)

免疫算法求解配送中心选址问题(附MATLAB代码)

时间:2022-09-29 17:03:47浏览次数:75  
标签:配送 代码 免疫 染色体 算法 MATLAB 库中 小编 选址

免疫算法求解配送中心选址问题(附MATLAB代码)_数学模型


本文参考《MATLAB智能算法30个案例分析》一书,文末的源代码也来自本书


本次推文为大家讲解免疫算法,隐约中记得一位小伙伴后台问我能否推出这样一篇推文,小编的参考资料很简单,依然是这本宝典。小编更新的推文都是一些最最基本的算法,解决的问题也是最最基本的问题。小编觉得算法的思想很重要,掌握住思想,无论问题怎么变,你都会自己定制出一份属于自己的代码。

免疫算法其实和基本的遗传算法大同小异,具体的差异体现在对个体的评价、选择以及产生的方式不同

下面以书中的问题为例,来讲解免疫算法。

免疫算法求解配送中心选址问题(附MATLAB代码)_matlab代码_02

免疫算法求解配送中心选址问题(附MATLAB代码)_遗传算法_03

免疫算法求解配送中心选址问题(附MATLAB代码)_matlab代码_04

下面来讲一下如何用免疫算法求解上述问题:


一.解的编码形式

无论用免疫算法,还是用其他算法,第一件事是如何准确地用数字的形式表达问题中的解。这个问题中假设有31个需求点,对应数学模型中n=31,其中1,2,...,31代表需求点的序号。从中选出6个作为配送中心(注意这6个点是从这31个需求点选出来的),对应数学模型中p=6,则[11 7 21 26 5 19]代表一个可行解,他表示11,7,21,26,5,19被选为配送中心。

免疫算法中有“抗体”和“抗原”这两个术语,小编觉得不太习惯,决定不讲这来个术语,而且大家一看代码就会知道免疫算法和普通的遗传算法真的是大同小异。


二.解的体评价方法

免疫算法通过期望繁殖率的大小来产生后代种群,期望繁殖率越大,差生后代的可能性越大。这里先给出期望繁殖率的计算公式

书中染色体的适应度值计算公式如下:(但小编觉得不太对,后面再给出小编认为的公式)

免疫算法求解配送中心选址问题(附MATLAB代码)_数学模型_05

其中免疫算法求解配送中心选址问题(附MATLAB代码)_遗传算法_06代表染色体v适应度值免疫算法求解配送中心选址问题(附MATLAB代码)_matlab代码_07代表染色体v的浓度。我们先给出免疫算法求解配送中心选址问题(附MATLAB代码)_遗传算法_06的计算公式:

免疫算法求解配送中心选址问题(附MATLAB代码)_数学模型_09

第一项表示目标函数值,第二项表示对违反距离约束的惩罚,代码中C取的是4,假设存在5个违反距离约束的需求点(ps.违反距离约束就意味着不满足数学模型中的公式6,代码中的s取的是3000),则对每个违反距离约束的需求点而言,免疫算法求解配送中心选址问题(附MATLAB代码)_遗传算法_10都等于0,最终免疫算法求解配送中心选址问题(附MATLAB代码)_matlab代码_11等于-5。可以看出违反距离约束的需求点越少,目标函数值越小,则适应度值越大

下面先给出一个小的定义,两个染色体之间的相似程度,顾名思义,比如说有两个染色体:[1 8 19 13 28 24] 和[7 3 19 24 30 1],这两个染色体有3个相同的基因,则这两个染色体的相似程度为3/6=0.5。因此两个染色体之间的相似程度的计算公式如下:

免疫算法求解配送中心选址问题(附MATLAB代码)_数学模型_12

免疫算法求解配送中心选址问题(附MATLAB代码)_数学模型_13为染色体v与染色体s中相同基因的个数L染色体长度

最后我们给出染色体v的浓度免疫算法求解配送中心选址问题(附MATLAB代码)_matlab代码_07的计算公式:

免疫算法求解配送中心选址问题(附MATLAB代码)_数学模型_15

免疫算法求解配送中心选址问题(附MATLAB代码)_数学模型_16

代码中T设为0.7。其实染色体v的浓度就代表染色体v与种群中其他染色体的相似程度

因此我们就得出了第一个公式:

免疫算法求解配送中心选址问题(附MATLAB代码)_数学模型_05

小编认为这个计算公式应该是:

免疫算法求解配送中心选址问题(附MATLAB代码)_数学模型_18

为什么是减第二项呢,小编认为书中既然说到个体适应值越高,期望繁殖概率越大;个体浓度越大,则期望繁殖概率越小(所以应该减第二项)这样即鼓励了适应度值高的个体,同时抑制了浓度高的个体,从而确保种群的多样性。


三.种群组成

免疫算法的种群包括两部分:记忆库和抗体库,这两个名词不用记,主要是理解这两部分都是什么就OK了。举个例子,记忆库中有10个染色体,抗体库中有50个染色体,则种群的总数目为60。代码在执行过程中采用精英保留策略(假设保留精英染色体的数目为3),即每次更新记忆库和抗体库时都会先将这60个染色体中适应度值最大的3个染色体进行保留。然后无论是记忆库还是抗体库,其余的染色体都按照期望繁殖概率由大到小排序,依次存入记忆库和抗体库。这里大家可能会发现,抗体库中的前10个染色体与记忆库中的10个染色体完全一样,没错,你答对了。


四.免疫操作

注意:免疫操作这部分仅仅使用的是抗体库中的染色体,而不使用记忆库中的染色体

这部分常规操作,小伙伴们可以参考​​遗传算法求解车间调度问题(附MATLAB代码)​​,再重新复习一下。具体的操作在这里就一带而过了。

(1)选择:按照轮盘赌选择机制进行选择操作,个体被选择的概率即为期望繁殖概率P。

(2)交叉:单点交叉。

(3)变异:随机选择变异位进行变异。


五.效果展示

初始需求点分布图:

免疫算法求解配送中心选址问题(附MATLAB代码)_数学模型_19

优化之后如下图所示:

免疫算法求解配送中心选址问题(附MATLAB代码)_数学模型_20


MATLAB代码链接(后台回复“免疫算法”提取代码):

链接:https://pan.baidu.com/s/1X3RH0yBHqcXogrAZo4BeWg 

提取码:epbx 

代码有效期只有7天,如发现链接过期,可通过公众号后台联系小编,小编会尽快给您新的链接。






标签:配送,代码,免疫,染色体,算法,MATLAB,库中,小编,选址
From: https://blog.51cto.com/u_15810430/5723535

相关文章

  • 基于蚁群的二维路径规划算法(附MATLAB代码)
    本文参考《MATLAB智能算法30个案例分析》一书,文末的源代码也来自本书前一段时间有小伙伴问能否出一个机器人路径规划的推文,小编最近努力查资料,然后学习一些新知识,然后才动笔......
  • 大规模邻域搜索(LNS)求解带时间窗的车辆路径问题(VRPTW)(附MATLAB代码)
    祝大家元宵节快乐本文引用ShawP.UsingConstraintProgrammingandLocalSearchMethodstoSolveVehicleRoutingProblems[M]//PrinciplesandPracticeofConstrai......
  • 基于粒子群算法的多目标搜索算法讲解(附MATLAB代码)
    本文依然参考《MATLAB智能算法30个案例分析》一书,文末的源代码也来自本书​上周有小伙伴后台问小编能否讲解一下关于多目标优化问题的算法,本周小编做足了功课,为大家更新这篇......
  • 混合粒子群算法通俗讲解(附MATLAB代码)
    还是先声明本文参考《MATLAB智能算法30个案例分析》今天小编为大家讲解粒子群算法(PSO),还是和往常一样,我的目的是为了带领大家快速入门,是为了让大家在最短的时间内上手粒子群......
  • 遗传算法求解车间调度问题(附MATLAB代码)
    首先声明本文参考数据魔术师公众号的《遗传算法求解混合流水车间调度问题(附C++代码)》和《MATLAB智能算法30个案例分析》今天小编为大家讲解遗传算法求解车间调度问题。小编......
  • 蚁群算法通俗讲解(附MATLAB代码)
    本文依然参考《MATLAB智能算法30个案例分析》一书,文末的源代码也来自本书今天小编与大家聊聊蚁群算法,蚁群算法一个显著的特点是蚂蚁在经过路径后会释放信息素,蚂蚁之间能够相......
  • 基础知识(5) --Matlab中特殊符号使用总结
    前言:上篇文章分享了Matlab经常会遇到(),[],与{}三种符号,下面接着捋一捋其他的特殊符号使用方法,主要有:冒号'分号&  &&与|   || 或~非.点1、:冒号冒号的主要用途是用......
  • Matlab爬虫获取王者荣耀英雄皮肤
    前言:周末闲来无事,玩了几局王者荣耀,突发奇想怎么获取到王者荣耀里面的英雄皮肤,本期分享一下如何通过matlab爬虫批量提取王者荣耀的英雄皮肤关键字:王者荣耀、爬虫、Matlab首先......
  • 在Linux上运行matlab
    1.首先在集群上把matlab这个模块加载上。moduleloadmatlabXXX2.接下来运行。matlab-nodesktop-nosplash-rmatlabfilename(不加.m,可执行文件)也可以进入matlab环......
  • Matlab绘制特殊的图形
    1、指定坐标轴刻度值和标签自定义沿坐标轴的刻度值和标签有助于突出显示数据的特定方面。以下示例说明一些常见的自定义,例如修改刻度值的放置位置、更改刻度标签的文本和格......