[Planejamento de caminho] Resolvendo vários problemas de VRP com algoritmo genético [Matlab 040]

1. Introdução

Introdução: o problema de roteamento de veículos (VRP) é um problema de otimização de pesquisa de operação relativamente clássico. Ele foi estudado em otimização combinatória discreta e tem um forte valor de aplicação no setor de logística. Ao otimizar o percurso de viagem do veículo, ele pode efetivamente economizar custos de distribuição logística . O problema de roteamento de veículos foi proposto pela primeira vez por Dantzig e Ramser em 1959. Como o problema de otimização da rota de entrega é um problema NP-difícil, o uso de algoritmos heurísticos para resolver o problema se tornou uma importante direção de pesquisa. Após pesquisas contínuas por especialistas e estudiosos de todo o mundo, um grande número de resultados foram alcançados na pesquisa de problemas de roteamento de veículos. O modelo do problema foi ampliado com restrições e metas de otimização, que estão mais alinhadas com a produção real e a vida Em termos de métodos de resolução, utilizam-se principalmente métodos heurísticos e métodos precisos., Algoritmos inteligentes, etc., melhoram continuamente a qualidade da solução. Com base na atitude de aprendizagem e comunicação, este artigo começa com o problema de roteamento de veículos mais básico e aprende como usar algoritmos genéticos para resolver o problema de roteamento de veículos.
1. Visão geral do
problema de roteamento de veículos O problema de roteamento de veículos (VRP) é dado um conjunto de veículos com capacidade limitada, um centro de logística (ou local de abastecimento) e um número de clientes com necessidades de abastecimento e organizar a condução adequada. para que o veículo possa ultrapassar todos os clientes de maneira ordenada e atender a certas restrições (como demanda, limite de tempo de serviço, limite de capacidade do veículo, limite de quilometragem, etc.) e atingir certos objetivos (como a distância mais curta, custo mínimo , etc.), O mínimo de tempo possível e o número de veículos utilizados o mínimo possível).
Este artigo toma os artigos altamente citados publicados pela CNKI como referência e leva a menor quilometragem total de distribuição como a função objetivo, e as restrições são satisfeitas: (1) A soma da demanda de cada cliente em cada rota de distribuição não exceder a capacidade de carga do veículo de entrega; 2) O comprimento de cada rota de entrega não excede a distância máxima de viagem do veículo de entrega para uma entrega; (3) As necessidades de cada cliente devem ser atendidas, e a entrega só pode ser realizada até um veículo de entrega. (O modelo matemático do problema de otimização do caminho do veículo não será discutido aqui)
2. Algoritmo genético
O Algoritmo Genético (Algoritmo Genético, GA) é um algoritmo de otimização inteligente relativamente clássico, que um grande número de estudos tem mostrado que apresenta excelente desempenho na solução de problemas de otimização combinatória discreta. A ideia do algoritmo genético é sobreviver ao mais apto, obter soluções diversificadas por meio de operação de crossover e operação de mutação, reter a solução ótima da função objetivo na próxima geração e selecionar a próxima geração de indivíduos por meio do método da roleta e continuamente loop iterativamente para otimizar continuamente a solução do problema. Este artigo usa a programação Matlab R2010b. O conteúdo específico e as etapas do algoritmo genético para resolver o problema de roteamento de veículos são os seguintes:
2.1. O
problema de roteamento de veículos da operação de codificação é um problema de otimização discreto, combinado com a restrição 3: as necessidades de cada cliente devem ser atendidas , e apenas uma entrega de veículo de entrega em Taiwan pode ser codificada na ordem dos números inteiros do cliente para garantir que cada número do cliente só possa aparecer uma vez. Por exemplo: se o número de clientes for 8, o cromossomo codificado pode ser 1-2-3-4-5-6-7-8.

Dois, resultados em execução

%population_num种群规模;Customer_num客户数量
population=zeros(population_num,Customer_num);
for i=1:population_num
     population(i,:)=randperm(Customer_num);
