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

Python&Matlab實(shí)現(xiàn)灰狼優(yōu)化算法的示例代碼

 更新時(shí)間:2022年03月21日 11:48:51   作者:是夢(mèng)吧,是你吧!  
灰狼優(yōu)化算法是一種群智能優(yōu)化算法,它的獨(dú)特之處在于一小部分擁有絕對(duì)話語權(quán)的灰狼帶領(lǐng)一群灰狼向獵物前進(jìn)。本文具體介紹了灰狼優(yōu)化算法的兩種實(shí)現(xiàn)示例代碼,需要的可以參考一下

1 灰狼優(yōu)化算法基本思想

灰狼優(yōu)化算法是一種群智能優(yōu)化算法,它的獨(dú)特之處在于一小部分擁有絕對(duì)話語權(quán)的灰狼帶領(lǐng)一群灰狼向獵物前進(jìn)。在了解灰狼優(yōu)化算法的特點(diǎn)之前,我們有必要了解灰狼群中的等級(jí)制度。

灰狼群一般分為4個(gè)等級(jí):處于第一等級(jí)的灰狼用α表示,處于第二階級(jí)的灰狼用β表示,處于第三階段的灰狼用δ表示,處于第四等級(jí)的灰狼用ω表示。按照上述等級(jí)的劃分,灰狼α對(duì)灰狼β、δ和ω有絕對(duì)的支配權(quán);灰狼ω對(duì)灰狼δ和ω有絕對(duì)的支配權(quán);灰狼δ對(duì)灰狼ω有絕對(duì)的支配權(quán)。

2 灰狼捕食獵物過程

GWO 優(yōu)化過程包含了灰狼的社會(huì)等級(jí)分層、跟蹤、包圍和攻擊獵物等步驟,其步驟具體情況如下所示。

2.1 社會(huì)等級(jí)分層

當(dāng)設(shè)計(jì) GWO 時(shí),首先需構(gòu)建灰狼社會(huì)等級(jí)層次模型。計(jì)算種群每個(gè)個(gè)體的適應(yīng)度,將狼群中適應(yīng)度最好的三匹灰狼依次標(biāo)記為α、β、δ而剩下的灰狼標(biāo)記為ω 。也就是說,灰狼群體中的社會(huì)等級(jí)從高往低排列依次為α、β、δ及 ω。GWO 的優(yōu)化過程主要由每代種群中的最好三個(gè)解(即 α、β、δ)來指導(dǎo)完成。

2.2 包圍獵物

灰狼群體通過以下幾個(gè)公式逐漸接近并包圍獵物:

式中,t是當(dāng)前的迭代代數(shù),A和C是系數(shù)向量,Xp和X分別是獵物的位置向量和灰狼的位置向量。A和C的計(jì)算公式如下:  

式中,a是收斂因子,隨著迭代次數(shù)從2線性減小到0,r1和r 2服從[ 0,1]之間的均勻分布。

2.3 狩獵

狼群中其他灰狼個(gè)體Xi根據(jù)α、β和百的位置Xa、XB和Xo來更新各自的位置:

式中,Da,Dβ和D6分別表示a,β和5與其他個(gè)體間的距離;Xa,Xβ和X6分別代表a,β和5的當(dāng)前位置;C1,C2,C3是隨機(jī)向量,X是當(dāng)前灰狼的位置。

灰狼個(gè)體的位置更新公式如下:

2.4 攻擊獵物

構(gòu)建攻擊獵物模型的過程中,根據(jù)2)中的公式,a值的減少會(huì)引起 A 的值也隨之波動(dòng)。換句話說,A 是一個(gè)在區(qū)間[-a,a](備注:原作者的第一篇論文里這里是[-2a,2a],后面論文里糾正為[-a,a])上的隨機(jī)向量,其中a在迭代過程中呈線性下降。當(dāng) A 在[-1,1]區(qū)間上時(shí),則捜索代理(Search Agent)的下一時(shí)刻位置可以在當(dāng)前灰狼與獵物之間的任何位置上。

