MATLAB人工蜂群算法求解超市物流配送选址问题代码实例

MATLAB人工蜂群算法求解超市物流配送选址问题代码实例

MATLAB人工蜂群算法求解超市物流配送选址问题代码实例

人工蜂群算法编程问题实例:
在范围为(0,0)到(100,100)的矩形区域内,散布着40个连锁超市,各个连锁超市的坐标及需求量见表1。要求在该矩形区域内确定6个位置建立配送中心。已知各配送中心容量不限,每个超市只由一个配送中心负责配送,使得6个配送中心到所有超市的总配送物流量(距离×需求量)最小,其中配送中心到超市的距离为直线距离。请建立该问题的模型,利用人工蜂群算法编程求解上述问题。
表1 各需求点坐标及需求量
No. 坐标 需求量 No. 坐标 需求量 No. 坐标 需求量 No. 坐标 需求量
1 (1,0) 10 11 (82,95) 30 21 (56,34) 70 31 (17,80) 90
2 (33,3) 10 12 (21,42) 40 22 (86,26) 20 32 (29,33) 50
3 (35,21) 40 13 (95,83) 30 23 (17,42) 10 33 (40,24) 20
4 (53,19) 10 14 (92,81) 20 24 (69,16) 20 34 (41,5) 40
5 (70,94) 40 15 (45,60) 20 25 (53,64) 30 35 (49,98) 10
6 (27,44) 30 16 (66,59) 30 26 (62,0) 30 36 (0,40) 40
7 (10,69) 10 17 (54,72) 20 27 (78,26) 30 37 (6,7) 20
8 (56,4) 20 18 (11,40) 10 28 (46,38) 20 38 (25,97) 20
9 (16,81) 40 19 (12,67) 20 29 (37,58) 50 39 (35,40) 30
10 (68,76) 30 20 (47,49) 30 30 (60,27) 30 40 (19,19) 50

2 求解模型的人工蜂群算法设计
人工蜂群算法是模仿蜜蜂行为提出的一种优化方法,是集群智能思想的一个具体应用,它的主要特点是不需要了解问题的特殊信息,只需要对问题进行优劣的比较,通过各人工蜂个体的局部寻优行为,最终在群体中使全局最优值突现出来,有着较快的收敛速度。为了解决多变量函数优化问题,Karaboga提出了人工蜂群算法ABC模型(artificial bee colony algorithm)。
人工蜂群算法属于群智能算法的一种,其受启发于蜜蜂的寻蜜和采蜜过程,相比于常见的启发式算法,它的优点在于其使用了较少的控制参数,并且鲁棒性强,在每次迭代过程中都会进行全局和局部的最优解搜索,因此能够找到最优解的概率大大增加。
相比于遗传算法来说,人工蜂群算法在局部的收敛和寻优能力上要更为出色,不会出现遗传算法的“早熟”现象,并且算法的复杂度也较低。但由于遗传算法有交叉以及变异的操作,因此遗传算法在全局最优值的搜索上要优于人工蜂群算法。此外,人工蜂群算法适用于进行连续函数的全局优化问题,而不适用于一些离散函数。
2. 蜜蜂的采蜜机制
蜜蜂具有群智能应必备的两个条件:自组织性和分工合作性。虽然单个蜜蜂的行为很简单,但是由单个蜜蜂所组成的群体却能够表现出极其复杂的行为,它们可以在任何复杂的环境下以很高的效率从花朵中采集花蜜,同时还能够很快的适应环境的改变。

任务分工
人工蜂群算法就是模拟蜜蜂的采蜜过程而提出的一种新型智能优化算法,它也是由食物源、雇佣蜂和非雇佣蜂三部分组成。
食物源:食物源即为蜜源。在任何一个优化问题中,问题的可行解都是以一定形式给出的。在人工蜂群算法中,食物源就是待求优化问题的可行解,是人工蜂群算法中所要处理的基本对象。食物源的优劣即可行解的好坏是用蜜源花蜜量的大小即适应度来评价的。
雇佣蜂:雇佣蜂即为引领蜂(采蜜蜂)与食物源的位置相对应,一个食物源对应一个引领蜂。在人工蜂群算法中,食物源的个数与引领蜂的个数相等;引领蜂的任务是发现食物源信息并以一定的概率与跟随蜂分享;概率的计算即为人工蜂群算法中的选择策略,一般是根据适应度值以轮盘赌的方法计算。
非雇佣蜂:非雇佣蜂包括跟随蜂(观察蜂)和侦査蜂。跟随蜂在蜂巢的招募区内根据引领蜂提供的蜜源信息来选择食物源,而侦查蜂是在蜂巢附近寻找新的食物源。在人工蜂群算法中,跟随蜂依据引领蜂传递的信息,在食物源附近搜索新食物源,并进行贪婪选择。若一个食物源在经过多次后仍未被更新,则此引领蜂变成侦査蜂,侦查蜂寻找新的食物源代替原来的食物源。
采蜜机制
在蜜蜂群体智能形成的过程中,蜜蜂之间的信息交流是最重要的环节,而舞蹈区是蜂巢中最重要的信息交换地。采蜜蜂在舞蹈区通过跳摇摆舞与其他蜜蜂共同分享食物源的信息,观察蜂则是通过采蜜蜂所跳的摇摆舞来获得当前食物源的信息的,所以,观察蜂要以最小的资源耗费来选择到哪个食物源采蜜。因此,蜜蜂被招募到某个食物源的概率与食物源的收益率成正比。

