首頁 > 軟體

基於Matlab實現多目標粘液黴菌演演算法的範例程式碼

2022-05-14 19:02:58

1.概述

多目標粘液黴菌演演算法(MOSMA),這是最近開發的粘液黴菌演演算法(SMA)的多目標變體,用於處理工業中的多目標優化問題。最近,為了處理優化問題,已經為優化社群推薦了幾種元啟發式和進化優化技術。在評估多目標優化(MOO)問題時,這些方法往往受到低質量解的影響,而不是解決識別帕累托最優解的準確估計和增加所有目標的分佈的目標函數。SMA方法遵循從實驗室實驗中粘液黴菌振盪行為中獲得的邏輯。與其他成熟的方法相比,SMA演演算法顯示出強大的效能,它是通過使用正負反饋系統結合最佳食物路徑而設計的。所提出的MOSMA演演算法採用相同的底層SMA收斂機制,結合精英非支配排序方法來估計帕累托最優解。作為後驗方法,在MOSMA中保持多目標公式,並利用擁擠距離運運算元來確保增加所有目標中最佳解決方案的覆蓋範圍。為了驗證和確認MOSMA的效能,考慮了41個不同的案例研究,包括無約束,約束和現實世界的工程設計問題。將MOSMA的效能與多目標共生生物搜尋(MOSOS),基於分解的多目標進化演演算法(MOEA / D)和多目標水迴圈演演算法(MOWCA)在不同的效能指標方面進行了比較,例如代際距離(GD),倒置代際距離(IGD),最大傳播(MS),間距和執行時。模擬結果驗證了所提演演算法在實現線性、非線性、連續和離散帕累托最優前沿等多目標問題高質量解方面的優勢。結果表明了所提演演算法在解決複雜的多目標問題方面的有效性。

2.演演算法過程

3.數值實驗

4.Matlab程式碼實現

%%  (ZDT3)
function f = zdt3 (x)
% 兩個目標函數
% 變數數目是 30. x [0,1]
f = [];
n=length(x);
g=1+9*sum(x(2:n))/(n-1);
f(1)=x(1);
f(2)=1-sqrt(x(1)/g)-(x(1)/g)*sin(10*pi*x(1));
%%===MOSMA:多目標粘液黴菌演演算法=====
 
%% 目標函數
% 目標函數描述包含了有關目標函數的資訊。M為目標空間的維數,D為決策變數空間的維數,
% LB和UB為決策變數空間中變數的取值範圍。
% 使用者必須使用決策變數定義目標函數。務必編輯功能‘評估_目標',以適應您的需要。
clc
clear all
D = 30; % 決策變數數目
M = 2; % 目標函數的個數
K=M+D;
LB = ones(1, D).*0; %  LB - 表示每個決策變數的最小值的十進位制值的向量。
UB = ones(1, D).*1; % UB - 決策變數的最大可能值向量。
GEN = 200;  % 設定最大生成數
ecosize = 200;      % 種群數量 (NP)
ishow = 10;
%% 開始進化過程
Pareto = MOSMA(D,M,LB,UB,ecosize,GEN,ishow);
Obtained_Pareto= Pareto(:,D+1:D+M); % extract data to plot
Obtained_Pareto=sortrows(Obtained_Pareto,2);
True_Pareto=load('ZDT3.txt');
%% 視覺化
%% =========兩個目標函數時======================
if M == 2
    plot(Obtained_Pareto(:,1),Obtained_Pareto(:,2),'o','LineWidth',2,...
        'MarkerEdgeColor','r','MarkerSize',2);
    hold on
    plot(True_Pareto(:,1),True_Pareto(:,2),'k'); 
    title('採用MOSMA演演算法求解Pareto最優解集');
    legend('MOSMA');
    xlabel('F_1');
    ylabel('F_2');
%% =====3個目標函數時==========================
elseif M == 3   
    plot3(Obtained_Pareto(:,1),Obtained_Pareto(:,2),Obtained_Pareto(:,3),'o','LineWidth',2,...
        'MarkerEdgeColor','r','MarkerSize',2);
    hold on
    plot3(Obtained_Pareto(:,1),Obtained_Pareto(:,2),Obtained_Pareto(:,3),'.','LineWidth',2,...
        'MarkerEdgeColor','k','MarkerSize',6);
    title('採用MOSMA演演算法求解Pareto最優解集');
    legend('MOSMA');
    xlabel('F_1');
    ylabel('F_2');
    zlabel('F_3');
end
%%  Metric Value
M_IGD=IGD(Obtained_Pareto,True_Pareto);
M_GD=GD(Obtained_Pareto,True_Pareto);
M_HV=HV(Obtained_Pareto,True_Pareto);
M_Spacing=Spacing(Obtained_Pareto,True_Pareto);
M_Spread=Spread(Obtained_Pareto,True_Pareto);
M_DeltaP=DeltaP(Obtained_Pareto,True_Pareto);
display(['The IGD Metric obtained by MOSMA is     : ', num2str(M_IGD)]);
display(['The GD Metric obtained by MOSMA is      : ', num2str(M_GD)]);
display(['The HV Metric obtained by MOSMA is      : ', num2str(M_HV)]);
display(['The Spacing Metric obtained by MOSMA is : ', num2str(M_Spacing)]);
display(['The Spread Metric obtained by MOSMA is  : ', num2str(M_Spread)]);
display(['The DeltaP Metric obtained by MOSMA is  : ', num2str(M_DeltaP)]);

以上就是基於Matlab實現多目標粘液黴菌演演算法的範例程式碼的詳細內容,更多關於Matlab多目標粘液黴菌演演算法的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com