2.5 尋找獵物

灰狼主要依賴α、β、δ的信息來尋找獵物。它們開始分散地去搜索獵物位置信息,然后集中起來攻擊獵物。對(duì)于分散模型的建立,通過|A|>1使其捜索代理遠(yuǎn)離獵物,這種搜索方式使 GWO 能進(jìn)行全局搜索。GWO 算法中的另一個(gè)搜索系數(shù)是C。從2.2中的公式可知,C向量是在區(qū)間范圍[0,2]上的隨機(jī)值構(gòu)成的向量,此系數(shù)為獵物提供了隨機(jī)權(quán)重,以便増加(|C|>1)或減少(|C|<1)。這有助于 GWO 在優(yōu)化過程中展示出隨機(jī)搜索行為,以避免算法陷入局部最優(yōu)。值得注意的是,C并不是線性下降的,C在迭代過程中是隨機(jī)值,該系數(shù)有利于算法跳出局部,特別是算法在迭代的后期顯得尤為重要。

3 實(shí)現(xiàn)步驟及程序框圖

3.1 步驟

Step1:種群初始化:包括種群數(shù)量N,最大迭代次數(shù)Maxlter,調(diào)控參數(shù)a,A,C.

Step2:根據(jù)變量的上下界來隨機(jī)初始化灰狼個(gè)體的位置X。

Step3:計(jì)算每一頭狼的適應(yīng)度值,并將種群中適應(yīng)度值最優(yōu)的狼的位置信息保存Xα,將種群中適應(yīng)度值次優(yōu)的狼的位置信息保存為Xβ,將種群中適應(yīng)度第三優(yōu)的灰狼的位置信息保存為Xγ。

Step4:更新灰狼個(gè)體X的位置。

step5:更新參數(shù)a,A和C。

Step6:計(jì)算每一頭灰狼的適應(yīng)度值,并更新三匹頭狼的最優(yōu)位置。

Step7:判斷是否到達(dá)最大迭代次數(shù)Maxlter,若滿足則算法停止并返回Xa的值作為最終得到的最優(yōu)解,否則轉(zhuǎn)到Step4。

3.2 程序框圖

4 Python代碼實(shí)現(xiàn)

 
#=======導(dǎo)入線管庫(kù)======
import random
import numpy
 
#完整代碼見微信公眾號(hào):電力系統(tǒng)與算法之美
#輸入關(guān)鍵字:灰狼算法
 
