今天为大家讲解使用蚁群算法(ACO)求解带时间窗的车辆路径(VRPTW)问题。在讲解蚁群算法求解VRPTW问题之前,不知道各位是否观察过现实生活中蚂蚁是怎么觅食的,说得形象一点的话就是成群的蚂蚁前赴后继地找食物吃。大家应该也很容易理解,蚂蚁一般是成群出动,一旦一个蚂蚁找到了食物,那后面的蚂蚁肯定跟着前面蚂蚁的步伐才会有食物吃。

一 | 蚂蚁觅食图片演示

下面用下面几幅图演示蚂蚁觅食的过程:

01 | 初始状态

初始3只蚂蚁都在“起点”出发准备去寻找食物,每只蚂蚁都必须经过前往若干个“中转点”,然后才能到达“食物”点。每只蚂蚁都不想自己走更长的路,都想走最短的路找到“食物”。

02 | 蚂蚁1开始觅食

蚂蚁1从起点出发后,凭借自己的嗅觉果断前往“中转点2”,然后从“中转点2”直接到达了“食物”点。蚂蚁在所行走的路径上都会留有信息素,目的是为了让后续的蚂蚁能感知到自己的“功劳”。蚂蚁1果断为后面的蚂蚁留下了“信息素”。

03 | 蚂蚁2开始觅食

蚂蚁2嗅觉很好,一下子就闻到了蚂蚁1留下的信息素,所以果断跟着蚂蚁1的步伐来到了“中转点2”,然后直接到达了“食物”点。蚂蚁2也不吃独食,所以也留下了“信息素”,这时候很明显“起点->中转点2->食物”的这条路径上的“信息素”增多。

04 | 蚂蚁3开始觅食

现在只剩下蚂蚁3了,它能否跟着蚂蚁1和蚂蚁2的步伐快速地找到食物呢?

我们这只蚂蚁3啊,它比较傲娇,虽然闻到了“信息素”,但它不相信蚂蚁1和蚂蚁2走的路是最短距离的,它自己要另辟蹊径。所以它自己从“起点”出发后,来到了“中转点1”,然后从“中转点1”出发后也找到了“食物”点。蚂蚁3认为自己走的路是最短距离的,所以傲娇的留下了“信息素”。

二 | VRPTW问题描述与数学模型

01 | 问题描述

VRPTW是指一定数量的客户,各自有不同数量的货物需求,配送中心向客户提供货物,由一个车队负责分送货物,组织适当的行车路线,目标是使得客户的需求得到满足,并能在一定的约束下,达到诸如路程最短、成本最小等目的。

02 | 数学模型

目标函数(1)表示最小化总成本=1000*车辆使用数目+车辆行驶总距离;

表示顾客集合,约束(2)限制每个顾客只能被分配到一条路径;约束(3)~(5)表示车辆k在路径上的流量限制;约束(6)~(8)表示时间窗约束;约束(9)表示载重量约束。

三 | 算法设计

01 | 符号定义

信息素浓度

顾客之间距离

能见度

顾客j的左时间窗

顾客j的右时间窗

到达顾客j的时间

顾客j的等待时间

顾客j的时间窗宽度

02 | 蚂蚁从i点出发如何确定将要到达的j点

比如说现在需要服务6个顾客,编号分别为123456,现在我们采用蚂蚁觅食的思想为蚂蚁规划路径,蚂蚁从配送中心0出发,应该如何选择第1个要服务的顾客呢?

蚂蚁总不会扔个骰子,看哪面朝上吧。这个时候我们需要综合考虑信息素浓度、能见度、等待时间和时间窗宽度,来为在i点的蚂蚁确定下一个前进的点j。

为什么要考虑这四个因素?我们一个个来进行解释。

(1)蚁群算法的精髓就是信息素浓度,我们一开始讲了有了信息素浓度,其它蚂蚁才会跟随前人的步伐前进,也就是说往“更优”的解进行搜索。

(2)可以看出能见度越大,表示两个顾客之间的距离越小,蚂蚁也不喜欢“舍近求远”的。(3)等待时间过长,蚂蚁估计都快睡着了,哪还有心思去服务其它的顾客呢?

(4)时间窗宽度越窄表示这个顾客的需求越急迫,蚂蚁也很理性的,知道要先服务急迫的顾客。

那究竟该如何把上述四个因素用数学公式表达出来呢?

r是[0,1]的随机数,r0我们取0.5。

表示车辆k从i点出发后可以访问(同时满足载重量约束和时间窗约束)的顾客集合。

03 | 如何构造一只蚂蚁的完整路径

