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

news2024/12/26 23:04:50

先做一个声明:文章是由我的个人公众号中的推送直接复制粘贴而来,因此对智能优化算法感兴趣的朋友,可关注我的个人公众号:启发式算法讨论。我会不定期在公众号里分享不同的智能优化算法,经典的,或者是近几年提出的新型智能优化算法,并附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.coloradmin.cn/o/1128932.html

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

相关文章

gin 框架出现runtime error: index out of range [0] with length 0

之前是这样的: category : c.Request.Form["type"][0] 加上这一句就变成了 fmt.Println(c.Request.FormFile("type")) category : c.Request.Form["type"][0]

你所瞧不上的东西正以另外一种方式kill you

简单的例子就是: 360se & 360ee的份额比你想象中的大. 360se浏览器,安全浏览器 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.196 Safari/537.36 360ee浏览器,极速浏览器 n…

摄像头工程师说 Camera-如何控制摄像头的输出尺寸(分辨率)

计算机视觉 Camera-如何控制摄像头的输出尺寸(分辨率) 摄像头工程师说 Camera-如何控制摄像头的输出尺寸(分辨率)windowingCroppingSkip/SubsampleScaleBinning总结 摄像头工程师说 Camera-如何控制摄像头的输出尺寸(分…

Google Chrome的新“IP保护”功能将隐藏用户的IP地址

导语:在保护用户隐私方面,Google Chrome正在测试一项名为“IP保护”的新功能。通过使用代理服务器掩盖用户的IP地址,这项功能能够增强用户的隐私保护。在意识到IP地址可能被用于秘密追踪后,Google希望在确保用户隐私的同时&#x…

《 汇编语言的系统学习》一、编程语言、机器语言与汇编语言

目录 《 汇编语言的系统学习》1、编程语言1.1 语言1.2 程序 2 编程语言分类2.1 机器语言2.2 汇编语言2.3 高级程序语言2.3.1 编译型2.3.1 解释型 《 汇编语言的系统学习》 1、编程语言 1.1 语言 定义:一种系统的,人与人之间通过声音、符号等进行交流的…

Qwt-QwtPlot类详解

1.概述 QwtPlot类是Qwt库中最重要的类之一,用于创建和管理绘图窗口。 QwtPlot类具有以下主要功能: 提供一个绘图窗口,可以在其中绘制简单或复杂的二维数据图。支持多种类型的图表,包括曲线图、柱状图、散点图等。能够自定义图表…

第一章: LangChain 生成与加载知识库并根据匹配内容回答问题

LangChain——让文本大模型更加智能化系列文章目录 第一章 langchain生成与加载向量库并根据匹配内容回答问题 文章目录 LangChain——让文本大模型更加智能化系列文章目录前言文章简介一、使用步骤1.引入库2.LLM加载3.数据加载4.数据切分与转换向量5.构建prompt5.查询知识库并…

进程的优先级与LAMP项目部署实战

一、进程的优先级(扩展) 1、什么是进程的优先级 Linux是一个多用户、多任务的操作系统,系统中通常运行着非常多的进程。哪些进程先运行,哪些进程后运行,就由进程优先级来控制 思考:什么时候需要用到进程…

线性表操作的实现--顺序表

本文参考朱战力老师的数据结构与算法--使用C语言一书 文章目录 前言 一、线性表是什么? 二、具体实现 1.顺序表的定义 2.初始化ListInitiate(L) 3.求当前元素个数ListLength(L) 4.插入元素ListInsert(L&…

js 导出文字到txt文件

简介: js 导出文字到txt文件 效果展示: 代码示例: /*** 导出文字到txt文件* param filename* param text*/ function exportToTxt(filename, text) {if (filename undefined) {filename "example-";}if (text undefined) {tex…

【IDEA配置】IDEA配置

参考视频:【idea必知必会】优化设置 告别卡顿 1. 显示内存 右击底下空白区域,出现memory indicator内存指示器,点击勾选即可显示。有的是在Settings->Appearance->Window Options里,如图所示: 2. 内存设置 …

傻瓜式调用阿里云的接口进行三要素(姓名、手机号和身份证号)校验

傻瓜式调用阿里云的接口进行三要素(姓名、手机号和身份证号)校验 一、准备1、购买阿里云的三要素核验套餐包2、申请开通三要素一致性核验3、查看AccessKey 二、调用三要素核验接口1、查看接口文档2、查看阿里云的调用示例3、阿里云完整示例代码4、改造后…

高级深入--day39

(实战项目三)新浪网分类资讯爬虫 爬取新浪网导航页所有下所有大类、小类、小类里的子链接,以及子链接页面的新闻内容。 效果演示图: items.py import scrapy import sys reload(sys) sys.setdefaultencoding("utf-8")class SinaItem(scrapy.I…

STM32Cube高效开发教程<基础篇>(七)----基础定时器

声明:本人水平有限,博客可能存在部分错误的地方,请广大读者谅解并向本人反馈错误。    本专栏博客参考《STM32Cube高效开发教程(基础篇)》,有意向的读者可以购买正版书籍辅助学习,本书籍由王维波老师、鄢志丹老师、王钊老师倾力打造,书籍内容干货满满。 一、 概述 STM…

new Vue() 发生了什么?

目录 前言 用法 代码和效果图 效果图 理解 高质量的使用 前言 Vue.js是一个流行的JavaScript前端框架,用于构建单页面应用(SPA)和用户界面。当我们使用new Vue()来创建一个Vue实例时,Vue会执行一系列的初始化过程&#xff0…

Tomcat 和 HTTP 协议

目 录 HTTP 协议HTTP 是什么理解 HTTP 协议的工作过程抓包结果HTTP请求HTTP响应 HTTP 请求 (Request)认识 URL认识 "方法" (method)认识请求 "报头"(header)认识请求 "正文" (body) HTTP 响应认识 "状态码" (st…

NFS性能瓶颈分析

前言 atop – run it with -d option or press d to toggle the disk stats view. iostat – try it with the -xm 2 options for extended statistics, in megabytes, and in two-second intervals. iotop – top-like I/O monitor. Try it with the -oPa options to show the…

Redis数据类型——list类型数据的扩展操作

1.list阻塞式数据获取 2.list类型数据业务场景

基于蜻蜓算法的无人机航迹规划-附代码

基于蜻蜓算法的无人机航迹规划 文章目录 基于蜻蜓算法的无人机航迹规划1.蜻蜓搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要:本文主要介绍利用蜻蜓算法来优化无人机航迹规划。 1.蜻蜓搜索算法 …

华盛顿特区选举委员会:黑客可能已侵入整个选民名册

导语 近日,华盛顿特区选举委员会(DCBOE)传来了一条令人担忧的消息:黑客可能已经侵入了整个选民名册。这一事件引发了公众的广泛关注和担忧。本文将为大家详细介绍这一事件的经过以及可能带来的后果,并探讨选民数据的保…