手機(jī)版網(wǎng)站建設(shè)百度競價包年推廣是怎么回事
樽海鞘算法的主要靈感是樽海鞘在海洋中航行和覓食時的群聚行為。相關(guān)文獻(xiàn)表示,多目標(biāo)優(yōu)化之樽海鞘算法的結(jié)果表明,該算法可以逼近帕雷托最優(yōu)解,收斂性和覆蓋率高。
通過給SSA算法配備一個食物來源庫來解決第一個問題。該存儲庫維護(hù)了到目前為止優(yōu)化過程中獲得的最優(yōu)解,非常類似于多目標(biāo)粒子群優(yōu)化(MOPSO)中的存檔。存儲庫有一個最大大小來存儲數(shù)量有限的最優(yōu)解決方案。在優(yōu)化過程中,使用Pareto優(yōu)勢操作符將每個樽海鞘與所有存儲庫原方案進(jìn)行比較。
如果一個樽海鞘在存儲庫中占優(yōu),則必須交換它們(把樽海鞘放入存儲庫,原方案拿出)。如果一個樽海鞘在存儲庫中優(yōu)于一組解決方案,那么應(yīng)該將這一組解決方案全部從存儲庫中刪除,并把該樽海鞘應(yīng)該添加到存儲庫中。
如果至少有一個存儲庫中的原方案比該樽海鞘更優(yōu),那么該樽海鞘應(yīng)被丟棄,不加入存儲庫。
如果與所有存儲庫居民相比,該樽海鞘與之互不占優(yōu),那么該樽海鞘即是最優(yōu)解,則必須將其添加到存儲庫中。
這些規(guī)則可以保證存儲庫得到的始終都是目前為止算法所獲得的最優(yōu)解決方案。但是,有一種特殊情況,即存儲庫已滿,與存儲庫原方案相比,該樽海鞘也不占優(yōu),此時本應(yīng)該將該樽海鞘加入存儲庫,但是存儲庫滿了。當(dāng)然,最簡單的方法是隨機(jī)刪除歸檔中的一個解決方案,并將其替換為這個樽海鞘。
由此可見,多目標(biāo)樽海鞘算法與多目標(biāo)灰狼算法一致,也是采用的網(wǎng)格機(jī)制。大家可以對比學(xué)習(xí)。
多目標(biāo)樽海鞘在ZDT1中的表現(xiàn):
主函數(shù)代碼:
clc
clear
close all% Change these details with respect to your problem
ObjectiveFunction=@ZDT1;
dim=5;
lb=0;
ub=1;
obj_no=2;if size(ub,2)==1ub=ones(1,dim)*ub;lb=ones(1,dim)*lb;
endmax_iter=100;
N=200;
ArchiveMaxSize=100;
Archive_X=zeros(100,dim);
Archive_F=ones(100,obj_no)*inf;
Archive_member_no=0;
r=(ub-lb)/2;
V_max=(ub(1)-lb(1))/10;
Food_fitness=inf*ones(1,obj_no);
Food_position=zeros(dim,1);
Salps_X=initialization(N,dim,ub,lb);
fitness=zeros(N,2);
V=initialization(N,dim,ub,lb);
position_history=zeros(N,max_iter,dim);
for iter=1:max_iterc1 = 2*exp(-(4*iter/max_iter)^2); % Eq. (3.2) in the paperfor i=1:N %Calculate all the objective values firstSalps_fitness(i,:)=ObjectiveFunction(Salps_X(:,i)');if dominates(Salps_fitness(i,:),Food_fitness)Food_fitness=Salps_fitness(i,:);Food_position=Salps_X(:,i);endend[Archive_X, Archive_F, Archive_member_no]=UpdateArchive(Archive_X, Archive_F, Salps_X, Salps_fitness, Archive_member_no);if Archive_member_no>ArchiveMaxSizeArchive_mem_ranks=RankingProcess(Archive_F, ArchiveMaxSize, obj_no);[Archive_X, Archive_F, Archive_mem_ranks, Archive_member_no]=HandleFullArchive(Archive_X, Archive_F, Archive_member_no, Archive_mem_ranks, ArchiveMaxSize);elseArchive_mem_ranks=RankingProcess(Archive_F, ArchiveMaxSize, obj_no);endArchive_mem_ranks=RankingProcess(Archive_F, ArchiveMaxSize, obj_no);% Archive_mem_ranks% Chose the archive member in the least population area as food`% to improve coverageindex=RouletteWheelSelection(1./Archive_mem_ranks);if index==-1index=1;endFood_fitness=Archive_F(index,:);Food_position=Archive_X(index,:)';for i=1:Nindex=0;neighbours_no=0;if i<=N/2for j=1:1:dimc2=rand();c3=rand();% Eq. (3.1) in the paper if c3<0.5Salps_X(j,i)=Food_position(j)+c1*((ub(j)-lb(j))*c2+lb(j));elseSalps_X(j,i)=Food_position(j)-c1*((ub(j)-lb(j))*c2+lb(j));endendelseif i>N/2 && i<N+1point1=Salps_X(:,i-1);point2=Salps_X(:,i);Salps_X(:,i)=(point2+point1)/(2); % Eq. (3.4) in the paperendFlag4ub=Salps_X(:,i)>ub';Flag4lb=Salps_X(:,i)<lb';Salps_X(:,i)=(Salps_X(:,i).*(~(Flag4ub+Flag4lb)))+ub'.*Flag4ub+lb'.*Flag4lb;enddisp(['At?the?iteration?',?num2str(iter),?'?there?are?',?num2str(Archive_member_no),?'?non-dominated?solutions?in?the?archive']);
end
figure
Draw_ZDT1();
hold on
plot(Archive_F(:,1),Archive_F(:,2),'ro','MarkerSize',8,'markerfacecolor','k');
legend('True PF','Obtained PF');
title('MSSA');
免費完整代碼獲取,后臺回復(fù)關(guān)鍵詞:
多目標(biāo)02