最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Matlab實現(xiàn)野狗優(yōu)化算法的示例代碼

 更新時間:2022年04月22日 15:12:35   作者:電力系統(tǒng)與算法之美  
野狗優(yōu)化算法(Dingo?Optimization?Algorithm,?DOA)模仿澳大利亞野狗的社交行為。DOA算法的靈感來源于野狗的狩獵策略,即迫害攻擊、分組策略和食腐行為。本文將通過Matlab實現(xiàn)這一算法,感興趣的可以了解一下

1.概述

野狗優(yōu)化算法(Dingo Optimization Algorithm, DOA)模仿澳大利亞野狗的社交行為。DOA算法的靈感來源于野狗的狩獵策略,即迫害攻擊、分組策略和食腐行為。為了提高該方法的整體效率和性能,在DOA中制定了三種與四條規(guī)則相關(guān)聯(lián)的搜索策略,這些策略和規(guī)則在搜索空間的強化(開發(fā))和多樣化(探索)之間提供了一種精確的平衡。

該算法的優(yōu)點:尋優(yōu)能力強,收斂速度快等特點。

2.捕食過程的數(shù)學模型

2.1 種群初始化

野狗種群在搜索邊界內(nèi)隨機初始化:

其中,lbi和ubi分別表示個體的上下邊界,randi是[0,1]之間的隨機數(shù)。

2.2 群體攻擊過程

捕食者通常使用高度智能的狩獵技術(shù),野狗通常單獨捕食小獵物,如兔子,但當捕食大獵物,如袋鼠時,它們會成群結(jié)隊。野狗能找到獵物的位置并將其包圍,其行為如上所示:

其中,t代表當前的迭代次數(shù),是野狗新位置; na是在[2,SizePop/2]的逆序中生成的隨機整數(shù),其中SizePop是野狗種群的規(guī)模; 是將攻擊的野狗的子集,其中是隨機生成的野狗種群;是當前野狗的位置是上一次迭代中發(fā)現(xiàn)的最佳野狗;β1是在[-2.2]內(nèi)均勻生成的隨機數(shù),它是一個比例因子,可改變野狗軌跡的大小。

2.3 迫害攻擊過程

野狗通常捕獵小獵物,直到單獨捕獲為止。行為模擬為:

其中,是野狗新位置,是上一次迭代中發(fā)現(xiàn)的最佳野狗,β2的值與式2.2中的值相同,β2是在[-1,1]區(qū)間內(nèi)均勻生成的隨機數(shù),r1是在從1到最大搜索代理(野狗)大小的區(qū)間內(nèi)生成的隨機數(shù),是隨機選擇的第r1個野狗,其中i≠r1。

2.4 野狗的存活率

在DOA中,野狗的存活率值由下式給出:

其中,fitnessmax和fitnessmin分別是當前一代中最差和最佳的適應度值,而fitness(i)是第i個野狗的當前適應度值。式(5)中的生存向量包含[0,1]區(qū)間內(nèi)的歸一化適應度。

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

3.1 代碼

%====歡迎關(guān)注公眾號:電力系統(tǒng)與算法之美====
 
function DOA()
 
%% ====參數(shù)設置====
 
popsize=20;    % 種群規(guī)模
Iteration=1000;     % 迭代次數(shù)
lb = -10;     % 各維度的下限
ub = 10;  % 各維度的上限
dim = 2;  % 優(yōu)化變量的個數(shù)
 
P= 0.5;  % Hunting or Scavenger  rate. 
Q= 0.7;  % Group attack or persecution?
beta1= -2 + 4* rand();  % -2 < beta < 2     
beta2= -1 + 2* rand();  % -1 < beta2 < 1    
naIni= 2; % minimum number of dingoes that will attack
naEnd= popsize /naIni; % maximum number of dingoes that will attack
na= round(naIni + (naEnd-naIni) * rand()); % number of dingoes that will attack
 
