日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

【PSO运输优化】基于MATLAB的PSO运输优化算法的仿真

發(fā)布時(shí)間:2025/4/5 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【PSO运输优化】基于MATLAB的PSO运输优化算法的仿真 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.軟件版本

matlab2013b

2.本算法理論知識(shí)

??????? 問題是,假設(shè)我有一個(gè)收集軌道,上面有5個(gè)采集堆,這5個(gè)采集堆分別被看作一個(gè)4*20的矩陣(下面只有4*10),每個(gè)模塊(比如:A31和A32的元素含量不同),為了達(dá)到采集物品數(shù)量和元素含量的要求(比如:需采集5噸和某元素單位質(zhì)量在65與62之間),求出在每個(gè)4*20的矩陣中哪個(gè)模塊被拿出可以達(dá)到要求并找出最優(yōu)化的軌道?

已知數(shù)據(jù):

1.每個(gè)采集堆的元素含量(在excel表格的 sheet 1)

2.每個(gè)采集堆里面模塊的坐標(biāo),長(zhǎng)寬高(米為單位)(在excel表格的 sheet 1)

3.元素含量和采集物品數(shù)量的要求 (在excel 表格的 sheet 2), 分別有五種不同含量的最大值和最小值, 還有采集數(shù)量的要求,以及誤差。

4.在軌道左側(cè)的兩個(gè)采集堆分別是C型號(hào)和A型號(hào)的,兩個(gè)采集堆只見距離30m; 軌道右側(cè)的三個(gè)采集堆按照順序分別是B型號(hào),B型號(hào)和C型號(hào),同樣每個(gè)采集堆之間相距20m。5.采集堆形狀附在附錄1

附錄1 采集對(duì)側(cè)視圖

高: 10m(A.BC)

每一層寬度和長(zhǎng)度不一樣,具體數(shù)據(jù)在excel表格

所以第一行就是三角體體積,剩下的就是梯行體積。

????? ?這里其實(shí)是一個(gè)最優(yōu)化問題,即滿足采集物品的需求,需要對(duì)3個(gè)類型的5個(gè)集散地進(jìn)行裝貨,且每次只能取最上面的,如果對(duì)于當(dāng)前位置的物品,如果最少面沒有取走,那么只能先取最上面的物品,然后統(tǒng)計(jì)裝貨軌跡的距離,通過優(yōu)化計(jì)算最短距離。

?????? ?那么,這里解題的關(guān)鍵是計(jì)算目標(biāo)函數(shù),然后使用優(yōu)化算法對(duì)目標(biāo)函數(shù)進(jìn)行優(yōu)化處理。本算法的主要目標(biāo)就是目標(biāo)函數(shù)的設(shè)計(jì),這個(gè)也是該課題的難點(diǎn)。

??????? 首先我們根據(jù)上面的需求,建立如下的數(shù)學(xué)模型:

???????

??????? 這里,dj表示每一次從一個(gè)模塊移動(dòng)到另外一個(gè)模塊的距離,如果是從一個(gè)采集堆移動(dòng)到另外一個(gè)采集堆中,那么則在另外一堆中計(jì)算所采集的模塊之間的間距。

??????? 所以上面的公式為:

??????

??????即在不同的采集堆的所有距離之和。這里,需要通過優(yōu)化考慮不同采集堆之間的移動(dòng),以及在每個(gè)采集上如何進(jìn)行模塊的采集兩個(gè)因素。

我們的目標(biāo)就是使得上面的函數(shù)值最小,從而得到采集路線軌跡。

這里,需要考慮的難點(diǎn)有如下幾點(diǎn):

第一:空間軌跡是三維,這個(gè)比二維的復(fù)雜。

第二:約束條件的建立,我們根據(jù)課題的需求,建立如下的約束條件。

2.1 采集規(guī)則約束。

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

這里,我們使用是數(shù)學(xué)公式表示如下:

??????? 分別對(duì)四層的模塊進(jìn)行標(biāo)記,最上面的為4,如果取走了則直接賦值0,這樣,而每次我們只能去標(biāo)號(hào)最大的那個(gè)。如果取走了,那么被取走的賦值為0,那么在判斷的時(shí)候,可以取下面的,如果全部被取走了,則為全0,如果為全零,則這列就不能取值了。即全零表示空。

2.2 滿足采集物品數(shù)量和元素含量的約束

?????? 根據(jù)所提供的數(shù)據(jù),物品數(shù)量的最大值為60000t,誤差為1.

而元素含量為得約束條件為:

元素1

元素2

元素3

元素4

元素5

65

6

4

0.077

0.1

最大值

62

0

0

0

0

最小值

通過課題所給出的約束條件可知,我們需要通過采集模塊,使得最后的總重量為60000,而所采集的物品中的各個(gè)元素的所含比例影響滿足上面的約束條件。

