首页 > 行业资讯 > 【优化布局】基于粒子群算法求解带出入点的车间布局优化问题附matlab代码

【优化布局】基于粒子群算法求解带出入点的车间布局优化问题附matlab代码

时间:2022-07-25 来源: 浏览:

【优化布局】基于粒子群算法求解带出入点的车间布局优化问题附matlab代码

天天Matlab 天天Matlab
天天Matlab

TT_Matlab

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,完整matlab代码或者程序定制加qq1575304183。

收录于合集 #智能优化算法及应用 494个

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代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

版权:如无特殊注明,文章转载自网络,侵权请联系cnmhg168#163.com删除!文件均为网友上传,仅供研究和学习使用,务必24小时内删除。
相关推荐