• 内有求解此NP问题的丰富算法，珍藏版呀，数模竞赛必备的参考资料。
• 代码有详细注释。实现了三种解决方案，针对固定数据集和随机数据集
• MATLAB求解TSP问题的一种改进遗传算法
• 遗传-TSP-matlab 遗传算法的植入用matlab求解TSP
• % MTSPV_GA Variable Multiple Traveling Salesmen Problem (M-TSP) Genetic Algorithm (GA) % Finds a (near) optimal solution to a variation of the M-TSP (that has a % variable number of salesmen) by ...
代码
% MTSPV_GA Variable Multiple Traveling Salesmen Problem (M-TSP) Genetic Algorithm (GA)
%   Finds a (near) optimal solution to a variation of the M-TSP (that has a
%   variable number of salesmen) by setting up a GA to search for the
%   shortest route (least distance needed for the salesmen to travel to
%
% Summary:
%     1. Each salesman travels to a unique set of cities and completes the
%        route by returning to the city he started from
%     2. Each city is visited by exactly one salesman
%
% Input:
%     XY (float) is an Nx2 matrix of city locations, where N is the number of cities
%     DMAT (float) is an NxN matrix of point to point distances or costs
%     MINTOUR (scalar integer) is the minimum tour length for any of the salesmen
%     POPSIZE (scalar integer) is the size of the population (should be divisible by 4)
%     NUMITER (scalar integer) is the number of desired iterations for the algorithm to run
%     SHOWPROG (scalar logical) shows the GA progress if true
%     SHOWRESULT (scalar logical) shows the GA results if true
%
% Output:
%     OPTROUTE (integer array) is the best route found by the algorithm
%     OPTBREAK (integer array) is the list of route break points (these specify the indices
%         into the route used to obtain the individual salesman routes)
%     MINDIST (scalar float) is the total distance traveled by the salesmen
%
% Route/Breakpoint Details:
%     If there are 10 cities and 3 salesmen, a possible route/break
%     combination might be: rte = [5 6 9 1 4 2 8 10 3 7], brks = [3 7]
%     Taken together, these represent the solution [5 6 9][1 4 2 8][10 3 7],
%     which designates the routes for the 3 salesmen as follows:
%         . Salesman 1 travels from city 5 to 6 to 9 and back to 5
%         . Salesman 2 travels from city 1 to 4 to 2 to 8 and back to 1
%         . Salesman 3 travels from city 10 to 3 to 7 and back to 10
%
% Example:
%     n = 35;
%     xy = 10*rand(n,2);
%     minTour = 3;
%     popSize = 40;
%     numIter = 5e3;
%     a = meshgrid(1:n);
%     dmat = reshape(sqrt(sum((xy(a,:)-xy(a',:)).^2,2)),n,n);
%     [optRoute,optBreak,minDist] = mtspv_ga(xy,dmat,minTour,popSize,numIter,1,1);
%
% Example:
%     n = 50;
%     phi = (sqrt(5)-1)/2;
%     theta = 2*pi*phi*(0:n-1);
%     rho = (1:n).^phi;
%     [x,y] = pol2cart(theta(:),rho(:));
%     xy = 10*([x y]-min([x;y]))/(max([x;y])-min([x;y]));
%     minTour = 3;
%     popSize = 40;
%     numIter = 1e4;
%     a = meshgrid(1:n);
%     dmat = reshape(sqrt(sum((xy(a,:)-xy(a',:)).^2,2)),n,n);
%     [optRoute,optBreak,minDist] = mtspv_ga(xy,dmat,minTour,popSize,numIter,1,1);
%
% Example:
%     n = 35;
%     xyz = 10*rand(n,3);
%     minTour = 3;
%     popSize = 40;
%     numIter = 5e3;
%     a = meshgrid(1:n);
%     dmat = reshape(sqrt(sum((xyz(a,:)-xyz(a',:)).^2,2)),n,n);
%     [optRoute,optBreak,minDist] = mtspv_ga(xyz,dmat,minTour,popSize,numIter,1,1);
%
%
% Author: Joseph Kirk
% Email: jdkirk630@gmail.com
% Release: 1.4
% Release Date: 11/07/11
function varargout = mtspv_ga(xy,dmat,minTour,popSize,numIter,showProg,showResult)

% Process Inputs and Initialize Defaults
nargs = 7;
for k = nargin:nargs-1
switch k
case 0
xy = 10*rand(40,2);
case 1
N = size(xy,1);
a = meshgrid(1:N);
dmat = reshape(sqrt(sum((xy(a,:)-xy(a',:)).^2,2)),N,N);
case 2
minTour = 3;
case 3
popSize = 80;
case 4
numIter = 5e3;
case 5
showProg = 1;
case 6
showResult = 1;
otherwise
end
end

% Verify Inputs
[N,dims] = size(xy);
[nr,nc] = size(dmat);
if N ~= nr || N ~= nc
error('Invalid XY or DMAT inputs!')
end
n = N;

% Sanity Checks
minTour = max(1,min(n,round(real(minTour(1)))));
popSize = max(8,8*ceil(popSize(1)/8));
numIter = max(1,round(real(numIter(1))));
showProg = logical(showProg(1));
showResult = logical(showResult(1));

% Initialize the Populations
popRoute = zeros(popSize,n);	% population of routes
popBreak = cell(popSize,1);     % population of breaks
for k = 1:popSize
popRoute(k,:) = randperm(n);
popBreak{k} = rand_breaks();
end

% Select the Colors for the Plotted Routes
pclr = ~get(0,'DefaultAxesColor');
clr = hsv(floor(n/minTour));

% Run the GA
globalMin = Inf;
totalDist = zeros(1,popSize);
distHistory = zeros(1,numIter);
tmpPopRoute = zeros(8,n);
tmpPopBreak = cell(8,1);
newPopRoute = zeros(popSize,n);
newPopBreak = cell(popSize,1);
if showProg
pfig = figure('Name','MTSPV_GA | Current Best Solution','Numbertitle','off');
end
for iter = 1:numIter
% Evaluate Each Population Member (Calculate Total Distance)
for p = 1:popSize
d = 0;
pRoute = popRoute(p,:);
pBreak = popBreak{p};
nSalesmen = length(pBreak)+1;
rng = [[1 pBreak+1];[pBreak n]]';
for s = 1:nSalesmen
d = d + dmat(pRoute(rng(s,2)),pRoute(rng(s,1)));
for k = rng(s,1):rng(s,2)-1
d = d + dmat(pRoute(k),pRoute(k+1));
end
end
totalDist(p) = d;
end

% Find the Best Route in the Population
[minDist,index] = min(totalDist);
distHistory(iter) = minDist;
if minDist < globalMin
globalMin = minDist;
optRoute = popRoute(index,:);
optBreak = popBreak{index};
nSalesmen = length(optBreak)+1;
rng = [[1 optBreak+1];[optBreak n]]';
if showProg
% Plot the Best Route
figure(pfig);
for s = 1:nSalesmen
rte = optRoute([rng(s,1):rng(s,2) rng(s,1)]);
if dims > 2, plot3(xy(rte,1),xy(rte,2),xy(rte,3),'.-','Color',clr(s,:));
else plot(xy(rte,1),xy(rte,2),'.-','Color',clr(s,:)); end
title(sprintf(['Total Distance = %1.4f, Salesmen = %d, ' ...
'Iteration = %d'],minDist,nSalesmen,iter));
hold on
end
hold off
end
end

% Genetic Algorithm Operators
randomOrder = randperm(popSize);
for p = 8:8:popSize
rtes = popRoute(randomOrder(p-7:p),:);
brks = popBreak(randomOrder(p-7:p));
dists = totalDist(randomOrder(p-7:p));
[ignore,idx] = min(dists); %#ok
bestOf8Route = rtes(idx,:);
bestOf8Break = brks{idx};
routeInsertionPoints = sort(ceil(n*rand(1,2)));
I = routeInsertionPoints(1);
J = routeInsertionPoints(2);
for k = 1:8 % Generate New Solutions
tmpPopRoute(k,:) = bestOf8Route;
tmpPopBreak{k} = bestOf8Break;
switch k
case 2 % Flip
tmpPopRoute(k,I:J) = tmpPopRoute(k,J:-1:I);
case 3 % Swap
tmpPopRoute(k,[I J]) = tmpPopRoute(k,[J I]);
case 4 % Slide
tmpPopRoute(k,I:J) = tmpPopRoute(k,[I+1:J I]);
case 5 % Change Breaks
tmpPopBreak{k} = rand_breaks();
case 6 % Flip, Change Breaks
tmpPopRoute(k,I:J) = tmpPopRoute(k,J:-1:I);
tmpPopBreak{k} = rand_breaks();
case 7 % Swap, Change Breaks
tmpPopRoute(k,[I J]) = tmpPopRoute(k,[J I]);
tmpPopBreak{k} = rand_breaks();
case 8 % Slide, Change Breaks
tmpPopRoute(k,I:J) = tmpPopRoute(k,[I+1:J I]);
tmpPopBreak{k} = rand_breaks();
otherwise % Do Nothing
end
end
newPopRoute(p-7:p,:) = tmpPopRoute;
newPopBreak(p-7:p) = tmpPopBreak;
end
popRoute = newPopRoute;
popBreak = newPopBreak;
end

if showResult
% Plots
figure('Name','MTSPV_GA | Results','Numbertitle','off');
subplot(2,2,1);
if dims > 2, plot3(xy(:,1),xy(:,2),xy(:,3),'.','Color',pclr);
else plot(xy(:,1),xy(:,2),'.','Color',pclr); end
title('City Locations');
subplot(2,2,2);
imagesc(dmat(optRoute,optRoute));
title('Distance Matrix');
nSalesmen = length(optBreak)+1;
subplot(2,2,3);
rng = [[1 optBreak+1];[optBreak n]]';
for s = 1:nSalesmen
rte = optRoute([rng(s,1):rng(s,2) rng(s,1)]);
if dims > 2, plot3(xy(rte,1),xy(rte,2),xy(rte,3),'.-','Color',clr(s,:));
else plot(xy(rte,1),xy(rte,2),'.-','Color',clr(s,:)); end
title(sprintf('Total Distance = %1.4f',minDist));
hold on;
end
subplot(2,2,4);
plot(distHistory,'b','LineWidth',2)
title('Best Solution History');
set(gca,'XLim',[0 numIter+1],'YLim',[0 1.1*max([1 distHistory])]);
end

% Return Outputs
if nargout
varargout{1} = optRoute;
varargout{2} = optBreak;
varargout{3} = minDist;
end

% Generate Random Set of Breaks
function breaks = rand_breaks()
nSalesmen = ceil(floor(n/minTour)*rand);
nBreaks = nSalesmen - 1;
dof = n - minTour*nSalesmen;    % degrees of freedom
for kk = 2:nBreaks
end
for kk = 1:nBreaks
end
end
end


如需帮助：VX：zzs1056600403
展开全文
• 关于TSP问题的遗传算法求解总代码 包含每个过程单独函数 可以自己修改选择变异函数 备有注释 易于理解
• MATLAB求解TSP最短路径问题 文章目录MATLAB求解TSP最短路径问题问题背景问题重述实现步骤Matlab 代码结果展示 问题背景 随着社会的不断进步,最短路径算法在人们的日常生活显得越来越重要。每天开车去上班，应该选择...
MATLAB求解TSP最短路径问题

文章目录
MATLAB求解TSP最短路径问题问题背景问题重述实现步骤Matlab 代码结果展示

问题背景
随着社会的不断进步,最短路径算法在人们的日常生活显得越来越重要。每天开车去上班，应该选择哪条公路才能使自己到公司的费用最低,时间最少，这是最短路径的问题;在网络路由中，怎样选择最优的路由路径，这也是最短路径问题;在交通旅游、高校规划以及电网架设中怎样使其耗费的资金最少,这还是最短路径问题.由此可见对最短路径问题的研究是非常有意义的。
问题重述
根据以上背景，需要解决以下问题:兰州交通大学的鸽子，如何实现从兰州交通大学出发,遍访甘肃省各高校一次，并回到起点，同时使其路径最短。
实现步骤
1.找出甘肃省各高校名称;2.找出甘肃省各高校的经纬度,并转化成距离。实际情况中，一些高校的经纬度可能不准确，如何处理也是需要考虑的问题，如何爬取高校经纬度连接：爬取甘肃省高校经纬度3.研究寻访路线算法，使其路径最短，并评价该方案的实施效果。
Matlab 代码

clc;
clear all;
tic
sj0= csvread('D:\Java学习\pythonspace\AIFinish\备份原始数据\甘肃省高校经纬度 - 副本.csv', 1, 0)
x = sj0(:,2);
y = sj0(:,3);
sj1 = [x,y];
d1 = [103.745276,36.0997]; %标记起点 兰州交通大学
sj = [d1;sj1;d1];
d = zeros(43);%距离矩阵d初始化(国际地球精度计算方法)
dx = zeros(43);%距离矩阵dx初始化(地球以球形计算方法)
for i = 1:42 %生成矩阵d初始化
for j = i+1:43
d(i,j) = 111.199*sqrt((sj(i,1)-sj(j,1))^2+(sj(i,2)-sj(j,2))^2*(cos((sj(i,1)-sj(j,1)/2)))^2);
end
end
d=d+d'; %因为大学1到大学2距离是对称的
sj = sj*pi/180; %角度化弧度
for i = 1:42 %生成矩阵d初始化
for j = i+1:43
dx(i,j) = 6371*acos(cos(sj(i,1)-sj(j,1))*cos(sj(j,2))*cos(sj(i,2))+sin(sj(i,2))*sin(sj(j,2)));
end
end
dx=dx+dx';%因为大学1到大学2距离是对称的
ddx = d-dx

for Flag = 1: 1000 %模拟1000次
path = [];long = inf;%初始化线路最长，最长为无穷大
rand('state',sum(clock)); %初始化随机数发生器
for j = 1:10000 %求较好的初始解
path0=[1 1+randperm(41),43]; temp = 0;  %randperm(41)随机生成1-41的不重复数列
for i = 1:42
temp = temp + d(path0(i),path0(i+1));  %该循环是用来求随机生成路径的长度
end
if temp < long
path = path0;
long = temp;
end
end
%设置退火参数
e = 0.1*50; %终止温度
L = 20000;
at = 0.9999;%降温系数
T = 100;
%退火过程
for k = 1:L  %每个温度迭代次数
c=1+randperm(length(sj1),2);%产生新解
c = sort(c);c1 = c(1);c2 = c(2);
%计算代价函数值的增量
df = d(path(c1-1),path(c2))+d(path(c1),path(c2+1))-d(path(c1-1),path(c1))-d(path(c2),path(c2+1));
if df < 0 %接受准则
path=[path(1:c1-1),path(c2:-1:c1),path(c2+1:length(sj))];long = long+df;
elseif exp(-df/T)>=rand
path=[path(1:c1-1),path(c2:-1:c1),path(c2+1:length(sj))];long = long+df;
end
D(Flag,k) = long; %迭代量标志
T = T*at;
if T<e
break;
end
end
Path(Flag,:) = path;
Long(Flag) = long;
end

结果展示

这是一篇完整的课程设计内容，需要学习、完整的代码、以及不懂的地方可以咨询QQ 1404066717
展开全文
• TSP 问题是常见的优化问题，可以有多种求解的方法。 现将三种经典的求解方法总结并展示出来供大家一起研究。 1，粒子群算法 function PSOforTSP %初始化 Alpha=0.25; %个体经验保留概率 Beta=0.25; %全局经验保留...
• TSP问题是指假设有一个旅行商人要拜访n个城市，他必须选择所要走的路径，路径的限制是每个城市只能拜访一次，而且最后要回到原来出发的城市。路径的选择目标是要求得的...本文使用蚁群算法求解TSP问题（matlab代码）
• TSP问题是指假设有一个旅行商人要拜访n个城市，他必须选择所要走的路径，路径的限制是每个城市只能拜访一次，而且最后要回到原来出发的城市。路径的选择目标是要求得的路径路程为所有路径之中的最小值...（matlab代码）
• 通过禁忌搜索算法求解经典的TSP问题（MATLAB源代码），TSP问题为假设有一个旅行商人要拜访n个城市，他必须选择所要走的路径，路径的限制是每个城市只能拜访一次，而且最后要回到原来出发的城市。路径的选择目标是...
• matlab禁忌搜索算法求解tsp问题用matlab模拟禁忌搜索算法，TSP问题为假设有一个旅行商人要拜访n个城市，他必须选择所要走的路径，路径的限制是每个城市只能拜访一次，而且最后要回到原来出发的城市。路径的选择目标...
• 使用Matlab遗传算法思想解决TSP问题
• 遗传算法求解TSP问题遗传算法简介TSP问题遗传算法内容生成初始种群计算个体适应度轮盘赌选择交叉操作变异操作图像输出完整代码运行结果总结 遗传算法简介 遗传算法包括初始种群生成，适应度的计算，种群选择，交叉和...


遗传算法求解TSP问题
遗传算法简介TSP问题遗传算法内容生成初始种群计算个体适应度轮盘赌选择交叉操作变异操作图像输出
完整代码运行结果总结

遗传算法简介
遗传算法包括初始种群生成，适应度的计算，种群选择，交叉和变异这几项内容
TSP问题
TSP问题是旅行商经过一系列城市使得旅行商经过的总路程最短的问题
遗传算法内容
生成初始种群
// An highlighted block
for i=1:NP
f(i,:)=randperm(N);   %初始种群
end

计算个体适应度
// An highlighted block
for i=1:NP
len(i,1)=D(f(i,N),f(i,1));
for j=1:N-1
len(i,1)=len(i,1)+D(f(i,j),f(i,j+1));
end
end
maxlen=max(len);
minlen=min(len
%计算归一化适应值
for i=1:NP
fitness(i,1)=(1-(len(i,1)-minlen)/(maxlen-minlen+0.001));
end

轮盘赌选择
// An highlighted block
sumFit=sum(fitness);
fitvalue=fitness./sumFit;
fitvalue=cumsum(fitvalue);
ms=sort(rand(NP,1));
fiti=1;
newi=1;
while newi <= NP
if (ms(newi)) < fitvalue(fiti)
nf(newi,:)=f(fiti,:);  %种群重新生成
newi=newi+1;
else
fiti=fiti+1;
end
end

交叉操作
交叉操作是单点交叉的方式，例如12345678和87654321，假如第一个点交叉则变成8234571和17654328
// An highlighted block
for i=1:2:NP
for j=1:N
if rand<pc
%同一种群变化
A=find(nf(i,:)==nf(i+1,j));
nf(i,A)=nf(i,j);
B=find(nf(i+1,:)==nf(i,j));
nf(i+1,B)=nf(i+1,j);
%交换位置
temp1=nf(i+1,j);
nf(i+1,j)=nf(i,j);
nf(i,j)=temp1;
end
end
end

变异操作
变异是采用单点变异的方式，比如12345678第5个位置变异，则在随机生成一个值比如1赋给第5个位置，则生成的个体是52341678
// An highlighted block
for i=1:NP
for j=1:N
if rand<pm
temp2=nf(i,j);
temp3=randi([1,N],1,1);
A=find(nf(i,:)==temp3);
nf(i,j)=temp3;
nf(i,A)=temp2;
end
end
end

图像输出
figure
for i=1:N-1
plot([C(R(i),1),C(R(i+1),1)],[C(R(i),2),C(R(i+1),2)],'bo-')
hold on;
end
plot([C(R(N),1),C(R(1),1)],[C(R(N),2),C(R(1),2)],'ro-')
title(['优化最短距离:',num2str(minlen)])

完整代码
close all
clear all
clc

%读入初始数据
FP1=fopen('shuju.txt','rt');
N=fscanf(FP1,'%d',1);  %初始个体数
C=fscanf(FP1,'%f',[2,N]);   %个体坐标
C=C';
D=zeros(N);   %两两距离
for i=1:N
for j=1:N
D(i,j)=((C(i,1)-C(j,1))^2+(C(i,2)-C(j,2))^2)^0.5;%求任意两个城市的间距
end
end
NP=200;   %种群规模
G=500;   %迭代次数
f=zeros(NP,N);   %种群
nf=zeros(NP,N);   %子种群
pc=0.4; %交叉概率
pm=0.2; %变异概率
F=[];
for i=1:NP
f(i,:)=randperm(N);   %初始种群
end
R=f(1,:);   %最优种群
len=zeros(NP,1);   %存储路径长度
fitness=zeros(NP,1);   %存储归一化值
gen=0;

%计算各种群的适应度值，即种群的长度
while gen<G
for i=1:NP
len(i,1)=D(f(i,N),f(i,1));
for j=1:N-1
len(i,1)=len(i,1)+D(f(i,j),f(i,j+1));
end
end
maxlen=max(len);
minlen=min(len);
rr=find(len==minlen);   %找到最小值种群所在的位置
R=f(rr(1,1),:);   %最小值种群的基因

%计算归一化适应值
for i=1:NP
fitness(i,1)=(1-(len(i,1)-minlen)/(maxlen-minlen+0.001));
end

%基于轮盘赌的复制操作
sumFit=sum(fitness);
fitvalue=fitness./sumFit;
fitvalue=cumsum(fitvalue);
ms=sort(rand(NP,1));
fiti=1;
newi=1;
while newi <= NP
if (ms(newi)) < fitvalue(fiti)
nf(newi,:)=f(fiti,:);  %种群重新生成
newi=newi+1;
else
fiti=fiti+1;
end
end

%交叉操作
for i=1:2:NP
for j=1:N
if rand<pc
%同一种群变化
A=find(nf(i,:)==nf(i+1,j));
nf(i,A)=nf(i,j);
B=find(nf(i+1,:)==nf(i,j));
nf(i+1,B)=nf(i+1,j);
%交换位置
temp1=nf(i+1,j);
nf(i+1,j)=nf(i,j);
nf(i,j)=temp1;
end
end
end
%变异操作
for i=1:NP
for j=1:N
if rand<pm
temp2=nf(i,j);
temp3=randi([1,N],1,1);
A=find(nf(i,:)==temp3);
nf(i,j)=temp3;
nf(i,A)=temp2;
end
end
end
f=nf;
f(1,:)=R;
clear F
gen=gen+1;
Rlength(gen)=minlen;
end
figure
for i=1:N-1
plot([C(R(i),1),C(R(i+1),1)],[C(R(i),2),C(R(i+1),2)],'bo-')
hold on;
end
plot([C(R(N),1),C(R(1),1)],[C(R(N),2),C(R(1),2)],'ro-')
title(['优化最短距离:',num2str(minlen)])
figure
plot(Rlength)
xlabel('迭代次数')
ylabel('目标函数')
title('适应度进化曲线')
disp('最短路径路程是：')
disp(R)


运行结果

总结
利用遗传算法可以解决TSP问题，结果较准确，但是迭代收敛的慢，易陷入局部最优
展开全文
• 以遗传算法求解旅行商问题 (TSP) 为例 , 提出一种改进的交叉和变异算子 , 深入讨论了各个遗传算子的程序实 现 , 并给出其算子的 MATLAB 程序编码 , 最后用 5 个城市的非对称 TSP 进行仿真分析 . 结果表明 , 改进的...
• 本代码实现了蚁群算法并且很好的解决了旅行商问题，对比了多个城市的结果，给出了最优路径图。
• 求解经典TSP问题的蚁群算法MATLAB程序实现 旅行商问题(Traveling Saleman Problem，TSP)是车辆路径调度问题(VRP)的特例，由于数学家已证明TSP问题是NP难题，因此，VRP也属于NP难题。旅行商问题（TSP）又译为旅行推销...
• 本文用贪婪算法和最小路径算法解决TSP问题，包含源代码，并且已经调试过了，可以使用
• MatlabTSP源程序-各种优化算法解决TSP问题.rar 求解TSP问题，在matlab基础上编写的各种算法！
• 遗传算法求解TSP（旅行商）问题 MATLAB代码
• 使用MATLAB中的yalmip工具箱，调用cplex求解TSP问题
• matlab代码LKH_TSP 一套使用LKH求解器解决TSP问题的工具 什么是LKH LKH是Lin-Kernighan启发式算法的有效实现，用于解决旅行商问题。 Lin-Kernighan求解器（也称为Lin-Kernighan-Helsgaun求解器）是TSP效率最高的求解...
• 使用模拟退火算法解决TSP旅行商问题，在TSP70问题上跑出的结果几乎接近最优，同时速度很快，在自己笔记本上测试10s左右。同时包括论文形式的设计报告。
• 这篇文章的代码是笔者自己用动态规划的思想用matlab实现的，里面的用到了矩阵运算和matlab内置函数的使用，相比c写起来代码少了很多，数学好的看起来应该更加简单易懂。 但是是根据一位大牛的文章写的，这里附上他...


目录
声明题目问题分析代码实现结果

声明
笔者另外加一句话哈，如果有笔者表述不清或写不清楚的地方，欢迎读者来联系和讨论，大家一起进步。 这篇文章的代码是笔者自己用动态规划的思想用matlab实现的，里面的用到了矩阵运算和matlab内置函数的使用，相比c写起来代码少了很多，数学好的看起来应该更加简单易懂。 但是是根据一位大牛的文章写的，这里附上他文章的网址。如果大家想看更详细的分析，可以去他的网站上看。 https://blog.csdn.net/joekwok/article/details/4749713  话不多说看文章！
题目
TSP问题（旅行商问题）是指旅行家要旅行n个城市，要求各个城市经历且仅经历一次然后回到出发城市，并要求所走的路程最短。  假设现在有四个城市，0,1,2,3，他们之间的代价如图一，可以存成二维表的形式 现在要从城市0出发，最后又回到0，期间1，2，3都必须并且只能经过一次，使代价最小。
问题分析
假设从顶点s出发，令d(i, V’)表示从顶点i出发经过V’(是一个点的集合)中各个顶点一次且仅一次，最后回到出发点s的最短路径长度。
推导：(分情况来讨论)
①当V’为空集，那么d(i, V’)，表示从i不经过任何点就回到s了，如上图的 城市3->城市0(0为起点城市)。此时d(i, V’)=Cis(就是 城市i 到 城市s 的距离)、
②如果V’不为空，那么就是对子问题的最优求解。你必须在V’这个城市集合中，尝试每一个，并求出最优解。
d(i, V’)=min{Cik + d(k, V’-{k})}
注：Cik表示你选择的城市和城市i的距离，d(k, V’-{k})是一个子问题。
代码实现

结果
最短路径就是10，读者可以自己手算一下，结果是一样的。这种小规模问题可以手算，但是遇到大型问题的时候，显然笔算是难以实现的。
展开全文
• 旅行商问题，即TSP问题（Travelling Salesman Problem）又译为旅行推销员问题、货郎担问题，是数学领域中著名问题之一。假设有一个旅行商人要拜访n个城市，他必须选择所要走的路径，路径的限制是每个城市只能拜访一...
• MATLAB源码集锦-人工鱼群求解TSP问题源代码
• 大数据是我们信息时代的一大特征，作为NP问题的旅行商问题在我们的实际中也是经常碰到。该代码通过模拟退火的过程，求解了旅行商问的次优解
• 禁忌搜索（TS）是基于本地搜索的元启发式方法，由Fred W. Glover于1986年提出。在本文中，我们将提供禁忌搜索（TS）算法求解旅行商问题（TSP）的matlab源代码
• 基于动态粒子群算法的TSP求解 基于动态粒子群算法的TSP求解 基于动态粒子群算法的TSP求解 基于动态粒子群算法的TSP求解
• 旅行商问题动态规划matlab代码这是解决经典TSP的三种不同方法，即。 所有代码都在MATLAB 2019b上进行了测试。 算法是 遗传算法（边缘表示和2-opt） 动态编程 群算法（蚂蚁系统算法） 怎么跑 在遗传算法和群算法中，...

...

matlab 订阅