??????? 即上面的約束條件是通過物品的采集,使得總量滿足要求,且五個(gè)元素的單位質(zhì)量滿足上面的約束,最后使得采集軌跡最短。

?????? 所以,通過上面的綜合分析,我們所要的數(shù)學(xué)公式為:

? ??????

????? ??為了方便,我們將所需要的數(shù)據(jù),在excel中整理下,將里面一些你用公式編輯的轉(zhuǎn)換為真實(shí)的數(shù)據(jù)。修改的excel文件見新發(fā)你的數(shù)據(jù),而約束條件則直接在程序中進(jìn)行設(shè)置。

??????? 這里,我們假設(shè),設(shè)備從一個(gè)端點(diǎn)移動(dòng)到另外一個(gè)端點(diǎn)的時(shí)候,是逐漸向前移動(dòng)的,而不是來回移動(dòng)的。即,設(shè)備是一次從軌道的一個(gè)端點(diǎn)移動(dòng)到另外一個(gè)端點(diǎn)的(事實(shí)上,規(guī)定都是依次向運(yùn)動(dòng)的)

?????? 根據(jù)這個(gè)假設(shè),我們?cè)O(shè)計(jì)的思路為當(dāng)每次運(yùn)動(dòng)到一堆的時(shí)候,首先在這一堆物品上進(jìn)行采集,由于每堆物品之間的間距遠(yuǎn)大于每堆內(nèi)部的各個(gè)模塊之間的間隔,所以在實(shí)際中也不可能在兩個(gè)不同的堆之間來回切換的抓取模塊,這也符合我們上面的假設(shè)。

??????? 根據(jù)上面的假設(shè),我們抓取的順序?yàn)锽堆,C堆,A堆,A堆,B堆。

3.核心代碼