初始时刻,蜜蜂的搜索不受任何先验知识的决定,是完全随机的。此时的蜜蜂有以下两种选择:
它转变成为侦察蜂,并且由于一些内部动机或可能的外部环境自发地在蜂巢附近搜索食物源;
在观看了摇摆舞之后,它可能被招募到某个食物源,并且开始开采食物源。
在蜜蜂确定食物源后,它们利用自己本身的存储能力来记忆位置信息并开始采集花蜜。此时,蜜蜂将转变为“雇佣蜂”。蜜蜂在食物源处采集完花蜜,回到蜂巢并卸下花蜜后有如下选择:
放弃食物源成为非雇佣蜂;
跳摇摆舞为所对应的食物源招募更多的蜜蜂,然后回到食物源采蜜;
继续在同一食物源采蜜而不进行招募。
蜜蜂在采蜜时所表现出来的这种自组织性和合理分配性主要由其自身的基本性质所决定的,它们所特有的基本性质如下:
正反馈性:食物源的花蜜量与食物源被选择的可能性成正比;
负反馈性:蜜蜂停止对较差食物源的开采过程;
波动性:在某个食物源被放弃时,随机搜索一个食物源替代原食物源;
互动性:蜜蜂在舞蹈区与其他蜜蜂共同分享食物源的相关信息。
3. 蜂群算法的原理及流程
标准的ABC算法通过模拟实际蜜蜂的采蜜机制将人工蜂群分为3类: 采蜜蜂、观察蜂和侦察蜂。整个蜂群的目标是寻找花蜜量最大的蜜源。在标准的ABC算法中,采蜜蜂利用先前的蜜源信息寻找新的蜜源并与观察蜂分享蜜源信息;观察蜂在蜂房中等待并依据采蜜蜂分享的信息寻找新的蜜源;侦查蜂的任务是寻找一个新的有价值的蜜源,它们在蜂房附近随机地寻找蜜源。
算法原理

算法流程
人工蜂群算法具体实现步骤:
MATLAB人工蜂群算法求解超市物流配送选址问题代码实例_第1张图片
MATLAB人工蜂群算法求解超市物流配送选址问题代码实例_第2张图片

人工蜂群算法流程图

MATLAB人工蜂群算法求解超市物流配送选址问题代码实例_第3张图片

已知信息:40个超市的坐标位置图

如何确定6个位置建立配送中心,使得6个配送中心到所有超市的总配送物流量(距离×需求量)最小呢?当然是通过算法优化求解啦!

先看下求解结果!
运行结果:
MATLAB人工蜂群算法求解超市物流配送选址问题代码实例_第4张图片

MATLAB人工蜂群算法求解超市物流配送选址问题代码实例_第5张图片MATLAB人工蜂群算法求解超市物流配送选址问题代码实例_第6张图片

最优解:
所选配送中心编号(共6个): 3 31 11 15 30 12
下面求解出来的第一列表示超市编号,第二列表示对应的配送中心编号:
超市编号 对应的配送中心编号
1 3
2 3
4 30
5 11
6 12
7 31
8 30
9 31
10 11
13 11
14 11
16 15
17 15
18 12
19 31
20 15
21 30
22 30
23 12
24 30
25 15
26 30
27 30
28 30
29 15
32 12
33 3
34 3
35 11
36 12
37 3
38 31
39 12
40 3
总配送物流量:13904.5804

麦哥个人简介及代码获取方式

你可能感兴趣的:(matlab,matlab,算法,开发语言)