FJSP,袋鼠群优化(Kangaroo Swarm Optimization ,KSO)算法求解柔性作业车间调度问题(FJSP),提供MATLAB代码,袋鼠群优化算法求解柔性作业车间调度问题,MATLAB代码实现与解析

马肤

温馨提示:这篇文章已超过388天没有更新,请注意相关的内容是否还可用!

摘要:本研究采用袋鼠群优化算法(Kangaroo Swarm Optimization,KSO)来解决柔性作业车间调度问题(FJSP)。通过MATLAB编程实现,该算法能够有效优化车间调度,提高生产效率。袋鼠群优化算法以其独特的群体智能行为模拟,展现出良好的求解性能。本研究为柔性作业车间的调度问题提供了新的解决方案。

一、柔性作业车间调度问题

柔性作业车间调度问题(Flexible Job Shop Scheduling Problem,FJSP),是一种经典的组合优化问题。在FJSP问题中,有多个作业需要在多个机器上进行加工,每个作业由一系列工序组成,每个工序需要在特定的机器上完成。同时,每个机器一次只能处理一个工序,且每个工序的处理时间可能不同。

FJSP问题的目标是找到一个最优的作业调度方案,使得所有作业的完成时间最小化。这个问题的难点在于需要考虑到多个作业、多个机器和多个工序之间的复杂关系,并且需要在有限的时间内找到最优解。

解决FJSP问题的方法包括启发式算法、精确算法和元启发式算法等。启发式算法通过一系列规则和策略来生成调度方案,常见的方法有遗传算法、模拟退火算法和禁忌搜索算法等。精确算法则通过穷举搜索或者动态规划等方法来找到最优解,但在实际应用中可能面临计算复杂度过高的问题。元启发式算法则结合了多种启发式算法和精确算法的优点,通过组合不同的方法来求解FJSP问题。

FJSP问题的难点主要体现在以下几个方面:

  1. 组合爆炸:FJSP问题中,每个工件都有多个工序需要完成,而每个工序都有多个可选的机器可以执行。这导致了组爆炸的问题,可能的调度方案数量非常庞,难以穷举所有可能性。

  2. 优化目标多样:FJSP问题通常有多个优化目标,如最小化总加权完成时间、最小化总延迟时间等。这些目标之间可能存在冲突,使找到一个全局最优解变得困难。

  3. 资源约束:FJSP问题中,每个机器在同一时间只能执行一个工序,且每个工序需要一定的时间和资源。这些资源约束增加了问题的复杂性,需要在满足约束条件的前提下进行调度。

  4. 实时性要求:在实际生产中,FJSP问题通常需要考虑实时性要求,即要求在有限的时间内生成一个可行的调度方案。这增加了问题的难度,需要在有限时间内找到一个较优的解。

柔性作业车间调度问题( FJSP) 的描述如下:n个工件 { J , J 2 , . . , J n } \{J,J_2,..,J_n\} {J,J2​,..,Jn​}要在 m m m 台机器 { M 1 , M 2 , . . , M m } \{M_1,M_2,..,M_m\} {M1​,M2​,..,Mm​} 上加工。每个工件包含一道或多道工序,工序顺序是预先确定的,每道工序可以在多台不同加工机器上进行加工,工序的加工时间随加工机器的不同而不同。调度目标是为每道工序选择最合适的机器、确定每台机器上各个工序的最佳加工顺序以及开工时间,使整个系统的某些性能指标达到最优。因此,柔性作业车间调度问题包含两个子问题:确定各工件的加工机器 (机器选择子问题) 和确定各个机器上的加工先后顺序 (工序排序子问题)。

此外,在加工过程中还需要满足下面的约束条件:

(1) 同一台机器同一时刻只能加工一个工件;

(2) 同一工件的同一道工序在同一时刻只能被一台机器加工;

(3) 每个工件的每道工序一旦开始加工不能中断;

(4) 不同工件之间具有相同的优先级;

(5)不同工件的工序之间没有先后约束,同一工件的工序之间有先后约束;

(6)所有工件在零时刻都可以被加工。

