蜣螂优化(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道工序,每道工序分配到不同的机床上加工。Oij表示第i个工件的第j道工序,n个工件的h道工序的加工路径相同,即Machine(Oij)=Machine(Ouj)了,其中iu,j=1,…,hOij被指定在机床Mk(k=1,...,m)上加工,pijk(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)上的处理时间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是目标函数,即计算Makespan;sorting.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
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

(最近也更新了一些代码,但没时间一一做成推送,可以自己到代码清单中去寻找。里面有一些代码是开源的,可以直接下载。)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/117130.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SpringBoot的时间管理系统

基于SpringBoot的时间管理系统的设计与实现~ 开发语言:Java数据库:MySQL技术:SpringBootMyBatis工具:IDEA/Ecilpse、Navicat、Maven 系统展示 登录界面 管理员界面 用户界面 摘要 基于Spring Boot的时间管理系统是一款功能丰富…

Unity之ShaderGraph如何实现靠近显示溶解效果

前言 今天我们来实现一个我再B站看到的一个使用LeapMotion实现的用手部触摸就可以显示的溶解效果。 效果如下图所示: 主要节点 Position:提供对网格顶点或片段的Position 的访问,具体取决于节点所属图形部分的有效着色器阶段。使用Space下拉参数选择输出值的坐标空间。 …

ArcGIS笔记10_如何创建渔网?

本文目录 前言Step 1 确定渔网的精度单位Step 2 有底图时创建渔网的操作 前言 ArcGIS中的渔网是一个很好用的工具,它可以创建出规规整整的小格子,每个小格子都对应一个标注点,可以将原本散乱的数据规整化,如下图: Ste…

前沿重器[36] | ACL23-基于检索的大语言模型-报告阅读

前沿重器 栏目主要给大家分享各种大厂、顶会的论文和分享,从中抽取关键精华的部分和大家分享,和大家一起把握前沿技术。具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有。(算起来,专项启动已经…

Nginx 防盗链

nginx防盗链问题 盗链: 就是a网站有一张照片,b网站引用了a网站的照片 。 防盗链: a网站通过设置禁止b网站引用a网站的照片。 nginx防止网站资源被盗用模块 ngx_http_referer_module 如何区分哪些是不正常的用户? HTTP Referer…

【Java 进阶篇】Java Tomcat 入门指南

Java Tomcat(通常简称 Tomcat)是一个流行的开源Servlet容器,用于托管Java Web应用程序。它是Apache软件基金会的一部分,提供了一个稳定、可靠的环境来运行Java Servlets和JavaServer Pages(JSP)。本篇博客将…

FPGA时序分析与约束(6)——综合的基础知识

在使用时序约束的设计过程中,综合(synthesis)是第一步。 一、综合的解释 在电子设计中,综合是指完成特定功能的门级网表的实现。除了特定功能,综合的过程可能还要满足某种其他要求,如功率、操作频率等。 有…

【WinForm详细教程一】WinForm中的窗体、Label、TextBox及Button控件、RadioButton和CheckBox、ListBox

文章目录 1.WinForm文件结构2. 窗体的常用属性、方法与事件2.1 常用属性(可直接在属性中设置)2.2 常用方法2.3 常用事件 3.Label、TextBox及Button控件4.RadioButton和CheckBox5.ListBox(列表框) 1.WinForm文件结构 .sln文件 &am…

zabbix6.0 部署配置

架构 先简单介绍zabbix监控的最主要的两个组件: zabbix server zabbix agent server 用来部署 web console以及相关的数据存储,所以需要配合一些数据库来保存数据,比如mysql,pgsql, 又有前端的页面所以还需要配置 nginx 和getway 所以 serve…

Unity 文字显示动画(2)

针对第一版的优化,自动适配文字大小,TextMeshPro可以拓展各种语言。第一版字母类语言效果更好。 using System.Collections; using System.Collections.Generic; using TMPro; using UnityEngine; using UnityEngine.UI;public partial class TextBeat…

基于C#使用winform技术的游戏平台的实现【C#课程设计】

基于C#使用winform技术的游戏平台的实现【C#课程设计】 说明项目结构项目运行截图及实现的功能 部分代码一些说明(个人觉得一些难点的说明)一、ListView ,ImageList 的综合使用二、图片上传以及picturebox 图片的动态替换三、图表插件的使用四、SQL工具类封装五、高…

Mybatis 简介(一)

这里使用的是3.5.11版本 MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(P…

【proteus】8086 写一个汇编程序并调试

参考书籍:微机原理与接口技术——基于8086和Proteus仿真(第3版)p103-105,p119-122. 参考程序是p70,例4-1 在上一篇的基础上: 创建项目和汇编文件 写一个汇编程序并编译 双击8086的元件图: …

ant design vue Message 用法以及内容为 html片段情况

ant design vue 的 Message 用法 全局展示操作反馈信息 何时使用 # 可提供成功、警告和错误等反馈信息。顶部居中显示并自动消失,是一种不打断用户操作的轻量级提示方式。 全局配置: // main.ts// 进行全局配置 message.config({top: 0.7rem,//高度…

05 MIT线性代数-转置,置换,向量空间Transposes, permutations, spaces

1. Permutations P: execute row exchanges becomes PA LU for any invertible A Permutations P identity matrix with reordered rows mn (n-1) ... (3) (2) (1) counts recordings, counts all nxn permuations 对于nxn矩阵存在着n!个置换矩阵 , 2. Transpose: 2.…

【数据结构】常见复杂度习题详解 ------ 习题篇

文章目录 📋前言一. ⛳️前篇回顾二. ⛳️常见时间复杂度计算举例1️⃣实例一2️⃣实例二3️⃣实例三4️⃣实例四5️⃣实例五6️⃣实例六7️⃣实例七8️⃣实例八 三. ⛳️常见空间复杂度计算举例1️⃣实例一2️⃣实例二3️⃣实例三 四. ⛳️总结 📋前言 …

高性能计算与多模态处理的探索之旅:英伟达GH200性能优化与GPT-4V的算力加速未来

★多模态大模型;GPU算力;LLMS;LLM;LMM;GPT-4V;GH200;图像识别;目标定位;图像描述;视觉问答;视觉对话;英伟达;Nvidia&#…

交换机控制在同一个网段内的终端,用hybrid接口实现不同的IP通和不通。

实验效果:pc1和pc2不能通,但pc1和pc2分别可以和pc3通。 通过这个实验可以彻底掌握数据包在交换机上的进去的类型状态。 sw1配置: [sw1]dis current-configuration sysname sw1 vlan batch 10 20 100 interface GigabitEthernet0/0/1 port h…

【Redis安装】Ubuntu和Centos

此处安装的是 Redis5 在 Ubuntu 系统上 切换到 root 用户下,su 命令切换使用 apt 可以搜索 redis 相关软件包 apt search redis使用 apt 命令安装 redis apt install redis手动修改配置文件 redis.conf cd /etc/redis/ vim redis.conf修改以下两处 重启服务器 …

chatGPT结构及商业级相似模型应用调研

GPT前言 说明 ChatGPT这项技术的历史可以追溯到2018年,当时由Facebook实验室的团队开发出该技术,以开发聊天机器人为目的。随后,ChatGPT在2019年由来自谷歌的DeepMind团队在国际会议ICLR上发表了论文,其中提出了ChatGPT的技术框架…