優化演算法之進化策略

2021-09-28 13:29:04 字數 2355 閱讀 3769

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。持續更新中 總結 示例 遞迴演算法我又把它稱為迭代演算法,因為大致思路都差不多 迭代 從已知推...