end
```2.2. 解码操作
解码操作需要在满足约束条件12的前提下,将染色体解码为车辆的配送路径,为计算目标值做好准备。根据排列顺序进行解码,主要判断该客户加入到车辆配送路径后,是否满足该车的最大行驶距离,是否满足该车的最大载重量。比如说染色体1-2-3-4-5-6-7-8,第1辆车路径:将客户1加入到该车的路径中,则第1辆车的行驶路线为0-1-0,表示,该车从物流中心0出发,将货物运到客户1,再返回物流中心,计算行驶距离是否满足第1辆车的最大行驶距离,同时计算运货量是否满足第1辆车的最大载货量,再确定客户2如果加入第1辆车的路径是否满足以上2个条件,如果满足,则第1辆车的行驶路线为0-1-2-0,依次类推,如果不满足其中的1个条件,则需要增加1辆车即为从物流中心出发的第2条行驶路线。
2.3. 计算目标值
根据解码出来的车辆行驶路径,计算目标值即为总配送里程。但需要判断解码出来的行驶路径的数量是否超过总车辆数,若未超过则按所有车辆路径相加得到总配送里程,若超过总车辆数,则说明该配送路径不可行,该解为不可行解,因该问题为最小化优化问题,可通过罚函数增大目标值来淘汰掉该不可行解。
2.4. 交叉操作
交叉操作是根据两个父代的染色体信息,根据交叉概率Pc交换某些片段,从而使父代的信息能够遗传给子代,本质是根据父代的染色体信息产生子代(新解),交叉操作的实现方式有多种,本文给出了一种交换染色体片段的交叉操作,如下图所示。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201230233518476.png)
2.5. 变异操作
变异操作是在父代的染色体信息基础上,根据变异概率Pm改变某些基因位,从而使整个染色体发生变化,该操作对染色体的改变程度小于交叉操作,变异操作的实现方式有多种,本文给出了一种单点位基因突变的变异操作,如下图所示。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201230233532231.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1RJUUNtYXRsYWI=,size_16,color_FFFFFF,t_70)
2.6. 选择操作
选择操作以目标值较好的染色体及随机产生的新染色体组成,在确保优良基因能传递给下一代的基础上,通过随机产生的新解扩大染色体的多样性。
2.7. 算法流程
遗传算法求解车辆路径问题的算法步骤如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201230233547914.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1RJUUNtYXRsYWI=,size_16,color_FFFFFF,t_70)
3、算法验证
实例1:某物流中心有2台配送车辆,其载重量均为8t,车辆每次配送的最大行驶距离为50Km,配送中心(编号为0)与8个客户之间及8个客户相互之间的距离dij、8个客户的货物需求量qj(i, j=12,……,8)见下表1。要求合理安排车辆配送路线,使配送总里程最短。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201230233606442.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1RJUUNtYXRsYWI=,size_16,color_FFFFFF,t_70)
根据以上问题的数据信息,设置好遗传算法的参数,通过遗传算法求解该车辆路径问题得到最有解为【1-3-5-6-4-7-2-8】,最短距离为【69.5】,解码操作得到的车辆路径为【0-1-3-5-6-0】、【0-4-7-2-8-0】。本文通过遗传算法求解实例1,得到与参考文献一致的最短距离,验证了算法的正确性。

```c
%% 遗传算法 优化函数
clc;close all;clear all;%清除变量
rand('seed', 100);
 
global XY p nodenumber maxlink;
filename='需求点分布.xlsx';
[adata,bdata,cdata]=xlsread(filename);
XY=adata(2:end,:)';
nodenumber=size(XY,1);
p=4;% 配送中心个数
maxlink=5;% 最大连接数
 
N=p*2;%优化问题
lb=[min(XY(:,1))*ones(1,p),min(XY(:,2))*ones(1,p)];
ub=[max(XY(:,1))*ones(1,p),max(XY(:,2))*ones(1,p)];
 
 
% 遗传算法参数
popsize=200;%遗传算法种群数
ga_max=500;%遗传算法迭代次数
PM=0.05;%变异概率
PC=0.8;%交叉概率
 
%% 遗传算法主程序
%性能跟踪
tracemat=zeros(ga_max,2);
gen=0;
tic;
Chrom=genChrome(popsize,N,lb,ub);% 建立种群
Value=decodingFun(Chrom,popsize);%解码染色体
%% 遗传算法优化的主循环
%进度条
wait_hand = waitbar(0,'run……', 'tag', 'TMWWaitbar');
while gen<ga_max
    %% 遗传算法选择
    FitnV=ranking(Value);%分配适应度值
    Chrom=select('rws',Chrom,FitnV,1);%选择
    Chrom=mutationGA(Chrom,popsize,PM,N,lb,ub);% 种群变异,单点变异
    Chrom=crossGA(Chrom,popsize,PC,N);% 种群交叉,单点交叉
    Value= decodingFun(Chrom,popsize);%解码染色体
    %% 计算最优
    [v1,index1]=min(Value);
    gen=gen+1;
    tracemat(gen,2)=mean(Value);
    %% 记录最优
    if gen==1
        bestChrom1=Chrom(index1,:);%记录最优染色体
        bestValue1=v1;%记录的最优值
    end
    if bestValue1>v1
        bestValue1=v1;%记录的最优值
        bestChrom1=Chrom(index1,:);
    end
    tracemat(gen,1)=bestValue1;% 保留最优
    waitbar(gen/ga_max,wait_hand);%每循环一次更新一次进步条
