【智能优化算法-倭黑猩猩算法】基于倭黑猩猩优化算法求解多目标优化问题附matlab代码
?1 內容介紹
非傳統的優化工具已經證明了它們在解決各種優化問題方面的潛力。這些問題處理單個目標或多個/多個目標。倭黑猩猩優化器(BO)是一種智能自適應元啟發式優化算法,靈感來自倭黑猩猩的社會行為和繁殖策略。文獻中沒有研究擴展這個 BO 來解決多目標優化問題。本文提出了一種多目標 Bonobo 優化器 (MOBO) 來解決不同的優化問題。本文提出了三個不同版本的 MOBO,每個版本都使用不同的方法,例如自適應網格方法的非支配排序;一種使用擁擠距離方法對人口進行排序的排序方案;分解技術,其中解決方案是通過將一個多目標問題分解為多個單目標問題來獲得的。提議的 MOBO 的所有三個不同版本的性能已經在一組 30 個多樣化的基準測試功能上進行了測試,并將結果與文獻中可用的其他四種著名的多目標優化技術的結果進行了比較。獲得的結果表明,與其他算法相比,所提出算法的前兩個版本在收斂性和多樣性方面表現出色或具有競爭力。
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 運行結果
4 參考文獻
[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).
博主簡介:擅長智能優化算法、神經網絡預測、信號處理、元胞自動機、圖像處理、路徑規劃、無人機等多種領域的Matlab仿真,相關matlab代碼問題可私信交流。
部分理論引用網絡文獻,若有侵權聯系博主刪除。
總結
以上是生活随笔為你收集整理的【智能优化算法-倭黑猩猩算法】基于倭黑猩猩优化算法求解多目标优化问题附matlab代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js控制页面简繁体
- 下一篇: windows server 2016磁