当蚂蚁在i点找不到可以访问的顾客时,即

为空集合时,蚂蚁必须返回配送中心;然后再次从配送中心出发按照上述公式访问未被服务的顾客,循环往复,直到所有顾客都被服务完毕,一只蚂蚁的路径才是构建完毕。

举个例子,一共有6个顾客,那么一条完整的蚂蚁路径长度就为6。

假设蚂蚁从配送中心0出发,第一个访问的是顾客3,第二个访问的是顾客5,第三个访问的是顾客1,这时蚂蚁在顾客1找不到可以访问的顾客,所以蚂蚁必须返回配送中心0;这时蚂蚁从0重新出发依次访问顾客4、顾客2和顾客6,最终返回配送中心0,至此这只蚂蚁的路径全部构建完毕,即为351426。

04 | 如何将一只蚂蚁构建的完整路径解码成配送方案

还是继续上述的例子,这只蚂蚁构建的完整路径为351426,那么我们从头依次进行解码。

先把顾客3预先添加到第1条路径中,此时第1条路径只有顾客3,检查这条路径是否满足载重量约束和时间窗约束,检查完发现满足约束,于是把顾客3添加到第1条路径中,更新路径1,即为[3];

然后再将顾客5预先添加到第1条路径中,此时第1条路径为[3,5],检查是否满足约束,检查完发现满足约束,于是更新路径1,即为[3,5];

然后再将顾客1预先添加到第1条路径中,此时第1条路径为[3,5,1],检查是否满足约束,检查完发现满足约束,于是更新路径1,即为[3,5,1];

然后再将顾客4预先添加到第1条路径中,此时第1条路径为[3,5,1,4],检查是否满足约束,检查完发现不满足约束,则路径1解码完毕。

同理继续依次将剩余的426进行解码。

最终解码出的配送方案为(0代表配送中心)

第1条路径:0->3->5->1->0

第2条路径:0->4->2->6->0

05 | 如何更新信息素

我们在一 | 蚂蚁觅食图片演示这部分演示了蚂蚁如何进行觅食,我们也了解了蚂蚁在所经过的路径上会留下自己的信息素,那么一只蚂蚁在构建完一条完整的路径后,如何更新信息素

呢?比如说顾客数目为10,那么

就是11行11列(PS:因为还需要把配送中心加进去)。我们用下面这个公式更新信息素,其中Q为一个常数,我们设为5,TD为该只蚂蚁所构建完整路径的车辆行驶总距离。

上面所讲的是对一只蚂蚁的信息素进行更新,那么如果有10只蚂蚁的话,该怎么更新信息素呢?

这里我们采用的是只更新“最优蚂蚁”的信息素,“最优蚂蚁”就是这只蚂蚁构建出的完整路径所解码出来的配送方案的总成本最小。

06 | 蚁群算法流程图

四 | 参考

1.Solomon M M , Cordeau J , Etudes H , etal. The VRP with Time Windows[M]// The Vehicle Routing Problem. 1999.

2.李琳, 刘士新, 唐加福. 改进的蚁群算法求解带时间窗的车辆路径问题[J]. 控制与决策, 2010(09):102-106.

五 | 代码运行结果展示

输入数据,1个配送中心(0表示配送中心),25个顾客,车辆载重量为200,这组数据当前最优解是:车辆使用数目为3,车辆行驶总距离为191.3。

我们用自己编写的蚁群算法将上述数据跑一遍,

如果各位小伙伴有需求,可以添加小编QQ 934569572,添加好友时请注明来意。

关注微信公众号:优化算法交流地,提取文章中的MATLAB代码

往期精选