def GWO(objf, lb, ub, dim, SearchAgents_no, Max_iter):
 
    #===初始化 alpha, beta, and delta_pos=======
    Alpha_pos = numpy.zeros(dim)  # 位置.形成30的列表
    Alpha_score = float("inf")  # 這個(gè)是表示“正負(fù)無窮”,所有數(shù)都比 +inf ??;正無窮:float("inf"); 負(fù)無窮:float("-inf")
 
    Beta_pos = numpy.zeros(dim)
    Beta_score = float("inf")
 
    Delta_pos = numpy.zeros(dim)
    Delta_score = float("inf")  # float() 函數(shù)用于將整數(shù)和字符串轉(zhuǎn)換成浮點(diǎn)數(shù)。
 
    #====list列表類型=============
    if not isinstance(lb, list):  # 作用:來判斷一個(gè)對(duì)象是否是一個(gè)已知的類型。 其第一個(gè)參數(shù)(object)為對(duì)象,第二個(gè)參數(shù)(type)為類型名,若對(duì)象的類型與參數(shù)二的類型相同則返回True
        lb = [lb] * dim  # 生成[100,100,.....100]30個(gè)
    if not isinstance(ub, list):
        ub = [ub] * dim
 
    #========初始化所有狼的位置===================
    Positions = numpy.zeros((SearchAgents_no, dim))
    for i in range(dim):  # 形成5*30個(gè)數(shù)[-100,100)以內(nèi)
        Positions[:, i] = numpy.random.uniform(0, 1, SearchAgents_no) * (ub[i] - lb[i]) + lb[
            i]  # 形成[5個(gè)0-1的數(shù)]*100-(-100)-100
    Convergence_curve = numpy.zeros(Max_iter)
 
    #========迭代尋優(yōu)=====================
    for l in range(0, Max_iter):  # 迭代1000
        for i in range(0, SearchAgents_no):  # 5
            #====返回超出搜索空間邊界的搜索代理====
            for j in range(dim):  # 30
                Positions[i, j] = numpy.clip(Positions[i, j], lb[j], ub[
                    j])  # clip這個(gè)函數(shù)將將數(shù)組中的元素限制在a_min(-100), a_max(100)之間,大于a_max的就使得它等于 a_max,小于a_min,的就使得它等于a_min。
 
        
 
        #===========以上的循環(huán)里,Alpha、Beta、Delta===========
        a = 2 - l * ((2) / Max_iter);  #   a從2線性減少到0
 
        for i in range(0, SearchAgents_no):
            for j in range(0, dim):
                r1 = random.random()  # r1 is a random number in [0,1]主要生成一個(gè)0-1的隨機(jī)浮點(diǎn)數(shù)。
                r2 = random.random()  # r2 is a random number in [0,1]
 
                A1 = 2 * a * r1 - a;  # Equation (3.3)
                C1 = 2 * r2;  # Equation (3.4)
                # D_alpha表示候選狼與Alpha狼的距離
                D_alpha = abs(C1 * Alpha_pos[j] - Positions[
                    i, j]);  # abs() 函數(shù)返回?cái)?shù)字的絕對(duì)值。Alpha_pos[j]表示Alpha位置,Positions[i,j])候選灰狼所在位置
                X1 = Alpha_pos[j] - A1 * D_alpha;  # X1表示根據(jù)alpha得出的下一代灰狼位置向量
 
                r1 = random.random()
                r2 = random.random()
 
                A2 = 2 * a * r1 - a;  #
                C2 = 2 * r2;
 
                D_beta = abs(C2 * Beta_pos[j] - Positions[i, j]);
                X2 = Beta_pos[j] - A2 * D_beta;
 
                r1 = random.random()
                r2 = random.random()
 
                A3 = 2 * a * r1 - a;
                C3 = 2 * r2;
 
                D_delta = abs(C3 * Delta_pos[j] - Positions[i, j]);
                X3 = Delta_pos[j] - A3 * D_delta;
 
                Positions[i, j] = (X1 + X2 + X3) / 3  # 候選狼的位置更新為根據(jù)Alpha、Beta、Delta得出的下一代灰狼地址。
 
        Convergence_curve[l] = Alpha_score;
 
        if (l % 1 == 0):
            print(['迭代次數(shù)為' + str(l) + ' 的迭代結(jié)果' + str(Alpha_score)]);  # 每一次的迭代結(jié)果
 
#========函數(shù)==========
def F1(x):
    s=numpy.sum(x**2);
    return s
 
#===========主程序================
func_details = ['F1', -100, 100, 30]
function_name = func_details[0]
Max_iter = 1000#迭代次數(shù)
lb = -100#下界
ub = 100#上屆
dim = 30#狼的尋值范圍
SearchAgents_no = 5#尋值的狼的數(shù)量
x = GWO(F1, lb, ub, dim, SearchAgents_no, Max_iter)
 

5 Matlab實(shí)現(xiàn)

% 主程序 GWO
clear
close all
clc
 
%%完整代碼見微信公眾號(hào):電力系統(tǒng)與算法之美
 
%輸入關(guān)鍵字:灰狼算法
 
SearchAgents_no = 30 ; % 種群規(guī)模
dim = 10 ; % 粒子維度
Max_iter = 1000 ; % 迭代次數(shù)
ub = 5 ;
lb = -5 ;
 
%% 初始化三匹頭狼的位置
Alpha_pos=zeros(1,dim);
Alpha_score=inf; 
 
Beta_pos=zeros(1,dim);
Beta_score=inf; 
 
Delta_pos=zeros(1,dim);
Delta_score=inf; 
 
 
 