1.1符号描述

n : n: n:工件总数;

m : m: m: 机器总数;

i , e : i,e: i,e: 机器序号, i , e = 1 , 2 , 3 , . . . , m i,e=1,2,3,...,m i,e=1,2,3,...,m ;

j , k : j,k: j,k: 工件序号, j , k = 1 , 2 , 3 , . . . , n ; j,k=1,2,3,...,n; j,k=1,2,3,...,n; h j : h_j: hj​:工件 j j j 的工序总数;

h , l : h,l: h,l: 工序序号, h = 1 , 2 , 3 , . . . , h j h=1,2,3,...,h_j h=1,2,3,...,hj​ ;

Ω j h : \Omega_{jh}: Ωjh​:工件 j j j 的第 h h h 道工序的可选加工机器集;

m j h : m_{jh}: mjh​:工件 j j j 的第 h h h 道工序的可选加工机器数;

O j h : O_{jh}: Ojh​:工件 j j j 的第 h h h道工序;

M i j h : M_{ijh}: Mijh​:工件 j j j 的第 h h h道工序在机器 i i i 上加工;

p i j h : p_{ijh}: pijh​:工件 j j j的第 h h h道工序在机器 i i i上的加工时间;

s j h : s_{jh}: sjh​:工件 j j j 的第 h h h 道工序加工开始时间;

c j h : c_{jh}: cjh​:工件 j j j的第 h h h道工序加工完成时间;

d j : d_j: dj​:工件 j j j 的交货期;

L L L: 一个足够大的正数;

C j C_j Cj​: 每个工件的完成时间;

C max ⁡ : C_{\max}: Cmax​: 最大完工时间;

T o : T o = ∑ j = 1 n h j T_o:\quad T_o=\sum_{j=1}^nh_j To​:To​=∑j=1n​hj​, 所有工件工序总数;

