Algorithme génétique pour résoudre le problème du TSP urbain

1. Introduction à l'algorithme génétique et au TSP

1. L'algorithme génétique est un modèle informatique qui simule le processus de sélection naturelle de l'évolution biologique de Darwin et le mécanisme évolutif de la génétique, et est une méthode de recherche de la solution optimale en simulant le processus d'évolution naturelle. L'algorithme génétique commence par une population qui représente l'ensemble de solutions potentielles du problème, et une population est composée d'un certain nombre d'individus génétiquement codés. Chaque individu est en fait une entité avec un chromosome caractéristique. En tant que principal vecteur de matériel génétique, c'est-à-dire la collection de gènes multiples, l'expression interne (c'est-à-dire le génotype) est une certaine combinaison de gènes, qui détermine l'expression externe de la forme de l'individu. Par conséquent, au début, la cartographie du phénotype au génotype, c'est-à-dire le codage, doit être réalisée. Après la génération de la population de la première génération, selon les principes de survie du plus apte et de survie du plus apte, les générations évolutives produisent des solutions de mieux en mieux approximatives. Dans chaque génération, le corps est sélectionné en fonction de l'aptitude de l'individu dans le domaine problématique, et à l'aide de la génétique naturelle Les opérateurs génétiques combinent des croisements et des mutations pour produire des populations qui représentent de nouveaux ensembles de solutions. Ce processus amènera la progéniture de la population à s'adapter à l'environnement plus que la génération précédente.Les individus optimaux de la dernière population sont décodés et peuvent être utilisés comme solution optimale approximative au problème.
Le processus de base est illustré dans la figure ci-dessous:
Insérez la description de l'image ici
2. Le problème du voyageur de commerce, c'est-à-dire le problème TSP (Traveling Salesman Problem) est également traduit par le problème du vendeur de voyage et le problème du vendeur, qui est l'un des problèmes bien connus dans le domaine des mathématiques. Supposons qu'un homme d'affaires itinérant souhaite visiter n villes, il doit choisir le chemin qu'il veut emprunter. La limite du chemin est que chaque ville ne peut visiter qu'une seule fois, et finalement retourner à la ville de départ d'origine. L'objectif de sélection de chemin est que la distance de chemin requise soit la valeur minimale parmi tous les chemins.

Deuxièmement, le principe de base de l'algorithme génétique

L'algorithme génétique est un type de méthode de recherche aléatoire qui emprunte aux lois évolutives du monde biologique (survie du plus apte, survie du plus apte), sa principale caractéristique est d'opérer directement sur les objets structurels, il n'y a pas de dérivation et de limite de continuité de fonction Il a un parallélisme implicite inhérent et une meilleure capacité d'optimisation globale. Il adopte une méthode d'optimisation probabiliste, qui peut automatiquement obtenir et guider l'espace de recherche optimisé, et ajuster de manière adaptative la direction de la recherche sans avoir besoin de certaines règles.

3. Les principales étapes de l'algorithme génétique

1. Population initiale: plusieurs solutions sont générées aléatoirement dans le domaine réalisable et sont appelées population initiale.
2. Évaluez l'adéquation de chaque solution dans la population et évaluez dans quelle mesure chaque individu s'adapte à l'environnement.
3. Survie du plus apte, élimination de l'inaptitude, utilisation de nombres aléatoires et d'autres méthodes pour éliminer les individus inadaptés, aptes à la rétention.
4. Déranger le cloud par échange croisé, mutation, etc., essentiellement, rechercher dans le domaine réalisable pour trouver la solution la plus adaptée à l'environnement.
L'environnement ci-dessus se réfère à la fonction objectif, la fonction qui doit résoudre la valeur optimale, chaque individu est chaque solution réalisable, l'évaluation de la condition physique consiste à introduire la solution réalisable dans la fonction pour le calcul, puis à comparer sa taille, si la solution réalisable est remplacée dans la fonction Excellent, alors cette solution est la solution optimale. La survie des plus aptes est la rétention d'excellentes solutions, l'élimination des solutions médiocres, le croisement et la mutation est de perturber les solutions pour améliorer encore la supériorité des solutions.

