蜣螂优化(DBO)求解置换流水车间调度问题(PFSP)

先做一个声明:文章是由我的个人公众号中的推送直接复制粘贴而来,因此对智能优化算法感兴趣的朋友,可关注我的个人公众号: 启发式算法讨论 。我会不定期在公众号里分享不同的智能优化算法,经典的,或者是近几年提出的新型智能优化算法,并附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的方法主要分为三类:精确算法、启发式算法和智能优化算法。在处理不同规模问题时,往往采用不同的算法。例如精确算法由于时间复杂度大,仅用来解决规模较小的问题。启发式算法的优势是求解速度很快,但求得的解往往较差。因此,目前求解流水车间调度问题大多采用智能优化算法。

研究表明接近四分之一的制造、装配、服务或信息处理设施都可以视为流水车间。已经证明,当机器数m >2时,流水车间调度问题是一个强NP -hard问题。由于其在学术与工程应用中的重要性,它获得了广泛的关注与研究。FSP一般描述为:n 个工件在m 台机床上加工,每个工件包含h 道工序,每道工序分配到不同的机床上加工。O ij 表示第i 个工件的第j 道工序,n 个工件的h 道工序的加工路径相同,即Machine(O ij )=Machine(O uj )了,其中iu ,j =1,...,hO ij 被指定在机床M k (k =1,...,m )上加工,p ijk (i =1,..,n ,j =1,.,h ,k =1,...,m )表示其加工时间。固定分配机床的FSP问题是一般流水车间调度问题,每道工序被唯一指定在一台机床上加工,机床不能选择,即h =m,FSP调度任务是确定各个工件的加工次序,其目标是最大完成时间最小化。

FSP假设如下:

(1)所有工件在零时刻都准备就绪,而且工件在机器上的加工时间是确定的;

(2)每个工件加工路径相同,不允许改变;

(3)每个时刻,每台机床只能加工一道工序,工序不允许中断;

(4)一个工件不能同时在不同机床上加工;

(5)工序的准备时间忽略不计,或者包含在加工时间中,机器之间的缓冲区足够大

01

问题介绍

置换流水车间调度问题(Permutation flow-shop scheduling problem, PFSP)是流水车间调度问题(FSP)的简化模型,通常描述为n 个工件J ={1,...,n }在m台机器M={1,...,m )上加工,每台机器上各工件的加工顺序相同,给定工件i (iJ )在机器j (jM )上的处理时间p ij ,目标是求得一个工件加工顺序使得某个调度目标达到最优,常用的调度目标是最大完工时间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甘特图举例,所有工件J i在每台机器上的加工顺序一致

02

问题模型

与往期推送一样,公众号里不方便编辑数学公式。因此,这部分内容做成图片导入。图片截自一篇博士学位论文:

