以本节开始介绍的实例为背景。A某天早上接到10个配送任务,分别用1,2,…,10表示每个任务,也称需求点。其中,需求点3和8是企业的重点客户,他们的配送任务必须由A完成。用0表示配送中心,A必须从配送中心出发执行配送任务,并最终回到配送中心。表10-2为配送中心、各需求点之间的公路距离。假设车辆的行驶速度为50km/h,则配送中心、各需求点之间的时间距离可以利用公路距离除以车辆行驶速度计算出来,如表10-3所示。表10-4是各需求点所需的服务时间、时间窗要求及A可获得的收益。表10-5为各需求点的时间窗甘特图,从中可以直观地看到每个需求点的时间窗。其中行代表需求点的编号,列代表时刻,每行的直线代表相应需求点的时间窗跨度。图10-2为配送中心、各需求点的相对位置图及相关参数。其中小实心矩形代表配送中心,五角星代表指定点,即必须为其服务的需求点,圆心代表除指定点外的其他需求点。配送中心及各需求点的编号、时间窗、服务时间均标识在代表图形的附近。
表10-2 配送中心及各需求点之间的公路距离(单位:km)
表10-3 配送中心及各需求点之间的时间距离 (单位:h)
表10-4 每个需求点的需求量、服务时间、配送时间窗及收益
表10-5 各需求点时间窗的甘特图
图10-2 配送中心及各需求点的相对位置图及相关参数
1.精确算法求解
本例的问题规模不大,可以用精确算法进行求解。将上述的相关数据代入本节的整数线性规划模型中,利用Lingo软件编程求解得最优路径为0→6→4→2→3→9→8→7→0(如图10-3所示),相应的总收益为1410元。精确算法的计算时间为2h。精确算法求解的结果可以作为其他算法的评价依据。
(www.daowen.com)
图10-3 精确算法求解的最优路径
2.贪婪算法求解
先对指定点集中的点进行排序,因为指定点是必须被服务的,并且它们的路径顺序直接影响其他点的选取。本例中的指定点有v3点和v8点,由此得两条路径,p1(v0,…,v3,…,v8,…,v0)和p2(v0,…,v8,…,v3,…,v0)。按照路径顺序规则对它们进行可行性判别。因为e3+τ3+t38=4.4∈[4,7]、e8+τ8+t83=6.4∈[2,7],所以路径p1、p2均可行。一般,需求点的时间窗越宽,路径优化的灵活性越高,反之则越低。比较指定点v3和v8,e3<e8,即v3点的最早服务时间小于v8点的最早服务时间,l3=l8,即v3点的最晚服务时间等于v8点的最晚服务时间。在路径p1中,v3点先于v8点被服务,为了使两个指定点都可以在其时间窗内被服务,v3点的时间窗变为[2,4.6],v8点的时间窗不变。在p2路径中,v8点先于v3点被服务,v8点的时间窗变为[4,4.6],v3点的时间窗变为[6.4,7]。路径p1的灵活性高于路径p2,因此可以优先考虑路径p1。
指定点集将一条完整的路径分成了多个子路径,如v3、v8将路径p1分成了三个子路径,p11(v0,…,v3)、p12(v3,…,v8)、p13(v8,…,v0)。由于每个需求点的时间窗不同,优先选取的点会影响其他点的选取。本节问题的求解可以从路径的前端向后端进行。
对子路径p11(v0,…,v3):
1)p11(v0,…,v3)是路径p1(v0,…,v3,…,v8,…,v0)的子路径,为了使指定点v8可以在其时间窗内被服务,被优先服务的v3点的最晚服务时间变为l3,=l8-s3-c38=4.6,v3点的时间窗变为[2,4.6]。
2)根据表10-3和表10-4,可以得到v0的时间窗邻域{v1,v2,v6,v9,v10},进而得到地理邻域{v1,v6}。由于w6>w1,且y6+τ6+t63=2.54∈[2,4.6],因此优先服务v6点。v0的紧后点为v6,到达v6点的时间y6=0.56h。
3)同2),得到v6的紧后点v4,v4的紧后点v2,v2的紧后点v3,形成子路径p11(v0,v6,v4,v2,v3),到达v3点的时间y3=3.98h。
继续按照子路径p11形成的启发式方法,得到子路径p12(v3,v8)、p13(v8,v7,v0),从而得到问题的一个解,路径p1(v0,v6,v4,v2,v3,v8,v7,v0),如图10-4所示,括弧内为相应需求点的到达时间和所获得的收益。路径p1的总收益为1330元,回到终点时间为8.56h。贪婪算法的计算时间不足1s。
图10-4 贪婪算法的求解结果p1
比较本小节的贪婪算法和精确算法的求解结果,可以看到,贪婪算法求得的解接近精确算法求得的最优解,精确度达94.3%,但前者的用时仅为后者的0.8%。这说明,精确算法适用于求解小规模、解的精度要求高的问题,启发式算法可以高效地求得较优解,适用于大规模、时间敏感的问题。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。