MATLAB 绘制旅行商问题的解

MATLAB plot the solution for the Traveling Salesman Problem

我有几点space:

A  0 0
B  0 1
C  0 2
D  0 4
E  1 2
F  1 3
G  2 0
H  2 4
I  3 4
J  4 4
K  5 0
L  6 1
M  7 2
N  7 4
O  4 2
P  8 3
Q  8 4 ;

我也有旅行商问题的解决方案,本质上是必须连接的边。

A B   1
A G   1
B C   1
C E   1
D F   1
D H   1
E F   1
G O   1
H I   1
I J   1
J N   1
K L   1
K O   1
L M   1
M P   1
N Q   1
P Q   1

我可以绘制节点,但我不确定如何指定边。

使用 Michael Kay 博士(北卡罗来纳州)的 MATLOG 工具箱。从 link 免费下载。

查看 pplot() 文档 (link here)。具体来说,您可以在给定 Arc List 的情况下绘制,在文档中表示为 IJ(请参阅下面的代码)。

  % Examples:
  XY = [2 2; 3 1; 4 3; 1 4];                  % Points
  pplot(XY,'r.')
  pplot(XY,num2cell(1:4))

  IJ = [1 2; 1 3; 1 4];                       % Arc List
  h1 = pplot(IJ,XY,'g-');
  IJlab = {'(1,2)','(1,3)','(1,4)'};
  h2 = pplot(IJ,IJlab,XY);
  delete([h1; h2])

  loc = {[1 4 3 2 1]};                        % Loc Seq Vector
  h3 = pplot(loc,XY,'g-');
  loclab = {'(1,4)','(4,3)','(3,2)','(2,1)'};
  h4 = pplot(loc,loclab,XY);
  set(h3,'color','b')

这能够快速生成您想要的情节。

更新 使用 MATLOG function list & documentation 中的 tspnneighbor()tsp2opt() 的示例。

此方法使用 location 向量,它只是序列中的节点索引,例如loc = [3 5 6 1 2 4 3].

% Add MATLOG directory to path
path(path,'C:\Users\username\mypathtoMATLOG')

% DATA
XY_NCcity = uscity('XY',strcmp('NC',uscity('ST'))); % Get NC city [lon, lat] coordinates
C = dists(XY_NCcity,XY_NCcity,'mi');  % Get distance matrix

% ANIMATION
% Closest Unvisited City Algorithm (Nearest Neighbor)
makemap(XY_NCcity)
h = pplot(XY_NCcity,'r.')
[loc,TC,bestvtx] = tspnneighbor(C,527,h)  % Start CUCA from node 527 (Raleigh)

以下是使用北卡罗来纳州城市的输出。进一步检查 tspnneighbor 函数表明它使用了 MATLOG 的 pplot 函数。

为了完整性,还有一个二选一改进特征,tsp2opt(),可以改进解。

% OPTIONAL: ANIMATED TWO-OPT IMPROVEMENT
% Demonstrates what a "more optimal" tour would look like
% Final result is not guaranteed to be optimal
[loc,TC] = tsp2opt(loc,C,[],[],[],h); % Two-opt heuristic improvement