x i j h = { 1 , 如果工序 O j h 选择机器 i ; 0 , 否则; x_{ijh}=\begin{cases}1,\text{如果工序}O_{jh}\text{选择机器}i;\\0,\text{否则;}\end{cases} xijh​={1,如果工序Ojh​选择机器i;0,否则;​

y i j h k l = { 1 , 如果 O i j h 先于 O i k l 加工 ; 0 , 否则 ; y_{ijhkl}=\begin{cases}1,\text{如果}O_{ijh}\text{先于}O_{ikl}\text{加工};\\0,\text{否则};\end{cases} yijhkl​={1,如果Oijh​先于Oikl​加工;0,否则;​

1.2约束条件

C 1 : s j h + x i j h × p i j h ≤ c j h C_{1}:s_{jh}+x_{ijh}\times p_{ijh}\leq c_{jh} C1​:sjh​+xijh​×pijh​≤cjh​

其中: i = 1 , … , m ; j = 1 , … , n ; i=1,\ldots,m;j=1,\ldots,n; i=1,…,m;j=1,…,n; h = 1 , … , h j h=1,\ldots,h_j h=1,…,hj​

C 2 : c j h ≤ s j ( h + 1 ) C_{2}:c_{jh}\leq s_{j(h+1)} C2​:cjh​≤sj(h+1)​

其中 : j = 1 , … , n ; h = 1 , . . . , h j − 1 :j=1,\ldots,n;h=1,...,h_j-1 :j=1,…,n;h=1,...,hj​−1

C 3 : c j h j ≤ C max ⁡ C_{3}:c_{jh_j}\leq C_{\max} C3​:cjhj​​≤Cmax​

其中: j = 1 , . . . , n j=1,...,n j=1,...,n

C 4 : s j h + p i j h ≤ s k l + L ( 1 − y i j h k l ) C_{4}:s_{jh}+p_{ijh}\leq s_{kl}+L(1-y_{ijhkl}) C4​:sjh​+pijh​≤skl​+L(1−yijhkl​)

其中 : j = 0 , … , n ; k = 1 , … , n ; h = 1 , … , h j ; l = 1 , … , h k ; i = 1 , … , m :j=0,\ldots,n;k=1,\ldots,n;h=1,\ldots,h_j;l=1,\ldots,h_k;i=1,\ldots,m :j=0,…,n;k=1,…,n;h=1,…,hj​;l=1,…,hk​;i=1,…,m

C 5 : c j h ≤ s j ( h + 1 ) + L ( 1 − y i k l j ( h + 1 ) ) C_{5}:c_{jh}\leq s_{j(h+1)}+L(1-y_{iklj(h+1)}) C5​:cjh​≤sj(h+1)​+L(1−yiklj(h+1)​)

其中 : j = 1 , … , n ; k = 0 , … , n ; h = 1 , … , h j − 1 ; l = 1 , … , h k ; i = 1 , … , m :j=1,\ldots,n;k=0,\ldots,n;h=1,\ldots,h_j-1;\quad l=1,\ldots,h_k;\quad i=1,\ldots,m :j=1,…,n;k=0,…,n;h=1,…,hj​−1;l=1,…,hk​;i=1,…,m

h 1 : ∑ i = 1 m j h x i j h = 1 h_{1}:\sum_{i=1}^{m_{jh}}x_{ijh}=1 h1​:∑i=1mjh​​xijh​=1

其中: h = 1 , . . . , h j ; j = 1 , . . . , n ; h=1,...,h_j;j=1,...,n; h=1,...,hj​;j=1,...,n;

h 2 : ∑ j = 1 n ∑ h = 1 h j y i j h k l = x i k l h_{2}:\sum_{j=1}^n\sum_{h=1}^{h_j}y_{ijhkl}=x_{ikl} h2​:∑j=1n​∑h=1hj​​yijhkl​=xikl​

其中: i = 1 , … , m ; k = 1 , … , n ; l = 1 , … , h k i=1,\ldots,m;k=1,\ldots,n;l=1,\ldots,h_k i=1,…,m;k=1,…,n;l=1,…,hk​

h 3 : ∑ i = 1 n ∑ i = 1 n k y i j h k l = x i j h h_{3}:\sum_{i=1}^n\sum_{i=1}^{n_k}y_{ijhkl}=x_{ijh} h3​:∑i=1n​∑i=1nk​​yijhkl​=xijh​

其中: i = 1 , … , m ; j = 1 , … , n ; h = 1 , … , h k i=1,\ldots,m;j=1,\ldots,n;\quad h=1,\ldots,h_k i=1,…,m;j=1,…,n;h=1,…,hk​

C 6 : s j h ≥ 0 , c j h ≥ 0 C_{6}:s_{jh}\geq0,c_{jh}\geq0 C6​:sjh​≥0,cjh​≥0

其中 : j = 0 , 1 , . . . , n ; h = 1 , . . . , h j :j=0,1,...,n;h=1,...,h_j :j=0,1,...,n;h=1,...,hj​

C 1 C_{1} C1​和 C 2 C_{2} C2​表示每一个工件的工序先后顺序约束 ;

C 3 C_{3} C3​表示工件的完工时间的约束,即每一个工件的完工时间不可能超过总的完工时间 ;

C 4 C_{4} C4​和 C 5 C_{5} C5​表示同一时刻同一台机器只能加工一道工序 ;

h 1 h_{1} h1​表示机器约束,即同一时刻同一道工序只能且仅能被一台机器加工;

h 2 h_{2} h2​和 h 3 h_{3} h3​表示存在每一台机器上可以存在循环操作 ;

C 6 C_{6} C6​表示各个参数变量必须是正数。

1.3目标函数

FJSP的目标函数是最大完工时间最小。完工时间是每个工件最后一道工序完成的时间,其中最大的那个时间就是最大完工时间(makespan)。它是衡量调度方案的最根本指标, 主要体现车间的生产效率,如下式所示:

f = min ⁡ ( max ⁡ l ≤ j ≤ n ( C j ) ) f=\min(\max_{\mathrm{l\leq}j\leq n}(C_j)) f=min(maxl≤j≤n​(Cj​))

参考文献:

[1]张国辉.柔性作业车间调度方法研究[D].华中科技大学,2009.

二、算法简介

袋鼠群优化(Kangaroo Swarm Optimization ,KSO)是2024年提出的一种元启发式优化算法,其灵感来自于袋鼠的自然行为。

参考文献:

praveen kumar (2024). Kangaroo Swarm Optimization (KSO) (https://www.mathworks.com/matlabcentral/fileexchange/162231-kangaroo-swarm-optimization-kso)

三、算法求解FJSP

3.1部分代码

dim=2*sum(operaNumVec);
LB = -jobNum * ones(1, dim);
UB = jobNum * ones(1, dim);
Max_iteration = 100;
SearchAgents_no = 100;
fobj=@(x)fitness(x, MachineNum,jobNum,jobInfo,operaNumVec,candidateMachine);
%% 优化算法求解FJSP
[fMin , bestX, Convergence_curve ] = KSO(SearchAgents_no,Max_iteration,LB,UB,dim,fobj);
machineTable=GetMachineTable(bestX, MachineNum,jobNum,jobInfo,operaNumVec,candidateMachine);
%% 画收敛曲线图
figure
plot(Convergence_curve,'r-','linewidth',2)
xlabel('迭代次数')
ylabel('最大完工时间')
legend('KSO')
saveas(gca,'1.jpg');

3.2部分结果

FJSP,袋鼠群优化(Kangaroo Swarm Optimization ,KSO)算法求解柔性作业车间调度问题(FJSP),提供MATLAB代码,袋鼠群优化算法求解柔性作业车间调度问题,MATLAB代码实现与解析 第1张

FJSP,袋鼠群优化(Kangaroo Swarm Optimization ,KSO)算法求解柔性作业车间调度问题(FJSP),提供MATLAB代码,袋鼠群优化算法求解柔性作业车间调度问题,MATLAB代码实现与解析 第2张

四、完整MATLAB代码

FJSP,袋鼠群优化(Kangaroo Swarm Optimization ,KSO)算法求解柔性作业车间调度问题(FJSP),提供MATLAB代码,袋鼠群优化算法求解柔性作业车间调度问题,MATLAB代码实现与解析 第3张


0
收藏0
文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。

相关阅读

  • 【研发日记】Matlab/Simulink自动生成代码(二)——五种选择结构实现方法,Matlab/Simulink自动生成代码的五种选择结构实现方法(二),Matlab/Simulink自动生成代码的五种选择结构实现方法详解(二)
  • 超级好用的C++实用库之跨平台实用方法,跨平台实用方法的C++实用库超好用指南,C++跨平台实用库使用指南,超好用实用方法集合,C++跨平台实用库超好用指南,方法与技巧集合
  • 【动态规划】斐波那契数列模型(C++),斐波那契数列模型(C++实现与动态规划解析),斐波那契数列模型解析与C++实现(动态规划)
  • 【C++】,string类底层的模拟实现,C++中string类的模拟底层实现探究
  • uniapp 小程序实现微信授权登录(前端和后端),Uniapp小程序实现微信授权登录全流程(前端后端全攻略),Uniapp小程序微信授权登录全流程攻略,前端后端全指南
  • Vue脚手架的安装(保姆级教程),Vue脚手架保姆级安装教程,Vue脚手架保姆级安装指南,Vue脚手架保姆级安装指南,从零开始教你如何安装Vue脚手架
  • 如何在树莓派 Raspberry Pi中本地部署一个web站点并实现无公网IP远程访问,树莓派上本地部署Web站点及无公网IP远程访问指南,树莓派部署Web站点及无公网IP远程访问指南,本地部署与远程访问实践,树莓派部署Web站点及无公网IP远程访问实践指南,树莓派部署Web站点及无公网IP远程访问实践指南,本地部署与远程访问详解,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南。
  • vue2技术栈实现AI问答机器人功能(流式与非流式两种接口方法),Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法探究,Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法详解
  • 发表评论

    快捷回复:表情:
    评论列表 (暂无评论,0人围观)

    还没有评论,来说两句吧...

    目录[+]

    取消
    微信二维码
    微信二维码
    支付宝二维码