[Problema de TSP] Resolução de problemas de TSP com base no algoritmo do firefly [Matlab Edição 141] [Planejamento de caminho 24]

1. Fundo

Definição do problema: Problema do caixeiro viajante itinerante:
Dado um conjunto de n cidades e a distância direta entre elas, encontre uma viagem fechada para que cada cidade passe uma vez e a distância total de viagem seja a mais curta.
O problema do TSP, também conhecido como problema do fardo do vendedor, é um problema antigo. Isso pode ser rastreado até a questão da viagem dos cavaleiros levantada por Euler em 1759. Em 1948, promovido pela americana RAND Corporation, o TSP tornou-se um problema típico no campo da otimização de portfólio moderno.
O TSP é um problema de otimização combinatória com amplo histórico de aplicação e importante valor teórico. Nos últimos anos, muitos algoritmos mais eficazes para resolver esse problema têm sido continuamente introduzidos, como o método de rede neural de Hopfield, o método de recozimento simulado e o método de algoritmo genético.
O espaço de busca do TSP aumenta conforme o número de cidades n aumenta, e o número de combinações de todas as rotas de viagem é (n-1)! / 2. Para encontrar a solução ideal em um espaço de busca tão grande, existem muitas dificuldades de cálculo para métodos convencionais e ferramentas de cálculo existentes. É uma ideia natural resolver o problema do TSP com a ajuda da capacidade de pesquisa do algoritmo genético.

2. Visão geral

O algoritmo Firefly é um algoritmo heurístico inspirado no comportamento intermitente dos vaga-lumes. O principal objetivo do flash de vaga-lumes é atuar como um sistema de sinalização para atrair outros vaga-lumes.
A hipótese é: os
vaga - lumes são neutros em relação ao gênero, de modo que um deles atrairá todos os outros; a atração é proporcional ao brilho. Para quaisquer dois vagalumes, os menos brilhantes são atraídos e, portanto, movem-se para o mais brilhante. Um, no entanto, o brilho diminui à medida que sua distância aumenta; se não houver nenhum vaga-lume mais brilhante do que um determinado, ele se moverá aleatoriamente. O brilho deve estar relacionado à função objetivo. O algoritmo Firefly é um algoritmo de otimização heurística inspirado na natureza.
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

Três, código-fonte

clear;
clc;
close all;
X=[16.47,96.10
    16.47,94.44
    20.09,92.54
    22.39,93.37
    25.23,97.24
    22.00,96.05
    20.47,97.02
    17.20,96.29
    16.30,97.38
    14.05,98.12
    16.53,97.38
    21.52,95.59
    19.41,97.13
    20.09,92.55];
R=11;
MAXGEN=200;
NIND=100;
D=Distanse(X);
N=size(D,1);
%%初始化种群
Chrom=InitPop(NIND,N);
%%在二维图上画出所有坐标点
figure
plot(X(:,1),X(:,2),'o');
%%画出随机解的路线图
DrawPath(Chrom(1,:),X);
pause(0.0001)
%%输出随机解的路线和总距离
disp('初始种群中的一个随机解:')
OutputPath(Chrom(1,:));
Rlength=PathLength(D,Chrom(1,:));
disp(['总距离:',num2str(Rlength)]);
disp('-------------------------------------------------------------------------------------------------')
%%优化
gen=0;
figure;
hold on;box on
xlim([0,MAXGEN])
title('优化过程')
xlabel('代数')
ylabel('最优值')
ObjV=PathLength(D,Chrom);                           %计算路线长度title('优化过程')xlable('代数')ylable('最优值')
preObjV=min(ObjV);
while gen<MAXGEN
    %%计算适应度
    ObjV=PathLength(D,Chrom);                        %计算路线长度
    %fprintf('%d    %1.10f\n',gen,min(ObjV))
    line([gen-1,gen],[preObjV,min(ObjV)]);pause(0.0001)
    preObjV=min(ObjV);
    FitnV=Fitness(ObjV);
    for i=1:NIND
        K=0;
        subject=zeros(NIND,N);
        for j=1:i-1
            dij=ristanse(Chrom(i,:),Chrom(j,:));
            if dij<=R
                K=K+1;
                subject(K,:)=Chrom(j,:);
            end
        end
        for j=i+1:NIND
            dij=ristanse(Chrom(i,:),Chrom(j,:));
             if dij<=R
                K=K+1;
                subject(K,:)=Chrom(j,:);
             end
        end
        if K==0
        subject1=zeros(1,N);
        else subject1=zeros(K,N);
        end
 
        end
        end
    end
     gen=gen+1;
