在旅行推销员问题的这一代表方面需要一些帮助
-
29-09-2019 - |
题
我遇到了一个使用MATLAB脚本的旅行推销员解决方案,在其代码中,我发现它使用了称为City Coordinate的表示形式,看起来像:
CityCood = [0.4000,0.2439,0.1707,0.2239,0.5171;0.4439,0.1463,0.2293,0.7610,0.9414]
对于5个城市。
在这一点上,我对作者如何获得这种表示真的很不明确,因为从我到目前为止所看到的,手头的信息应该是一个5*5对称矩阵,代表这五个城市中任何两个城市之间的距离。
因此,如果有人能给我一个关于基于坐标的表示如何工作的想法,我会很感激。提前致谢。
解决方案
CityCoord
(我认为缺少一封信)是一个2 x-5阵列。我认为这意味着CityCoord
每个城市都包含两个坐标(x,y)。
要创建一个5 x-5距离矩阵,您可以致电
squareform(pdist(CityCoord'))
其他提示
如果您没有统计工具箱,则是与解决方案相同的形式 @Jonas 计算欧几里得距离为:
%# dist(u,v) = norm(u-v) = sqrt(sum((u-v).^2))
D = cell2mat( arrayfun( ...
@(i) sqrt( sum( bsxfun(@minus, CityCoord, CityCoord(:,i)).^2 ) ), ...
(1:size(CityCood,2))', ...
'UniformOutput',false) );
否则,我们可以使用以下事实 ||u-v||^2 = ||u||^2 + ||v||^2 - 2*u.v
实施更快的矢量代码:
X = sum(CityCoord.^2);
D = real( sqrt(bsxfun(@plus,X,X')-2*(CityCoord'*CityCoord)) );
不隶属于 StackOverflow