透過matlab分別對比PSO,反向學習PSO,多策略改進反向學習PSO三種最佳化演算法

软件算法开发發表於2024-12-02

1.程式功能描述
分別對比PSO,反向學習PSO,多策略改進反向學習PSO三種最佳化演算法.對比其最佳化收斂曲線。

2.測試軟體版本以及執行結果展示
MATLAB2022A版本執行




3.核心程式

for t=1:tmax
    t
    time(t) = t;
    w       = 0.5;
    for i=1:Pop
        if t > 1
            %N
            x(1,i)         = x_(1,i);
            x_best(1,i)    = x_best_(1,i);
            %I
            y(1,i)         = y_(1,i);
            y_best(1,i)    = y_best_(1,i);
        end
        %N
        %速度1設定
        va(1,i) = w*va(1,i) + c1*rand(1)*(x_best(1,i)-x(1,i)) + c2*rand(1)*(Tx_best-x(1,i));
        %更新
        x(1,i)  = x(1,i) + va(1,i);
        %變數1的限制
        if x(1,i) >= max1
           x(1,i) = max1;
        end
        if x(1,i) <= min1
           x(1,i) = min1;
        end                             
 
        %I
        %速度2設定
        vb(1,i) = w*vb(1,i) + c1*rand(1)*(y_best(1,i)-y(1,i)) + c2*rand(1)*(Ty_best-y(1,i));
        %更新
        y(1,i)  = y(1,i) + vb(1,i);
        %變數2的限制
        if y(1,i) >= max2
           y(1,i) = max2;
        end
        if y(1,i) <= min2
           y(1,i) = min2;
        end                            
 
       [BsJ,x(1,i),y(1,i)] = func_fitness(x(1,i),y(1,i));  
        
        if BsJ<BsJi(i)
           BsJi(i)        = BsJ;
           x_best(1,i)    = x(1,i);
           y_best(1,i)    = y(1,i);
        end
        if BsJi(i)<minJi
           minJi      = BsJi(i);
           Tx_best    = x(1,i);
           Ty_best    = y(1,i);
        end
        %反向
        %反向學習
        %N
        x_(1,i)         = (max1+min1)-x(1,i);
        x_best_(1,i)    = (max1+min1)-x_best(1,i);
        %I
        y_(1,i)         = (max2+min2)-y(1,i);
        y_best_(1,i)    = (max2+min2)-y_best(1,i);
 
       [BsJ,x(1,i),y(1,i)] = func_fitness(x_(1,i),y_(1,i));
 
        if BsJ<BsJi(i)
           BsJi(i)        = BsJ;
           x_best(1,i)    = x_(1,i);
           y_best(1,i)    = y_(1,i);
        end
        if BsJi(i)<minJi
           minJi      = BsJi(i);
           Tx_best    = x_(1,i);
           Ty_best    = y_(1,i);
        end
    end
    Jibest(t) = minJi;
end
Tx_best
Ty_best
figure;
plot(Jibest,'b','linewidth',1);
xlabel('迭代次數');
ylabel('J');
grid on
 
save R2.mat Jibest

  


4.本演算法原理
4.1 粒子群最佳化演算法 (PSO)
粒子群最佳化演算法模擬鳥群或魚群的社會行為,透過迭代搜尋最優解。在n維搜尋空間中,每一個粒子代表一個潛在解,並具有速度和位置屬性。在每次迭代過程中,粒子根據自身的歷史最優位置(個體極值pi​)和全域性最優位置(全域性極值g)更新自己的速度和位置。

4.2 反向學習粒子群最佳化演算法 (OPSO)
反向學習PSO是在傳統PSO基礎上引入了反向學習機制,當搜尋過程陷入區域性最優時,透過回溯過去的最優解來調整粒子的速度和方向,從而增加跳出區域性最優的可能性。

改進要點: RL-PSO會在適當的時候啟用反向學習階段,此時速度更新會參考歷史最優位置而非當前最優位置,具體數學表示式因不同實現方式而異,但一般包含對過去優良解的記憶和利用。

4.3 多策略改進反向學習粒子群最佳化演算法 (MSO-PSO)
MSO-PSO融合了多種策略並結合反向學習的思想,進一步增強演算法的全域性搜尋能力和收斂速度。例如,可能結合自適應權重調整、動態鄰域搜尋、精英保留策略等。

相關文章