end
%%画出最优解的路线图
ObjV=PathLength(D,Chrom);
[minObjV,minInd]=min(ObjV);
DrawPath(Chrom(minInd(1),:),X)
%%输出最优解的路线和总距离
disp('最优解')
p=OutputPath(Chrom(minInd(1),:));
disp(['总距离:',num2str(ObjV(minInd(1)))]);
disp('-------------------------------------------------------------------')

Quatro, efeito de operação

Insira a descrição da imagem aqui
Nota: Adicione QQ1564658423 para código completo ou escrita.
Revisão anterior >>>>>>
[Matlab 015] [Planejamento de caminho 1] Planejamento de caminho de UAV 3D baseado no código-fonte matlab de enxame de partículas
[Matlab 017] [Planejamento de caminho 2] Usando algoritmos genéticos para preparar a abertura de vários centros de logística -Estilo problema de roteamento de veículos Programa Matlab
[Matlab 018] [Planejamento do caminho 3] Planejamento do caminho da grade do robô com base em enxames de partículas
[Matlab 019] [Planejamento do caminho 4] Algoritmo de colônia de formigas para resolver o caminho mais curto matlab
[Matlab 020] [Planejamento do caminho 5] Matlab algoritmo imunológico para problema de localização de centro de logística
[Matlab 021] [Planejamento de caminho 6] Planejamento de caminho tridimensional de drones baseado em colônia de abelhas artificiais
[Matlab 027] [Planejamento de caminho 7] Baseado em algoritmo de mapa genético de grade Planejamento de caminho ideal de robô
[Matlab 034 período] [Planejamento de caminho 8] Agendamento de ataque multi-UAV
baseado em colônia de formigas baseado em algoritmo genético de mapa de grade para planejamento de caminho ideal de robô [período Matlab 022] [Planejamento de caminho 9]
Modelagem de alocação cooperativa de alvos multi-UAV e solução de algoritmo genético considerando a ordem de alocação [Matlab 110] [Planejamento de caminho 10]
Algoritmo de colônia de formigas para matlab de problema de vrp multicêntrico [Matlab 111] [Planejamento de caminho 11]
Baseado no algoritmo de colônia de formigas Resolvendo problema VRP multicêntrico com matlab de janelas de tempo [Matlab 112] [Planejamento de caminho 12]
Baseado no algoritmo de colônia de formigas para resolver problemas VRP multicêntricos com matlab de janela de tempo [Matlab 113] [Planejamento de caminho 13]
Multi-centro baseado em algoritmo genético VRP solução matlab 【Matlab 114】 【Planejamento de caminho 14】
Simulated annealing para resolver o problema VRP matlab [Matlab 115] [Path planning 15]
A star-based grid path planning [Matlab 116] [Path planning 16]
Uma otimização bidirecional particle swarm grid map path planning com fatores cruzados [Matlab 117] [ Planejamento de caminho 17]
[TSP] Algoritmo de colônia de formigas para resolver problemas de TSP matlab com GUI [Matlab 118] [Planejamento de caminho 18]
Baseado no algoritmo de colônia de formigas mapa de grade de planejamento de caminho matlab [Matlab 119] [Planejamento de caminho 19]
Problema de TSP do caixeiro viajante baseado em algoritmo genético [Matlab 135] [Planejamento de caminho 20]
Problema de TSP do caixeiro viajante baseado em algoritmo de recozimento simulado [Matlab 136] [Planejamento de rota 21]
Planejamento de caminho de carro inteligente baseado em algoritmo de colônia de formigas [Matlab Edição 137] [Planejamento de rota 22 ]
Copa Huawei: uso ideal de UAVs em emergência e alívio de desastres [Matlab Edição 138] [Planejamento de caminho 23]

Acho que você gosta

Origin blog.csdn.net/TIQCmatlab/article/details/112799340
Recomendado
Clasificación