欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于Matlab實現(xiàn)多目標粘液霉菌算法的示例代碼

 更新時間:2022年05月14日 14:31:25   作者:電力系統(tǒng)與算法之美  
多目標粘液霉菌算法(MOSMA),這是最近開發(fā)的粘液霉菌算法(SMA)的多目標變體,用于處理工業(yè)中的多目標優(yōu)化問題。本文將用Matlab實現(xiàn)這一算法,需要的可以參考一下

1.概述

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

2.算法過程

3.數(shù)值實驗

4.Matlab代碼實現(xiàn)

%%  (ZDT3)
function f = zdt3 (x)
% 兩個目標函數(shù)
% 變量數(shù)目是 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:多目標粘液霉菌算法=====
 
%% 目標函數(shù)
% 目標函數(shù)描述包含了有關目標函數(shù)的信息。M為目標空間的維數(shù),D為決策變量空間的維數(shù),
% LB和UB為決策變量空間中變量的取值范圍。
% 用戶必須使用決策變量定義目標函數(shù)。務必編輯功能‘評估_目標',以適應您的需要。
clc
clear all
D = 30; % 決策變量數(shù)目
M = 2; % 目標函數(shù)的個數(shù)
K=M+D;
LB = ones(1, D).*0; %  LB - 表示每個決策變量的最小值的十進制值的向量。
UB = ones(1, D).*1; % UB - 決策變量的最大可能值向量。
GEN = 200;  % 設置最大生成數(shù)
ecosize = 200;      % 種群數(shù)量 (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');
%% 可視化
%% =========兩個目標函數(shù)時======================
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最優(yōu)解集');
    legend('MOSMA');
    xlabel('F_1');
    ylabel('F_2');
%% =====3個目標函數(shù)時==========================
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最優(yōu)解集');
    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實現(xiàn)多目標粘液霉菌算法的示例代碼的詳細內容,更多關于Matlab多目標粘液霉菌算法的資料請關注腳本之家其它相關文章!

相關文章

  • C++讀寫.mat文件的方法

    C++讀寫.mat文件的方法

    本文介紹了“C++讀寫.mat文件的方法”,需要的朋友可以參考一下
    2013-03-03
  • C++深入講解引用的特點及與指針的區(qū)別

    C++深入講解引用的特點及與指針的區(qū)別

    引用是C++一個很重要的特性,顧名思義是某一個變量或對象的別名,對引用的操作與對其所綁定的變量或對象的操作完全等價,這篇文章主要給大家總結介紹了C++中引用的相關知識點,需要的朋友可以參考下
    2022-05-05
  • C++鏈表類的封裝詳情介紹

    C++鏈表類的封裝詳情介紹

    這篇文章主要介紹了C++鏈表類的封裝,文章基于C++的相關資料展開主題的詳細內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-04-04
  • 使用代碼驗證linux子進程與父進程的關系

    使用代碼驗證linux子進程與父進程的關系

    Linux下父進程可以使用fork 函數(shù)創(chuàng)建子進程,但是當父進程先退出后,子進程會不會也退出呢?通過下面這個小實驗,我們能夠很好的看出來
    2014-02-02
  • C++入門之vector的底層實現(xiàn)詳解

    C++入門之vector的底層實現(xiàn)詳解

    這篇文章主要為大家介紹了C++入門之vector的底層實現(xiàn),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11
  • C語言超詳細講解輪轉數(shù)組

    C語言超詳細講解輪轉數(shù)組

    這篇文章主要給大家講解輪轉數(shù)組的問題,一個問題不局限于一種解法,希望你看了本文的解決方法以后可以舉一反三自己編寫,這樣你的技術水平會有質的提高
    2022-04-04
  • C++ string.erase()用法詳解

    C++ string.erase()用法詳解

    這篇文章主要介紹了C++ string.erase()用法詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-09-09
  • C語言數(shù)據(jù)結構與算法之排序總結(一)

    C語言數(shù)據(jù)結構與算法之排序總結(一)

    這篇文章主要介紹了數(shù)據(jù)結構與算法中的插入類和交換類的各種排序,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2021-12-12
  • 淺談c++ 預處理器

    淺談c++ 預處理器

    這篇文章主要介紹了c++ 預處理器的的相關資料,文中示例代碼非常詳細,供大家參考和學習,感興趣的朋友可以了解下
    2020-06-06
  • C++類常量和類枚舉

    C++類常量和類枚舉

    這篇文章主要介紹了C++類常量和類枚舉,給類當中定義一些常量,可以給所有類的對象使用,比如說我們在類當中定義一個數(shù)組,希望可以定義一個常量,用來初始化數(shù)組的長度,那么下面我i嗎就來看看過程當如何吧
    2022-01-01

最新評論