Quatrièmement, les caractéristiques des algorithmes génétiques

1. Les algorithmes génétiques ne fonctionnent que sur des gènes individuels, donc peu importe la complexité du problème réel, sa stabilité ne sera pas grandement affectée.
2. Le processus de recherche de l'algorithme génétique appartient au calcul parallèle et peut bien rechercher l'espace de la solution.
3. Stabilité et robustesse élevées, adaptées aux problèmes d'optimisation complexes non linéaires de grande dimension.

Cinq, module de code d'implémentation d'algorithme

1. Fonction de dessin de points pairs plot_route.m

function plot_route(a,R)
scatter(a(:,1),a(:,2),'rx');
hold on;
plot([a(R(1),1),a(R(length(R)),1)],[a(R(1),2),a(R(length(R)),2)]);
hold on;
for i=2:length(R)
    x0=a(R(i-1),1);
    y0=a(R(i-1),2);
    x1=a(R(i),1);
    y1=a(R(i),2);
    xx=[x0,x1];
    yy=[y0,y1];
    plot(xx,yy);
    hold on;
end

end

2. Fonction de coût de distance chromosomique mylength.m

function len=myLength(D,p)%p是一个排列
[N,NN]=size(D);
len=D(p(1,N),p(1,1));
for i=1:(N-1)
    len=len+D(p(1,i),p(1,i+1));
end
end

3. Fonction fitness fit.m

function fitness=fit(len,m,maxlen,minlen)
fitness=len;
for i=1:length(len)
    fitness(i,1)=(1-(len(i,1)-minlen)/(maxlen-minlen+0.0001)).^m;
end

4. Fonction de fonctionnement croisé cross.m

function [A,B]=cross(A,B)
L=length(A);
if L<10
    W=L;
elseif ((L/10)-floor(L/10))>=rand&&L>10
    W=ceil(L/10)+8;
else
    W=floor(L/10)+8;
end
%%W为需要交叉的位数
p=unidrnd(L-W+1);%随机产生一个交叉位置
%fprintf('p=%d ',p);%交叉位置
for i=1:W
    x=find(A==B(1,p+i-1));
    y=find(B==A(1,p+i-1));
    [A(1,p+i-1),B(1,p+i-1)]=exchange(A(1,p+i-1),B(1,p+i-1));
    [A(1,x),B(1,y)]=exchange(A(1,x),B(1,y));
end

end

5. Échange de fonction d'échange.m

function [x,y]=exchange(x,y)
temp=x;
x=y;
y=temp;
 
end

6. Fonction de mutation Mutation.m

function a=Mutation(A)
index1=0;index2=0;
nnper=randperm(size(A,2));
index1=nnper(1);
index2=nnper(2);
%fprintf('index1=%d ',index1);
%fprintf('index2=%d ',index2);
temp=0;
temp=A(index1);
A(index1)=A(index2);
A(index2)=temp;
a=A;

end

7. Fonction principale

%main
clear;
clc;
%%%%%%%%%%%%%%%输入参数%%%%%%%%
N=25;               %%城市的个数
M=100;               %%种群的个数
ITER=2000;               %%迭代次数
%C_old=C;
m=2;                %%适应值归一化淘汰加速指数
Pc=0.8;             %%交叉概率
Pmutation=0.05;       %%变异概率
%%生成城市的坐标

pos=randn(N,2);  
%randn是一种产生标准正态分布的随机数或矩阵的函数,属于MATLAB函数
%返回一个N*2的随机项的矩阵。如果N不是个数量,将返回错误信息。

%%生成城市之间距离矩阵
D=zeros(N,N);
%zeros(N,N)产生N×N的double类零矩阵
for i=1:N
    for j=i+1:N
        dis=(pos(i,1)-pos(j,1)).^2+(pos(i,2)-pos(j,2)).^2;
        D(i,j)=dis^(0.5);
        D(j,i)=D(i,j);
    end
end

%%生成初始群体

popm=zeros(M,N);
%zeros(M,N)产生M×N的double类零矩阵
for i=1:M
    popm(i,:)=randperm(N);%随机排列,比如[2 4 5 6 1 3]
