我在太空中有几点:
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
我可以绘制节点,但我不知道如何指定边缘。
答案 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')
更新
在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