【優(yōu)化布局】基于粒子群算法求解帶出入點(diǎn)的車間布局優(yōu)化問(wèn)題附matlab代碼
【優(yōu)化布局】基于粒子群算法求解帶出入點(diǎn)的車間布局優(yōu)化問(wèn)題附matlab代碼
TT_Matlab
博主簡(jiǎn)介:擅長(zhǎng)智能優(yōu)化算法、神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)、信號(hào)處理、元胞自動(dòng)機(jī)、圖像處理、路徑規(guī)劃、無(wú)人機(jī)等多種領(lǐng)域的Matlab仿真,完整matlab代碼或者程序定制加qq1575304183。
1 內(nèi)容介紹
為降低車間內(nèi)設(shè)備間的物料搬運(yùn)成本,將粒子群優(yōu)化算法與經(jīng)典的系統(tǒng)化布置設(shè)計(jì)法相結(jié)合,以設(shè)備間的搬運(yùn)成本為目標(biāo),求解面向車間布局的連續(xù)空間優(yōu)化問(wèn)題。在問(wèn)題建模時(shí)采用二維向量表述設(shè)備的連續(xù)空間位置;引入系統(tǒng)化布置設(shè)計(jì)法對(duì)初始粒子群進(jìn)行優(yōu)化,在保證初始粒子群有效性的基礎(chǔ)上提高了算法的尋優(yōu)速度和精度;通過(guò)對(duì)加速系數(shù)和慣性系數(shù)的設(shè)定,提高了粒子群優(yōu)化算法的尋優(yōu)質(zhì)量。通過(guò)實(shí)例驗(yàn)證了所提方法可以有效提高粒子群算法在連續(xù)空間布局問(wèn)題上的優(yōu)化性能。
2 仿真代碼
clc;
clear;
close
all;
%%
Problem Definition
model
=
CreateModel(); % Create Model
CostFunction
=
@(sol1) MyCost(sol1,model); % Cost Function
Vars.xhat.Min
=
0;
Vars.xhat.Max
=
1;
Vars.xhat.Size
=
[1 model.n];
Vars.xhat.Count
=
prod(Vars.xhat.Size);
Vars.xhat.VelMax
=
0.1*(Vars.xhat.Max-Vars.xhat.Min);
Vars.xhat.VelMin
=
-Vars.xhat.VelMax;
Vars.yhat.Min
=
0;
Vars.yhat.Max
=
1;
Vars.yhat.Size
=
[1 model.n];
Vars.yhat.Count
=
prod(Vars.yhat.Size);
Vars.yhat.VelMax
=
0.1*(Vars.yhat.Max-Vars.yhat.Min);
Vars.yhat.VelMin
=
-Vars.yhat.VelMax;
Vars.rhat.Min
=
0;
Vars.rhat.Max
=
1;
Vars.rhat.Size
=
[1 model.n];
Vars.rhat.Count
=
prod(Vars.rhat.Size);
Vars.rhat.VelMax
=
0.1*(Vars.rhat.Max-Vars.rhat.Min);
Vars.rhat.VelMin
=
-Vars.rhat.VelMax;
%%
PSO Parameters
MaxIt
=
500; % Maximum Number of Iterations
nPop
=
50; % Population Size (Swarm Size)
w
=
1.0; % Inertia Weight
wdamp
=
0.99; % Inertia Weight Damping Ratio
c1
=
0.7; % Personal Learning Coefficient
c2
=
1.5; % Global Learning Coefficient
%
% Constriction Coefficients
%
phi1=2.05;
%
phi2=2.05;
%
phi=phi1+phi2;
%
chi=2/(phi-2+sqrt(phi^2-4*phi));
%
w=chi; % Inertia Weight
%
wdamp=1; % Inertia Weight Damping Ratio
%
c1=chi*phi1; % Personal Learning Coefficient
%
c2=chi*phi2; % Global Learning Coefficient
%%
Initialization
empty_particle.Position
=
[];
empty_particle.Cost
=
[];
empty_particle.Sol
=
[];
empty_particle.Velocity
=
[];
empty_particle.Best.Position
=
[];
empty_particle.Best.Cost
=
[];
empty_particle.Best.Sol
=
[];
particle
=
repmat(empty_particle,nPop,1);
GlobalBest.Cost
=
inf;
for
i=1:nPop
%
Initialize Position
particle(i).Position
=
CreateRandomSolution(model);
%
Initialize Velocity
particle(i).Velocity.xhat
=
zeros(Vars.xhat.Size);
particle(i).Velocity.yhat
=
zeros(Vars.yhat.Size);
particle(i).Velocity.rhat
=
zeros(Vars.rhat.Size);
%
Evaluation
[particle(i).Cost,
particle(i).Sol]=CostFunction(particle(i).Position);
%
Update Personal Best
particle(i).Best.Position
=
particle(i).Position;
particle(i).Best.Cost
=
particle(i).Cost;
particle(i).Best.Sol
=
particle(i).Sol;
%
Update Global Best
if
particle(i).Best.Cost<GlobalBest.Cost
GlobalBest
=
particle(i).Best;
end
end
BestCost
=
zeros(MaxIt,1);
%%
PSO Main Loop
for
it=1:MaxIt
for
i=1:nPop
%
---- Motion on xhat
%
Update Velocity
particle(i).Velocity.xhat
=
w*particle(i).Velocity.xhat ...
+c1*rand(Vars.xhat.Size).*(particle(i).Best.Position.xhat-particle(i).Position.xhat)
...
+c2*rand(Vars.xhat.Size).*(GlobalBest.Position.xhat-particle(i).Position.xhat);
%
Apply Velocity Limits
particle(i).Velocity.xhat
=
max(particle(i).Velocity.xhat,Vars.xhat.VelMin);
particle(i).Velocity.xhat
=
min(particle(i).Velocity.xhat,Vars.xhat.VelMax);
%
Update Position
particle(i).Position.xhat
=
particle(i).Position.xhat + particle(i).Velocity.xhat;
%
Velocity Mirror Effect
IsOutside
=
(particle(i).Position.xhat<Vars.xhat.Min | particle(i).Position.xhat>Vars.xhat.Max);
particle(i).Velocity.xhat(IsOutside)
=
-particle(i).Velocity.xhat(IsOutside);
%
Apply Position Limits
particle(i).Position.xhat
=
max(particle(i).Position.xhat,Vars.xhat.Min);
particle(i).Position.xhat
=
min(particle(i).Position.xhat,Vars.xhat.Max);
%
---- Motion on yhat
%
Update Velocity
particle(i).Velocity.yhat
=
w*particle(i).Velocity.yhat ...
+c1*rand(Vars.yhat.Size).*(particle(i).Best.Position.yhat-particle(i).Position.yhat)
...
+c2*rand(Vars.yhat.Size).*(GlobalBest.Position.yhat-particle(i).Position.yhat);
%
Apply Velocity Limits
particle(i).Velocity.yhat
=
max(particle(i).Velocity.yhat,Vars.yhat.VelMin);
particle(i).Velocity.yhat
=
min(particle(i).Velocity.yhat,Vars.yhat.VelMax);
%
Update Position
particle(i).Position.yhat
=
particle(i).Position.yhat + particle(i).Velocity.yhat;
%
Velocity Mirror Effect
IsOutside
=
(particle(i).Position.yhat<Vars.yhat.Min | particle(i).Position.yhat>Vars.yhat.Max);
particle(i).Velocity.yhat(IsOutside)
=
-particle(i).Velocity.yhat(IsOutside);
%
Apply Position Limits
particle(i).Position.yhat
=
max(particle(i).Position.yhat,Vars.yhat.Min);
particle(i).Position.yhat
=
min(particle(i).Position.yhat,Vars.yhat.Max);
%
---- Motion on rhat
%
Update Velocity
particle(i).Velocity.rhat
=
w*particle(i).Velocity.rhat ...
+c1*rand(Vars.rhat.Size).*(particle(i).Best.Position.rhat-particle(i).Position.rhat)
...
+c2*rand(Vars.rhat.Size).*(GlobalBest.Position.rhat-particle(i).Position.rhat);
%
Apply Velocity Limits
particle(i).Velocity.rhat
=
max(particle(i).Velocity.rhat,Vars.rhat.VelMin);
particle(i).Velocity.rhat
=
min(particle(i).Velocity.rhat,Vars.rhat.VelMax);
%
Update Position
particle(i).Position.rhat
=
particle(i).Position.rhat + particle(i).Velocity.rhat;
%
Velocity Mirror Effect
IsOutside
=
(particle(i).Position.rhat<Vars.rhat.Min | particle(i).Position.rhat>Vars.rhat.Max);
particle(i).Velocity.rhat(IsOutside)
=
-particle(i).Velocity.rhat(IsOutside);
%
Apply Position Limits
particle(i).Position.rhat
=
max(particle(i).Position.rhat,Vars.rhat.Min);
particle(i).Position.rhat
=
min(particle(i).Position.rhat,Vars.rhat.Max);
%
Evaluation
[particle(i).Cost,
particle(i).Sol] = CostFunction(particle(i).Position);
%
Apply Mutation
NewParticle
=
particle(i);
NewParticle.Position
=
Mutate(particle(i).Position, Vars);
[NewParticle.Cost,
NewParticle.Sol]=CostFunction(NewParticle.Position);
if
NewParticle.Cost<=particle(i).Cost || rand < 0.2
particle(i)
=
NewParticle;
end
%
Update Personal Best
if
particle(i).Cost<particle(i).Best.Cost
particle(i).Best.Position
=
particle(i).Position;
particle(i).Best.Cost
=
particle(i).Cost;
particle(i).Best.Sol
=
particle(i).Sol;
%
Update Global Best
if
particle(i).Best.Cost<GlobalBest.Cost
GlobalBest
=
particle(i).Best;
end
end
end
%
Apply Local Search (Improvement) to Global Best
NewParticle
=
GlobalBest;
NewParticle.Position
=
ImproveSolution(GlobalBest.Position,model,Vars);
[NewParticle.Cost,
NewParticle.Sol]=CostFunction(NewParticle.Position);
if
NewParticle.Cost<=GlobalBest.Cost
GlobalBest
=
NewParticle;
end
BestCost(it)
=
GlobalBest.Cost;
if
GlobalBest.Sol.IsFeasible
FLAG
=
’ (Feasible)’;
else
FLAG
=
’’;
end
disp([’Iteration
’ num2str(it) ’: Best Cost = ’ num2str(BestCost(it)) FLAG]);
w
=
w*wdamp;
%
Plot Solution
figure(1);
PlotSolution(GlobalBest.Sol,model);
pause(0.01);
end
BestSol
=
GlobalBest;
%%
Results
figure;
plot(BestCost,’LineWidth’,2);
xlabel(’Iteration’);
ylabel(’Best
Cost’);
grid
on;
3 運(yùn)行結(jié)果
4 參考文獻(xiàn)
[1]楊國(guó)俊, 陳健, 孫思蒙,等. 基于遺傳算法的車間布局優(yōu)化研究[J]. 機(jī)械研究與應(yīng)用, 2016(1):3.
[2]閆向彤, 張永鑫, 李佩澤,等. 基于遺傳算法的車間布局優(yōu)化研究[J]. 機(jī)械設(shè)計(jì)與制造工程, 2021, 50(9):5.
博主簡(jiǎn)介:擅長(zhǎng)智能優(yōu)化算法、神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)、信號(hào)處理、元胞自動(dòng)機(jī)、圖像處理、路徑規(guī)劃、無(wú)人機(jī)等多種領(lǐng)域的Matlab仿真,相關(guān)matlab代碼問(wèn)題可私信交流。
部分理論引用網(wǎng)絡(luò)文獻(xiàn),若有侵權(quán)聯(lián)系博主刪除。
-
2023年各省最新電價(jià)一覽!8省中午執(zhí)行谷段電價(jià)! 2023-01-03
-
PPT導(dǎo)出高分辨率圖片的四種方法 2022-09-22
-
全國(guó)消防救援總隊(duì)主官及簡(jiǎn)歷(2023.2) 2023-02-10
-
我們的前輩!歷屆全國(guó)工程勘察設(shè)計(jì)大師完整名單! 2022-11-18
-
關(guān)于某送變電公司“4·22”人身死亡事故的快報(bào) 2022-04-26