end
%%随机选择一个种群
R=popm(1,:);
figure(1);
scatter(pos(:,1),pos(:,2),'rx');%画出所有城市坐标
axis([-3 3 -3 3]);
figure(2);
plot_route(pos,R);      %%画出初始种群对应各城市之间的连线
axis([-3 3 -3 3]);
%%初始化种群及其适应函数
fitness=zeros(M,1);
len=zeros(M,1);

for i=1:M%计算每个染色体对应的总长度
    len(i,1)=myLength(D,popm(i,:));
end
maxlen=max(len);%最大回路
minlen=min(len);%最小回路

fitness=fit(len,m,maxlen,minlen);
rr=find(len==minlen);%找到最小值的下标,赋值为rr
R=popm(rr(1,1),:);%提取该染色体,赋值为R
for i=1:N
    fprintf('%d ',R(i));%把R顺序打印出来
end
fprintf('\n');

fitness=fitness/sum(fitness);
distance_min=zeros(ITER+1,1);  %%各次迭代的最小的种群的路径总长
nn=M;
iter=0;
while iter<=ITER
    fprintf('迭代第%d次\n',iter);
    %%选择操作
    p=fitness./sum(fitness);
    q=cumsum(p);%累加
    for i=1:(M-1)
        len_1(i,1)=myLength(D,popm(i,:));
        r=rand;
        tmp=find(r<=q);
        popm_sel(i,:)=popm(tmp(1),:);
    end 
    [fmax,indmax]=max(fitness);%求当代最佳个体
    popm_sel(M,:)=popm(indmax,:);

    %%交叉操作
    nnper=randperm(M);
%    A=popm_sel(nnper(1),:);
 %   B=popm_sel(nnper(2),:);
    %%
    for i=1:M*Pc*0.5
        A=popm_sel(nnper(i),:);
        B=popm_sel(nnper(i+1),:);
        [A,B]=cross(A,B);
  %      popm_sel(nnper(1),:)=A;
  %      popm_sel(nnper(2),:)=B; 
         popm_sel(nnper(i),:)=A;
         popm_sel(nnper(i+1),:)=B;
    end

    %%变异操作
    for i=1:M
        pick=rand;
        while pick==0
             pick=rand;
        end
        if pick<=Pmutation
           popm_sel(i,:)=Mutation(popm_sel(i,:));
        end
    end

    %%求适应度函数
    NN=size(popm_sel,1);
    len=zeros(NN,1);
    for i=1:NN
        len(i,1)=myLength(D,popm_sel(i,:));
    end

    maxlen=max(len);
    minlen=min(len);
    distance_min(iter+1,1)=minlen;
    fitness=fit(len,m,maxlen,minlen);
    rr=find(len==minlen);
    fprintf('minlen=%d\n',minlen);
    R=popm_sel(rr(1,1),:);
    for i=1:N
        fprintf('%d ',R(i));
    end
    fprintf('\n');
    popm=[];
    popm=popm_sel;
    iter=iter+1;
    %pause(1);

end
%end of while

figure(3)
plot_route(pos,R);
axis([-3 3 -3 3]);
figure(4)
plot(distance_min);

Sixièmement, la variable de contrôle analyse l'influence de chaque paramètre sur la solution

