【智能优化算法-倭黑猩猩算法】基于倭黑猩猩优化算法求解多目标优化问题附matlab代码
?1 內(nèi)容介紹
非傳統(tǒng)的優(yōu)化工具已經(jīng)證明了它們?cè)诮鉀Q各種優(yōu)化問題方面的潛力。這些問題處理單個(gè)目標(biāo)或多個(gè)/多個(gè)目標(biāo)。倭黑猩猩優(yōu)化器(BO)是一種智能自適應(yīng)元啟發(fā)式優(yōu)化算法,靈感來自倭黑猩猩的社會(huì)行為和繁殖策略。文獻(xiàn)中沒有研究擴(kuò)展這個(gè) BO 來解決多目標(biāo)優(yōu)化問題。本文提出了一種多目標(biāo) Bonobo 優(yōu)化器 (MOBO) 來解決不同的優(yōu)化問題。本文提出了三個(gè)不同版本的 MOBO,每個(gè)版本都使用不同的方法,例如自適應(yīng)網(wǎng)格方法的非支配排序;一種使用擁擠距離方法對(duì)人口進(jìn)行排序的排序方案;分解技術(shù),其中解決方案是通過將一個(gè)多目標(biāo)問題分解為多個(gè)單目標(biāo)問題來獲得的。提議的 MOBO 的所有三個(gè)不同版本的性能已經(jīng)在一組 30 個(gè)多樣化的基準(zhǔn)測(cè)試功能上進(jìn)行了測(cè)試,并將結(jié)果與文獻(xiàn)中可用的其他四種著名的多目標(biāo)優(yōu)化技術(shù)的結(jié)果進(jìn)行了比較。獲得的結(jié)果表明,與其他算法相比,所提出算法的前兩個(gè)版本在收斂性和多樣性方面表現(xiàn)出色或具有競(jìng)爭(zhēng)力。
tled attacker, barrier, chaser, and driver are employed for simulating the diverse intelligence. Moreover, the four main steps of hunting, driving, blocking, and attacking, are implemented. Afterward, the algorithm is tested on 30 well-known benchmark functions, and the results are compared to four newly proposed meta-heuristic algorithms in term of convergence speed, the probability of getting stuck in local minimums, and the accuracy of obtained results. The results indicate that the ChOA outperforms the other benchmark optimization algorithms.
?
2 仿真代碼
function [new_pops] = NondominatedSort_and_filling(pop, nobj, ncon, nreal, nbin)
N = size(pop,1);
fitsize = N/2;
[sorted_ranks, rankID] = sort(pop(:,nobj+ncon+nreal+nbin+2));
parentID = []; front = 1; front_array = [];
while size(parentID,2) < fitsize
? ? for i=1:N
? ? ? ? if sorted_ranks(i) ~= front
? ? ? ? ? ? break
? ? ? ? end
? ? ? ? front_array = [front_array rankID(i)];
? ? end
? ? size_check = size(parentID,2) + size(front_array,2);
? ? if size_check == fitsize
? ? ? ? parentID = [parentID front_array];
? ? ? ? break
? ? elseif size_check < fitsize
? ? ? ? parentID = [parentID front_array];
? ? ? ? sorted_ranks(1:size(front_array,2)) = [];
? ? ? ? rankID(1:size(front_array,2)) = [];
? ? ? ? N = N - size(front_array,2);
? ? ? ? front = front+1;
? ? ? ? front_array = [];
? ? else
? ? ? ? miss_size = fitsize - (size_check - size(front_array,2));
? ? ? ? n_consviol = nobj+ncon+nreal+nbin+1;
? ? ? ? n_rank= nobj+ncon+nreal+nbin+2;
? ? ? ? n_crowd = n_rank+1;
? ? ? ? if ncon==0,% if the problem does not have any constraints
? ? ? ? ? ?
? ? ? ? ? ? % sort crowding distance and select miss_size number of top individuals ?
? ? ? ? ? ? % and add them to the parent pop
? ? ? ? ? ? [~, distID] = sort(pop(front_array,n_crowd), 'descend');
? ? ? ? ? ? parentID = [parentID front_array(distID(1:miss_size))];
? ? ? ? ? ??
? ? ? ? else % if the problem have constraints
? ? ? ? ? ??
? ? ? ? ? ? %calculate the number of the feasible individuals
? ? ? ? ? ? feasible_ind=find(pop(front_array,n_consviol)==0);
? ? ? ? ? ? feasible_ind=(front_array(feasible_ind));
? ? ? ? ? ? number_feasible_ind=length(feasible_ind);
? ? ? ? ? ??
? ? ? ? ? ? if ?number_feasible_ind > miss_size, ??
? ? ? ? ? ? ? ? % sort feasible individuals based on crowdind distance?
? ? ? ? ? ? ? ? % select the best miss_size of them and add them to parent
? ? ? ? ? ? ? ? % pop
? ? ? ? ? ? ? ? [~, distID] = sort(pop(feasible_ind,n_crowd), 'descend');
? ? ? ? ? ? ? ? parentID = [parentID feasible_ind(distID(1:miss_size))]; ? ? ??
? ? ? ? ? ? elseif number_feasible_ind == miss_size,
? ? ? ? ? ? ? ? parentID = [parentID feasible_ind];?
? ? ? ? ? ? else % where number_feasible_ind < miss_size,
? ? ? ? ? ? ? ? % sort based on the constraint violation,
? ? ? ? ? ? ? ? [~, consviolationID] = sort(pop(front_array,n_consviol), 'descend');
? ? ? ? ? ? ? ? parentID = [parentID front_array(consviolationID(1:miss_size))];
? ? ? ? ? ? end
? ? ? ? end
? ? end
end
new_pops = pop(parentID,:);
end
function pop = Rank_and_Crowding_Distance_Calculation(pop, nobj, ncon, nreal, nbin)
global INF
N = size(pop,1);
P = [pop (1:N)'];
obj_max = max(pop(:,1:nobj));
obj_min = min(pop(:,1:nobj));
r = 1;
while N ~= 0
? ? % NON-DOMINATION SORTING
? ? p = simple_sort(N,P,nobj,ncon,nreal,nbin);
? ? n_p = size(p,2);
? ? globID = P(p,end);
? ? % ASSIGN THE RANKS OF INDIVIDUALS
? ? pop(globID,nobj+ncon+nreal+nbin+2) = r;
? ? % COMPUTE THE CROWDING DISTANCE
? ? if n_p == 1
? ? ? ? pop(globID,end) = INF;
? ? elseif n_p == 2
? ? ? ? pop(globID(1),end) = INF;
? ? ? ? pop(globID(2),end) = INF;
? ? else
? ? ? ? d = zeros(n_p,1);
? ? ? ? for i=1:nobj
? ? ? ? ? ? [~, m_ID] = sort(pop(globID,i));
? ? ? ? ? ? m_ID = globID(m_ID);
? ? ? ? ? ? d(1) = INF; d(end) = INF;
? ? ? ? ? ? for j=2:n_p-1
? ? ? ? ? ? ? ? d(j,1) = d(j,1) + abs((pop(m_ID(j+1),i)-pop(m_ID(j-1),i))) / (obj_max(1,i)-obj_min(1,i));
? ? ? ? ? ? end
? ? ? ? end
? ? ? ? pop(m_ID,end) = d;
? ? end
? ? r = r+1;
? ? N = N - n_p;
? ? P(p,:) = [];
end
%--------------------------------------------------------------------------------------------
function p = simple_sort(N,P,nobj,ncon,nreal,nbin)
p = [];
j_dom_i = 0;
for i=1:N
? ? for j=1:N
? ? ? ? if j ~= i
? ? ? ? ? ? j_dom_i = DominanceChecking(P(j,:), P(i,:), nobj, ncon, nreal, nbin);?
? ? ? ? ? ? % 1: j dominates i; -1: i dominates j; 0: both are non-dominated.
? ? ? ? ? ? if j_dom_i == 1
? ? ? ? ? ? ? ? break
? ? ? ? ? ? end
? ? ? ? end
? ? end
? ? if j_dom_i ~= 1
? ? ? ? p=[p i];
? ? end
? ? j_dom_i = 0;
end
?
3 運(yùn)行結(jié)果
4 參考文獻(xiàn)
[1] Das A K ,? Nikum A K ,? Krishnan S V , et al. Multi-objective Bonobo Optimizer (MOBO): an intelligent heuristic for multi-criteria optimization[J]. Knowledge and Information Systems, 2020, 62(6).
博主簡介:擅長智能優(yōu)化算法、神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)、信號(hào)處理、元胞自動(dòng)機(jī)、圖像處理、路徑規(guī)劃、無人機(jī)等多種領(lǐng)域的Matlab仿真,相關(guān)matlab代碼問題可私信交流。
部分理論引用網(wǎng)絡(luò)文獻(xiàn),若有侵權(quán)聯(lián)系博主刪除。
總結(jié)
以上是生活随笔為你收集整理的【智能优化算法-倭黑猩猩算法】基于倭黑猩猩优化算法求解多目标优化问题附matlab代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js控制页面简繁体
- 下一篇: MIMO检测之ZF,MMSE,ML算法m