遗传算法求解多约束、多类型车辆、多目标优化的车辆路径问题

目前关于车辆路径问题的模型种类很多,因此在建立综合优化模型时可选择的也很多,考虑到在实际情况中,配送中心大都是少批次、多品种的配送,需要将多个客户的货物集中到一起后再进行配送,而车辆装载货物的量有限,加之对于带载重限制的车辆路径问题的研究目前为止很多,研究背景较强,此外,结合调研中车辆有最大行驶里程限制,因此本文选择了带载重及车辆最大行驶里程限制的车辆路径模型作为综合优化的整合对象。

本文涉及到的车辆路径问题描述如下:某配送中心,共有k辆车给n个客户点进行配送,每辆车的额定载重量为Gk客户点i的货物重量为gi,车辆装载的货物总重量要小于车辆的额定载重量,使得在满足客户需求的情况下车辆总行驶路径最短。可表示如下图所示。

图1 车辆路径优化的模型模型

建立模型

变量太多,这里就不详细解释变量的含义,对上面4个函数解释如下:式(3-18)车辆总的行驶里程最短;式(3-19)表示车辆总载重利用率最大;式(3-20)表示车辆总容积利用率最大;式(3-21)车辆使用数量最少。

同时针对模型具有以下的约束条件:


该模型包含四个部分的目标:车辆运行里程最短,载重利用率最大,,车辆容积利用率最大,车辆使用数目最小,从优化的角度来看这是一个多目标优化的问题,所以采用通用的方法将其转化成单目标优化问题,以实现对四个目标函数的优化。

单目标转换

将上面的4个目标函数转化成以下的单目标函数:


遗传求解

设计改进的遗传算法进行求解,包括设计编码方案、初始化种群、制定解码方案、确定适应度函数、设计遗传算子、设定参数以及确定终止条件这几个步骤。

部分程序:

%    Author:    怡宝2

%    Use:       基于遗传算法求解多约束条件,多类型运输车辆的车辆路径优化问题,并将4个多目标的优化问题,转化成一个单目标优化问题

%                输入变量(可修改量):

%                                      popsize:种群大小

%                                      T:进化代数                      

%                输出:        

%                                      route:运输路径

%    Remark  本人qq778961303,如有疑问请咨询

tic;

clc;close all;clear all;%S除变量

 

format loose

 

l=20;%配送车数

vehicle=[1750 25;

        2000 31.5;

        2200 54;

        3040 65];%不同类型车辆的载重,体积的限制

num_vehicle=[3 4 5 6];          %不同车辆的数量

limit=[];                       %载重和体积的限制

for i=1:length(num_vehicle)

   temp=rep(vehicle(i,:),[num_vehicle(i) 1]);

   limit=[limit;temp];

end

G=limit(:,1);   %车辆的载重限制

V=limit(:,2);   %车辆的体积限制

N=32;%需要配送节点数

% G=1995;%^辆载重限制

% V=30;%车辆体积限制

L=250;%^辆路程限制

alpha=1;

Ws=130;%车辆满载时按载重计算的成本

Vs=140;%车辆满载时按体积计算的成本()

%车辆配送成本

Csl=0.3;%单位公里消耗燃料费用(/km)

Cs2=2; %车辆折旧(/km)

Cs3=0.03;%轮胎消耗(/km)

Cs4=1.38;%油费(/km)

