一、柔性作业车间调度问题
柔性作业车间调度问题(Flexible Job Scheduling Problem, FJSP) 的描述如下:n个工件{J,J2,..,Jn}\{J,J_2,..,J_n\}{J,J2,..,Jn}要在mmm 台机器{M1,M2,..,Mm}\{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,...,mi,e=1,2,3,...,mi,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; hj:h_j:hj:工件jjj 的工序总数;
h,l:h,l:h,l: 工序序号,h=1,2,3,...,hjh=1,2,3,...,h_jh=1,2,3,...,hj ;
Ωjh:\Omega_{jh}:Ωjh:工件jjj 的第hhh 道工序的可选加工机器集;
mjh:m_{jh}:mjh:工件jjj 的第hhh 道工序的可选加工机器数;
Ojh:O_{jh}:Ojh:工件jjj 的第hhh道工序;
Mijh:M_{ijh}:Mijh:工件jjj 的第hhh道工序在机器iii 上加工;
pijh:p_{ijh}:pijh:工件jjj的第hhh道工序在机器iii上的加工时间;
sjh:s_{jh}:sjh:工件jjj 的第hhh 道工序加工开始时间;
cjh:c_{jh}:cjh:工件jjj的第hhh道工序加工完成时间;
dj:d_j:dj:工件jjj 的交货期;
LLL: 一个足够大的正数;
CjC_jCj: 每个工件的完成时间;
Cmax:C_{\max}:Cmax: 最大完工时间;
To:To=∑j=1nhjT_o:\quad T_o=\sum_{j=1}^nh_jTo:To=∑j=1nhj, 所有工件工序总数;
xijh={1,如果工序Ojh选择机器i;0,否则;x_{ijh}=\begin{cases}1,\text{如果工序}O_{jh}\text{选择机器}i;\\0,\text{否则;}\end{cases}xijh={1,如果工序Ojh选择机器i;0,否则;
yijhkl={1,如果Oijh先于Oikl加工;0,否则;y_{ijhkl}=\begin{cases}1,\text{如果}O_{ijh}\text{先于}O_{ikl}\text{加工};\\0,\text{否则};\end{cases}yijhkl={1,如果Oijh先于Oikl加工;0,否则;
1.2约束条件
C1:sjh+xijh×pijh≤cjhC_{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,…,hjh=1,\ldots,h_jh=1,…,hj
C2:cjh≤sj(h+1)C_{2}:c_{jh}\leq s_{j(h+1)}C2:cjh≤sj(h+1)
其中:j=1,…,n;h=1,...,hj−1:j=1,\ldots,n;h=1,...,h_j-1:j=1,…,n;h=1,...,hj−1
C3:cjhj≤CmaxC_{3}:c_{jh_j}\leq C_{\max}C3:cjhj≤Cmax
其中:j=1,...,nj=1,...,nj=1,...,n
C4:sjh+pijh≤skl+L(1−yijhkl)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,…,hj;l=1,…,hk;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
C5:cjh≤sj(h+1)+L(1−yiklj(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,…,hj−1;l=1,…,hk;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
h1:∑i=1mjhxijh=1h_{1}:\sum_{i=1}^{m_{jh}}x_{ijh}=1h1:∑i=1mjhxijh=1
其中:h=1,...,hj;j=1,...,n;h=1,...,h_j;j=1,...,n;h=1,...,hj;j=1,...,n;
h2:∑j=1n∑h=1hjyijhkl=xiklh_{2}:\sum_{j=1}^n\sum_{h=1}^{h_j}y_{ijhkl}=x_{ikl}h2:∑j=1n∑h=1hjyijhkl=xikl
其中:i=1,…,m;k=1,…,n;l=1,…,hki=1,\ldots,m;k=1,\ldots,n;l=1,\ldots,h_ki=1,…,m;k=1,…,n;l=1,…,hk
h3:∑i=1n∑i=1nkyijhkl=xijhh_{3}:\sum_{i=1}^n\sum_{i=1}^{n_k}y_{ijhkl}=x_{ijh}h3:∑i=1n∑i=1nkyijhkl=xijh
其中:i=1,…,m;j=1,…,n;h=1,…,hki=1,\ldots,m;j=1,\ldots,n;\quad h=1,\ldots,h_ki=1,…,m;j=1,…,n;h=1,…,hk
C6:sjh≥0,cjh≥0C_{6}:s_{jh}\geq0,c_{jh}\geq0C6:sjh≥0,cjh≥0
其中:j=0,1,...,n;h=1,...,hj:j=0,1,...,n;h=1,...,h_j:j=0,1,...,n;h=1,...,hj
C1C_{1}C1和 C2C_{2}C2表示每一个工件的工序先后顺序约束 ;
C3C_{3}C3表示工件的完工时间的约束,即每一个工件的完工时间不可能超过总的完工时间 ;
C4C_{4}C4和 C5C_{5}C5表示同一时刻同一台机器只能加工一道工序 ;
h1h_{1}h1表示机器约束,即同一时刻同一道工序只能且仅能被一台机器加工;
h2h_{2}h2和 h3h_{3}h3表示存在每一台机器上可以存在循环操作 ;
C6C_{6}C6表示各个参数变量必须是正数。
1.3目标函数
(1) 最大完工时间最小。
完工时间是每个工件最后一道工序完成的时间,其中最大的那个时间就是最大完工时间(makespan)。它是衡量调度方案的最根本指标, 主要体现车间的生产效率,也是 FJSP 研究中应用最广泛的评价指标之一。如下式所示:
f1=min(maxl≤j≤n(Cj))f_1=\min(\max_{\mathrm{l\leq}j\leq n}(C_j))f1=min(maxl≤j≤n(Cj))
(2)机器最大负荷最小。
在 FJSP 求解中,存在选择机器的过程,各个机器的负荷随着不同的调度方案而不同。负荷最大的机器就是瓶颈设备,为提高每台机器的利用率,必须使得各台机器的负荷尽量小且平衡。如下式所示:
f2=min(maxl≤i≤m∑j=1n∑h=1hjpijhxijh)f_2=\min(\max_{\mathrm{l\leq}i\leq m}\sum_{j=1}^n\sum_{h=1}^{h_j}p_{ijh}x_{ijh})f2=min(maxl≤i≤m∑j=1n∑h=1hjpijhxijh)
(3)总机器负荷最小。
工序在不同机器上的加工时间是不同的,那么总的机器负荷随着不同的调度方案而不同。尽量使最大完工时间一样的情况下,减少所有机器的总消耗。如下式所示:
f3=min(∑i=1m∑j=1n∑h=1hjpijhxijh)f_3=\min(\sum_{i=1}^m\sum_{j=1}^n\sum_{h=1}^{h_j}p_{ijh}x_{ijh})f3=min(∑i=1m∑j=1n∑h=1hjpijhxijh)
参考文献:
[1]张国辉.柔性作业车间调度方法研究[D].华中科技大学,2009.
二、吸血水蛭优化算法
吸血水蛭优化(Blood-Sucking Leech Optimizer,BSLO)算法由Jianfu Bai等人于2024年9月提出一种新型的元启发式算法,灵感来源于吸血水蛭在稻田中的觅食行为,并发表在《Advances in Engineering Software》期刊上。该算法模拟了吸血水蛭的觅食行为,包括探索、定向利用、切换机制、无方向搜索策略和重新跟踪策略。BSLO算法具有较强的自适应优化能力,通过模拟水蛭的行为来寻找最优解。
算法描述
BSLO算法中,水蛭被分为两种类型:定向水蛭和无定向水蛭。定向水蛭在感受到刺激时,如水波,会以小角度向猎物游动。无定向水蛭则在搜索空间中随机游动。算法通过模拟水蛭的这些行为来优化问题。
算法的关键步骤包括:
- 初始化:在解空间中随机初始化一组候选解。
- 定向水蛭的探索策略:模拟水蛭对刺激的响应,以小角度向猎物游动。
- 定向水蛭的开发策略:经过多次迭代后,水蛭逐渐接近猎物,进入开发阶段。
- 无方向水蛭的搜索策略:一些水蛭对信息判断错误,向错误方向游动,随着迭代增加,这些水蛭逐渐减少。
- Re-tracking策略:模拟水蛭被人类移走后,随机扔回稻田并再次寻找猎物的行为。
算法流程
BSLO算法的流程可以概括为以下几个步骤:
- 初始化种群,设置算法参数,如种群大小、迭代次数等。
- 对于每一代种群,执行以下操作:
- 计算每个水蛭的适应度值。
- 根据适应度值,选择最佳的水蛭作为当前最优解。
- 更新定向水蛭和无定向水蛭的数量。
- 对定向水蛭执行探索策略,对无定向水蛭执行搜索策略。
- 执行Re-tracking策略,模拟水蛭被移走后重新寻找猎物的行为。
- 重复上述过程,直到达到迭代次数或满足其他停止条件。
- 输出最优解和相应的适应度值。
参考文献:
[1]Bai, Jianfu, et al. “Blood-Sucking Leech Optimizer.” Advances in Engineering Software, vol. 195, Elsevier BV, Sept. 2024, p. 103696, doi:10.1016/j.advengsoft.2024.103696
三、非支配吸血水蛭优化算法求解FJSP
非支配吸血水蛭优化算法求解FJSP,以最大完工时间最小、机器最大负荷最小、总机器负荷最小为目标函数。
3.1部分代码
%% 算法求解
figure(1)
for i=1:4
scatter3(R(i).Result.obj_matrix(:,1), R(i).Result.obj_matrix(:,2), R(i).Result.obj_matrix(:,3),50,Strcol{i})
hold on
end
xlabel('最大完工时间'); ylabel('总能耗'); zlabel('总成本', 'Rotation', 90)
legend(NameAlgorith)
3.2部分结果
以Mk01数据集为例:
四、完整MATLAB代码
见下方名片