n n n个工件,每个工件都要按顺序经过 A A A、 B B B两个机床进行加工,工件i在 A A A、 B B B两个机床上加工时间分别为 a i a_i ai, b i b_i bi,确定 n n n个工件的加工顺序,使得总加工时间最短。
机床 | N1 | N2 |
---|---|---|
A | 4 | 2 |
B | 1 | 3 |
先加工N1,所需总时间为4+2+3=9,先加工N2,所需总时间为2+4+1=7。
机床 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
A | 3 | 7 | 4 | 5 | 7 |
B | 6 | 2 | 7 | 3 | 4 |
加工顺序为13542。
状态(X,t): X X X中是还没有经过 A A A机床加工的工件, t t t是 B B B机床加工X外的工件还需要的时间,如果取 为下一个放在 A A A上加工的工件,则i在 A A A上完成加工时达到下一个状态 ( X - i , z i ( t ) ) (X-i,z_i(t)) (X-i,zi(t)),其中
z i ( t ) = { b i , t ≤ a i t − a i + b i , t > a i = max { t − a i , 0 } + b i = max { t − a i + b i , b i } \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)是 t t t的单调上升函数,且
{ f ( X , t ) = min i ∈ X { a i + f ( X − i , z i ( 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,…,n,0)即为 n n n个工件的最优加工时间。
在状态 ( X , t ) (X,t) (X,t)时对于X中的两个工件 i , j i, j i,j,下面讨论应该先加工 i i i还是先加工 j j j才能使得剩余加工时间最少。
如果先加工 i i i,则剩余最优加工时间记为
f ( X , t , i ) = a i + f ( X − i , z i ( t ) ) f(X, t, i)=a_{i}+f\left(X-i, z_{i}(t)\right) f(X,t,i)=ai+f(X−i,zi(t))
如果接着下一个加工 j j j,则最优加工时间为
f ( X , t , i , j ) = a i + a j + f ( X − i − j , z j ( z i ( t ) ) ) f(X, t, i, j)=a_{i}+a_{j}+f\left(X-i-j, z_{j}\left(z_{i}(t)\right)\right) f(X,t,i,j)=ai+aj+f(X−i−j,zj(zi(t)))
其中
z j ( z i ( t ) ) = max { z i ( t ) − a j , 0 } + b j = max { z i ( t ) − a j + b j , b j } = max { max { t − a i + b i , b i } − a j + b j , b j } = max { t − a i − a j + b i + b j , b i + b j − a j , b j } \begin{aligned} & z_{j}\left(z_{i}(t)\right)=\max \left\{z_{i}(t)-a_{j}, 0\right\}+b_{j} \\=& \max \left\{z_{i}(t)-a_{j}+b_{j}, b_{j}\right\} \\=& \max \left\{\max \left\{t-a_{i}+b_{i}, b_{i}\right\}-a_{j}+b_{j}, b_{j}\right\} \\=& \max \left\{t-a_{i}-a_{j}+b_{i}+b_{j}, b_{i}+b_{j}-a_{j}, b_{j}\right\} \end{aligned} ===zj(zi(t))=max{zi(t)−aj,0}+bjmax{zi(t)−aj+bj,bj}max{max{t−ai+bi,bi}−aj+bj,bj}max{t−ai−aj+bi+bj,bi+bj−aj,bj}
同理,如果状态 ( X , t ) (X,t) (X,t)时先加工 j j j,再加工 i i i,则最好加工时间为
f ( X , t , j , i ) = a i + a j + f ( X − i − j , z i ( z j ( t ) ) ) z i ( z j ( t ) ) = max { t − a t − a j + b i + b j , b i + b j − a i , b i } \begin{array}{c}{f(X, t, j, i)=a_{i}+a_{j}+f\left(X-i-j, z_{i}\left(z_{j}(t)\right)\right)} \\ {z_{i}\left(z_{j}(t)\right)=\max \left\{t-a_{t}-a_{j}+b_{i}+b_{j}, b_{i}+b_{j}-a_{i}, b_{i}\right\}}\end{array} f(X,t,j,i)=ai+aj+f(X−i−j,zi(zj(t)))zi(zj(t))=max{t−at−aj+bi+bj,bi+bj−ai,bi}
由 f ( X , t ) f(X,t) f(X,t)是 t t t的单调上升函数,要想 f ( X , t , i , j ) ≤ f ( X , t , j , i ) f(X, t, i, j) \leq f(X, t, j, i) f(X,t,i,j)≤f(X,t,j,i),只要
z j ( z i ( t ) ) ≤ z i ( z j ( t ) ) z_{j}\left(z_{i}(t)\right) \leq z_{i}\left(z_{j}(t)\right) zj(zi(t))≤zi(zj(t))
即
max { t − a i − a j + b i + b j , b i + b j − a j , b j } ≤ max { t − a i − a j + b i + b j , b i + b j − a i , b i } \begin{array}{c}{\max \left\{t-a_{i}-a_{j}+b_{i}+b_{j}, b_{i}+b_{j}-a_{j}, b_{j}\right\}} \\ { \leq \max \left\{t-a_{i}-a_{j}+b_{i}+b_{j}, b_{i}+b_{j}-a_{i}, b_{i}\right\}}\end{array} max{t−ai−aj+bi+bj,bi+bj−aj,bj}≤max{t−ai−aj+bi+bj,bi+bj−ai,bi}
只需要
max { b i + b j − a j , b j } ≤ max { b i + b j − a i , b i } max { − a j , − b i } ≤ max { − a i , − b j } min { a i , b j } ≤ min { a j , b i } \begin{array}{l}{\max \left\{b_{i}+b_{j}-a_{j}, b_{j}\right\} \leq \max \left\{b_{i}+b_{j}-a_{i}, b_{i}\right\}} \\ {\max \left\{-a_{j},-b_{i}\right\} \leq \max \left\{-a_{i},-b_{j}\right\}} \\ {\min \left\{a_{i}, b_{j}\right\} \leq \min \left\{a_{j}, b_{i}\right\}}\end{array} max{bi+bj−aj,bj}≤max{bi+bj−ai,bi}max{−aj,−bi}≤max{−ai,−bj}min{ai,bj}≤min{aj,bi}
即可。
这个问题来源于组合优化这门课程,课堂上老师还要我们证明了这个“只需要”的过程,想了好久没想到,然后参考了我们班的大佬旭哥的证明,证明过程如下
用 a , b , t , s , c , d a,b,t,s,c,d a,b,t,s,c,d代替 t − a i − a j + b i , b i + b j , a j , a i , b j , b i t-a_{i}-a_{j}+b_{i},b_i+b_j,a_j,a_i,b_j,b_i t−ai−aj+bi,bi+bj,aj,ai,bj,bi。
则
max { a , b − t , c } ≤ max { a , b − s , d } \begin{array}{c}{\max \left\{a,b-t,c\right\}} \\ { \leq \max \left\{a,b-s,d\right\}}\end{array} max{a,b−t,c}≤max{a,b−s,d}
只需要
max { b − t , c } ≤ max { b − s , d } \max\{b-t,c\} \leq\max\{b-s,d\} max{b−t,c}≤max{b−s,d}
令 A = { a , b − t , c } , B = { a , b − s , d } , C = { b − t , c } , D = { b − s , d } A=\{a,b-t,c\},B=\{a,b-s,d\},C=\{b-t,c\},D=\{b-s,d\} A={a,b−t,c},B={a,b−s,d},C={b−t,c},D={b−s,d}
只需证 max C ≤ max D \max C \leq \max D maxC≤maxD,则 max A ≤ max B \max A \leq \max B maxA≤maxB必成立。