【优化调度】基于鸟群算法求解车间调度问题Matlab源码

2021/10/22 20:40:59

本文主要是介绍【优化调度】基于鸟群算法求解车间调度问题Matlab源码,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1 简介

柔性作业车间调度问题是生产调度领域中非常重要的一类带约束优化问题.根据其求解特性,提出一种基于鸟群算法求解以最小化最大完工时间为目标的柔性作业车间调度问题的方法

2 部分代码

clc;clear
%% 下载数据
% 加工数据包括加工时间,加工机器,机器数,各机器权重,工件数,各工件对应的工序数
load data operation_time operation_machine num_machine machine_weight num_job num_op

%% 基本参数
MAXGEN=200;             % 最大迭代次数
sizepop=201;            % 种群规模
e=0.5;                  % 目标值权重
N_size=30;              % 邻域解数量
S_size=15;              % 共享解数量
G=5;                    % 巡回次数
G1=20;                  % 竞争机制1参数
G2=10;                  % 竞争机制2参数
trace=zeros(2,MAXGEN);
chrom_best=[];

%% ===========================种群初始化============================
total_op_num=sum(num_op);
chroms=initialization(num_op,num_job,total_op_num,sizepop,operation_machine,operation_time);
[Z,~,~,~,~]=fitness(chroms,num_machine,e,num_job,num_op);
% 将最好的解划分为领飞鸟
[Z_leader,ind]=min(Z);
leader=chroms(ind,:); 
% 从chroms中移出领飞鸟,然后划分左右两个跟飞鸟种群
chroms(ind,:)=[];
Z(ind)=[];
sp=(sizepop-1)/2;
lefts=chroms(1:sp,:);
Z_left=Z(1:sp);
rights=chroms(sp+1:end,:);
Z_right=Z(sp+1:end);

%% ============================迭代过程=============================
for gen=1:MAXGEN
   fprintf('当前迭代次数:'),disp(gen)
   %% 巡回阶段

   %% 记录相关数据
   % 记录每代的最优适应度与平均适应度
   Z=[Z_leader,Z_left,Z_right];
  [val,ind]=min(Z);
   trace(1,gen)=val;
   trace(2,gen)=mean(Z);
   % 更新全局最优适应度
   if gen==1 || MinVal>trace(1,gen)
       MinVal=trace(1,gen);
   end
end

%% ============================输出结果=============================
%% 输出最优适应度
fprintf('最优适应度:'),disp(MinVal)
%% 绘制最优适应度与平均适应度的迭代曲线图
figure(1)
plot(trace(1,:));
hold on;
plot(trace(2,:),'-.');grid;
legend('解的变化','种群均值的变化');
img =gcf;  %获取当前画图的句柄
print(img, '-dpng', '-r600', './img.png')         %即可得到对应格式和期望dpi的图像
%% 绘制全局最优解的甘特图
[Z,~,~,machine_time,Pvals]=fitness(leader,num_machine,e,num_job,num_op);
Pval1=Pvals{1,1};
figure(2);
for i=1:total_op_num
   mText=leader(total_op_num+i);
   b=leader(i);
   x1=Pval1(1,i);
   x2=Pval1(2,i); 
   y1=mText-0.2;
   y2=mText;
   hold on; 
   fill([x1,x2,x2,x1],[y1,y1,y2,y2],[1-1/b,1/b,b/num_job]);
   text((x1+x2)/2,mText-0.1,num2str(b));
end
img =gcf;  %获取当前画图的句柄
print(img, '-dpng', '-r600', './img1.png')         %即可得到对应格式和期望dpi的图像

3 仿真结果

4 参考文献

[1]屈迟文等. "求解柔性作业车间调度问题的鸟群算法." 计算机工程与应用 v.54;No.912.17(2018):254-262.

 



这篇关于【优化调度】基于鸟群算法求解车间调度问题Matlab源码的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程