[Planificación de ruta] Resolución de múltiples problemas de VRP con algoritmo genético [Matlab 040]

1. Introducción

Introducción: El problema de enrutamiento de vehículos (VRP) es un problema de optimización de la investigación de operaciones relativamente clásico. Se ha estudiado en la optimización combinatoria discreta y tiene un gran valor de aplicación en la industria de la logística. Al optimizar la ruta de viaje del vehículo, puede ahorrar efectivamente los costos de distribución logística . El problema de la ruta de los vehículos fue propuesto por primera vez por Dantzig y Ramser en 1959. Dado que el problema de optimización de la ruta de entrega es un problema NP-difícil, el uso de algoritmos heurísticos para resolver el problema se ha convertido en una importante dirección de investigación. Después de una investigación continua por parte de expertos y académicos de todo el mundo, se han logrado una gran cantidad de resultados en la investigación de problemas de generación de rutas de vehículos. El modelo de problemas se ha ampliado con restricciones y objetivos de optimización, que están más en línea con la producción real y la vida. escenarios En cuanto a los métodos de resolución, se utilizan principalmente métodos heurísticos y métodos precisos., algoritmos inteligentes, etc., mejoran continuamente la calidad de la solución. Basado en la actitud de aprendizaje y comunicación, este artículo comienza con el problema de generación de rutas de vehículos más básico y aprende cómo usar algoritmos genéticos para resolver el problema de generación de rutas de vehículos.
1. Descripción general del
problema de generación de rutas para vehículos Al problema de generación de rutas para vehículos (VRP) se le asigna un conjunto de vehículos con capacidad limitada, un centro logístico (o lugar de suministro) y una cantidad de clientes con requisitos de suministro, y organiza la conducción adecuada. Ruta, para que el vehículo pueda pasar a todos los clientes de manera ordenada y cumplir con ciertas restricciones (como la demanda, el límite de tiempo de servicio, el límite de capacidad del vehículo, el límite de kilometraje, etc.) y lograr ciertos objetivos (como la distancia más corta, el costo mínimo , etc.), el menor tiempo posible y el menor número de vehículos utilizados).
Este artículo toma como referencia los artículos muy citados publicados por CNKI, y toma el kilometraje total de distribución más corto como función objetivo, y se satisfacen las restricciones: (1) La suma de la demanda de cada cliente en cada ruta de distribución no exceder la capacidad de carga del vehículo de entrega; 2) La longitud de cada ruta de entrega no excede la distancia máxima de viaje del vehículo de entrega para una entrega; (3) Las necesidades de cada cliente deben ser satisfechas y la entrega solo puede ser realizada por un vehículo de reparto. (El modelo matemático del problema de optimización de la ruta del vehículo no se discutirá aquí)
2. Algoritmo genético
El Algoritmo Genético (Algoritmo Genético, GA) es un algoritmo de optimización inteligente relativamente clásico.Un gran número de estudios han demostrado que tiene un rendimiento excelente en la resolución de problemas de optimización combinatoria discretos. La idea del algoritmo genético es sobrevivir al más apto, obtener soluciones diversificadas a través de operaciones cruzadas y operaciones de mutación, retener la solución óptima de la función objetivo en la próxima generación y seleccionar la próxima generación de individuos a través del método de la ruleta, y continuamente. bucle iterativamente para optimizar continuamente la solución del problema. Este artículo utiliza la programación Matlab R2010b. El contenido específico y los pasos del algoritmo genético para resolver el problema de enrutamiento de vehículos son los siguientes:
2.1. El
problema de enrutamiento de vehículos de operación de codificación es un problema de optimización discreto, combinado con la restricción 3: se deben satisfacer las necesidades de cada cliente , y solo se puede codificar una entrega de vehículo de entrega de Taiwán en el orden de números enteros de cliente para garantizar que cada número de cliente pueda aparecer y solo pueda aparecer una vez. Por ejemplo: si el número de clientes es 8, el cromosoma codificado puede ser 1-2-3-4-5-6-7-8.