%% ====初始化種群位置=====
Positions=lb + (ub - lb).*rand(popsize, dim);
for i=1:size(Positions,1)
    Fitness(i)=sum(Positions(i,:).^2); % get fitness
end
[best_score, minIdx]= min(Fitness);  % the min fitness value vMin and the position minIdx
best_x= Positions(minIdx,:);  % the best vector
[worst_score, ~]= max(Fitness); % the max fitness value vMax and the position maxIdx
curve=zeros(1,Iteration);
 
%% Section 2.2.4 Dingoes'survival rates
 
for i=1:size(Fitness,2)
    survival(i)= (worst_score-Fitness(i))/(worst_score - best_score);
end
 
 
%% =====開始循環(huán)===========
for t=1:Iteration
    for r=1:popsize
        if rand() < P  % Hunting
            sumatory=0;
 
            c=1;
            vAttack=[];
            while(c<=na)
                idx =round( 1+ (popsize-1) * rand());
 
                band= 0;
                for i=1:size(vAttack, 2)
                    if idx== vAttack(i)
                        band=1;
                        break;
                    end
 
                end
 
                if ~band
                    vAttack(c) = idx;
                    c=c+1;
                end
            end
 
            for j=1:size(vAttack,2)
                sumatory= sumatory + Positions(vAttack(j),:)- Positions(r,:);
            end
            sumatory=sumatory/na;
 
            if rand() < Q  % group attack
                v(r,:)=  beta1 * sumatory-best_x; % Strategy 1: Eq.2
            else  %  Persecution
                r1= round(1+ (popsize-1)* rand()); %
                v(r,:)= best_x + beta1*(exp(beta2))*((Positions(r1,:)-Positions(r,:))); % 
            end
        else % Scavenger
            r1= round(1+ (popsize-1)* rand());
            if rand() < 0.5
                val= 0;
            else
                val=1;
            end
 
            v(r,:)=   (exp(beta2)* Positions(r1,:)-((-1)^val)*Positions(r,:))/2; % 
        end
        if survival(r) <= 0.3  % Section 2.2.4, Algorithm 3 - Survival procedure
            band=1;
            while band
                r1= round(1+ (popsize-1)* rand());
                r2= round(1+ (popsize-1)* rand());
                if r1 ~= r2
                    band=0;
                end
            end
            if rand() < 0.5
                val= 0;
            else
                val=1;
            end
            v(r,:)=   best_x + (Positions(r1,:)-((-1)^val)*Positions(r2,:))/2;  % Section 2.2.4, Strategy 4: Eq.6
        end
        % Return back the search agents that go beyond the boundaries of the search space .
        Flag4ub=v(r,:)>ub;
        Flag4lb=v(r,:)<lb;
        v(r,:)=(v(r,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;
        % Evaluate new solutions
        Fnew= sum(v(r,:).^2);
        % Update if the solution improves
        if Fnew <= Fitness(r)
            Positions(r,:)= v(r,:);
            Fitness(r)= Fnew;
        end
        if Fnew <= best_score
            best_x= v(r,:);
            best_score= Fnew;
        end
    end
    curve(t)= best_score;
    [worst_score, ~]= max(Fitness);
    for i=1:size(Fitness,2)
        survival(i)= (worst_score-Fitness(i))/(worst_score - best_score);
    end
 
end
 
 
%======結(jié)束優(yōu)化===============
 
%% 進化曲線
figure
semilogy(curve,'Color','r','LineWidth',2)
grid on
title('收斂曲線')
xlabel('迭代次數(shù)');
ylabel('最佳適應度');
axis tight
legend('DOA')
 
 
display(['最優(yōu)解: ', num2str(best_x)]);
display(['最小值: ', num2str(best_score)]);
 
end

3.2 結(jié)果

到此這篇關(guān)于基于Matlab實現(xiàn)野狗優(yōu)化算法的示例代碼的文章就介紹到這了,更多相關(guān)Matlab野狗優(yōu)化算法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • c語言字符串函數(shù)strstr,strtok,strerror的使用和實現(xiàn)

    c語言字符串函數(shù)strstr,strtok,strerror的使用和實現(xiàn)

    C語言中的字符串處理函數(shù)如strtok、strstr和strerror對于字符串的處理有著重要的作用,strtok函數(shù)用于分割字符串,它通過sep參數(shù)指定的分隔符來分割str參數(shù)指定的字符串,并返回分割后的每個子字符串
    2024-10-10
  • 使用C語言實現(xiàn)掃雷小游戲

    使用C語言實現(xiàn)掃雷小游戲

    這篇文章主要為大家詳細介紹了使用C語言實現(xiàn)掃雷小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • C++解析特殊符號tab、換行符號實例代碼

    C++解析特殊符號tab、換行符號實例代碼

    這篇文章主要給大家介紹了關(guān)于C++解析特殊符號tab、換行符號的相關(guān)資料,這個功能在我們?nèi)粘i_發(fā)中經(jīng)常會遇到,需要的朋友可以參考下
    2021-05-05
  • 超詳細分析C語言動態(tài)內(nèi)存管理問題

    超詳細分析C語言動態(tài)內(nèi)存管理問題

    動態(tài)內(nèi)存是相對靜態(tài)內(nèi)存而言的。所謂動態(tài)和靜態(tài)就是指內(nèi)存的分配方式。動態(tài)內(nèi)存是指在堆上分配的內(nèi)存,而靜態(tài)內(nèi)存是指在棧上分配的內(nèi)存,本文帶你深入探究C語言中動態(tài)內(nèi)存的管理
    2022-04-04
  • C++ OpenCV實戰(zhàn)之網(wǎng)孔檢測的實現(xiàn)

    C++ OpenCV實戰(zhàn)之網(wǎng)孔檢測的實現(xiàn)

    這篇文章主要介紹了如何利用C++和OpenCV實現(xiàn)網(wǎng)孔檢測,文中的示例代碼講解詳細,對我們學習OpenCV有一定幫助,感興趣的小伙伴可以了解一下
    2022-05-05
  • C語言學生學籍管理系統(tǒng)課程設計

    C語言學生學籍管理系統(tǒng)課程設計

    這篇文章主要介紹了C語言學生學籍管理系統(tǒng)課程設計,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • C++無痛實現(xiàn)日期類的示例代碼

    C++無痛實現(xiàn)日期類的示例代碼

    凡是要寫類必須要提到六大默認成員(六位大爺):構(gòu)造函數(shù)、析構(gòu)函數(shù)、拷貝構(gòu)造函數(shù)、賦值重載函數(shù)、取地址重載函數(shù)(包括const對象和普通對象);那么這次的日期類又需要伺候哪幾位大爺呢?本文就來詳細說說
    2022-10-10
  • 用貪心法求解背包問題的解決方法

    用貪心法求解背包問題的解決方法

    本篇文章是對用貪心法求解背包問題的解決方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C++?socket通信遇到的問題及解決方法

    C++?socket通信遇到的問題及解決方法

    這篇文章主要介紹了C++?socket通信遇到的問題,通過代碼修改來解決這個問題,本文結(jié)合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2023-08-08
  • C++中策略模式和工廠模式的區(qū)別

    C++中策略模式和工廠模式的區(qū)別

    這篇文章介紹了C++中策略模式和工廠模式的區(qū)別,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07

最新評論

揭东县| 姚安县| 木兰县| 三门峡市| 合江县| 大同县| 博野县| 思茅市| 桦甸市| 宜丰县| 宕昌县| 临邑县| 泗洪县| 海阳市| 西华县| 滕州市| 老河口市| 当涂县| 上高县| 雷州市| 义乌市| 长沙县| 南丹县| 喀什市| 铜陵市| 侯马市| 山西省| 商洛市| 北京市| 且末县| 吉首市| 惠州市| 青神县| 浮梁县| 宝丰县| 浦北县| 永福县| 贵州省| 临漳县| 琼海市| 山西省|