遗传算法编程问题实例:

MATLAB遗传算法求解超市物流配送中心选址问题代码实例

添加链接描述

在范围为(0,0)到(100,100)的矩形区域内,散布着40个连锁超市,各个连锁超市的坐标及需求量见表1。要求在该矩形区域内确定N个位置建立配送中心。已知各配送中心容量不限,每个超市只由一个配送中心负责配送,使得N个配送中心到所有超市的总配送物流量(距离×需求量)最小,其中配送中心到超市的距离为直线距离。请建立该问题的模型,利用遗传算法编程求解上述问题。
N可以取2,3,4,5,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 求解模型的遗传算法设计
遗传算法是一种基于自然选择和群体遗传机理的搜索算法,它模拟了自然选择和自然遗传过程中的繁殖、杂交和突变现象.再利用遗传算法求解问题时,问题的每一个可能解都被编码成一个“染色体”,即个体,若干个个体构成了群体(所有可能解).在遗传算法开始时,总是随机的产生一些个体(即初始解),根据预定的目标函数对每一个个体进行评估,给出一个适应度值,基于此适应度值,选择一些个体用来产生下一代,选择操作体现了“适者生存”的原理,“好”的个体被用来产生下一代,“坏”的个体则被淘汰,然后选择出来的个体,经过交叉和变异算子进行再组合生成新的一代,这一代的个体由于继承了上一代的一些优良性状,因而在性能上要优于上一代,这样逐步朝着最优解的方向进化.因此,遗传算法可以看成是一个由可行解组成的群体初步进化的过程.

2、编码
利用遗传算法求解问题时,首先要确定问题的目标函数和变量,然后对变量进行编码,这样做主要是因为在遗传算法中,问题的解是用数字串来表示的,而且遗传算子也是直接对串进行操作的.编码方式可以分为二进制编码和实数编码.若用二进制编码表示个体,则二进制数转化为十进制数的解码公式可以为:

其中(bi1,bi2,…bil),为某个个体的第i段,每段段长都为l,每个bik都是0或者1,Ti和Ri是第段分量Xi的定义域的两个端点.
3、遗传操作
遗传操作是模拟生物基因的操作,他的任务就是根据个体适应度对其施加一定的操作,从而实现优胜劣汰的进化过程.从优化搜索的角度来看,遗传操作可以使问题的解逐代优化,逼近最优解,遗传操作包括以下三个基本遗传算子:选择、交叉、变异.选择和交叉基本上完成了遗传算法的大部分搜索功能,变异增加了遗传算法找到最优解的能力.
3.1、选择
选择是指从群体中选择优良个体并淘汰劣质个体的操作.它建立在适应度评估的基础上.适应度越大的个体,被选中上的可能性就越大,他的“子孙”在下一代中的个数就越多,选择出来的个体就被放入配对库中.目前常用的选择方法有轮赌盘方法、最佳个体保留法、期望值法、排序选择法、竞争法、线性标准化法.
3.2、交叉
交叉就是指把两个父代个体的部分结构加以替换重组而生成新的个体的操作,交叉的目的是为了在下一代产生新的个体,通过交叉操作,遗传算法的搜索能力得到了飞跃性的提高.交叉是遗传算法获取优良个体的重要手段.交叉操作是按照一定的交叉概率在匹配库中随机的选取两个个体进行的,交叉位置也是随机的,交叉概率一般取得很大,为0.6~0.9.
3.3、变异
变异就是以很小的变异概率Pm随机地改变种群中个体的某些基因的值,变异操作的基本过程是:产生一个[0,1]之间的随机数rand,如果rand<Pm,则进行变异操作.变异操作本身是一种局部随机搜索,与选择、交叉算子结合在一起,能够避免由于选择和交叉算子而引起的某些信息永久性丢失,保证了遗传算法的有效性,使遗传算法具有了局部随机搜索能力,同时使得遗传算法能够保持群体的多样性,以防出现未成熟收敛.在变异操作中,变异概率不宜取得过大,如果Pm>0.5,遗传算法就退化为了随机搜索.

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

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

先看下求解结果!
运行结果:
选择6个配送中心的运行结果:

最优解:
总配送物流量:13904.5804
选择5个配送中心的运行结果:

选择3个配送中心的运行结果:

选择2个配送中心的运行结果:

