1. 问题描述
nnn个工件,每个工件都要按顺序经过AAA、BBB两个机床进行加工,工件i在AAA、BBB两个机床上加工时间分别为aia_iai,bib_ibi,确定nnn个工件的加工顺序,使得总加工时间最短。
2. 例子描述
- 例子1
机床 | N1 | N2 |
---|---|---|
A | 4 | 2 |
B | 1 | 3 |
先加工N1,所需总时间为4+2+3=9,先加工N2,所需总时间为2+4+1=7。
- 例子2
机床 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
A | 3 | 7 | 4 | 5 | 7 |
B | 6 | 2 | 7 | 3 | 4 |
加工顺序为13542。
3. 问题解决
状态(X,t):XXX中是还没有经过AAA机床加工的工件,ttt是BBB机床加工X外的工件还需要的时间,如果取 为下一个放在AAA上加工的工件,则i在AAA上完成加工时达到下一个状态(X-i,zi(t))(X-i,z_i(t))(X-i,zi(t)),其中
zi(t)={
bi,t≤ait−ai+bi,t>ai=max{
t−ai,0}+bi=max{
t−ai+bi,bi} \begin{aligned} z_{i}(t) &=\left\{\begin{array}{ll}{b_{i},} & {t \leq a_{i}} \\ {t-a_{i}+b_{i},} & {t>a_{i}}\end{array}\right. \\ &=\max \left\{t-a_{i}, 0\right\}+b_{i} \\ &=\max \left\{t-a_{i}+b_{i}, b_{i}\right\} \end{aligned} zi(t)={
bi,t−ai+bi,t≤ait>ai=max{
t−ai,0}+bi=max{
t−ai+bi,bi}
令f(X,t)f(X,t)f(X,t)为处于状态(X,t)(X,t)(X,t)时剩余的最优排工时间,则f(X,t)f(X,t)f(X,t)是ttt的单调上升函数,且
{
f(X,t)=mini∈X{
ai+f(X−i,zi(t))}f(ϕ,t)=t \left\{\begin{array}{l}{f(X, t)=\min _{i \in X}\left\{a_{i}+f\left(X-i, z_{i}(t)\right)\right\}} \\ {f(\phi, t)=t}\end{array}\right. {
f(X,t)=mini∈X{
ai+f(X−i,zi(t))}f(ϕ,t)=t
f(1,2,…,n,0)f({1,2,…,n},0)f(1,2,