【优化布局】基于粒子群算法求解带出入点的车间布局优化问题附matlab代码
【优化布局】基于粒子群算法求解带出入点的车间布局优化问题附matlab代码
TT_Matlab
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,完整matlab代码或者程序定制加qq1575304183。
1 内容介绍
为降低车间内设备间的物料搬运成本,将粒子群优化算法与经典的系统化布置设计法相结合,以设备间的搬运成本为目标,求解面向车间布局的连续空间优化问题。在问题建模时采用二维向量表述设备的连续空间位置;引入系统化布置设计法对初始粒子群进行优化,在保证初始粒子群有效性的基础上提高了算法的寻优速度和精度;通过对加速系数和惯性系数的设定,提高了粒子群优化算法的寻优质量。通过实例验证了所提方法可以有效提高粒子群算法在连续空间布局问题上的优化性能。
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 运行结果
4 参考文献
[1]杨国俊, 陈健, 孙思蒙,等. 基于遗传算法的车间布局优化研究[J]. 机械研究与应用, 2016(1):3.
[2]闫向彤, 张永鑫, 李佩泽,等. 基于遗传算法的车间布局优化研究[J]. 机械设计与制造工程, 2021, 50(9):5.
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。
-
2023年血糖新标准公布,不是3.9-6.1,快来看看你的血糖正常吗? 2023-02-07
-
2023年各省最新电价一览!8省中午执行谷段电价! 2023-01-03
-
GB 55009-2021《燃气工程项目规范》(含条文说明),2022年1月1日起实施 2021-11-07
-
PPT导出高分辨率图片的四种方法 2022-09-22
-
2023年最新!国家电网27家省级电力公司负责人大盘点 2023-03-14
-
全国消防救援总队主官及简历(2023.2) 2023-02-10
-
盘点 l 中国石油大庆油田现任领导班子 2023-02-28
-
我们的前辈!历届全国工程勘察设计大师完整名单! 2022-11-18
-
关于某送变电公司“4·22”人身死亡事故的快报 2022-04-26