java随机数时间窗_蚁群算法(ACO)求解带时间窗的车辆路径(VRPTW)问题相关推荐

  1. 蚁群算法ACO求解连续函数最值问题

    目录 一.蚁群算法特点 二.基本蚁群算法及其流程 三.改进蚁群算法 1.精英蚂蚁系统 2.最大最小蚂蚁系统 3.基于排序的蚁群算法 4.自适应蚁群算法 四.例题 一.蚁群算法特点 (1)自组织算法 组 ...

  2. 蚁群算法ACO求解TSP问题

    目录 一.蚁群算法特点 二.基本蚁群算法及其流程 三.改进蚁群算法 1.精英蚂蚁系统 2.最大最小蚂蚁系统 3.基于排序的蚁群算法 4.自适应蚁群算法 四.例题 一.蚁群算法特点 (1)自组织算法 组 ...

  3. Java用蚁群算法求最短路径_蚁群算法最短路径java

    改进蚁群算法求解最短路径问题 袁亚博,刘羿,吴斌 [摘要]摘要:针对蚁群算法在求解最短路径问题时存在容易陷入局部最优 解的问题,对经典蚁群算法提出三方面改进.... 网络出版时间:2016-11-21 ...

  4. 蚁群算法java实现_蚁群算法java实现以及TSP问题蚁群算法求解

    1. 蚁群算法简介 蚁群算法(Ant Clony Optimization, ACO)是一种群智能算法,它是由一群无智能或有轻微智能的个体(Agent)通过相互协作而表现出智能行为,从而为求解复杂问题 ...

  5. tsp java_蚁群算法java实现以及TSP问题蚁群算法求解

    1. 蚁群算法简介 蚁群算法(Ant Clony Optimization, ACO)是一种群智能算法,它是由一群无智能或有轻微智能的个体(Agent)通过相互协作而表现出智能行为,从而为求解复杂问题 ...

  6. matlab如何判断两个矩阵的元素是否相同_蚁群算法及其MATLAB实现

    蚁群算法是一种用来寻找优化路径的概率型算法.它由Marco Dorigo于1992年在他的博士论文中提出,其灵感来源于蚂蚁在寻找食物过程中发现路径的行为. 一.蚁群算法基本思想 蚁群算法的基本原理来源 ...

  7. 【智能优化算法】蚁群算法ACO

    文章目录 [智能优化算法] 蚁群算法 1. 简介 1.1 简介 1.2 蚁群流程图 1.3 分类(可以不看) 2. 算法 2.1 参数讲解 2.2 计算公式 1) 转移概率公式 2) 启发式因子计算公 ...

  8. 0x80070035找不到网络路径_蚁群算法(ACO)求解带时间窗的车辆路径(VRPTW)问题...

    蚁群算法求解VRPTW问题https://www.zhihu.com/video/1235315908018298880 今天为大家讲解使用蚁群算法(ACO)求解带时间窗的车辆路径(VRPTW)问题. ...

  9. 时间窗车辆路径问题matlab代码,【图片】蚁群算法求解有时间窗约束的车辆路径问题matlab程序_蚁群算法吧_百度贴吧...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 蚁群算法求解有时间窗约束的车辆路径问题matlab程序 1 简介 带时间窗的车辆路径问题(VRPTW)一般描述为从某一物流配送中心出发,用多台车辆向多个顾 ...

最新文章

  1. OSPF有五种报文,hello,dd,lsr,lsu,lsack
  2. POJ 3126 Prime Path BFS搜索
  3. Android之调用微信登陆、分享、支付
  4. PRML(4)--Chapter2(下)-非参数估计
  5. MAC自带的lnmp
  6. HFSS19 官方中文教程系列 L02
  7. select用法详解
  8. 吗 极域软件可以装win10_关于win10企业版在极域电子教室软件 v4.0 2015 豪华版的全屏控制下如何取得自由...
  9. 智能对话机器人之多轮对话工作机制 | Chatopera
  10. 决策树算法--C4.5算法
  11. 计量模型 | 前定变量#时间FE
  12. 成功解决TypeError: can‘t multiply sequence by non-int of type ‘float‘
  13. Altium designer--软件简介及安装教程(AD)
  14. Linux在sudo apt-get update或install时出现archive.ubuntu.com连接失败 [IP: 91.189.91.39 80]的错误解决方案
  15. 【强烈推荐】原导师评价网上不去了,新版在这里
  16. y7000电池固件_联想 拯救者Y7000P 怎么拿出电池?
  17. 随身理财专家“挖财”推iPad应用,新增帐号对比功能
  18. flink yarn模式提交及查看日志
  19. 科普文章-另一个视角解读计算机编码(修订版)【一个吊丝的个人理解】
  20. 技巧2 router-link鼠标切换样式 vue3中.router-link-exact-active失效

热门文章

  1. cocos creator粒子不变色_Cocos Creator粒子系统简单操作
  2. 小程序仿微信写简易聊天室
  3. 解题:使用 Promise 实现 machine 函数
  4. 【附源码】计算机毕业设计java养老机构管理信息系统设计与实现
  5. CSS-reset.css重置样式表
  6. 波浪理论 波浪理论怎么找第一浪 波浪理论口诀及图解 波浪理论13种基本形态 波浪理论三大铁律 期货怎么买卖的操作流程
  7. el-tabel-coumn中label换行
  8. html边框渐变颜色代码,CSS3 七彩渐变色边框效果
  9. Java源码解析库对比:javaparser、qdox、spoon
  10. linux部署.net core api并且实现上传图片