Deegroller

GetRoute

Jan 14th, 2013
859
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function Route = GetRoute( CityCoordinates )
  2. %GETROUTE Calculates a short route between a large (> 10) number of cities.
  3. %   This function tries to find a reasonably short route that can be used
  4. %   as a starting point for other further optimized functions. The route is
  5. %   computed by sort of implementing a nearest neighbour method, by looking for the nearest city and travelling to that, until
  6. %   all cities are visited.
  7. %
  8. %   Input: CityCoordinates, a N-by-2 matrix containing the X and Y coordinates
  9. %   as columns for N cities. Note that this excludes the first city since the
  10. %   first city is located at (0,0) and all other coordinates are relative to
  11. %   the first city. Either type out the matrix by hand or use the function
  12. %   GetCities(N) to read out a textfile with city coordinates.
  13. %
  14. %   Output: Outputs a reasonable short route as a row vector.
  15.  
  16. % Notes on performance: This implementation is rather crude. It computes
  17. % every route
  18. %
  19.  
  20. tic; % Starts a timer to measure the execution time of the script
  21.  
  22. N = length(CityCoordinates) ;    % The number of cities, retrieved by reading matrix CityCoordinates
  23. Route = ones(1,N+1);             % Pre-allocation of Route
  24.  
  25. % First look at your current position, inital value 1.
  26. location = 1;
  27. % Next look at which cities are nearby
  28. nearbyCities = 2:N;
  29.  
  30. for (j=2:1:N)
  31. % Now compute the distance to every allowable city
  32. % Every city that is not 1 and has not yet been visited is allowable
  33. % Visited cities are removed from the possibilities at the end of the first
  34. % loop
  35. neighbours = length(nearbyCities);
  36. clear Trip; % Trip has to be cleared before each loop, it shrinks every loop since the number of possibilities d
  37.     for (i=1:1:neighbours)
  38.         nearbyCity = nearbyCities(i);
  39.         Trip(i , 1:2) = [location, nearbyCity];
  40.         Trip(i , 3) = CalculateDistance(CityCoordinates,location,nearbyCity);
  41.     end
  42.    
  43. % We now have a matrix
  44. [shortestDistance,ind] = min(Trip(:,3));
  45. nearestCity = Trip(ind,2);
  46. location = nearestCity;
  47.  
  48. % Now remove the city from the list of possibilities
  49. indexToBeRemoved = find(nearbyCities==nearestCity);
  50. nearbyCities( indexToBeRemoved ) = [];
  51. Route(1,j) = nearestCity;
  52. end
  53. exetime = toc % Execution time in seconds
  54. end
Advertisement
Add Comment
Please, Sign In to add comment