遗传算法解决MDVRP问题(MATLAB)

实验数据包括15个服务点和3个车场。
main.m如下

clc
clear
%导入数据
global request;
global v_Pos;
global d_Pos;
[request,v_Pos,d_Pos] = Pos_init;
%客户数,车场数,各车场车辆数,最大装载量、货物需求表request
v_num = length(v_Pos);
d_num = length(d_Pos);
global max_car_num;
global max_load;
max_car_num = 5;
max_load = 25;
%初始化最近邻车场表Service_D和临近车场表NearD,以及距离服务点矩阵Dis,和车场距离矩阵Dis_depot

lamda = 0.7;
%global some matrix
global Dis;
global Dis_depot;
global NearD;
[Service_D,NearD,Dis,Dis_depot] = NearD_ini(v_Pos,d_Pos,lamda);
%初始化染色体
%染色体个数
N = 75;
chrom = cell(N,1);
for i = 1:N
    chrom{i} = chrom_ini(Service_D,d_num);
end
%
fitness = zeros(N,1);
temp_fitness = zeros(N,d_num);
%染色体解码---VSplit保证可行性
route = cell(N,1);
for i = 1:N
    route{i} = zeros(d_num,v_num);
end
%对N个染色体进行解码操作
%设定执行VGSH操作的概率
P_VGSH = 0.2;
for i = 1:N
    %判断是否使用VGSH进行优化
    is_vgsh = 0;
    if(randn<P_VGSH)
        is_vgsh = 1;
    end
    for j = 1:d_num
        %先得到每个路径上的客户点数和需要的车辆数
        temp = chrom{i}(j,:);
        temp(find(temp==0))=[];
        total_request = 0;
        global A;
        A = zeros(1,length(temp));
        for k = temp
            total_request = total_request + request(k); 
        end
        car_count = ceil(total_request/max_load);%至少需要的车辆数
        [route{i}(j,:),temp_fitness(i,j)] = route_ini(temp,Dis,Dis_depot(j,:),request,max_load,car_count,max_car_num);%初始解码
        if(is_vgsh == 1)
            [chrom{i}(j,:),temp_fitness(i,j)] = VGSH(chrom{i}(j,:),route{i}(j,:));
        end
    end
    fitness(i) = 1./sum(temp_fitness(i,:));
end
A = [];


draw_track(chrom{1},route{1});




%接下来进入进化阶段
%遗传代数
T = 2500;
t = 1;
changeofbest = zeros(T,1);
while(t<=T)
    %首先对上一代的染色体进行自然选择
    [chrom,fitness,route] = nature_select(chrom,route,fitness);
    max(fitness);
    if(mod(t,50)==0)
        distance = 1/max(fitness)
    end
    changeofbest(t) = max(fitness);
    t = t + 1;
end

draw_track(chrom{1},route{1});

 if exist('result.xlsx','file')
     a    = xlsread('result.xlsx');
 end
data = [a;distance max(fitness)];
xlswrite('result.xlsx',data,'sheet1')
plot(changeofbest,'LineStyle','-'

实验结果如下:
运行前:
初始化时的路径
运行后:
遗传算法得到的最优路径

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值