Optimizar distancia recorrida
Publicado por Cristian Alexis (1 intervención) el 25/11/2020 21:11:11
Cordial saludo.
Por favor sollicito de su apoyo para encontrar una manera de mejor el código de tal modo que optimice(reduzca) la distancia total.
El programa recoge los datos desde un archivo exscel que esta distribuido así:
72 filasx 2 columnas; una fila representa una ciudad y las columnas representa su coordenada:
5.346999095,-72.4059986
12.56213711,-81.69032658
5.716613585,-75.31662785
5.719998392,-72.94000289
7.089992288,-73.84999903
4.310006937,-74.80999211
2.690002461,-75.33001205
...

Por favor sollicito de su apoyo para encontrar una manera de mejor el código de tal modo que optimice(reduzca) la distancia total.
El programa recoge los datos desde un archivo exscel que esta distribuido así:
72 filasx 2 columnas; una fila representa una ciudad y las columnas representa su coordenada:
5.346999095,-72.4059986
12.56213711,-81.69032658
5.716613585,-75.31662785
5.719998392,-72.94000289
7.089992288,-73.84999903
4.310006937,-74.80999211
2.690002461,-75.33001205
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
%csvread para leer archivos o datos que tengan formato csv
dts= csvread('ciu_colo.csv')
plot(dts(:,2),dts(:,1), '.b');
%programa que escoja una ruta para luego calcular la distancia totak recorrida
nciu= size (dts,1)%cuantas filas y cuantas columnas
mat_dis= zeros (nciu, nciu);
for i= 1:nciu
for j=1:nciu
%sqrt((x2-x1)^2 + (y2-y1)^2)
mat_dis(i,j)= sqrt((dts(i, 1) - dts(j,1))^2 + (dts(i,2) - dts(j,2))^2);
end
end
ale_res=randperm(nciu);
%%%%%%% Crear o modificar el programa de tal manera que la respuesta sea
%%%%%%% mejor a la que se hizo en clase
%fijar los ejes para que sean los mismos para todos los plot
set(gca, 'Xlim', [-81.6903 -67.4930], 'Ylim', [ -4.2200 12.5621]);
hold on %mantiene el grafico sujeto al max y al min
distancia=0;
for i=1:nciu
if i<72
distancia=mat_dis(ale_res(i),ale_res(i+1))+distancia;
else
distancia=mat_dis(ale_res(72),ale_res(1))+distancia;
end
l=sprintf('%0.2f',distancia);
plot(dts(ale_res(1:i),2), dts(ale_res(1:i),1),'b');
legend(l);
pause (0.2)
end
hold off

Valora esta pregunta


0