標準差分進化(DE)算法筆記丨matlab實現

小白在bilibili中有matlab代碼講解,感興趣的讀者見網址:https://www.bilibili.com/video/BV1Ez411b7SJ
一、前言
之前提到過PSO算法,它作爲進化算法的入門算法,具有參數少,實現簡單,收斂性強的特點。但是,“早熟”這一特點在PSO算法中最爲致命,它使得算法極容易陷入局部最優,算法性能也會因此而急劇下降。因此,差分進化算法(DE)應運而生,同樣的,DE也是一種基礎算法,但是它的多樣性更強,不容易出現早熟現象,在一般優化中更加實用。

二、算法流程
1.初始化種羣,評價出適應度值,並找出全局最優位置與最優適應度值。
2.進入優化,generation+1。
3.變異。爲了保證多樣性,變異中需要選擇的隨機粒子不應與當前更新粒子相同。變異策略通常有以下5種:
變異向量V,F爲縮放因子,通常設置爲0.5。
(1)DE/rand/1
在這裏插入圖片描述
上式中有三個隨機位置,r1,r2,r3是不等於i的不相同的隨機數,種羣多樣性提高,相應的,其收斂性會降低。

(2)DE/best/1
在這裏插入圖片描述
Xbest是種羣最優位置,在上式中有着指導作用,能夠提升粒子的收斂性。

(3)DE/rand-to-best/1
在這裏插入圖片描述
個人認爲,上式在多樣性和收斂性之間的制衡效果較好。兩個隨機位置用於開發,最優位置用來指導。它能適用於一般優化問題,但是對於大規模優化這種需要強收斂效果的問題可能不太適用。

(4)DE/best/2
在這裏插入圖片描述
(5)DE/rand/2
在這裏插入圖片描述
上式包含5個不同的隨機粒子,種羣的開發能力較強,提高了種羣多樣性。

4.交叉。U爲交叉向量,CR是交叉概率。CR的值越大,發生交叉的概率越大,通常CR=0.3。
(1)二項式交叉

      %NP:種羣個數;Dim:維度;V:變異向量;U:交叉向量;
        for i=1:NP         
            jRand=randi([1,Dim]);  %jRand∈[1,Dim]
            for j=1:Dim
                k=rand;
                if k<=CR||j==jRand 
                 %j==jRand是爲了確保至少有一個U(i,j)=V(i,j)
                    U(i,j)=V(i,j);
                else
                    U(i,j)=X(i,j);
                end     
            end    
        end

(2)指數交叉

       for i=1:NP
            j=randi([1,Dim]);%j∈[1,Dim]
            L=0;
            U(i,:)=X(i,:);
            k=rand;
            while(k<CR && L<Dim)
                U(i,j)=V(i,j);
                j=j+1;
                if(j>Dim)
                    j=1;
                end
                L=L+1;
            end
       end

5.評價進化的新粒子U,適應度值爲fitnessU,根據U的適應度值的高低載進行以下篩選。

        if fitnessU(i)<fitnessX(i)
            X(i,:)=U(i,:);
            fitnessX(i)=fitnessU(i);
       end

6.更新最佳位置及適應度值,進入下一代循環stesp2。

三、總結
DE算法的實現比較簡單,算法的靈活性較強,不同方法的變異交叉會有不同的實驗效果。對於DE算法的改進也非常多,很多改進方法使得其性能突飛猛進,個人認爲是一個比較普遍且適應性強的一個基礎算法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章