今天整理了一下以前写过的一个遗传算法求解车辆路径问题的程序(C#写的),发上来和大家分享一下,有误的地方还请各位指点。

1、车辆路径问题:

车辆路径问题可以描述为:在一个存在供求关系的系统中,有若干台车辆、若干个配送中心和客户,要求合理安排车辆的行车路线和出行时间,从而在给定的约束条件下,把客户需求的货物从配送中心送到客户,把客户供应的货物从客户取到配送中心,并使目标函数取得优化。本文以最简单的无时限单向配送车辆路径问题为例。

1.1、问题描述:

无时限单向配送车辆路径问题,是指在制定配送路线时不考虑客户对货物送到(或取走)时间要求的纯送货(或纯取货)车辆调度问题。无时限单向配送车辆路径问题可以描述为:从某配送中心用多台配送车辆向多个客户送货,每个客户的位置和需求量一定,每台配送车辆的载重量一定,其一次配送的最大行驶距离一定,要求合理安排车辆配送路线,使目标函数得到优化,并满足以下条件:

①每条配送路径上各客户的需求量之和不超过配送车辆的载重量;

②每条配送路径的长度不超过配送车辆一次配送的最大行驶距离:

③每个客户的需求必须满足,且只能由一台配送车辆送货。

1.2、问题模型:

设配送中心有Κ台配送车辆,每台车辆的载重量为Qk,其一次配送的最大行驶距离为Dk,需要向L个客户送货,每个客户的货物需求量为qi,客户i到j的运距为dij,配送中心到各客户的距离为d0j,再设 为第k台车辆配送的客户数(nk=O表示未使用第k台车辆),用集合Rk表示第k条路径,其中的元素Rki表示客户Rki在路径k中的顺序为i(不包括配送中心),令rk0=0表示配送中心,若以配送总里程最短为目标函数,则可建立如下无时限单向配送车辆路径问题的数学模型:

上述模型中,式(1.1)为目标函数,即要求配送总里程(即各条配送路径的长度之和)最短;式(1.2)保证每条路径上各客户的货物需求量之和不超过配送车辆的载重量;式(1.3)保证每条配送路径的长度不超过配送车辆一次配送的最大行驶距离;式(1.4)表明每条路径上的客户数不超过总客户数;式(1.5)表明每个客户都得到配送服务;式(1.6)表示每条路径的客户的组成;式(1.7)限制每个客户仅能有一台配送车辆送货;式(1.8)表示当第k辆车服务的客户数≥1时,说明该台车参加了配送,则取sign(nk)=1,当第k辆车服务的客户数< 1时,,表示未使用该台车辆,则取sign(nk)=0。

2、遗传算法:
    遗传算法(Genetic Algorithms )是基于生物进化理论的原理发展起来的一种广为应用的、高效的随机搜索与优化的方法。其主要特点是群体搜索策略和群体中个体之间的信息交换,搜索不依赖于梯度信息。它是在70年代初期由美国密西根( Michigan )大学的霍兰( Holland )教授发展起来的。1975年霍兰教授发表了第一本比较系统论述遗传算法的专著《自然系统与人工系统中的适应性》(《 Adaptationin Natural and Artificial Systems 》)。遗传算法最初被研究的出发点不是为专门解决最优化问题而设计的,它与进化策略、进化规划共同构成了进化算法的主要框架,都是为当时人工智能的发展服务的。迄今为止,遗传算法是进化算法中最广为人知的算法。

2.1、遗传算法的实施步骤:
    遗传火算法的实施步骤如下(以目标函数求最小为例)。
    第一步:初始化 t←0进化代数计数器;T是最大进化代数;随机生成M个个体作为初始群体P(t);
    第二步:个体评价 计算P(t)中各个个体的适应度;
    第三步:选择运算 将选择算子作用于群体;
    第四步:交叉运算 将交叉算子作用于群体;
    第五步:变异运算 将变异算子作用于群体,并通过以上运算得到下一代群体P(t + 1);
    第六步:终止条件判断  t≦T:t← t+1 转到步骤2;t>T:终止 输出解。

2.2、遗传算法应用步骤:
    1)确定决策变量及各种约束条件,即个体的表现型X和问题的解空间;
    2)建立优化模型 (目标函数最大OR 最小) 数学描述形式 量化方法;
    3)染色体编码方法;
    4)解码方法;
    5)个体适应度的量化评价方法 F(x)
    6)设计遗传算子;
    7)确定有关运行参数。

