排工问题

1. 问题描述

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个工件的加工顺序,使得总加工时间最短。

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): 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)) (Xizi(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,tai+bi,tait>ai=max{tai,0}+bi=max{tai+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)=miniX{ai+f(Xi,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(Xi,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(Xij,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{tai+bi,bi}aj+bj,bj}max{taiaj+bi+bj,bi+bjaj,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(Xij,zi(zj(t)))zi(zj(t))=max{tataj+bi+bj,bi+bjai,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{taiaj+bi+bj,bi+bjaj,bj}max{taiaj+bi+bj,bi+bjai,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+bjaj,bj}max{bi+bjai,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 taiaj+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,bt,c}max{a,bs,d}
只需要
max ⁡ { b − t , c } ≤ max ⁡ { b − s , d } \max\{b-t,c\} \leq\max\{b-s,d\} max{bt,c}max{bs,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,bt,c},B={a,bs,d},C={bt,c},D={bs,d}
只需证 max ⁡ C ≤ max ⁡ D \max C \leq \max D maxCmaxD,则 max ⁡ A ≤ max ⁡ B \max A \leq \max B maxAmaxB必成立。

  1. a a a A A A中的最大值,则 max ⁡ A ≤ a ≤ max ⁡ B \max A \leq a \leq \max B maxAamaxB。即无论 max ⁡ C \max C maxC max ⁡ D \max D maxD的关系如何, max ⁡ A ≤ max ⁡ B \max A \leq \max B maxAmaxB必然成立。
  2. a a a不是 A A A中的最大值,则 max ⁡ A = max ⁡ C \max A = \max C maxA=maxC,又当 max ⁡ C ≤ max ⁡ D \max C \leq \max D maxCmaxD时,而 max ⁡ B ≥ max ⁡ D \max B \geq \max D maxBmaxD
    因此有 max ⁡ A = max ⁡ C ≤ max ⁡ B \max A = \max C \leq \max B maxA=maxCmaxB
    综合上述,若 max ⁡ C ≤ max ⁡ D \max C \leq \max D maxCmaxD,则 max ⁡ A ≤ max ⁡ B \max A \leq \max B maxAmaxB必成立。

你可能感兴趣的:(数学,排工问题,组合优化)