- 作者:邹祁峰
- 邮箱:Qifeng.zou@qq.com
- 博客:http://blog.csdn.net/qifengzou
- 日期:2014.03.07 18:00
- 转载请注明来自"祁峰"的CSDN博客
1 问题描述
现有两条装配线,Sij表示第i条上完成第j道工序的装配站。汽车完成组装需要依次完成1~n工序。请找出完成装配并离开装配线的最快路线。
符号说明:
①、ei:汽车进入装配线i的时间,i=1,2
②、xi:汽车离开装配线i的时间
③、aij:在装配站Sij完成装配需要的时间
④、tij:在装配站Sij完成后离开第i条装配线,进入另一条装配线需要的转移时间
注意,如果完成工序后,下一个工序还在同一条装配线上,则不需要转移时间。
图1 装配线调度
2 问题分析
3 问题求解
3.1 递归求解
递归求解的过程,可是使用如下的树形结构来表示:
图5 树形表示
3.2 动态规划
如果反过来,采用自下而上的方式来求解,把求解结果保存起来,后续的计算都依赖之前计算保存的结果,则可有效的减少重复计算,从而极大的提高求解效率。
我们再回头看看问题描述,并自下而上的方式来分析其处理过程:
第1行1列的最短耗时:ms[1][1] = e[1] + a[1][1]
第2行1列的最短耗时:ms[2][1] = e[2] + a[2][1]
第1行2列的最短耗时:ms[1][2] = min{ms[1][1], ms[2][1]+t[2][1]} + a[1][2],并记录min{ms[1][1], ms[2][1]+t[2][1]}中更小值的行号
第2行2列的最短耗时:ms[2][2] = min{ms[1][1]+t[1][1], ms[2][1]} + a[2][1],并记录min{ms[1][1]+t[1][1], ms[2][1]}中更小值的行号
第1行3列的最短耗时:ms[1][3] = min{ms[1][2], ms[2][2]+t[2][2]} + a[1][3],并记录min{ms[1][2], ms[2][2]+t[2][2]}中更小值的行号
第2行3列的最短耗时:ms[2][3] = min{ms[1][2]+t[1][2], ms[2][2]} + a[2][3],并记录min{ms[1][2]+t[1][2], ms[2][2]}中更小值的行号
....
第1行n列的最短耗时:ms[1][n] = min{ms[1][n-1], ms[2][n-1]+t[2][n-1]} + a[1][n],并记录min{ms[1][n-1], ms[2][n-1]+t[2][n-1]}中更小值的行号
第2行n列的最短耗时:ms[2][n] = min{ms[1][n-1]+t[1][n-1], ms[2][n-1]} + a[2][n],并记录min{ms[1][n-1]+t[1][n-1], ms[2][n-1]}中更小值的行号
第1行n列到终点最短耗时:ms[1][n+1] = ms