排工问题

版权声明:欢迎转载和交流。 https://blog.csdn.net/Hachi_Lin/article/details/89056429

1. 问题描述

n n 个工件,每个工件都要按顺序经过 A A B B 两个机床进行加工,工件i在 A A B B 两个机床上加工时间分别为 a i a_i b i b_i ,确定 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 中是还没有经过 A A 机床加工的工件, t t B B 机床加工X外的工件还需要的时间,如果取 为下一个放在 A A 上加工的工件,则i在 A A 上完成加工时达到下一个状态 ( X i z i ( t ) ) (X-i,z_i(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}
  令 f ( X , t ) f(X,t) 为处于状态 ( X , t ) (X,t) 时剩余的最优排工时间,则 f ( X , t ) f(X,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 ( 1 , 2 , , n , 0 ) f({1,2,…,n},0) 即为 n n 个工件的最优加工时间。
  在状态 ( X , t ) (X,t) 时对于X中的两个工件 i , j i, j ,下面讨论应该先加工 i i 还是先加工 j j 才能使得剩余加工时间最少。
  如果先加工 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)
如果接着下一个加工 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)
其中
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}
同理,如果状态 ( X , t ) (X,t) 时先加工 j j ,再加工 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 ) f(X,t) t t 的单调上升函数,要想 f ( X , t , i , j ) f ( X , t , j , i ) f(X, t, i, j) \leq 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)

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 { 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}
即可。

分割线

这个问题来源于组合优化这门课程,课堂上老师还要我们证明了这个“只需要”的过程,想了好久没想到,然后参考了我们班的大佬旭哥的证明,证明过程如下
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

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 { b t , c } max { b s , d } \max\{b-t,c\} \leq\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\}
只需证 max C max D \max C \leq \max D ,则 max A max B \max A \leq \max B 必成立。

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

猜你喜欢

转载自blog.csdn.net/Hachi_Lin/article/details/89056429
今日推荐