% Example distance matrix (replace it with your own) distanceMatrix = [ 0 10 11 20; 10 0 90 25; 11 90 0 30; 20 25 30 0 ]; % Set algorithm parameters maxIterations = 1000; tabuSize = 10; % Run Tabu Search [bestTour, bestDistance] = tabuSearchTSP(distanceMatrix, maxIterations, tabuSize); % Display the best tour and its distance disp('Best Tour:');
Best Tour:
disp(bestTour); 3 1 2 4 disp('Best Distance:'); Best Distance: disp(bestDistance); 76
function [bestTour, bestDistance] = tabuSearchTSP(distanceMatrix, maxIterations, tabuSize) % Initialize variables n = size(distanceMatrix, 1); % Number of cities tabuList = zeros(n, tabuSize); % Tabu list to store recently visited solutions currentTour = randperm(n); % Random initial solution bestTour = currentTour; bestDistance = calculateTourDistance(currentTour, distanceMatrix); iteration = 1; while iteration <= maxIterations candidateList = generateCandidateList(currentTour, tabuList); [bestCandidate, bestCandidateDistance] = evaluateCandidates(candidateList, distanceMatrix); if bestCandidateDistance < bestDistance bestTour = bestCandidate; bestDistance = bestCandidateDistance; end currentTour = bestCandidate; tabuList = updateTabuList(tabuList, currentTour); iteration = iteration + 1; end end function distance = calculateTourDistance(tour, distanceMatrix) n = length(tour); distance = 0; for i = 1:n-1 distance = distance + distanceMatrix(tour(i), tour(i+1)); end distance = distance + distanceMatrix(tour(n), tour(1)); % Return to the starting city end function candidateList = generateCandidateList(currentTour, tabuList) candidateList = []; n = length(currentTour); for i = 1:n-1 for j = i+1:n candidate = currentTour; candidate(i) = currentTour(j); candidate(j) = currentTour(i); if ~isTabu(candidate, tabuList) candidateList = [candidateList; candidate]; end end end end function isTabu = isTabu(candidate, tabuList) [n, tabuSize] = size(tabuList); isTabu = false; for i = 1:tabuSize if isequal(candidate, tabuList(:, i)) isTabu = true; break; end end end function [bestCandidate, bestCandidateDistance] = evaluateCandidates(candidateList, distanceMatrix) numCandidates = size(candidateList, 1); bestCandidateDistance = Inf; for i = 1:numCandidates candidate = candidateList(i, :); candidateDistance = calculateTourDistance(candidate, distanceMatrix); if candidateDistance < bestCandidateDistance bestCandidate = candidate; bestCandidateDistance = candidateDistance; end end end function tabuList = updateTabuList(tabuList, candidate) [~, tabuSize] = size(tabuList); tabuList = [candidate' tabuList(:, 1:tabuSize-1)]; end
You can replace the line 'currentTour = randperm(n)' with a loop that iterates over each city as the starting point.
% Example distance matrix (replace it with your own) distanceMatrix = [ 0 10 11 20; 10 0 90 25; 11 90 0 30; 20 25 30 0 ]; % Set algorithm parameters maxIterations = 1000; tabuSize = 10; n = size(distanceMatrix, 1); % Number of cities % Initialize variables for the best tour and distance bestTour = []; bestDistance = Inf; % Iterate over each city as the starting point for startingCity = 1:n currentTour = startingCity:n; currentTour = [currentTour, 1:startingCity-1]; % Run Tabu Search [tour, distance] = tabuSearchTSP(distanceMatrix, maxIterations, tabuSize, currentTour); % Update the best tour and distance if necessary if distance < bestDistance bestTour = tour; bestDistance = distance; end end % Display the best tour and its distance disp('Best Tour:'); disp(bestTour); disp('Best Distance:'); disp(bestDistance); function [bestTour, bestDistance] = tabuSearchTSP(distanceMatrix, maxIterations, tabuSize, currentTour) % Initialize variables n = size(distanceMatrix, 1); % Number of cities tabuList = zeros(n, tabuSize); % Tabu list to store recently visited solutions bestTour = currentTour; bestDistance = calculateTourDistance(currentTour, distanceMatrix); iteration = 1; while iteration <= maxIterations candidateList = generateCandidateList(currentTour, tabuList); [bestCandidate, bestCandidateDistance] = evaluateCandidates(candidateList, distanceMatrix); if bestCandidateDistance < bestDistance bestTour = bestCandidate; bestDistance = bestCandidateDistance; end currentTour = bestCandidate; tabuList = updateTabuList(tabuList, currentTour); iteration = iteration + 1; end end % The remaining functions remain the same
Matlabsolutions.com provides guaranteed satisfaction with a
commitment to complete the work within time. Combined with our meticulous work ethics and extensive domain
experience, We are the ideal partner for all your homework/assignment needs. We pledge to provide 24*7 support
to dissolve all your academic doubts. We are composed of 300+ esteemed Matlab and other experts who have been
empanelled after extensive research and quality check.
Matlabsolutions.com provides undivided attention to each Matlab
assignment order with a methodical approach to solution. Our network span is not restricted to US, UK and Australia rather extends to countries like Singapore, Canada and UAE. Our Matlab assignment help services
include Image Processing Assignments, Electrical Engineering Assignments, Matlab homework help, Matlab Research Paper help, Matlab Simulink help. Get your work
done at the best price in industry.