%根據(jù)這個(gè)假設(shè),我們?cè)O(shè)計(jì)的思路為當(dāng)每次運(yùn)動(dòng)到一堆的時(shí)候,首先在這一堆物品上進(jìn)行采集,由于 %每堆物品之間的間距遠(yuǎn)大于每堆內(nèi)部的各個(gè)模塊之間的間隔,所以在實(shí)際中也不可能在兩個(gè)不同的 %堆之間來回切換的抓取模塊,這也符合我們上面的假設(shè)。 %根據(jù)上面的假設(shè),我們抓取的順序?yàn)锽堆,C堆,A堆,A堆,B堆。 %這里,我們所使用的算法是局部PSO優(yōu)化,然后再整體PSO優(yōu)化的算法,即首先通過再每一堆的采集 %的時(shí)候進(jìn)行PSO優(yōu)化,并使的各個(gè)元素含量滿足約束的條件下,得到路徑最短的采集軌跡,然后通過 %后面三堆重復(fù)相同的優(yōu)化算法,最后第五堆的時(shí)候,在做相同的優(yōu)化前提下,同時(shí)檢測(cè)總量是否滿足 %條件,如果不滿足進(jìn)入下一次大迭代循環(huán),然后重復(fù)上面的操作,最后得到滿足條件的總的采集軌跡。clc; clear; close all; warning off; pack; addpath 'func\'%********************************************************************************** %步驟一:調(diào)用數(shù)據(jù) %步驟一:調(diào)用數(shù)據(jù) Dat = xlsread('Dat\datas.xlsx');%分成ABC三組 A_set = Dat( 1:40 ,:); B_set = Dat(41:80 ,:); C_set = Dat(81:120,:);%A相關(guān)數(shù)據(jù) %坐標(biāo) A_POS = A_set(:,1:3); %元素含量 A_FAC = A_set(:,4:8); %體積長(zhǎng)寬高 A_VUM = A_set(:,9:11);%B相關(guān)數(shù)據(jù) %坐標(biāo) B_POS = B_set(:,1:3); %元素含量 B_FAC = B_set(:,4:8); %體積長(zhǎng)寬高 B_VUM = B_set(:,9:11);%C相關(guān)數(shù)據(jù) %坐標(biāo) C_POS = C_set(:,1:3); %元素含量 C_FAC = C_set(:,4:8); %體積長(zhǎng)寬高 C_VUM = C_set(:,9:11);%************************************************************************** %**************************************************************************%********************************************************************************** %步驟二:參數(shù)初始化 %步驟二:參數(shù)初始化 %約束參數(shù) %59999 ~ 60001 Mass_all = 60000; Mass_err = 1; %元素1 Mass1_max= 65; Mass1_min= 62; %元素2 Mass2_max= 6; Mass2_min= 0; %元素3 Mass3_max= 4; Mass3_min= 0; %元素4 Mass4_max= 0.077; Mass4_min= 0; %元素5 Mass5_max= 0.1; Mass5_min= 0;%優(yōu)化算法參數(shù) %優(yōu)化算法參數(shù) %迭代次數(shù) Iteration_all = 1; Iteration_sub = 10000; %粒子數(shù)目 Num_x = 200;%密度 P = 2.1; %計(jì)算各個(gè)模塊的質(zhì)量,單位t %注意,本課題一個(gè)堆中有個(gè)四個(gè)形狀的模塊,即三角形,三種梯形,所以我們根據(jù)長(zhǎng)寬高以及對(duì)應(yīng)的形狀計(jì)算體積,從而計(jì)算質(zhì)量 A_Vulome = func_cal_volume(A_VUM); B_Vulome = func_cal_volume(B_VUM); C_Vulome = func_cal_volume(C_VUM); %計(jì)算每個(gè)采集堆的各個(gè)模塊的質(zhì)量 A_mass = P*A_Vulome; B_mass = P*B_Vulome; C_mass = P*C_Vulome;%以下根據(jù)實(shí)際軌跡上的堆的分布來設(shè)置 maxs_sets = [B_mass;C_mass;A_mass;A_mass;B_mass]; FAC_sets = [B_FAC;C_FAC;A_FAC;A_FAC;B_FAC];%************************************************************************** %**************************************************************************%********************************************************************************** %步驟三:開始優(yōu)化運(yùn)算 %步驟三:開始優(yōu)化運(yùn)算 X_pos{1} = B_POS(:,1); Y_pos{1} = B_POS(:,2); Z_pos{1} = B_POS(:,3);X_pos{2} = C_POS(:,1); Y_pos{2} = C_POS(:,2); Z_pos{2} = C_POS(:,3);X_pos{3} = A_POS(:,1); Y_pos{3} = A_POS(:,2); Z_pos{3} = A_POS(:,3);X_pos{4} = A_POS(:,1); Y_pos{4} = A_POS(:,2); Z_pos{4} = A_POS(:,3);X_pos{5} = B_POS(:,1); Y_pos{5} = B_POS(:,2); Z_pos{5} = B_POS(:,3);%先通過PSO優(yōu)化需求模型 for Num_pso = 4:40%這里沒有必要設(shè)置太大,設(shè)置大了需求量肯定會(huì)超過60000,因此,這個(gè)值得大小根據(jù)需求量來確定,大概范圍即可Num_psox = zeros(Num_x,Num_pso);i = 0;%產(chǎn)生能夠滿足采集規(guī)則的隨機(jī)粒子數(shù)據(jù)for jj = 1:Num_x%產(chǎn)生隨機(jī)數(shù)的時(shí)候,必須是先采集第一層,然后才采集第二層,依次類推%第1層index1 = [1:10,41:50,81:90,121:130,161:170];%第2層index2 = [1:10,41:50,81:90,121:130,161:170]+10;%第3層index3 = [1:10,41:50,81:90,121:130,161:170]+20;%第4層index4 = [1:10,41:50,81:90,121:130,161:170]+30;%根據(jù)采集規(guī)則產(chǎn)生隨機(jī)數(shù)%根據(jù)采集規(guī)則產(chǎn)生隨機(jī)數(shù)%根據(jù)采集規(guī)則產(chǎn)生隨機(jī)數(shù)index = [index1;index2;index3;index4];i = 0;while i < Num_psoi = i + 1;if i> 1for j = 1:50;index(IS(j),ind(1)) = 9999;endendfor j = 1:50;[VS,IS(j)] = min(index(:,j));tmps(1,j) = index(IS(j),j);endind = randperm(40);a(i) = tmps(ind(1));if a(i) == 9999i = i-1;endendx(jj,:) = a; endn = Num_pso; F = fitness_mass(x,maxs_sets,Mass_all);Fitness_tmps1 = F(1);Fitness_tmps2 = 1;for i=1:Num_xif Fitness_tmps1 >= F(i)Fitness_tmps1 = F(i);Fitness_tmps2 = i;endendxuhao = Fitness_tmps2;Tour_pbest = x; %當(dāng)前個(gè)體最優(yōu)Tour_gbest = x(xuhao,:) ; %當(dāng)前全局最優(yōu)路徑Pb = inf*ones(1,Num_x); %個(gè)體最優(yōu)記錄Gb = F(Fitness_tmps2); %群體最優(yōu)記錄xnew1 = x;N = 1;while N <= Iteration_sub%計(jì)算適應(yīng)度 F = fitness_mass(x,maxs_sets,Mass_all);for i=1:Num_xif F(i)<Pb(i)%將當(dāng)前值賦給新的最佳值Pb(i)=F(i); Tour_pbest(i,:)=x(i,:);endif F(i)<GbGb=F(i);Tour_gbest=x(i,:);endendFitness_tmps1 = Pb(1);Fitness_tmps2 = 1;for i=1:Num_xif Fitness_tmps1>=Pb(i)Fitness_tmps1=Pb(i);Fitness_tmps2=i;endendnummin = Fitness_tmps2;%當(dāng)前群體最優(yōu)需求量差Gb(N) = Pb(nummin); for i=1:Num_x%與個(gè)體最優(yōu)進(jìn)行交叉c1 = round(rand*(n-2))+1; c2 = round(rand*(n-2))+1;while c1==c2c1 = round(rand*(n-2))+1;c2 = round(rand*(n-2))+1;end chb1 = min(c1,c2);chb2 = max(c1,c2);cros = Tour_pbest(i,chb1:chb2); %交叉區(qū)域元素個(gè)數(shù)ncros= size(cros,2); %刪除與交叉區(qū)域相同元素for j=1:ncrosfor k=1:nif xnew1(i,k)==cros(j)xnew1(i,k)=0;for t=1:n-ktemp=xnew1(i,k+t-1);xnew1(i,k+t-1)=xnew1(i,k+t);xnew1(i,k+t)=temp;endendendendxnew = xnew1;%插入交叉區(qū)域for j=1:ncrosxnew1(i,n-ncros+j) = cros(j);end%判斷產(chǎn)生需求量差是否變小masses=0;masses = sum(maxs_sets(xnew1(i,:)));if F(i)>massesx(i,:) = xnew1(i,:);end%與全體最優(yōu)進(jìn)行交叉c1 = round(rand*(n-2))+1; c2 = round(rand*(n-2))+1;while c1==c2c1=round(rand*(n-2))+1; c2=round(rand*(n-2))+1;end chb1 = min(c1,c2);chb2 = max(c1,c2);%交叉區(qū)域矩陣cros = Tour_gbest(chb1:chb2); %交叉區(qū)域元素個(gè)數(shù)ncros= size(cros,2); %刪除與交叉區(qū)域相同元素for j=1:ncrosfor k=1:nif xnew1(i,k)==cros(j)xnew1(i,k)=0;for t=1:n-ktemp=xnew1(i,k+t-1);xnew1(i,k+t-1)=xnew1(i,k+t);xnew1(i,k+t)=temp;end endendendxnew = xnew1;%插入交叉區(qū)域for j=1:ncrosxnew1(i,n-ncros+j) = cros(j);end%判斷產(chǎn)生需求量差是否變小masses=0;masses = sum(maxs_sets(xnew1(i,:)));if F(i)>massesx(i,:)=xnew1(i,:);end%進(jìn)行變異操作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;%判斷產(chǎn)生需求量差是否變小masses=0;masses = sum(maxs_sets(xnew1(i,:)));if F(i)>massesx(i,:)=xnew1(i,:);endendFitness_tmps1=F(1);Fitness_tmps2=1;for i=1:Num_xif Fitness_tmps1>=F(i)Fitness_tmps1=F(i);Fitness_tmps2=i;endendxuhao = Fitness_tmps2;L_best(N) = min(F);%當(dāng)前全局最優(yōu)需求量Tour_gbest = x(xuhao,:); N = N + 1;end%判斷含量是否滿足要求for ii = 1:5Fac_tmps(ii) = sum(FAC_sets(Tour_gbest,ii)'.*maxs_sets(Tour_gbest))/sum(maxs_sets(Tour_gbest));endif (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;elseflag(Num_pso-3) = 0; endMass_fig(Num_pso-3) = min(L_best);Mass_Index{Num_pso-3}= Tour_gbest ; endfigure; plot(Mass_fig,'b-o'); xlabel('采集模塊個(gè)數(shù)'); ylabel('需求量計(jì)算值和標(biāo)準(zhǔn)需求量的差值關(guān)系圖');save temp\result1.mat Mass_fig Mass_Index flag

4.操作步驟與仿真結(jié)論

??????? 首先,運(yùn)行程序run_first.m,搜索所有采集方法得到的需求量為59999~60001之間的采集組合。并保存仿真結(jié)果。

??????? 這個(gè)步驟仿真結(jié)果如下所示:

????? 通過這個(gè)步驟將優(yōu)化出符合采集規(guī)則且符合元素含量,并滿足需求量的模塊集合,然后運(yùn)行run_second.m,進(jìn)行軌跡優(yōu)化。

最后得到的優(yōu)化記過,即滿足條件下的最短軌跡長(zhǎng)度

5.參考文獻(xiàn)

A06-10

6.完整源碼獲得方式

方式1:微信或者QQ聯(lián)系博主

方式2:訂閱MATLAB/FPGA教程,免費(fèi)獲得教程案例以及任意2份完整源碼

總結(jié)

以上是生活随笔為你收集整理的【PSO运输优化】基于MATLAB的PSO运输优化算法的仿真的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。