1.1问题背景
农村地区的独特地理和社会结构带来了配送上的特殊挑战。复杂的地形,如山地和河流等自然障碍,使得道路建设困难重重,导致道路网络稀疏,而分散的配送点进一步增加了物流的复杂性。这些因素叠加,使得传统配送方式面临效率低下和成本高昂的双重困境,严重制约了农村物流的发展。随着农村经济的持续增长和配送需求的日益上升,这一问题变得尤为突出。
为有效应对农村地区的配送需求,提出了一种创新的配送模式——农村公交与异构无人机的协同配送。这一模式巧妙地结合了农村公交广泛的覆盖范围和经济成本优势,以及无人机的空中灵活性,旨在提升配送效率并降低成本。在实际配送流程中,公交车负责将无人机和货物运输至各个公交站点,这些站点充当无人机的起降平台和货物的转运枢纽。随后,无人机从这些站点起飞,利用其空中优势,迅速而准确地完成最终的配送任务。此外,异构无人机的引入,能够根据不同配送需求进行灵活的任务分配,进一步优化配送流程,满足农村地区多样化的物流需求。
无人机可在公交站点等待公交车,并在必要时停留5分钟更换电池和装货。费用由固定使用费和基于飞行里程的变动费组成。每个需求点的任务是不可分割的,一辆公交车最多携带两架无人机。任务结束后,无人机需返回起始站。忽略客户点的时间窗和道路拥堵,公交车以35公里/小时的速度行驶。
1.2问题重述
基于上述问题背景,本文需研究完成以下问题:
问题一:开发一个优化模型,目标是最小化使用单一类型(A类)无人机与农村公交车协同配送的总费用。该模型应确定无人机的最优飞行路径和时刻表,以实现成本效益最大化。模型需考虑无人机的固定使用费用和与飞行里程相关的变动费用,同时确保无人机在完成配送任务后返回起始站点。
问题二:扩展问题一的模型,以允许使用三种不同类型的无人机进行协同配送。重新构建优化模型,以实现在多类型无人机条件下的最小总费用配送方案。模型应考虑每种无人机的特性,包括固定费用和变动费用,并确定最优的无人机分配和飞行路径。
问题三:在问题二的基础上增加复杂性,考虑每个需求点不仅需要配送货物,还有取货需求。取货任务将为配送公司带来额外收入(每公斤0.5元)。构建一个综合优化模型,该模型不仅要考虑配送成本,还要考虑取货带来的收入。目标是确定最佳配送和取货方案,以最大化整体利润。模型应包括无人机的飞行路径规划、时刻表安排以及取货和配送的最优组合。
模型假设
- 假设所有类型无人机的性能参数,包括最大载重、飞行速度、飞行距离和固定费用,均符合给定的标准且在任务执行期间保持不变。
- 假设所有公交站点均具备无人机起降和维护的条件,包括空间、电源和必要的操作人员。
- 假设需求点的位置在整个配送期间是固定不变的,且所有需求点均可由无人机服务。
- 假设需求点没有特定的时间窗限制,无人机可以在任何时间进行配送和取货。
- 假设公交车上的货物天然是该站点附近的需求点所需要的。
- 假设公交车严格按照预定的时刻表运行,且不受交通状况或其他外部因素的影响。
- 假设公交车在每个站点都会停靠5分钟用于货物装卸以及无人机电池更换。
- 假设两个方向的公交车都可以为无人机补货。
- 假设白河是配送中心,无人机从这里出发,最终要回到白河。
问题一解题思路
方案是首先部署第一趟公交车,搭载两架A型无人机前往站点i2,并在该站点完成两项配送任务。随后,第二趟公交车再次携带两架A型无人机,途中在首个站点进行货物的快速装卸,继而驶往i3站点释放无人机,以此类推。第三趟公交车第三趟公交车不需要携带新的无人机,只需要将i2站点完成任务的无人机携带至下一个站点即可。在每一轮配送过程中,需要精心安排公交车的行程,确保无人机能够在完成各自任务后,由后续的公交车接力运送至下一站点。至关重要的是,算法设计要充分考虑公交车的运营时刻表,确保所有无人机在日终时能够被安全运回始发点。
当无人机到达对应公交站后,在离开该公交站去往下一个公交站之前这一段时间为无人机送货时间,每个站点的两台无人机同时工作。通过往返的公交车补充货物。理论上两台无人机最多可以完成8个目标点的送货任务。本文通过动态规划以及贪心算法合理安排每个目标点的优先级。确保无人机送货时间不会与公交车到站时间发生冲突。
通过此策略,不仅确保了货物配送的时效性,同时也最大化了成本效益。该方法的实施,展现了贪心算法在物流配送优化问题中的应用潜力,为解决类似的实际问题提供了一种高效且经济的解决方案。此外,该策略还考虑了整数规划模型中的决策变量,确保了解决方案的可行性和实用性,进一步增强了模型的优化效果。
问题一飞行路径
问题一 时间表
核心调度代码
schedules = [];
station_pra = [1 1 1; 2 2 3; 3 3 1; 4 4 3;
5 1 1; 6 2 3; 7 3 1; 8 4 3];
allcost = 8 * 80;%2天时间 每天四个无人机 2 * 4 * 80
for j = 1:size(station_pra, 1)
station = station_pra(j,1);
trip = station_pra(j,2);
fly = station_pra(j,3);
station = station + 1;
item = bus_station_item(station,:);
item(find(item==0)) = [];
station_time = sort([A_to_B(trip).time(station), A_to_B(trip + 1).time(station), B_to_A(trip).time(10 - station), B_to_A(trip + 1).time(10 - station)]);
item_time = [time_matrix_min(item(1,:))];
for i = 1:size(item, 2)
schedule.fly = rem(i, 2) + fly;
schedule.station = station;
schedule.item = item(i);
schedule.start_time = station_time(int16(i/2));
schedule.end_time = station_time(int16(i/2)) + item_time(i);
schedule.cost = 0.8 * distance_matrix_min(item(i));
schedules = [schedules, schedule];
allcost = allcost + schedule.cost;
end
end
allcost