软件站,自己这么做网站,重庆勘察设计协会网站,微信开发者工具官网下载先做一个声明#xff1a;文章是由我的个人公众号中的推送直接复制粘贴而来#xff0c;因此对智能优化算法感兴趣的朋友#xff0c;可关注我的个人公众号#xff1a;启发式算法讨论。我会不定期在公众号里分享不同的智能优化算法#xff0c;经典的#xff0c;或者是近几年…先做一个声明文章是由我的个人公众号中的推送直接复制粘贴而来因此对智能优化算法感兴趣的朋友可关注我的个人公众号启发式算法讨论。我会不定期在公众号里分享不同的智能优化算法经典的或者是近几年提出的新型智能优化算法并附MATLAB代码。 车间调度问题来自于实际的车间生产过程根据加工过程的不同可以大致分为单机调度(Single machine scheduling problem SMSP)、并行机调度问题(Parallel machines scheduling problem, PMSP)、流水车间调度问题(Flow-shop scheduling problem, FSP)、作业车间调度问题(Job-shop scheduling problem, JSP)和开放车间调度问题(Open-shop scheduling problem, OSP)和。其中流水车间调度问题(Flow-shop scheduling problem, FSP)是实际生产过程中最为常见的调度模型广泛应用于交通运输、物流、车间生产等领域。求解FSP的方法主要分为三类精确算法、启发式算法和智能优化算法。在处理不同规模问题时往往采用不同的算法。例如精确算法由于时间复杂度大仅用来解决规模较小的问题。启发式算法的优势是求解速度很快但求得的解往往较差。因此目前求解流水车间调度问题大多采用智能优化算法。
研究表明接近四分之一的制造、装配、服务或信息处理设施都可以视为流水车间。已经证明当机器数m2时流水车间调度问题是一个强NP-hard问题。由于其在学术与工程应用中的重要性它获得了广泛的关注与研究。FSP一般描述为n个工件在m台机床上加工每个工件包含h道工序每道工序分配到不同的机床上加工。Oij表示第i个工件的第j道工序n个工件的h道工序的加工路径相同即Machine(Oij)Machine(Ouj)了其中i≠u,j1,…,h。Oij被指定在机床Mk(k1,...,m)上加工pijk(i1,..,n,j1,.,h,k1,...,m)表示其加工时间。固定分配机床的FSP问题是一般流水车间调度问题每道工序被唯一指定在一台机床上加工机床不能选择即hmFSP调度任务是确定各个工件的加工次序其目标是最大完成时间最小化。
FSP假设如下
(1)所有工件在零时刻都准备就绪而且工件在机器上的加工时间是确定的
(2)每个工件加工路径相同不允许改变
(3)每个时刻每台机床只能加工一道工序工序不允许中断
(4)一个工件不能同时在不同机床上加工
(5)工序的准备时间忽略不计或者包含在加工时间中机器之间的缓冲区足够大 01 问题介绍 置换流水车间调度问题(Permutation flow-shop scheduling problem, PFSP)是流水车间调度问题(FSP)的简化模型通常描述为n个工件J{1,...,n}在m台机器M{1,...,m)上加工每台机器上各工件的加工顺序相同给定工件i(i∈J)在机器j(j∈M)上的处理时间pij目标是求得一个工件加工顺序使得某个调度目标达到最优常用的调度目标是最大完工时间Cmax最小或总流经时间最小。
PFSP的假设如下
(1)所有工件在零时刻都准备就绪而且工件在机器上的加工时间是确定的
(2)每个工件加工路径相同不允许改变
(3)每个时刻每台机床只能加工一道工序工序不允许中断
(4)一个工件不能同时在不同机床上加工
(5)工序的准备时间忽略不计或者包含在加工时间中
(6)不允许作业抢占即在每台机器上工件一旦开始加工则不能中断工件加工顺序在所有机器上一致。 可以发现PFSP和FSP的本质区别在于PFSP要求每个工件在每台机器上的加工顺序相同如图1所示。这样一来可知对于n工件、m台机器而言一般流水车间调度问题(FSP)的解空间规模为(n!)^m而置换流水车间调度问题(PFSP)的解空间规模为n!。尽管PFSP的解空间规模远小于FSP但已证明m≥3的PFSP即为NP-hard问题。 图1 11工件×5机器的PFSP甘特图举例所有工件Ji在每台机器上的加工顺序一致 02 问题模型 与往期推送一样公众号里不方便编辑数学公式。因此这部分内容做成图片导入。图片截自一篇博士学位论文
[1]刘延风. 置换流水车间调度问题的几种智能算法[D].西安电子科技大学,2013. 03 编码解码 PFSP是要解决一组工件的加工排序问题即它是一种组合优化问题属于离散优化。而蜣螂优化(DBO)算法本身是针对连续优化问题而提出的因此这就需要设计候选解的编码与解码方式。
Li等提出的最大排序值法(Largest rank value, LRV)是将连续值映射成离散排列常用的方法之一。因此本采用LRV规则将DBO种群中表示候选解个体的一组连续的优先值映射为离散的工件排序如图2所示LRV将代表种群个体的一组连续值按降序排列生成一组工件排序。(参考文献[2] LI X, YIN M. An opposition-based differential evolution algorithm for permutation flow shop scheduling based on diversity measure [J]. Advances in Engineering Software, 2013, 55(8): 10-31.) 图2 最大排序值法的表示方法 04 DBO求解PFSP的流程 关于DBO算法的介绍可翻看之前的推送这里不再赘述。 蜣螂优化(DBO)算法(含MATLAB代码)
蜣螂优化(DBO)算法的5种最新变体(含MATLAB代码) 图3给出了DBO求解PFSP的计算流程 图3 DBO求解PFSP流程图
图3中iter代表当前迭代次数T代表最大迭代次数。
05 数值实验
对DBO求解PFSP的效果进行简单测试调度问题算例选用Car(8个)和Rec(21个)。最大迭代次数T设置为2000种群规模NP设为60。下面展示的结果都是算法随机运行一次得到的结果。
首先以Car2(13工件×4机器)为例图4绘制了种群每代的最优适宜度收敛曲线和平均适宜度收敛曲线 图4 DBO对于Car2的收敛曲线
图5绘制了调度结果的甘特图 图5 DBO对于Car2的甘特图 其次以Rec11(20工件×10机器为例)展示DBO随机运行一次的求解结果如图6和图7所示。 图6 DBO对于Rec11的收敛曲线 图7 DBO对于Rec11的甘特图
最后以Rec41(75工件×20机器为例)展示DBO随机运行一次的求解结果如图8和图9所示。 图8 DBO对于Rec41的收敛曲线 图9 DBO对于Rec41的甘特图 06 MATLAB代码 蜣螂优化(DBO)算法求解置换流水车间调度问题(Permutation flow-shop scheduling problem, PFSP)的MATLAB代码其中main.m是主函数直接运行即可DBO.m是算法的代码color_selection用于获得甘特图的颜色配置gantt_chart.m绘制甘特图objective.m是目标函数即计算Makespansorting.m根据调度方案计算每台机器任意时刻的加工信息(开始时间、结束时间、工件号、机器号), 用于绘制甘特图调度算例包括Car(8个)和Rec(21个)。
输出结果包括Makespan、工件排序、计算时间、最优适宜度收敛曲线、平均适宜度收敛曲线、甘特图。
main.m主函数如下
%%% 蜣螂优化(DBO)算法求解置换流水车间调度问题(PFSP) %%%
%%% 算法参考文献Xue J, Shen B. Dung beetle optimizer: a new meta-heuristic algorithm %%%
%%% for global optimization[J]. The Journal of Supercomputing, 2022: 1-32. %%%
%% By 后会无期 %%
%% 2023.10.16 %%
%% 微信公众号启发式算法讨论
%% 严格按照DBO的原始参考文献编PFSP测试集采用Car与Rec算例(自行替换)clear
clc%% 数据加载
% 采用Car或Rec测试集, 自行选择测试集和实例
% Car测试集实例: Car1, Car2, Car3, Car4, Car5, Car6, Car7, Car8
% Rec测试集实例: Rec01, Rec03, Rec05, Rec07, Rec09, Rec11, ... ,Rec41
jobInforeadmatrix(Rec.xlsx,Sheet,Rec41); % jobInfo: 加工时间信息
jobNumsize(jobInfo,1); % jobNum: 工件数量
machineNumsize(jobInfo,2); % machineNum: 机器数量%% 算法参数种群数量迭代次数
NP60; % 种群规模, 注意: DBO的种群规模需要设置为30的倍数
MaxIt2000; % 最大迭代次数tic % 计时开始
[Best_score,Best_pos,curve]DBO(machineNum,jobNum,jobInfo,NP,MaxIt);
toc % 计时结束disp([Number of jobs: ,num2str(jobNum)]); % 显示工件数
disp([Number of machines: ,num2str(machineNum)]); % 显示机器数
disp([The optimal solution is: ,num2str(Best_pos)]); % 显示最优解, 即全局最优的工件排序
disp([The best fitness is: ,num2str(Best_score)]); % 显示最优值, 即最小化最大完工时间%% 绘制迭代曲线
f1figure(1);
% 设置图片在屏幕上的位置: 显示器左下角的右侧280像素和上方400像素处
f1.Position(1:2)[280 400];
T1:1:MaxIt;
plot(T,curve.min,r-,LineWidth, 2);
hold on
plot(T,curve.avg,b-,LineWidth, 2);
grid on;
legend(Best fitness,Average fitness);
title(Convergence curves of Makespan);
xlabel(Iterations);
ylabel(Makespan);%% 绘制甘特图
% machine_table包含每台机器任意时刻的加工信息开始时间结束时间工件号机器号
machine_tablesorting(Best_pos,machineNum,jobNum,jobInfo); % 调用sorting子函数, 获得machine_table, 用于画甘特图f2figure(2);
% 设置图片在屏幕上的位置: 显示器左下角的右侧850像素和上方400像素处
f2.Position(1:2)[850 400];
gantt_chart(machine_table); % 调用gantt_chart子函数获得配色方案, 绘制出甘特图
title(DBO for PFSP);
xlabel(Time);
ylabel(Machine number);
另外选择了九个求解PFSP的经典算法和几个近几年的高引算法。对应的MATLAB代码链接如下
遗传算法(GA)求解PFSP 关注公众号里面有链接 差分进化(DE)求解PFSP关注公众号里面有链接粒子群优化(PSO)求解PFSP关注公众号里面有链接灰狼优化(GWO)求解PFSP关注公众号里面有链接鲸鱼优化算法(WOA)求解PFSP关注公众号里面有链接哈里斯鹰优化(HHO)求解PFSP关注公众号里面有链接麻雀搜索算法(SSA)求解PFSP关注公众号里面有链接非洲秃鹫优化算法(AVOA)求解PFSP关注公众号里面有链接蜣螂优化(DBO)求解PFSP关注公众号里面有链接星鸦优化算法(NOA)求解PFSP关注公众号里面有链接以上十种智能优化算法(GA、DE、PSO、GWO、WOA、HHO、SSA、AVOA、DBO、NOA)求解PFSP的全家桶关注公众号里面有链接
公众号启发式算法讨论 可通过下方链接下载代码清单在里面寻找需要的算法代码然后去对应的链接获取。清单会同步更新一旦有新的代码就可以在清单里找到。清单里面有部分代码是开源获取的。可随时免费下载。
链接https://pan.baidu.com/s/1n2vpbwuhpA8oyXSJGsAsmA
提取码8023
最近也更新了一些代码但没时间一一做成推送可以自己到代码清单中去寻找。里面有一些代码是开源的可以直接下载。