MATLAB绘制了旅行商问题的解决方案

时间:2017-10-14 15:27:11

标签: matlab plot traveling-salesman

我在太空中有几点:

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

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

enter image description here

1 个答案:

答案 0 :(得分:0)

使用Michael Kay博士(NC State)的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')

这能够快速生成您想要的情节。 TSP Plot using OP data

更新 在MATLOG function list & documentation中使用tspnneighbortsp2opt的示例。

此方法使用 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函数。
North Carolina TSP

为完整性起见,还有一个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

TSP after two opt improvement