1\]刘延风. 置换流水车间调度问题的几种智能算法\[D\].西安电子科技大学,2013. ![图片](https://file.jishuzhan.net/article/1716839420239286274/c1213d5c6ce52f4f850c9150d373f6ba.webp) ## 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.) ![图片](https://file.jishuzhan.net/article/1716839420239286274/a3309faa8a856e84a0cadedf08c8ee32.webp) 图2 最大排序值法的表示方法 ## 04 DBO求解PFSP的流程 关于DBO算法的介绍,可翻看之前的推送,这里不再赘述。 [蜣螂优化(DBO)算法(含MATLAB代码)](http://mp.weixin.qq.com/s?__biz=Mzg2Mzg4NTE4Mg==&mid=2247483947&idx=1&sn=3386ff0f60162be52b4b3ecd90b38f0b&chksm=ce70803af907092c260e2cfd2b41f1c77a1eedcd0951b8467f3e955a56011cd580fba4651a18&scene=21#wechat_redirect "蜣螂优化(DBO)算法(含MATLAB代码)") [蜣螂优化(DBO)算法的5种最新变体(含MATLAB代码)](http://mp.weixin.qq.com/s?__biz=Mzg2Mzg4NTE4Mg==&mid=2247484806&idx=1&sn=dffb5428200a9ba6b6a5b1828d1c3b94&chksm=ce708797f9070e812f81a78f96fb25929b6eab92ffb6962aeab2f505d400de8fb87b5d77e532&scene=21#wechat_redirect "蜣螂优化(DBO)算法的5种最新变体(含MATLAB代码)") 图3给出了DBO求解PFSP的计算流程: ![图片](https://file.jishuzhan.net/article/1716839420239286274/1c954bc367458bc4319661eddc1dced4.webp) 图3 DBO求解PFSP流程图 图3中,iter代表当前迭代次数,*T*代表最大迭代次数。 ## 05 数值实验 对DBO求解PFSP的效果进行简单测试,调度问题算例选用Car(8个)和Rec(21个)。最大迭代次数*T* 设置为2000,种群规模*NP*设为60。下面展示的结果都是算法随机运行一次得到的结果。 首先,以Car2(13工件×4机器)为例,图4绘制了种群每代的最优适宜度收敛曲线和平均适宜度收敛曲线: ![图片](https://file.jishuzhan.net/article/1716839420239286274/cc34b8f2b2908288c09877f3cf9cbb4e.webp) 图4 DBO对于Car2的收敛曲线 图5绘制了调度结果的甘特图: ![图片](https://file.jishuzhan.net/article/1716839420239286274/7b81b8626d0bda695a11923922860265.webp) 图5 DBO对于Car2的甘特图 其次,以Rec11(20工件×10机器为例),展示DBO随机运行一次的求解结果,如图6和图7所示。 ![图片](https://file.jishuzhan.net/article/1716839420239286274/331c9092d2f7d5aa8151c8baa211728d.webp) 图6 DBO对于Rec11的收敛曲线 ![图片](https://file.jishuzhan.net/article/1716839420239286274/04b854e18944df7ee69207d7e85584e5.webp) 图7 DBO对于Rec11的甘特图 最后,以Rec41(75工件×20机器为例),展示DBO随机运行一次的求解结果,如图8和图9所示。 ![图片](https://file.jishuzhan.net/article/1716839420239286274/b628875e68c18f9c4de2abd8d223881f.webp) 图8 DBO对于Rec41的收敛曲线 ![图片](https://file.jishuzhan.net/article/1716839420239286274/a4d6cc80f0a8ecd28754627bf221c0c2.webp) 图9 DBO对于Rec41的甘特图 ## 06 MATLAB代码 蜣螂优化(DBO)算法求解置换流水车间调度问题(Permutation flow-shop scheduling problem, PFSP)的MATLAB代码,其中:main.m是主函数,直接运行即可;DBO.m是算法的代码;color_selection用于获得甘特图的颜色配置;gantt_chart.m绘制甘特图;objective.m是目标函数,即计算Makespan;sorting.m根据调度方案计算每台机器任意时刻的加工信息(开始时间、结束时间、工件号、机器号), 用于绘制甘特图;调度算例包括Car(8个)和Rec(21个)。 输出结果包括Makespan、工件排序、计算时间、最优适宜度收敛曲线、平均适宜度收敛曲线、甘特图。 main.m主函数如下: ```Matlab %%% 蜣螂优化(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 jobInfo=readmatrix('Rec.xlsx','Sheet','Rec41'); % jobInfo: 加工时间信息 jobNum=size(jobInfo,1); % jobNum: 工件数量 machineNum=size(jobInfo,2); % machineNum: 机器数量 %% 算法参数:种群数量,迭代次数 NP=60; % 种群规模, 注意: DBO的种群规模需要设置为30的倍数 MaxIt=2000; % 最大迭代次数 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)]); % 显示最优值, 即最小化最大完工时间 %% 绘制迭代曲线 f1=figure(1); % 设置图片在屏幕上的位置: 显示器左下角的右侧280像素和上方400像素处 f1.Position(1:2)=[280 400]; T=1: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_table=sorting(Best_pos,machineNum,jobNum,jobInfo); % 调用"sorting"子函数, 获得machine_table, 用于画甘特图 f2=figure(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** (最近也更新了一些代码,但没时间一一做成推送,可以自己到代码清单中去寻找。里面有一些代码是开源的,可以直接下载。)

相关推荐
圣保罗的大教堂28 分钟前
《算法笔记》9.8小节——图算法专题->哈夫曼树 问题 E: 合并果子-NOIP2004TGT2
算法
xy_optics1 小时前
用matlab探索卷积神经网络(Convolutional Neural Networks)-3
开发语言·matlab·cnn
蔗理苦1 小时前
2025-04-05 吴恩达机器学习5——逻辑回归(2):过拟合与正则化
人工智能·python·机器学习·逻辑回归
独好紫罗兰1 小时前
洛谷题单3-P1720 月落乌啼算钱(斐波那契数列)-python-流程图重构
开发语言·算法·leetcode
程序猿阿伟1 小时前
《SQL赋能人工智能:解锁特征工程的隐秘力量》
数据库·人工智能·sql
啥都鼓捣的小yao2 小时前
Python解决“数字插入”问题
python·算法
csssnxy2 小时前
叁仟数智指路机器人是否支持远程监控和管理?
大数据·人工智能
车斗2 小时前
win10 笔记本电脑安装 pytorch+cuda+gpu 大模型开发环境过程记录
人工智能·pytorch·电脑
weixin_428498492 小时前
使用MATIO库写入MATLAB结构体(struct)数据的示例程序
matlab
KY_chenzhao2 小时前
数据驱动防灾:AI 大模型在地质灾害应急决策中的关键作用。基于DeepSeek/ChatGPT的AI智能体开发
人工智能·chatgpt·智能体·deepseek·本地化部署