Dos, resultados en ejecución

%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);

Tres, resultados en ejecución

Inserte la descripción de la imagen aquí

Cuatro, comentarios

Agregue QQ912100926 para completar el código o la escritura.
Revisión anterior >>>>>>
[Planificación de ruta] Algoritmo de optimización de enjambre de partículas para planificación de ruta UAV tridimensional [Matlab 012]
[Planificación de ruta] Algoritmo genético para planificación de ruta de vehículo abierto para múltiples centros logísticos [Matlab 013]
[Planificación de ruta] Planificación de ruta de cuadrícula de robot basada en algoritmo de enjambre de partículas [Matlab 014]
[Planificación de ruta] Algoritmo de colonia de hormigas para resolver la ruta más corta [Matlab 015]
[Planificación de ruta] Algoritmo inmune para la selección de la ubicación del centro logístico [Matlab 016]
[Planificación de ruta] Tres- planificación de ruta dimensional para drones
basada en colonia de abejas artificial [Matlab 017] [Planificación de ruta] Algoritmo genético para planificación de ruta de robot basado en mapa de cuadrícula [Matlab 018]
[Planificación de ruta] Algoritmo de colonia de hormigas para varios drones Programación de ataque [Matlab 019]
[Ruta planificación] Algoritmo genético basado en mapa de cuadrícula planificación de ruta óptima de robot [Matlab 020]
[Planificación de ruta] Algoritmo genético para modelado de asignación de objetivos cooperativo multi-UAV considerando el orden de asignación [problema Matlab 021]
[planificación de ruta] algoritmo de colonia de hormigas vrp multicéntrico problema [Matlab 022]
[planificación de ruta] algoritmo de colonia de hormigas para resolver VRP multicéntrico con ventana de tiempo [problema Matlab 023]
[planificación de ruta] muchos algoritmos genéticos Solución central de VRP [Matlab 024]
[planificación de ruta] Recocido simulado para resolver el VRP problema [Matlab 025]
[Planificación de ruta] Planificación de ruta de cuadrícula estelar [Matlab 026]
[Planificación de ruta] Basado en un factor cruzado de dos vías Planificación de ruta de mapa de cuadrícula de enjambre de partículas óptimo [Matlab 027]
[Planificación de ruta] [TSP] Algoritmo de colonia de hormigas para resolver el problema de TSP con GUI [Matlab 028]
[Planificación de ruta] Algoritmo de colonia de hormigas para planificación de ruta de mapa ráster [Matlab 029]
[Planificación de ruta] Algoritmo genético para vendedor ambulante TSP [Matlab Issue 030 ]
[Planificación de ruta] Problema de TSP de vendedor ambulante del algoritmo de recocido simulado [Matlab 031]
[Planificación de ruta] Planificación de ruta de automóvil inteligente del algoritmo de colonia de hormigas [Matlab 032]
[Planificación de ruta] Copa Huawei: UAV basado en matlab Aplicación optimizada en rescate de emergencia y [Matlab 033]
[Planificación de ruta] Problema de cálculo de flujo máximo y costo mínimo de MATLAB [Matlab 034]
[Planificación de ruta] Un algoritmo * para resolver el problema de planificación de ruta tridimensional [Matlab 035]
[Planificación de ruta] Personas Planificación de ruta de algoritmo de colonia de abejas obreras [período Matlab036]
[Planificación de ruta] Algoritmo de planificación de ruta de colonia de abejas artificiales [Matlab 037]
[Planificación de ruta] Algoritmo de colonia de hormigas para ventas de viajes múltiples Problema de MTSP [Matlab 038]
[Planificación de ruta] Planificación de ruta de UAV de hormigas basado en el algoritmo de enjambre [Matlab 039]

Supongo que te gusta

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