【VRP问题】基于遗传算法求解带有时间窗、车载容量限制、多车辆、单配送中心路径优化VRPTW(多约束)matlab源码
1 数学模型
(1)有关模型的说明和假设
1)模型中的已知量有:各需求点的位置坐标、各需求点的物料需求数量,各需求点的物料的到达时间要求,配送中心到各需求点的最短行驶距离,各需求点互相之间的最短运输距离。
2)现场调查发现,需要配送的物料是可以混装在同一物料架上的,且各需求点需要的物料数量小于物料仓库的库存量。
3)忽略在配送过程中车辆遇到的拥挤排队等不利于生产进行的外界因素,也就是说整个装配车间正常运行。同时,在配送过程中所使用的车辆的类型,速度和负载容量都是相同的,且配送车辆在车间内匀速行驶。
4)由于各生产工位对物料的消耗速度存在差异,为了更好地进行研究,将各需求点物料消耗的速度与相应的计划生产节拍保持一致,并忽略不合格产品的再生产状况。
(2)有关模型的几个约束条件
在模型建立过程中,应考虑到以下几方面约束。
1)每条配送路径上,所有需求点的物料需求量之和不超过单位配送车辆的最大装载量
2)每条配送路径上都只有一辆车进行物料配送,不能使用其他车辆进行配送,且每条路径上的每个需求点配送车辆只到达一次。
3)所有配送车辆均由同一个配送中心出阿发进行物料配送活动,配送活动结束后车辆必须返回到原配送中心,且车辆在配送过程中不存在装货的情况。
4)对同一配送路径上两个相邻的需求点来说,车辆到达前一需求点的时刻不超过到达后一需求点的时刻。
2 遗传算法
遗传算法
• 遗传算法(Genetic Algorithm,GA)是一种进化算法,其基本原理是仿效生物界中的“物竞天择、适者生存”的演化法 则,它最初由美国Michigan大学的J. Holland教授于1967年提出。 • 遗传算法是从代表问题可能潜在的解集的一个种群(population)开始的,而一个种群则由经过基因(gene)编码的一 定数目的个体(individual)组成。因此,第一步需要实现从表现型到基因型的映射即编码工作。初代种群产生之后,按照 适者生存和优胜劣汰的原理,逐代(generation)演化产生出越来越好的近似解,在每一代,根据问题域中个体的适应度 (fitness)大小选择个体,并借助于自然遗传学的遗传算子(genetic operators)进行组合交叉和变异,产生出代表新 的解集的种群。这个过程将导致种群像自然进化一样,后生代种群比前代更加适应于环境,末代种群中的最优个体经过解 码(decoding),可以作为问题近似最优解。
• 遗传算法有三个基本操作:选择(Selection)、交叉(Crossover)和变异(Mutation)。 • (1)选择。选择的目的是为了从当前群体中选出优良的个体,使它们有机会作为父代为下一代繁衍子孙。根据各个个体的 适应度值,按照一定的规则或方法从上一代群体中选择出一些优良的个体遗传到下一代种群中。选择的依据是适应性强的 个体为下一代贡献一个或多个后代的概率大。 • (2)交叉。通过交叉操作可以得到新一代个体,新个体组合了父辈个体的特性。将群体中的各个个体随机搭配成对,对每 一个个体,以交叉概率交换它们之间的部分染色体。 • (3)变异。对种群中的每一个个体,以变异概率改变某一个或多个基因座上的基因值为其他的等位基因。同生物界中一样, 变异发生的概率很低,变异为新个体的产生提供了机会。
遗传算法的基本步骤:
1)编码:GA在进行搜索之前先将解空间的解数据表示成遗传空间的基因型串结构数据, 这些串结构数据的丌同组合便构成了丌同的点。 2)初始群体的生成:随机产生N个初始串结构数据,每个串结构数据称为一个个体,N个 个体构成了一个群体。GA以这N个串结构数据作为初始点开始进化。 3)适应度评估:适应度表明个体或解的优劣性。丌同的问题,适应性函数的定义方式也丌 同。
4)选择:选择的目的是为了从当前群体中选出优良的个体,使它们有机会作为父代为下一 代繁殖子孙。遗传算法通过选择过程体现这一思想,进行选择的原则是适应性强的个体为 下一代贡献一个或多个后代的概率大。选择体现了达尔文的适者生存原则。 5)交叉:交叉操作是遗传算法中最主要的遗传操作。通过交叉操作可以得到新一代个体, 新个体组合了其父辈个体的特性。交叉体现了信息交换的思想。 6)变异:变异首先在群体中随机选择一个个体,对于选中的个体以一定的概率随机地改变 串结构数据中某个串的值。同生物界一样, GA中变异发生的概率很低,通常取值很小。
遗传算法工具箱:
• MATLAB内嵌遗传算法工具箱: gadst • Sheffield大学遗传算法工具箱: gatbx • 北卡罗来纳大学遗传算法工具箱: gaot
initializega函数:
ga函数:
遗传算法优化BP神经网络初始权值与阈值:
仿真实例
优化后数据
matlab代码展示
clear clc close all tic %% 用importdata这个函数来读取文件 % shuju=importdata('cc101.txt'); load('cc101'); shuju=c101; % bl=importdata('103.txt'); bl=0; cap=800; %车辆最大装载量 %% 提取数据信息E=shuju(1,5); %配送中心时间窗开始时间 L=shuju(1,6); %配送中心时间窗结束时间 zuobiao=shuju(:,2:3); %所有点的坐标x和y % vertexs= vertexs./1000; customer=zuobiao(2:end,:); %顾客坐标 cusnum=size(customer,1); %顾客数 v_num=6; %车辆最多使用数目 demands=shuju(2:end,4); %需求量 a=shuju(2:end,5); %顾客时间窗开始时间[a[i],b[i]] b=shuju(2:end,6); %顾客时间窗结束时间[a[i],b[i]] s=shuju(2:end,7); %客户点的服务时间 h=pdist(zuobiao); % dist=load('dist1.mat'); % dist=struct2cell(dist); % dist=cell2mat(dist); % dist=dist./1000; %实际城市间的距离 dist=squareform(h); %距离矩阵,满足三角关系,暂用距离表示花费c[i][j]=dist[i][j] %% 遗传算法参数设置 alpha=100000; %违反的容量约束的惩罚函数系数 belta=900;%违反时间窗约束的惩罚函数系数 belta2=60; chesu=0.667;NIND=100; %种群大小 MAXGEN=50; %迭代次数 Pc=0.9; %交叉概率 Pm=0.05; %变异概率 GGAP=0.9; %代沟(Generation gap) N=cusnum+v_num-1; %染色体长度=顾客数目+车辆最多使用数目-1 % N=cusnum; %% 初始化种群 init_vc=init(cusnum,a,demands,cap); %构造初始解 Chrom=InitPopCW(NIND,N,cusnum,init_vc); %% 输出随机解的路线和总距离 disp('初始种群中的一个随机值:')[VC,NV,TD,violate_num,violate_cus]=decode(Chrom(1,:),cusnum,cap,demands,a,b,L,s,dist,chesu,bl); % disp(['总距离:',num2str(TD)]); disp(['车辆使用数目:',num2str(NV),',车辆行驶总距离:',num2str(TD),',违反约束路径数目:',num2str(violate_num),',违反约束顾客数目:',num2str(violate_cus)]); disp('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~') %% 优化 gen=1; figure; hold on;box on xlim([0,MAXGEN]) title('优化过程') xlabel('代数') ylabel('最优值') ObjV=calObj(Chrom,cusnum,cap,demands,a,b,L,s,dist,alpha,belta,belta2,chesu,bl); %计算种群目标函数值 preObjV=min(ObjV); while gen<=MAXGEN%% 计算适应度ObjV=calObj(Chrom,cusnum,cap,demands,a,b,L,s,dist,alpha,belta,belta2,chesu,bl); %计算种群目标函数值line([gen-1,gen],[preObjV,min(ObjV)]);pause(0.0001)%画图 最优函数preObjV=min(ObjV);FitnV=Fitness(ObjV);%% 选择SelCh=Select(Chrom,FitnV,GGAP);%% OX交叉操作SelCh=Recombin(SelCh,Pc);%% 变异SelCh=Mutate(SelCh,Pm);%% 局部搜索操作SelCh=LocalSearch(SelCh,cusnum,cap,demands,a,b,L,s,dist,alpha,belta,belta2,chesu,bl);%% 重插入子代的新种群Chrom=Reins(Chrom,SelCh,ObjV);%% 删除种群中重复个体,并补齐删除的个体Chrom=deal_Repeat(Chrom);%% 打印当前最优解ObjV=calObj(Chrom,cusnum,cap,demands,a,b,L,s,dist,alpha,belta,belta2,chesu,bl); %计算种群目标函数值[minObjV,minInd]=min(ObjV);disp(['第',num2str(gen),'代最优解:'])[bestVC,bestNV,bestTD,best_vionum,best_viocus]=decode(Chrom(minInd(1),:),cusnum,cap,demands,a,b,L,s,dist,chesu,bl);disp(['车辆使用数目:',num2str(bestNV),',车辆行驶总距离:',num2str(bestTD),',违反约束路径数目:',num2str(best_vionum),',违反约束顾客数目:',num2str(best_viocus)]);fprintf('\n')%% 更新迭代次数gen=gen+1 ; end %% 画出最优解的路线图 ObjV=calObj(Chrom,cusnum,cap,demands,a,b,L,s,dist,alpha,belta,belta2,chesu,bl); %计算种群目标函数值 [minObjV,minInd]=min(ObjV); %% 输出最优解的路线和总距离 disp('最优解:') bestChrom=Chrom(minInd(1),:); [bestVC,bestNV,bestTD,best_vionum,best_viocus]=decode(bestChrom,cusnum,cap,demands,a,b,L,s,dist,chesu,bl); disp(['车辆使用数目:',num2str(bestNV),',车辆行驶总距离:',num2str(bestTD),',违反约束路径数目:',num2str(best_vionum),',违反约束顾客数目:',num2str(best_viocus)]); disp('-------------------------------------------------------------') %% 判断最优解是否满足时间窗约束和载重量约束,0表示违反约束,1表示满足全部约束 flag=Judge(bestVC,cap,demands,a,b,L,s,dist,chesu,bl); %% 检查最优解中是否存在元素丢失的情况,丢失元素,如果没有则为空 DEL=Judge_Del(bestVC,cusnum); init_v=vehicle_load(bestVC,demands); %% 画出最终路线图 draw_Best(bestVC,zuobiao);
【VRP问题】基于遗传算法求解带有时间窗、车载容量限制、多车辆、单配送中心路径优化VRPTW(多约束)matlab源码相关推荐
- 【路径规划】基于遗传算法求解带时间窗车辆路径规划问题(VRPTW)matlab源码
1 简介 有时间窗的车辆路径问题(Vehicle Routing Problem with Time Windows,VRPTW)因为其有重要的现实意义而备受关注.其时间窗即为客户接受服务的时间范围, ...
- 【路径规划】基于遗传算法求解带时间窗多电动车充电路径规划问题附matlab代码
1 简介 电动车在物流领域中取代燃油车是一个广泛的发展趋势.但电动车的电池利用率低,充电时间长,相关充电配套设施建设不完善,存在"续驶里程焦虑"等现象成为了电动车推广和应用的重要制 ...
- 【多式联运】基于matlab帝国企鹅算法+遗传算法+粒子群算法求解不确定多式联运路径优化问题【含Matlab源码 2073期】
⛄一.联运运输简介 1 引言 运输问题(Transportation Problem)是一类特殊的线性规划问题,最早是由Hichcock于1941年提出的,由于它不仅能解决物资的合理调运和车辆的合理调 ...
- 【优化求解】基于matlab遗传算法求解立体仓库出入库路径优化问题【含Matlab源码 2028期】
⛄一.遗传算法仓库货位简介(仅供参考) 1 问题描述 1.1 自动化立体仓库出入库路径优化问题描述 自动化立体仓库如图1所示,主要是由以下几个部分组成: 货架,一般为钢结构构成的存储商品的单元格,单元 ...
- 【TWVRP】基于matlab遗传算法求解带时间窗且车辆速度车辆路径规划问题【含Matlab源码 2094期】
⛄一.VRP简介 1 VRP基本原理 车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学里重要的研究问题之一.VRP关注有一个供货商与K个销售点的路径规划的情况,可以简 ...
- 【单目标优化求解】基于matlab增强型黑猩猩优化器算法求解单目标优化问题【含Matlab源码 2013期】
⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[单目标优化求解]基于matlab增强型黑猩猩优化器算法求解单目标优化问题[含Matlab源码 2013期] 点击上面蓝色字体,直接付费下 ...
- 【微电网优化】基于matlab粒子群算法求解微网经济调度和环境友好调度优化问题【含Matlab源码 2283期】
⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[微电网优化]基于matlab粒子群算法求解微网经济调度和环境友好调度优化问题[含Matlab源码 2283期] 点击上面蓝色字体,直接付 ...
- 【优化算法】基于matlab量子粒子群算法求解单目标优化问题【含Matlab源码 2203期】
⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[优化算法]基于matlab量子粒子群算法求解单目标优化问题[含Matlab源码 2203期] 点击上面蓝色字体,直接付费下载,即可. 获 ...
- 【多目标优化求解】基于matlab粘菌算法MOSMA求解多目标优化问题【含Matlab源码 2279期】
⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[多目标优化求解]基于matlab粘菌算法MOSMA求解多目标优化问题[含Matlab源码 2279期] 点击上面蓝色字体,直接付费下载, ...
最新文章
- Dojo入门:DOM操作
- (1)虚拟机管理——在微软云Azure新门户创建虚拟机
- 【Windows 逆向】使用 Cheat Engine 工具进行指针扫描挖掘关键数据内存真实地址 ( 指针扫描 )
- Divan and Kostomuksha (easy version) dp,gcd(2100)
- 表面粗糙度的基本评定参数是_表面粗糙度的概念,表面粗糙度形成因素,表面粗糙度评定依据...
- Lucene提供的条件判断查询[转]
- android开发之AsyncTask的用法
- 面向对象设计与构造:oo课程总结
- 我们的电梯调度算法的独到之处
- Java毕业设计-企业员工考勤打卡管理系统
- 【连载】穿越计算机的迷雾——读书笔记
- 从 0 基础到 10w 册数据分析书籍的畅销书作家
- 热门文献|陈国生:实证化中医基础理论依据及应用
- Android裁剪图片总结
- 59. 螺旋矩阵 II(中等 数组)
- windows server 2016 开启多用户登陆
- SQL server 2012 下载,安装,磁力链接,下载地址 2020.11.28
- H5移动端实现图片上传
- 计算机属性安全选项卡,win10系统文件属性没有安全选项卡的图文办法
- 汽车巨头不愿被 “羞辱”,苹果造车重回代工模式
热门文章
- java语法\流程控制\方法\数组
- 每日打卡 2017.04.02 博弈论专题
- python导入文件夹数据有改动_python办公自动化--批量修改文件/文件夹名称
- 简单在线剪辑音乐工具分享
- 电脑提示vcomp100.dll丢失的解决方法
- 『华语电影』周星驰电影经典对白经典台词(转载)
- Flink CDC 系列 | 构建 MySQL 和 Postgres 上的 Streaming ETL
- 移动大数据平台的架构、实践与数据增值(1)
- DLL load failed: 找不到指定的模块。
- 计算机策略中封运行程序,使用组策略封禁IP地址的方法