基於PSO粒子群演算法的三角形採集堆軌道最佳化matlab模擬

软件算法开发發表於2024-08-28

1.程式功能描述
假設一個收集軌道,上面有5個採集堆,這5個採集堆分別被看作一個4*20的矩陣(下面只有4*10),每個模組(比如:A31和A32的元素含量不同),為了達到採集物品數量和元素含量的要求(比如:需採集5噸和某元素單位質量在65與62之間),求出在每個4*20的矩陣中哪個模組被拿出可以達到要求並找出最最佳化的軌道?透過PSO最佳化演算法找到最優的軌跡。

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



透過這個步驟將最佳化出符合採集規則且符合元素含量,並滿足需求量的模組集合,然後進行軌跡最佳化。

3.核心程式

            xnew = xnew1;
            %插入交叉區域
            for j=1:ncros
                xnew1(i,n-ncros+j) = cros(j);
            end
            %判斷產生需求量差是否變小
            masses=0;
            masses = sum(maxs_sets(xnew1(i,:)));
            if F(i)>masses
              x(i,:)=xnew1(i,:);
            end
            %進行變異操作
            c1          = round(rand*(n-1))+1;  
            c2          = round(rand*(n-1))+1;
            temp        = xnew1(i,c1);
            xnew1(i,c1) = xnew1(i,c2);
            xnew1(i,c2) = temp;
            %判斷產生需求量差是否變小
            masses=0;
            masses = sum(maxs_sets(xnew1(i,:)));
 
            if F(i)>masses
               x(i,:)=xnew1(i,:);
            end
        end
        
        Fitness_tmps1=F(1);
        Fitness_tmps2=1;
        for i=1:Num_x
            %如果當前值比之前值小,那麼將粒子引數賦值給當前值
           if Fitness_tmps1>=F(i)
              Fitness_tmps1=F(i);
              Fitness_tmps2=i;
           end
        end
        xuhao      = Fitness_tmps2;
        L_best(N)  = min(F);
        %當前全域性最優需求量
        Tour_gbest = x(xuhao,:);     
        N          = N + 1;
        
    end
    %判斷含量是否滿足要求
    for ii = 1:5
        Fac_tmps(ii) = sum(FAC_sets(Tour_gbest,ii)'.*maxs_sets(Tour_gbest))/sum(maxs_sets(Tour_gbest));
    end
    %判斷每組元素的含量是否滿足約束要求
    if (Fac_tmps(1) >= Mass1_min & Fac_tmps(1) <= Mass1_max) &...
       (Fac_tmps(2) >= Mass2_min & Fac_tmps(2) <= Mass2_max) &...
       (Fac_tmps(3) >= Mass3_min & Fac_tmps(3) <= Mass3_max) &...
       (Fac_tmps(4) >= Mass4_min & Fac_tmps(4) <= Mass4_max) &... 
       (Fac_tmps(5) >= Mass5_min & Fac_tmps(5) <= Mass5_max)
       flag(Num_pso-3) = 1;%如果都滿足了,則產生標誌資訊1,否則產生標誌資訊0
    else
       flag(Num_pso-3) = 0; 
    end
    Mass_fig(Num_pso-3)  = min(L_best);
    Mass_Index{Num_pso-3}= Tour_gbest ;
end
figure;
plot(Mass_fig,'-r>',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.9,0.9,0.0]);
xlabel('採集模組個數');
ylabel('需求量計算值和標準需求量的差值關係圖');
06_010m

  

4.本演算法原理
三角形採集堆作為一種高效的資料採集結構,被廣泛應用於環境監測、戰場偵察、智慧交通等領域。其核心任務是在指定的區域內進行資料採集,並將採集到的資料傳送到處理中心。為了提高採集效率,減少能量消耗和行走路徑長度,需要對三角形採集堆的軌道進行最佳化。

傳統的最佳化方法,如遺傳演算法、模擬退火演算法等,雖然取得了一定的成果,但在處理複雜最佳化問題時仍存在收斂速度慢、易陷入區域性最優解等問題。粒子群最佳化(PSO)演算法是一種模擬鳥群覓食行為的群體智慧最佳化演算法,具有引數少、實現簡單、收斂速度快等優點。因此,本文將PSO演算法應用於三角形採集堆軌道最佳化問題中,以期獲得更好的最佳化效果。

粒子群最佳化演算法是一種模擬鳥類叢集或魚群覓食行為的啟發式全域性最佳化演算法。它透過迭代搜尋多個候選解(稱為“粒子”),每個粒子都有一個位置和速度,根據其自身的最優歷史位置以及整個種群中發現的全域性最優位置來更新自身狀態,以期找到目標函式的全域性最優解。

在三角形採集堆軌道最佳化場景下,假設有一個移動機器人需要在一系列三角形區域進行資源採集,目標是規劃出一條最最佳化的運動軌跡,使機器人在滿足約束條件(如時間、能量消耗等)下儘可能覆蓋所有區域或者最大化某種效能指標。

採集規則約束。

即每次只能採集最上面的,如果最上面的沒有被取走,那麼不能直接採集下面的。

這裡,我們使用是數學公式表示如下:

分別對四層的模組進行標記,最上面的為4,如果取走了則直接賦值0,這樣,而每次我們只能去標號最大的那個。如果取走了,那麼被取走的賦值為0,那麼在判斷的時候,可以取下面的,如果全部被取走了,則為全0,如果為全零,則這列就不能取值了。即全零表示空。

即上面的約束條件是透過物品的採集,使得總量滿足要求,且五個元素的單位質量滿足上面的約束,最後使得采集軌跡最短。

所以,透過上面的綜合分析,我們所要的數學公式為:

應用PSO解決此問題時,每個粒子表示一種可能的軌跡方案,目標函式可以設計為考慮了採集效率、路徑長度、時間等因素的綜合評價函式。透過不斷地迭代,粒子群會逐漸收斂到最優或接近最優的軌道解決方案。

相關文章