交通运输是国民经济的动脉,各种运输方式在日常运输营运管理工作中都要面对这样一个共同的问题:如何为载运工具(汽车,列车,轮船和飞机,统称为车辆)确定行驶路线及时间,有效地运送各站点间的旅客和货物。运筹学界将此类问题统称为车辆路径问题(Vehicle Routing Problem, VRP)。
VRP最早由Dantzig于1959年首次提出,指一定数量的客户,有各自的货物需求,配送中心(车场)组织车辆向客户提供货物,设计最优的行车路线,以满足客户的需求,并达到路程最短、成本最小、耗费时间最少等目标。VRP示意图如下:
本文内容求解所涉及的要求为:自己开发求解VRP的算法(什么算法都行:单纯型、蚁群、遗传、邻域搜索、模拟退火、禁忌搜索、神经网络、深度学习、给定规则启发式),与标准实例的最优解对比。
评价指标(重要度排序):
1. 求解精度(与最优解的差距);
2. 求解规模(顾客点的数量);
3. 求解速度(运行时间)。
A-n32-k5.vrp,有31个顾客点,具体数据点击A-n32-k5.vrp的连接查看(顾客点标号、坐标、需求量。其中1是车场)。最优目标是784,最优解有5辆车。
本文我所选用的算法是遗传算法,遗传算法简称GA,在本质上是一种不依赖具体问题的直接搜索方法,它是根据生物进化思想而启发得出的一种全局优化算法,遗传算法的概念最早是由Bagley J.D在1967年提出的,可是最开始研究遗传算法的理论和方法的系统性研究是在1975年,在当时,这个算法的目的是说明自然和人类系统的自适应过程。
(1)生成初始种群。确定问题解表示的编码方案,随机产生一组初始个体构成的初始种群。
(2)计算适应度。对于种群中的每一个体计算其适应度。
(3)选择。更加适应度大小以一档方式对种群执行选择复制操作。
(4)交叉。按照交叉概率,对于种群执行交叉操作。
(5)变异概率。对种群执行变异操作。
(1)智能性:遗传算法具有自组织、自适应和自学习 性等特性。遗传算法的搜索过程以目标函数为依据,并利用适应度函数,逐步逼近目标值。
(2)全局最优性:遗传算法由于采取交换操作和变异操作,从而在解空间便能产生出新的个体,从而扩大算法在解空间的搜索范围,并且遗传算法从串集开始搜索,覆盖面大,利于全局择优,使得搜索得到的结果不是局部最优解而是全局最优解
(3)不确定性:进化计算不确定性是伴随随机性而来的。在遗传算法的主要步骤中即含有随机的因素,如变异的过程。所以在算法的进化过程中,事件发生与带有很大的不确定性。
(4)并行性:遗传算法可以同时搜索解空间内的多个区域,同时,遗传算法作为一种典型的进化算法,而进化算法本身就具有较好的并行性,适合于各种并行处理。
符号:
目标:行驶总距离最小
决策变量:
参考标准的实例库,并根据实例库中的数据,利 用两种算法进行结果分析并与标准的最优解进行对比,同时分析产生一定误差的原因。已知有1个车场和32个顾客点,同时每个顾客点的坐标和需求量如下所示,将初始车辆设置为25辆,利用matlab进行两种算法的编程,求解出车辆的最短配送路径以及最优解的车辆数。
顾客点编号 |
坐标 |
需求量 |
顾客点编号 |
坐标 |
需求量 |
1 |
(82,76) |
0 |
17 |
(88,51) |
18 |
2 |
(96,44) |
19 |
18 |
(91,2) |
19 |
3 |
(50,5) |
21 |
19 |
(19,32) |
1 |
4 |
(49,8) |
6 |
20 |
(93,3) |
24 |
5 |
(13,7) |
19 |
21 |
(50,93) |
8 |
6 |
(29,89) |
7 |
22 |
(98,14) |
12 |
7 |
(58,30) |
12 |
23 |
(5,42) |
4 |
8 |
(84,39) |
16 |
24 |
(42,9) |
8 |
9 |
(14,24) |
6 |
25 |
(61,62) |
24 |
10 |
(2,39) |
16 |
26 |
(9,97) |
24 |
11 |
(3,82) |
8 |
27 |
(80,55) |
2 |
12 |
(5,10) |
14 |
28 |
(57,69) |
20 |
13 |
(98,52) |
21 |
29 |
(23,15) |
15 |
14 |
(84,25) |
16 |
30 |
(20,70) |
2 |
15 |
(61,59) |
3 |
31 |
(85,60) |
14 |
16 |
(1,65) |
22 |
32 |
(98,5) |
9 |
从上面的结果图形可以看出,遗传算法无论是在求解质量、求解速度还是最优路径的稳定性等方面都与标准实例的最优解大致相同。可是对于遗传算法来说,遗传算法具有不确定性因素,如迭代的次数、变异的概率以及交叉的概率等,所以就算是相同参数设置也会得出不同的最优结果。所以还是选择遗传算法作为求解车辆路径问题的最优算法,其最终实验结果是从多次实验结果中通过对比分析得到的一组最优解。
1、遗传算法参数设置
alpha=10;
NIND=50;
MAXGEN=10000;
Pc=0.9;
Pm=0.05;
GGAP=0.9;
N=cusnum+v_num-1;
2、输出随机解的路线和总距离
disp('初始种群中的一个随机值:')
[currVC,NV,TD,violate_num,violate_cus]=decode(Chrom(1,:),cusnum,cap,demands,dist);
currCost=costFuction(currVC,dist,demands,cap,alpha);
disp(['车辆使用数目:',num2str(NV),',车辆行驶总距离:',num2str(TD),',违反约束路径数目:',num2str(violate_num),',违反约束顾客数目:',num2str(violate_cus)]);
disp('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')
相关资源:基于遗传算法的车辆路径问题
完整代码请留言