Cs5=1.24;%养路费(元/km

Cs6=0.15;%车辆日常维护费(元/km

%车辆其他配送相关成本

Fsl=100;%装卸费用(/)

Fs2=8.9;%保险费(/)

Fs3=30; %文档费用(/)

Fs4=50; %配送材料费用(/)

while gen<=T

%%遗传算法选择

FitnV=ranking(Value);%分配适应度值

Chrom=select('sus',Chrom,FitnV,1);%选择

Chrom=mutationGA(Chrom,popsize,PM,N);%种群变异,单点变异

Chrom=crossGA(Chrom,popsize,PC,N);%种群交叉,两点变交叉

%%计算最优

[vl,index1]=min(Value);

gen=gen+1;

trace1(gen,1)=Value(index1);

trace1(gen,2)=mean(Value);

%%记录最优

if gen == 1

   bestChrom1=Chrom(index1,:);%记录函数1的最优染色体

   bestValuel=vl;%记录函数1的最优值

end

if bestValuel>vl

   bestValuel = vl;%记录函数1的最优值

   bestChrom1=Chrom(index1,:);

end

waitbar(gen/T,wait_hand);%每循环一次更新一次进步条

end

delete(wait_hand);%执行完后删除该进度条

%显示结果

disp(['最佳目标函数',num2str(bestValuel)]);

 

disp(['最佳染色体',num2str(bestChrom1)]);

 

disp(['总用车数量:',num2str(min(y4(:,1)))]);

%% 结果

%%转换为需要的格式和输出文件

s=bestChrom1;

needdataW=needdata(1,s);

needdataV=needdata(2,s);

route =divideroute(s,needdataW,needdataV,G,V,L,distdata);%路径划分

%求每辆车的路程,载重利用率,体积利用率

index = find(route==0);

for i = 1:length(index)-1

   temp_route=route(index(i):index(i+1));                %每辆车的路径

   temp_y1=objectfun_distance(temp_route,distdata);      %每辆车的路程

   [temp_y2 temp_y3] = pervehicle(temp_route,needdata,G(i),V(i));      %每辆车的载重、体积利用率

   disp(['' num2str(i) '    辆车的路径:'num2str(temp_route)]);

   disp(['' num2str(i) '   辆车行驶路程:'num2str(temp_y1)]);

   disp(['' num2str(i) '辆车的载重利用率:'num2str(temp_y2)]);

   disp(['' num2str(i) '辆车的体积利用率:'num2str(temp_y3)]);

end

disp(['传算法优化得到的最佳路径:',num2str(route)]);

 

disp(['遗传算法优化得到的目标函数值:',num2str(bestValuel)]);

 

disp(['遗传算法优化得到的总行驶里程:',num2str(min(yl(:,1)))]);

 

disp(['遗传算法优化得到的车辆载重未利用率',num2str(min(y2(1,:)))]);

 

disp(['遗传算法优化得到的车辆容积未利用率',num2str(min(y3(1,:)))]);

 

%% 画图

%%总目标函数

figure

plot(trace1(:,1),'b-');

hold on;

plot(trace1(:,2),'r-');

legend('目标函数最优值','目标函数均值');

xlabel('迭代次数')

ylabel('目标函数')

title('遗传算法优化成本迭代曲线')

 

 

如有疑问请咨询:qq778961303

程序运行结果:

 

  • 44
    点赞
  • 388
    收藏
    觉得还不错? 一键收藏
  • 107
    评论
### 回答1: 遗传算法是一种用于解决多约束、多类型车辆多目标优化车辆路径问题的有效方法。以下是一种基于Matlab的代码实现: 首先,我们需要定义问题的输入和约束条件。假设我们有一组车辆和一组客户点,每个客户点有不同的需求量和服务时间。车辆在给定的时间窗内需要满足所有客户需求,并且在行驶过程中需要满足车辆的容量限制和服务时间限制。 然后,我们需要定义遗传算法的参数和初始种群。在这里,我们可以使用二进制编码表示车辆路径。每个个体是一个二进制串,其中每一个位表示车辆的选择情况,1表示选择了该路段,0表示未选择。种群是由多个个体组成的集合。 接下来,我们可以使用交叉、变异和选择等操作对种群进行进化。交叉操作可以通过交换个体的某些位来产生新的个体。变异操作可以通过随机改变个体的某些位来产生变异后的个体。选择操作可以通过评估个体的适应度函数来选择适应度较高的个体进行繁衍。 在每一代的进化过程中,我们需要评估每个个体的适应度。适应度函数可以根据多目标优化的策略来确定,比如考虑车辆的行驶距离、总体的服务时间和客户满意度等因素。 最后,我们可以通过迭代多次进化操作获取最优解,并输出最佳车辆路径。 以上是一种基于遗传算法的多约束、多类型车辆多目标优化车辆路径问题Matlab代码实现。根据具体问题的要求,可能需要对代码进行更多的细节和调整以得到更好的优化结果。 ### 回答2: 车辆路径问题是指在给定一组车辆和一系列需要服务的地点(称为节点)的情况下,确定每辆车的最佳路径,以便在满足约束条件的情况下,使得总体路程最短或成本最低。 遗传算法是一种启发式算法,能够解决多约束、多类型车辆多目标优化问题。以下是使用MATLAB编写的遗传算法的代码: ```MATLAB % 此处省略初始化和参数设置的代码 % 1. 生成初始种群 population = generatePopulation(); % 2. 进化过程 for iteration = 1:maxIterations % 2.1 评估个体适应度 fitnessValues = evaluateFitness(population); % 2.2 选择操作 selectedIndividuals = selection(fitnessValues); % 2.3 交叉操作 crossedIndividuals = crossover(selectedIndividuals); % 2.4 变异操作 mutatedIndividuals = mutation(crossedIndividuals); % 2.5 合并选中个体和新生成个体 population = [selectedIndividuals; mutatedIndividuals]; % 2.6 精英保留操作,确保新生成个体中保留历史最优个体 population = elitism(population, fitnessValues); end % 3. 返回最优解 bestSolution = getBestSolution(population); ``` 在上述代码中,`generatePopulation`函数用于生成初始种群,`evaluateFitness`函数用于计算个体的适应度,`selection`函数用于选择操作,`crossover`函数用于交叉操作,`mutation`函数用于变异操作,`elitism`函数用于处理精英保留操作,`getBestSolution`函数用于获取当前最优解。 请注意,具体的实现细节需要根据具体问题进行调整,例如确定适应度评估函数、选择操作方法、交叉和变异操作方式等。此外,代码还应考虑各种约束条件,如车辆容量、时间窗口约束等。以上代码仅为示例,具体实现需根据具体问题进行进一步开发和修改。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值