【路径规划-VRP问题】基于人工蜂群算法求解双层2E-VRP问题matlab代码

1 简介

本文利用人工蜂群算法求解带载重量限制的车辆路径问题(Capacitated vehicle routing problem, CVRP)和双层车辆路径问题(2E-VRP)。CVRP是传统的单层车辆路径问题,而2E-VRP问题来源于当代城市物流中的双层运输系统。与CVRP直接配送至目标客户不同,在双层运输系统中,货物先到达配送中心,经过卫星平台中转后运送到目标客户。CVRP问题和2E-VRP问题都是属于NP-Hard难题,对算法的局部搜索能力和全局搜索能力都有很高的要求。大规模邻域搜索(Large neighborhood search, LNS)方法通过使用启发式规则搜索非常复杂的邻域,近年来在运输和调度问题上的应用表现突出,而人工蜂群算法(Artifical Bee Colony,ABC)是一种新兴的仿生群体智能算法,具有较强的全局寻优能了,我们将大规模邻域搜索方法应用于人工蜂群算法中,融合了两者的优点,使算法有更强的搜索能力。双层车辆路径问题是本文的研究重点,结合双层车辆路径问题的分层特点,本文同样设计了一种基于大规模邻域搜索的改进人工蜂群算法用于求解该问题。算法通过对第一层的路径和第二层的路径进行破坏与修复从而找到一个更优的邻域。​

【路径规划-VRP问题】基于人工蜂群算法求解双层2E-VRP问题matlab代码_第1张图片

【路径规划-VRP问题】基于人工蜂群算法求解双层2E-VRP问题matlab代码_第2张图片

【路径规划-VRP问题】基于人工蜂群算法求解双层2E-VRP问题matlab代码_第3张图片

【路径规划-VRP问题】基于人工蜂群算法求解双层2E-VRP问题matlab代码_第4张图片

【路径规划-VRP问题】基于人工蜂群算法求解双层2E-VRP问题matlab代码_第5张图片

【路径规划-VRP问题】基于人工蜂群算法求解双层2E-VRP问题matlab代码_第6张图片

【路径规划-VRP问题】基于人工蜂群算法求解双层2E-VRP问题matlab代码_第7张图片

【路径规划-VRP问题】基于人工蜂群算法求解双层2E-VRP问题matlab代码_第8张图片

2 部分代码

%% -----------------------------信息提取程序-----------------------------

clear all; close all; clc; rand('state', sum(100*clock)); format bank;

%----4个文件下的测试样本数目----

seq_dataset = [21,18,54,18]; %dataset文件下的4个文件Set2-Set5中测试样例数目

%----参数设置----

runs        = 20;                 %重复实验次数

max_iter    = 500000;             %每次实验最多迭代次数500k

%各文件夹内数据总量分别为:21,18,54,18; %文件夹的序号:1-4->Set2-Set5;

%----Start----

tic

for num_folder = 1:4%1:4                    %文件夹的序号:1-4分别对应文件夹Set2-Set5;

    seq_data = seq_dataset(num_folder);      %第num_folder个文件夹的测试样本总数

    nn = seq_data;                                  %set2中的第2个问题

    result.name=0;

    result.val=0;

    all_result_pool=cell(1,nn);

    for seq = 1:seq_data  %1:seq_data

       %----提取文件的仓库、卫星、客户坐标、车辆信息和客户需求----

        %coord_dep:仓库的坐标

        %coord_sat:卫星(中转站)坐标

        %coord_cus:客户的坐标

        %fleet:车辆信息,fleet(1,1)为第一层车辆的最大载重量  fleet(1,2)为第一层可使用的车辆数目  fleet(2,1)为第二层车辆的最大载重量  fleet(2,2)为第二层可使用的车辆数目

        %demand:客户需求

        [coord_dep,coord_sat,coord_cus,fleet,demand,name] = extractdata(num_folder,seq);

        [result_pool,fitness_pool]=run_abc(coord_dep,coord_sat,coord_cus,fleet,demand,50,100);

        minval = min(fitness_pool);

        id = find(minval==fitness_pool);

        result_best = result_pool{id(1)};

        %画图工具

        draw_plot(result_best,coord_dep,coord_sat,coord_cus,name);

        [s2s_dist,s2d_dist,c2s_dist,c2c_dist] =compute_dist2(coord_dep,coord_sat,coord_cus);

        result.name = name;

        result.val = minval;

        result.path = result_best;

        all_result_pool{seq} = result;

        %%输出格式要求

%         lay_out(result_best,name,demand,c2c_dist,c2s_dist,s2d_dist,s2s_dist,minval,fleet);

    end

%     save all_result_pool all_result_pool;

end

toc

img =gcf;  %获取当前画图的句柄

print(img, '-dpng', '-r600', './运行结果.png')         %即可得到对应格式和期望dpi的图像

3 仿真结果

【路径规划-VRP问题】基于人工蜂群算法求解双层2E-VRP问题matlab代码_第9张图片

4 参考文献

[1]林镇泽. 求解双层车辆路径问题的改进人工蜂群算法[D]. 华南理工大学.

你可能感兴趣的:(路径规划,vr,算法,matlab)