clear all;clc;close all;
%進化策略解決旅行商問題
%t0 = clock;
n = 10;%初始種群規模
c = [1,2;70,90;80,60;10,100;800,200;800,100;90,80;200,600;230,4;500,90];%城市座標
m = size(c,1);%城市個數
for i = 1:n
x(i,:) = randperm(m);%初始種群
endinter = 5000;%迭代次數
bestfitness = -inf;%記錄最大適應度
bestindividual = zeros(1,m);%最優個體
bestfitnessinter = zeros(1,inter);
meanfitness = zeros(1,inter);
d = zeros(m,m);
%計算各個城市之間的距離
for i = 1:m
for j = 1:m
d(i,j) = sqrt( sum((c(i,:) - c(j,:) ).^2));
endend%進行迭代
for i = 1:inter
%隨機生成新的種群
newx = zeros(100,n);%生成新的種群
for num = 1:100
%通過初始種群繁殖生成新的種群(注重個體行為)
pos1 =1 + fix( rand*n );
pos2 = randperm(m);
newx(num,:) = x(pos1,pos2);
end%計算適應度
distance = zeros(num,1);
for k = 1:num
for kk = 1:n-1
distance(k) = distance(k) + d(newx(k,kk),newx(k,kk+1));
enddistance(k) = distance(k) + d(newx(k,1),newx(k,end));
endfitness = 1 ./ distance;
%按照適應進行排名
[sortfitness,label] = sort(fitness,'descend');
labelselect = label(1:n);
%選擇出n個新的初始種群
x = newx(labelselect,:);
%比較最大適應度與原最大適應,並更新最大適應度
if sortfitness(1) > bestfitness
bestfitness = sortfitness(1);
bestindividual = newx(label(1),:);
endbestfitnessinter(i) = bestfitness;
meanfitness(i) = mean(fitness);
end%繪製結果
time = etime(clock,t0);
disp('優化時間為')
disp(time)
plot(bestfitnessinter,'linewidth',3);
hold on
plot(meanfitness,'linewidth',3);
legend('bestfitness','meanfitness')
title('旅行商問題')
disp('最短路徑為:')
disp(bestindividual)
disp('最短距離為:')
disp(1/bestfitness)
figure
bestindividual = [bestindividual,bestindividual(1)];
h = plot(c(bestindividual,1),c(bestindividual,2),'ro-');
set(h,'linewidth',3,'markersize',10)
title(['旅行商問題,最短路徑為',num2str(1/bestfitness)]);
xlabel('x座標');ylabel('y座標')
legend('city')
執行結果:
演算法優化策略
下面是紫書上講的常用演算法設計策略和優化策略 拆分出的狀態必須滿足最優子結構性質和無後效性 當前階段以前的狀態不會影響以後的狀態,只與當前階段有關 動歸的目的是避免重疊子問題。遞推和遞迴 記憶化搜尋 是實現動歸的手段。只要滿足 1.狀態設計不重不漏 2.轉移方程正確 3.能順利統計答案,那麼這個dp...
進化策略與進化規劃演算法 ES與EP
github 智慧型演算法的課件和參考資料以及實驗 進化策略和遺傳演算法統稱為進化演算法,二者的思想很類似,但步驟和應用方向有所差別。我們舉個二元函式最大值優化問題,分別用這兩種演算法簡單搜尋最優值 用matlab實現 es f2.m function y f2 x1,x2 二元函式求最大值的優化問...
演算法優化 遞迴演算法的優化策略
在處理演算法問題時候,用的非常多的一種策略就是遞迴演算法了。但是遞迴演算法雖然簡單有效,但是該演算法的演算法效果總是有點差強人意。本文主要講述從兩個方向優化遞迴演算法,希望本文能給讀者一些thinking。持續更新中 總結 示例 遞迴演算法我又把它稱為迭代演算法,因為大致思路都差不多 迭代 從已知推...