1. 问题描述
n个工件,每个工件都要按顺序经过
A、
B两个机床进行加工,工件i在
A、
B两个机床上加工时间分别为
ai,
bi,确定
n个工件的加工顺序,使得总加工时间最短。
2. 例子描述
先加工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。
3. 问题解决
状态(X,t):
X中是还没有经过
A机床加工的工件,
t是
B机床加工X外的工件还需要的时间,如果取 为下一个放在
A上加工的工件,则i在
A上完成加工时达到下一个状态
(X-i,zi(t)),其中
zi(t)={bi,t−ai+bi,t≤ait>ai=max{t−ai,0}+bi=max{t−ai+bi,bi}
令
f(X,t)为处于状态
(X,t)时剩余的最优排工时间,则
f(X,t)是
t的单调上升函数,且
{f(X,t)=mini∈X{ai+f(X−i,zi(t))}f(ϕ,t)=t
f(1,2,…,n,0)即为
n个工件的最优加工时间。
在状态
(X,t)时对于X中的两个工件
i,j,下面讨论应该先加工
i还是先加工
j才能使得剩余加工时间最少。
如果先加工
i,则剩余最优加工时间记为
f(X,t,i)=ai+f(X−i,zi(t))
如果接着下一个加工
j,则最优加工时间为
f(X,t,i,j)=ai+aj+f(X−i−j,zj(zi(t)))
其中
===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)时先加工
j,再加工
i,则最好加工时间为
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)是
t的单调上升函数,要想
f(X,t,i,j)≤f(X,t,j,i),只要
zj(zi(t))≤zi(zj(t))
即
max{t−ai−aj+bi+bj,bi+bj−aj,bj}≤max{t−ai−aj+bi+bj,bi+bj−ai,bi}
只需要
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代替
t−ai−aj+bi,bi+bj,aj,ai,bj,bi。
则
max{a,b−t,c}≤max{a,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}
只需证
maxC≤maxD,则
maxA≤maxB必成立。
- 若
a是
A中的最大值,则
maxA≤a≤maxB。即无论
maxC和
maxD的关系如何,
maxA≤maxB必然成立。
- 若
a不是
A中的最大值,则
maxA=maxC,又当
maxC≤maxD时,而
maxB≥maxD,
因此有
maxA=maxC≤maxB。
综合上述,若
maxC≤maxD,则
maxA≤maxB必成立。