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.
?
?
|