Hai bisogno di aiuto su questa rappresentazione del problema del commesso viaggiatore
-
29-09-2019 - |
Domanda
mi sono imbattuto in una soluzione commesso viaggiatore che utilizza Matlab script e nel suo codice, ho scoperto che utilizza una rappresentazione denominata Città Coordinate, che si presenta come:
CityCood = [0.4000,0.2439,0.1707,0.2239,0.5171;0.4439,0.1463,0.2293,0.7610,0.9414]
per 5 città.
A questo punto, sono davvero all'oscuro di come ha fatto l'autore ottiene questa rappresentazione, dal momento che da quello che ho visto finora, le informazioni a portata di mano dovrebbe essere una distanza di 5 * 5 matrice simmetrica che rappresenta tra due qualsiasi di queste cinque città .
Quindi sarei grato se qualcuno mi potrebbe dare un'idea su come funziona rappresentanza coordinata-based. Grazie in anticipo.
Soluzione
CityCoord
(Penso che ci sia una lettera mancante) è una matrice 2-by-5. Presumo questo mezzo thatCityCoord
contiene due coordinate (x, y) per ogni singola città.
Per creare una matrice di distanza 5-by-5, è possibile chiamare
squareform(pdist(CityCoord'))
Altri suggerimenti
Se non si dispone del Statistics Toolbox, una forma equivalente alla soluzione fornita da @ Jonas per calcolare la distanza euclidea è:
%# 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) );
In caso contrario, siamo in grado di utilizzare il fatto che ||u-v||^2 = ||u||^2 + ||v||^2 - 2*u.v
implementare un codice ancora più veloce vettorizzati:
X = sum(CityCoord.^2);
D = real( sqrt(bsxfun(@plus,X,X')-2*(CityCoord'*CityCoord)) );