3、遗传算法求解车辆路径问题:

用遗传算法求解配送车辆路径问题时,确定解的表示和解的评价方法是一项非常关键的基础工作,因为它将直接决定算法实现的难易程度和算法性能的优劣。

3.1、解的表示:
    客户直接排列的表示方法,这种表示方法是直接产生L个1~L间的互不重复的自然数的排列,该客户排列就构成一个解,并对应一种配送路径方案。按照无时限单向配送车辆优化调度问题的约束条件,可依次将解的元素(客户)划入各台车辆的配送路径中。例如,对于一个用3台车辆向9个客户送货的配送车辆优化调度问题,设某解中的客户排列为412876935,可用如下方法得到其对应的配送路径方案:首先将客户4(解中的第1个客户)作为第1台配送车辆月艮务的第1个客户,然后判断能否满足问题的约束条件,即客户4的需求量是否超过第1台车辆的最大载重量,且路径0-4-0的总长度是否超过第1台车辆一次配送的最大行驶距离,设能够满足,这时可将客户1(解中的第2个客户)作为第1台配送车辆服务的第2个客户,然后判断能否满足问题的约束条件,即客户4和1的需求量之和是否超过第1台配送车辆的最大载重量,且路径0-4-1-0的总长度是否超过第1台车辆一次配送的最大行驶距离,设仍能满足,这时可将客户2(解中的第3个客户)作为第1台配送车辆服务的第3个客户,然后判断能否满足问题的约束条件,设仍能满足,这时可将客户8作为第1台配送车辆服务的第4个客户,设此时不能满足问题的约束条件,这说明客户8不能由第1台配送车辆服务,由此可得第1台车辆的配送路径为0-4-1-2-0;然后,将客户8作为第2台配送车辆服务的第1个客户,若能满足问题的约束条件,则可将客户7作为第2台配送车辆服务的第2个客户,若仍能满足问题的约束条件,则可将客户6作为第2台配送车辆服务的第3个客户,若仍能满足问题的约束条件,则可将客户9作为第2台配送车辆服务的第4个客户,若此时不能满足问题的约束条件,则说明客户9不能由第2台配送车辆服务,由此可得第2台车辆的配送路径为0-8-7-6-0:仍按上述方法可将解中的其他客户也依次加入到其他车辆的配送路径中。采用这种表示方法,也可以得到配送路径数小于车辆总台数的配送路径方案。若某个解中的排在最后的若干个客户不能纳入到车辆的配送路径中,则说明该解为一个不可行解。与前述客户与虚拟配送中心共同排列的表示方法相比,这种解的表示方法占用的计算机存储量较少,表示也较为直观,也容易产生可行解。

3.2、解的评价:
    用客户直接排列表示方法产生的解所确定的配送路径方案,能够满足每条配送路径上各客户需求量之和不超过配送车辆的最大载重量及每条配送路径的长度不超过车辆一次配送的最大行驶距离的约束条件,但不能保证所有的客户全部都能得到配送服务。对于某个解,若全部客户均能纳入到车辆的配送路径中,则取该配送路径方案的不可行路径数M=0,表示该解为一个可行解;若排在最后的若干个客户不能纳入到车辆的配送路径中,则取该配送路径方案的不可行路径条数M=1,表示该解为一个不可行解,该配送路径方案的目标函数值为Z,并设对每条不可行路径的惩罚权重为Pw,(该权重可根据目标函数的取值范围取一个相对较大的正数),则该解的评价值E可用公式(3.1)计算(E值越小,表示解的质量越高)。这种解的评价方法,体现了用罚函数法处理约束条件的思想。

 3.3、算法策略的确定:
   (1)编码方法:采用客户直接排列的编码方法。
   (2)适应度函数:采用公式(3.2)作为适应度评估函数。即首先对某个个体进行解码操作,得到该个体对应的配送路径方案的不可行路径数M和目标函数值Z,将M和Z代入公式即可计算出该个体的适应度f。