end
delete(wait_hand);%执行完后删除该进度条
disp('算法运行时间');
runtime1=toc
 
% 显示结果
disp('遗传算法优化得到的最优目标函数值');
bestValue1
disp('遗传算法优化得到的最优染色体');
bestChrom1
 
 
 
figure;
plot(tracemat(:,1),'r-','linewidth',1);
hold on;
plot(tracemat(:,2),'b-','linewidth',1);
legend({
    
    '种群最优值','种群均值'},'fontname','宋体');
xlabel('迭代次数','fontname','宋体');
ylabel('目标函数','fontname','宋体');
title('遗传算法优化','fontname','宋体');
 
x=bestChrom1;
[y,XY2,E]=myfun(x);
 
XY2
 
title1='结果';
drawnodes(XY,XY2,E,title1);
 
x2=x;
x2(8)=x2(8)+3;
[y,XY2,E]=myfun(x2);

Três, resultados em execução

Insira a descrição da imagem aqui

Quatro, observações

Adicione QQ912100926 para código completo ou escrita.
Revisão anterior >>>>>>
[Planejamento de caminho] Algoritmo de otimização de enxame de partículas para planejamento de caminho tridimensional de UAV [Matlab 012]
[Planejamento de caminho] Algoritmo genético para planejamento de caminho de veículo aberto para vários centros de logística [Matlab 013]
[Planejamento de caminho] Planejamento do caminho da grade do robô com base no algoritmo de enxame de partículas [Matlab 014]
[Planejamento do caminho] Algoritmo da colônia de formigas para resolver o caminho mais curto [Matlab 015]
[Planejamento do caminho] Algoritmo imunológico para a seleção da localização do centro de logística [Matlab 016]
[Planejamento do caminho] planejamento de caminho dimensional para drones
baseado em colônia de abelhas artificiais [Matlab 017] [Planejamento de caminho] Algoritmo genético para planejamento de caminho de robô baseado em mapa de grade [Matlab 018]
[Planejamento de caminho] Algoritmo de colônia de formigas para vários drones Agendamento de ataque [Matlab 019]
[Caminho planejamento] Algoritmo genético baseado no mapa de grade do robô planejamento do caminho ideal [Matlab 020]
[Planejamento do caminho] Algoritmo genético para modelagem de alocação cooperativa multi-UAV considerando a ordem de alocação [Matlab 021 issue]
[planejamento do caminho] algoritmo de colônia de formigas vrp problema [Matlab 022]
[planejamento de caminho] algoritmo de colônia de formigas para resolver VRP multicêntrico com janela de tempo [questão Matlab 023]
[planejamento de caminho] muitos algoritmos genéticos Solução de VRP central [Matlab 024]
[planejamento de caminho] Simulado recozimento para resolver o VRP problema [Matlab 025]
[Planejamento de caminho] Um planejamento de caminho de grade em estrela [Matlab 026]
[Planejamento de caminho] Baseado em um fator cruzado de duas vias Planejamento de mapa de grade de enxame de partículas ideal [Matlab 027]
[Planejamento de caminho] [TSP] Algoritmo de colônia de formigas para resolver o problema de TSP com GUI [Matlab 028]
[Planejamento de caminho] Algoritmo de colônia de formigas para planejamento de caminho de mapa raster [Matlab 029]
[Planejamento de caminho] Algoritmo genético para o caixeiro viajante TSP [Matlab Edição 030 ]
[Planejamento de caminho] Problema de TSP do caixeiro viajante com algoritmo de recozimento simulado [Matlab 031]
[Planejamento de caminho] Planejamento de caminho de carro inteligente do algoritmo de colônia de formigas [Matlab 032]
[Planejamento de caminho] Huawei Cup: UAV baseado em matlab Aplicativo otimizado em resgate de emergência e alívio de desastres [Matlab 033]
[Planejamento de caminho] Custo mínimo do MATLAB e problema de cálculo de fluxo máximo [Matlab 034]
[Planejamento de caminho] Um algoritmo * para resolver o problema de planejamento de caminho tridimensional [Matlab 035]
[Planejamento de caminho] Planejamento de caminho de pessoas de algoritmo de colônia de abelhas trabalhadoras [período Matlab036]
[Planejamento de caminho] Algoritmo de planejamento de caminho de colônia de abelha artificial [Matlab 037]
[Planejamento de caminho] Algoritmo de colônia de formigas para vendas multi-viagens Problema de MTSP [Matlab 038]
[Planejamento de caminho] Baseado em planejamento de caminho de Ant UAV no algoritmo de enxame [Matlab 039]

Acho que você gosta

Origin blog.csdn.net/m0_54742769/article/details/113091004
Recomendado
Clasificación