1. L'effet de la taille de la population sur la solution Les
paramètres constants sont les suivants:
N = 25; //
Nombre de villes ITER = 2000; / Nombre d'itérations
m = 2; // Indice d'accélération d'adaptation normale
Pc = 0,8; / / Probabilité de croisement
Pmutation = 0,05; // Probabilité de mutation
①M = 20; //
Insérez la description de l'image ici
Nombre de population ②M = 50; //
Insérez la description de l'image ici
Nombre de population ③M = 100; // Nombre de population
Insérez la description de l'image ici
Conclusion: Plus la taille de la population est grande, plus le résultat de l'algorithme est élevé Précis, meilleure est l'adaptabilité, mais plus la durée de fonctionnement est longue.
2. L'effet du nombre d'itérations sur la solution Les
paramètres constants sont les suivants:
N = 25; // Nombre de villes
M = 100; // Nombre de populations
m = 2; // Indice d'accélération d'adaptation normale
Pc = 0,8; // probabilité croisée
Pmutation = 0,05; // probabilité de mutation
①ITER = 1000; / nombre d'itérations
Insérez la description de l'image ici
Insérez la description de l'image ici
②ITER = 1500; / nombre d'itérations
Insérez la description de l'image ici
Insérez la description de l'image ici
③ITER = 2000; / nombre d'
Insérez la description de l'image ici
Insérez la description de l'image ici
itérations Plus le nombre d' itérations est élevé, plus le taux correct de la solution est élevé. Lorsque le nombre d'itérations atteint 1000, le résultat de fonctionnement de l'algorithme a tendance à être stable (le chemin le plus court est obtenu de manière stable) et l'efficacité de l'algorithme est relativement élevée. Le nombre optimal d'itérations de l'algorithme est 2000.
3. L'effet du nombre de villes sur la solution Les
paramètres constants sont les suivants:
M = 100; // Nombre de population
ITER = 2000; / Nombre d'itérations
m = 2; // Indice d'élimination normalisé
Pc = 0,8; // probabilité croisée
Pmutation = 0,05; // probabilité de mutation
①N = 15; // nombre de villes
Insérez la description de l'image ici
②N = 20; // nombre de villes
Insérez la description de l'image ici
③N = 25; // nombre de villes
Insérez la description de l'image ici
Conclusion: lorsque la ville Lorsqu'il y a un grand nombre, supérieur à 50 villes, après plusieurs itérations, GA ne converge toujours pas. Le problème possible est qu'il est coincé dans la solution optimale locale
. 4. L'effet de la probabilité de croisement sur la solution Les
paramètres constants sont les suivants:
N = 25; // ville le nombre de
m = 100; // nombre de population
ITER = 2000; / itérations
m = 2; // des valeurs d'adaptation étaient indice d'accélération normalisée
Pmutation = 0,05; // mutation probabilité
①Pc = 0,6; // probabilité de croisement
Insérez la description de l'image ici
②Pc = 0,7; // Probabilité de croisement
Insérez la description de l'image ici
③Pc = 0,8; // Probabilité de croisement
Insérez la description de l'image ici
Conclusion: Si la probabilité de croisement est trop faible, la solution optimale ne sera pas obtenue. Plus la probabilité de croisement est élevée, meilleure est la forme physique moyenne.
5. L'effet de la probabilité de mutation sur la solution Les
paramètres constants sont les suivants:
N = 25; // Nombre de villes
M = 100; //
Nombre de populations ITER = 2000; / Nombre d'itérations
m = 2; // Retour de la valeur adaptative Indice d'accélération d'élimination uniforme
Pc = 0,8; // probabilité croisée
①Pmutation = 0,01; // probabilité de mutation
Insérez la description de l'image ici
②Pmutation = 0,05; // probabilité de mutation
Insérez la description de l'image ici
③Pmutation = 0,1; // probabilité de mutation
Insérez la description de l'image ici
Conclusion: une probabilité de mutation trop élevée ou trop faible affectera la solution optimale.

7. Résumé

Étant donné que la stratégie de recherche globale et le calcul d'optimisation de l'algorithme génétique ne reposent pas sur des informations de gradient, seules la fonction objectif et la fonction de fitness correspondante qui affectent la direction de la recherche sont nécessaires, donc elles sont largement utilisées. Combiner l'optimisation des problèmes à grande échelle à l'aide du calcul génétique est une méthode plus efficace, car il est difficile de résoudre la solution optimale en utilisant la méthode d'énumération dans le calcul actuel. Cependant, l'algorithme génétique présente également des lacunes: il ne dispose pas de méthode d'analyse quantitative efficace pour la précision, la faisabilité et la complexité de calcul de l'algorithme. Grâce à l'algorithme de cet article, nous pouvons clairement comprendre que la solution obtenue par l'algorithme génétique n'est pas nécessairement la solution optimale.

Publié 11 articles originaux · Likes0 · Visites 1040

Je suppose que tu aimes

Origine blog.csdn.net/likepanda99/article/details/103142786
conseillé
Classement