Convergence_curve = zeros(Max_iter,1);
 
%% 開始循環(huán)
for l=1:Max_iter
    for i=1:size(Positions,1)  
        
       %% 返回超出搜索空間邊界的搜索代理
        Flag4ub=Positions(i,:)>ub;
        Flag4lb=Positions(i,:)<lb;
        Positions(i,:)=(Positions(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;               
        
        %% 計(jì)算每個(gè)搜索代理的目標(biāo)函數(shù)
        fitness=sum(Positions(i,:).^2);
        
        %% 更新 Alpha, Beta, and Delta
        if fitness<Alpha_score 
            Alpha_score=fitness; % Update alpha
            Alpha_pos=Positions(i,:);
        end
        
        if fitness>Alpha_score && fitness<Beta_score 
            Beta_score=fitness; % Update beta
            Beta_pos=Positions(i,:);
        end
        
        if fitness>Alpha_score && fitness>Beta_score && fitness<Delta_score 
            Delta_score=fitness; % Update delta
            Delta_pos=Positions(i,:);
        end
    end
    
    
    a=2-l*((2)/Max_iter); % a decreases linearly fron 2 to 0
    
    %% 更新搜索代理的位置,包括omegas
    for i=1:size(Positions,1)
        for j=1:size(Positions,2)     
                       
            r1=rand(); % r1 is a random number in [0,1]
            r2=rand(); % r2 is a random number in [0,1]
            
            A1=2*a*r1-a; % Equation (3.3)
            C1=2*r2; % Equation (3.4)
            
            D_alpha=abs(C1*Alpha_pos(j)-Positions(i,j)); % Equation (3.5)-part 1
            X1=Alpha_pos(j)-A1*D_alpha; % Equation (3.6)-part 1
                       
            r1=rand();
            r2=rand();
            
            A2=2*a*r1-a; % Equation (3.3)
            C2=2*r2; % Equation (3.4)
            
            D_beta=abs(C2*Beta_pos(j)-Positions(i,j)); % Equation (3.5)-part 2
            X2=Beta_pos(j)-A2*D_beta; % Equation (3.6)-part 2       
            
            r1=rand();
            r2=rand(); 
            
            A3=2*a*r1-a; % Equation (3.3)
            C3=2*r2; % Equation (3.4)
            
            D_delta=abs(C3*Delta_pos(j)-Positions(i,j)); % Equation (3.5)-part 3
            X3=Delta_pos(j)-A3*D_delta; % Equation (3.5)-part 3             
            
            Positions(i,j)=(X1+X2+X3)/3;% Equation (3.7)
            
        end
    end
  
    Convergence_curve(l)=Alpha_score;
    disp(['Iteration = ' num2str(l)  ', Evaluations = ' num2str(Alpha_score)]);
 
end
%========可視化==============
figure('unit','normalize','Position',[0.3,0.35,0.4,0.35],'color',[1 1 1],'toolbar','none')
%% 目標(biāo)空間
subplot(1,2,1);
x = -5:0.1:5;y=x;
L=length(x);
f=zeros(L,L);
for i=1:L
    for j=1:L
       f(i,j) = x(i)^2+y(j)^2;
    end
end
surfc(x,y,f,'LineStyle','none');
xlabel('x_1');
ylabel('x_2');
zlabel('F')
title('Objective space')
%% 狼群算法 
subplot(1,2,2);
semilogy(Convergence_curve,'Color','r','linewidth',1.5)
title('Convergence_curve')
xlabel('Iteration');
ylabel('Best score obtained so far');
 
axis tight
grid on
box on
legend('GWO')
display(['The best solution obtained by GWO is : ', num2str(Alpha_pos)]);
display(['The best optimal value of the objective funciton found by GWO is : ', num2str(Alpha_score)]);
 

以上就是Python&Matlab實(shí)現(xiàn)灰狼優(yōu)化算法的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于Python Matlab灰狼優(yōu)化算法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python 列表去重去除空字符的例子

    Python 列表去重去除空字符的例子

    今天小編就為大家分享一篇Python 列表去重去除空字符的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python操作使用MySQL數(shù)據(jù)庫(kù)的實(shí)例代碼

    Python操作使用MySQL數(shù)據(jù)庫(kù)的實(shí)例代碼

    本篇文章主要介紹了Python 操作 MySQL的實(shí)例代碼,詳細(xì)介紹了Python如何連接數(shù)據(jù)庫(kù)和對(duì)數(shù)據(jù)的增刪查改,有興趣的可以了解一下
    2017-05-05
  • Python?enumerate()計(jì)數(shù)器簡(jiǎn)化循環(huán)

    Python?enumerate()計(jì)數(shù)器簡(jiǎn)化循環(huán)

    這篇文章主要介紹了Python?enumerate()計(jì)數(shù)器簡(jiǎn)化循環(huán),enumerate()最大的優(yōu)點(diǎn)就是它返回一個(gè)帶有計(jì)數(shù)器和值的元組,因此我們不必自己增加計(jì)數(shù)器,下面就來看看文章具體對(duì)它的詳細(xì)介紹吧,需要的朋友可以參考一下
    2021-12-12
  • Python中字符串的格式化方法小結(jié)

    Python中字符串的格式化方法小結(jié)

    這篇文章主要介紹了Python中字符串的格式化方法小結(jié),提到了針對(duì)Python2.x與3.x版本相異情況下的不同技巧,需要的朋友可以參考下
    2016-05-05
  • 淺析Python中的多進(jìn)程與多線程的使用

    淺析Python中的多進(jìn)程與多線程的使用

    這篇文章主要介紹了Python中的多進(jìn)程與多線程,線程與進(jìn)程一直是Python學(xué)習(xí)和運(yùn)用當(dāng)中的重點(diǎn)和難點(diǎn),本文采用簡(jiǎn)單的例子進(jìn)行講解,需要的朋友可以參考下
    2015-04-04
  • Jupyter Notebook切換虛擬環(huán)境的三種方法

    Jupyter Notebook切換虛擬環(huán)境的三種方法

    本文主要介紹了Jupyter Notebook切換虛擬環(huán)境的三種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Python中生成Epoch的方法

    Python中生成Epoch的方法

    下面小編就為大家?guī)硪黄狿ython中生成Epoch的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04
  • Matplotlib的反轉(zhuǎn)軸、繪制雙軸和定制刻度詳解

    Matplotlib的反轉(zhuǎn)軸、繪制雙軸和定制刻度詳解

    這篇文章主要介紹了Matplotlib的反轉(zhuǎn)軸、繪制雙軸和定制刻度詳解,作為Python生態(tài)中應(yīng)用最廣泛的繪圖庫(kù),Matplotlib用起來非常簡(jiǎn)單,也很容易上手,本文匯總了和軸、刻度相關(guān)的七個(gè)Matplotlib使用技巧,并給出了實(shí)例代碼,需要的朋友可以參考下
    2023-08-08
  • 對(duì)DJango視圖(views)和模版(templates)的使用詳解

    對(duì)DJango視圖(views)和模版(templates)的使用詳解

    今天小編就為大家分享一篇對(duì)DJango視圖(views)和模版(templates)的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Tensorflow實(shí)現(xiàn)多GPU并行方式

    Tensorflow實(shí)現(xiàn)多GPU并行方式

    今天小編就為大家分享一篇Tensorflow實(shí)現(xiàn)多GPU并行方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02

最新評(píng)論

夹江县| 西平县| 东台市| 古浪县| 深泽县| 资源县| 枞阳县| 陆丰市| 霍邱县| 宜川县| 兴海县| 洛浦县| 措勤县| 康保县| 孝义市| 遂平县| 成安县| 濮阳市| 惠州市| 益阳市| 综艺| 周至县| 交口县| 南平市| 光山县| 若羌县| 德州市| 时尚| 天祝| 奇台县| 内丘县| 青冈县| 米脂县| 保山市| 沁水县| 深圳市| 湄潭县| 常山县| 望都县| 泌阳县| 吉林省|