(3)选择策略:采用最佳个体保存与赌轮选择相结合的选择策略。其具体操作方法为:将每代群体中的N个个体按适应度由大到小排列,排在第一位的个体性能最优,按照最佳个体保存选择策略,将它复制一个直接进入下一代,并排在第一位。下一代群体的另N-1个个体需要根据前代群体的N个个体的适应度,采用赌轮选择法产生。
   (4)交叉算子:采用类OX交叉方法。在实际运算中,交叉操作是以概率 ,发生的。
   (5)变异算子:采用多次对换变异技术。在实际运算中,变异操作是以概率 ,发生的,一旦变异操作发生,则用随机方法产生交换次数J,对所需变异操作的个体的基因进行J次对换(对换基因的位置也是随机产生的)。
   (6)终止准则:采用进化指定代数的终止准则。

3.4、算法的结构:

{   输入无时限单向配送车辆路径问题的已知条件:

输入运行参数,如群体规模N,终止进化代数T,交叉概率Pc,变异概率Pm,

执行变异操作时的基因换位次数J,对不可行路径的惩罚权重Pw等;

随机产生初始化群体P(0),当前进化代数t=0;

计算P(0)中每个个体的适应度;

while(t<指定进化终止代数T)do

{   将本代中适应度最高的个体复制一个,直接插入到新群体P(t+1)中;

根据本代个体的适应度及赌轮选择策略,计算群体内每个个体的选择概率Pi;

for(k=0;k<N;k=k+2)

{   根据选择概率Pi从P(t)中选择两个父体;

r=random[0,1];

if(r≤交叉概率Pc)对选择的两个个体用类OX法执行交叉操作,并将

生成的两后代插入到新群体P(t+1)中;

else

{  r=random[0,1];

if(r≤变异概率Pm)对父代个体1执行变异操作,并将变异后的个

体插入到新群体P(t+1)中;

else将父代个体1复制一个,直接插入到新群体P(t+1)中;

r=random[0, 1];

if(r≤变异概率Pm)对父代个体2执行变异操作,并将变异后的个

体插入到新群体P(t+1)中;

else将父代个体2复制一个,直接插入到新群体P(t+1)中;

}

}

计算P(t+1)中每个个体的适应度;

t=t+1;

}

输出计算结果,即最终解所对应的配送路径方案和目标函数值;

}

3.5、运行截图:

附源码下载:遗传算法求解车辆路径问题程序源码(C#版)

基于遗传算法求解车辆路径问题相关推荐

  1. [置顶] 基于遗传算法求解车辆路径问题

    今天整理了一下以前写过的一个遗传算法求解车辆路径问题的程序(C#写的),发上来和大家分享一下,有误的地方还请各位指点. 1.车辆路径问题: 车辆路径问题可以描述为:在一个存在供求关系的系统中,有若干台 ...

  2. matlab遗传算法求解车辆路径问题(一)续

    一.引言 上篇关于使用matlab编写遗传算法求解车辆路径问题写完后,我发现南柯一梦那篇文章的参考文献应该是一篇<中国管理科学>的文章<用混合遗传算法求解物流配送路径优化问题的研究& ...

  3. 【路径规划】基于遗传算法求解多车多类型车辆的车辆路径优化问题附matlab代码

    1 内容介绍 多车辆多路线的交通路线优化涉及到排序问题,是一个N-P难题,高效精确的算法存在的可能性不大.提出了基于遗传算法的求解方法,给出了实例来证明如何利用遗传算法解决多车辆多路线的优化问题.结果 ...

  4. 【路径规划】基于遗传算法求解带时间窗车辆路径规划问题(VRPTW)matlab源码

    1 简介 有时间窗的车辆路径问题(Vehicle Routing Problem with Time Windows,VRPTW)因为其有重要的现实意义而备受关注.其时间窗即为客户接受服务的时间范围, ...

  5. 基于遗传算法求解TSP问题(旅游路径规划,Python实现,超详细,可视化,结果分析)

    ps:作者是很用心写的,如果觉得不错,请给作者一点鼓励噢!(点赞收藏评论噢) 基于遗传算法求解TSP问题 摘要 巡回旅行商问题(TSP)是组合优化中的经典问题.常见的TSP问题求解算法例如穷举法.贪心 ...

  6. 【路径规划】基于遗传算法求解灾情巡视路径问题附matlab代码

    1 内容介绍 灾情巡视属于旅行商问题,具有广泛的应用价值.假定有若干巡视组,分工协作对所辖区域内的各灾民聚集地进行巡视,需要对各巡视组的巡视任务,巡视路线进行合理的分配和设计.在现实生活中,各被巡视地 ...

  7. 【生产调度】基于遗传算法求解柔性生产调度(FJSP)问题含Matlab源码

    1 简介 制造业同人们的生活密切联系,其发展走向可直接影响国家的综合实力.制造业企业不仅需要将制造技术走在科技前端,而且需要加强生产和经营管理技术,这样才能时刻保持其核心竞争力.而企业的调度是企业管理 ...

  8. 【建模算法】基于遗传算法求解TSP问题(matlab求解)

    [建模算法]基于遗传算法求解TSP问题(matlab求解) TSP (traveling salesman problem,旅行商问题)是典型的NP完全问题,即其最坏情况下的时间复杂度随着问题规模的增 ...

  9. 车辆路径优化matlab代码,5个求解车辆路径问题(VRP)的MATLAB算法

    5个求解车辆路径问题(VRP)的MATLAB算法 matlab 2020-10-22 下载地址 https://www.codedown123.com/45041.html 5个求解车辆路径问题(VR ...

最新文章

  1. 实用目标检测器 | 性能超YoloV5,推理耗时不变(附github源码)
  2. 从地心到宇宙,再到治疗癌症与“赋灵”智能,这届腾讯WE都聊了些啥?
  3. php 挂马 密码123456,admin密码-常用密码加密md5值,123456,admin,admin888
  4. Quartz实现定时任务实例
  5. spring项目概念-BeanFactoryApplicationContext
  6. Redis持久化的几种方式——RDB深入解析
  7. android编程设备信息,Android获取当前手机设备信息工具类详解
  8. Flex的Tree全部展开收缩,ji展开选中单个节点
  9. BZOJ 2337 XOR和路径(概率DP)
  10. 飞思卡尔k60从零开始之PLL
  11. 京东店铺数据分析工具推荐
  12. python 打开文件夹与开启文件的几种方式
  13. Golang interface 接口详解
  14. HTML5的骨架是什么,HTML5 骨架
  15. 【Focal Loss】Focal Loss理解
  16. iOS设计模式四部曲(二) 结构型模式 内附Demo
  17. 计算两个时间戳之间的时间差
  18. inode 耗尽故障处理办法
  19. LabVIEW控制Arduino采集光敏电阻数值(基础篇—14)
  20. gitlab显示500 Whoops, something went wrong on our end

热门文章

  1. 照片变漫画头像如何操作?照片变漫画头像制作方法推荐
  2. STM32-通行闸机2(HAL库)
  3. 在门禁或通道出入口应用人脸识别系统结合闸机
  4. 钢管下料问题求解(LP问题)
  5. Android 获取扫码枪的扫描内容
  6. Jenkins定时构建项目
  7. 月薪5万,全靠这款高质量Web前端开发框架!
  8. 橱柜高度与身高对照表_装修血泪史:厨柜高度到底要多高才合适【技术帖】
  9. 企业订货系统平台软件源码|移讯云手机下单管理
  10. 【关于四足机器人那些事】直驱四足机器人Minitaur运动学建模