MATLAB遗传算法求解超市物流配送选址问题实例相关推荐

  1. MATLAB粒子群算法求解超市物流配送选址问题实例

    粒子群算法编程问题实例: MATLAB粒子群算法求解超市物流配送选址问题实例 粒子群算法编程问题实例: 在范围为(0,0)到(100,100)的矩形区域内,散布着40个连锁超市,各个连锁超市的坐标及需 ...

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

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

  3. MATLAB帝国(主义)竞争算法求解超市物流配送选址问题实例

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

  4. MATLAB差分进化算法求解超市物流配送选址问题实例

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

  5. MATLAB水母搜索算法求解超市物流配送选址问题代码实例

    MATLAB水母搜索算法求解超市物流配送选址问题实例 作者:麦哥 MATLAB水母搜索算法求解超市物流配送选址问题代码实例 水母搜索算法编程问题实例: 在范围为(0,0)到(100,100)的矩形区域 ...

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

    MATLAB人工蜂群算法求解超市物流配送选址问题代码实例 MATLAB人工蜂群算法求解超市物流配送选址问题代码实例 人工蜂群算法编程问题实例: 在范围为(0,0)到(100,100)的矩形区域内,散布 ...

  7. MATLAB灰狼优化算法求解超市物流配送中心选址问题代码实例

    MATLAB灰狼算法求解超市物流配送选址问题实例 作者:麦哥 MATLAB灰狼优化算法求解超市物流配送中心选址问题代码实例 灰狼算法编程问题实例: 在范围为(0,0)到(100,100)的矩形区域内, ...

  8. MATLAB遗传算法求解物流配送中心选址问题优化代码实例

    1.简介 物流分配中心选址问题是指一定数量的客户,它们有不同数量的货物需求,有一定数量的备选中心作为配送中心.配送中心向客户提供货物的配送服务,现需要选择合适的配送中心位置(选址数量一定)或合适的配送 ...

  9. MATLAB遗传算法求解带过程时间窗和同时取送货的车辆调度问题(VRPSPDTW)代码实例

    MATLAB遗传算法求解带过程时间窗和同时取送货的车辆调度问题(VRPSPDTW)代码实例 实例问题描述:现有一配送中心向14个客户点配送牛奶,并取回奶桶.配总中心和客户点坐标及每个客户点的服务时间如 ...

最新文章

  1. Ubuntu搭建Spark运行环境
  2. mysql无法插入行_在mysql中数据才插入20多行就报错,求救啊!!!
  3. es安装ik后报错无法启动 read write
  4. mysql 嵌入式 性能_database – 在mySQL中优化嵌入式SELECT查询
  5. Python文件的读取与写入
  6. SpringMVC_Controller注解与RequestMapping
  7. 【论文写作】SpringMVC学籍管理系统如何画用例图
  8. 如何让Zen Cart 不在头部显示分类
  9. C++多线程的6种创建方法
  10. pda mysql_Mysql 基础
  11. 下洗风场分析与喷雾模拟
  12. html在手机显示时间,手机北京时间校准
  13. workgroup无法访问。您可能没有权限使用网络资源……(解决方案)
  14. 【板栗糖GIS】怎么将网络上只能在线预览文档另存为pdf(插件篇)
  15. Python3 File flush() 方法、 Python3 File write() 方法
  16. clickhouse 如何快速写入数据
  17. 【干货】Java 判断一个对象中部分属性的值是否为空
  18. 字节通常用英文单词bit来表示_又是一个看似简单但易错的C语言试题,来试一下?...
  19. 第七届中华梦乡·福清石竹山梦文化节举办
  20. 【C语言】猴子吃桃问题。

热门文章

  1. 税控盘版开票软件V2.0.53_ZS_20221231
  2. php文件aes128解密工具,aes加密解密
  3. CCS10,安装SDK后,软件无法识别问题
  4. Hubble:“百万原生代码+混合交易分析”的利器!
  5. 深入浅出WPF学习笔记之Binding
  6. html编辑器增加超级链接,ueditor1.2.1修改超链接默认值,ueditor编辑器新窗口打开连接...
  7. QT实现简易计算器。
  8. CI框架设置ENVIRONMENT
  9. 无线网卡插上电脑没反应的解决办法
  10. tftpd 安装和配置