若w未曾访问过,则以w为新的出发点继续进行深度优先遍历,直至图中所有和源点v有路径相通的顶点(亦称为从源点可达的顶点)均已被访问为止。若此时图中仍有未访问的顶点,则另选一个尚未访问的顶点作为新的源点重复上述过程,直至图中所有顶点均已被访问为止。
图的深度优先遍历类似于树的前序遍历。采用的搜索方法的特点是尽可能先对纵深方向进行搜索。这种搜索方法称为深度优先搜索(Depth-FirstSearch)。相应地,用此方法遍历图就很自然地称之为图的深度优先遍历。
3.改进的DFS算法过程
首先建立两个数组序列,记为A[Tij](i,j=1,2,3…n,T表示任两个接点之间的遍历时间,T12表示接点1和2之间的遍历时间),B[n](n=1,2,3…n,表示接点)下面开始进行检索,并填充至B中。设x是当前被访问顶点,在对x做过访问标记后,选择一条从x出发的未检测过的边(x,y)。若发现顶点y已访问过,则重新选择另一条从x出发的未检测过的边,否则沿边(x,y)到达未曾访问过的y,对y访问并将其标记为已访问过;然后从y开始搜索,直到搜索完从y出发的所有路径,即访问完所有从y出发可达的顶点之后,才回溯到顶点x,并且再选择一条从x出发的未检测过的边。上述过程直至从x出发的所有边都已检测过为止。此时,若x不是源点,则回溯到在x之前被访问过的顶点;否则图中所有和源点有路径相通的顶点(即从源点可达的所有顶点)都已被访问过,遍历过程结束。由于一个图的遍历结果不止一种,我们要讨论:当一个接点仅有一个邻接接点时,添加至B中,当一个接点(假定为M)下一个遍历的接点都是多个时,我们选取与M接点时间最长的下一个接点(假定为N),我们将接点N添加至B中。这是因为到并行工作的进度取决于工时最长的活动,要注意,严格按照顺序依次添加。添加完毕,形成一个完整的B数组序列,将数组B中接点依次按两两组合的形式添加至A中i和j的位置,形成完整A数组。最后将A中所有的时间相加得出一个遍历所有接点的满意时间。
四、实例分析
为了验证算法的有效性,本文采用文献[4]的模具生产实例进行检验,此实例包含3个具有相同网络结构的项目,其网络结构图如图1所示。

图1网络结构图
每个项目含有16个任务,所有的16个任务共享13中资源,在不同的项目中任务的工期是有所不同的。虽然企业中多项目是并存的,但我们总是可以给这些项目设置一定的优先级,即权重。我们假设w1=0.5,w2=0.3,w3=0.2(w1表示项目的权重,其他类推)。三个项目同时开始,在没有资源约束的情况下,三个项目的完工时间分别是33天,43天,38天,计划的最晚交货期是48、63和62天,下面的表1说明任务的资源需求和工期。
表1:
任务
|
资源
|
P
|
P
|
P
|
1
|
1
|
4
|
5
|
4
|
2
|
1
|
3
|
6
|
6
|
3
|
2
|
2
|
2
|
1
|
4
|
3
|
4
|
3
|
4
|
5
|
4
|
3
|
2
|
3
|
6
|
5
|
5
|
6
|
6
|
7
|
6
|
4
|
6
|
3
|
8
|
7
|
2
|
3
|
2
|
9
|
2
|
1
|
1
|
1
|
10
|
7
|
2
|
2
|
2
|
11
|
8
|
4
|
3
|
3
|
12
|
9
|
3
|
4
|
3
|
13
|
10
|
3
|
2
|
4
|
14
|
11
|
2
|
4
|
2
|
15
|
12
|
3
|
3
|
4
|
16
|
13
|
4
|
4
|
4
|
其中,P表示项目1的各个任务的工期,其他依此类推。
下面我们利用改进的DFS算法来求该实例的多项目调度问题。由前面所述的改进DFS算法我们分析项目的网络结构图,在图的遍历过程发现P>P(项目2和3也是这种情况),由于DFS算法就是图的遍历,也就是说要图的各个接点都要遍历到,即访问到任何一个接点,所以在访问P的时候,只要资源不发生冲突,就可以并行的访问P,因为P>P,由此得出的结论就是项目的工期完全由遍历的任务工期之和决定的,当然了应当排除那些并行的任务之中工期短的那些任务。
所以,P=P+P+P+P+P+P+P+P+P+P(i=1,2,3,P表示三个项目)
可以计算出项目1的总工期是:P+P+P+P+P+P+P+P+P+P=4+3+5+4+2+3+3+2+3+4=33(天),
同理可以知道项目2的工期:P+P+P+P+P+P+P+P+P+P+7=5+6+6+6+3+4+2+4+3+4+7=43+7=50(天),对式中的7说明:由于项目1的任务1和2共享一种资源,所以项目2的开始时间就是P+P=3+4=7(天)。
项目3的工期:P+P+P+P+P+P+P+P+P+P+18=4+6+6+3+2+3+4+2+4+4+18=38+18=56(天),对式中的18说明:由于项目1和2它们各自的任务1和2共享一种资源,所以项目3的开始时间就是P+P+P+P=3+4+5+6=18(天)。
本文的求解过程完全可以通过计算机编程来实现,能够提高过程的效率。与其他一些调度算法相比,工期有明显的缩短。通过国内的一些算法我们可以清楚的比较出来,这些算法文献3都给出了结论,如表2。
表2:
算法
|
项目1
|
项目2
|
项目3
|
SASP
|
33
|
50
|
58
|
MAXTWK
|
47
|
43
|
56
|
多优先规则算法
|
42
|
54
|
58
|
当然了,关于多项目的调度问题国内外许多学者提出了很多不同的实现方法,各个方法都各有优缺点,本算法特别适用于项目的网络结构图能转化为图的这种结构形式,以便通过DFS算法实现。
五、结论
本文借鉴了许多关于多项目管理在资源受限情况的调度问题,和其他的算法相比实质基本上一致,只不过是采用了一种新的算法,即DFS算法,当然了,本算法也用不足之处,就是资源使用的独占性,一旦项目交叉起来进行,不同的项目,不同的任务的优先级都不一致,这种情形下,情况可能会更加复杂,需要更进一步的研究与探讨!
参考文献
1 吴之明,卢有杰. 项目管理引论[M]. 北京: 清华大学出版社,2001.12.
2 陈慧南.数据结构-C语言描述[M].陕西:西安弟子科技大学出版社,2003.8.
3 寿涌毅. 资源约束下多项目调度的迭代算法 [J]. 浙江大学学报(工学版), 2004, 38(8): 1095-1099.
4 廖仁,陈庆新,毛宁.资源约束下多项目调度的启发式算法 [J].管理工程学报, 2002, 16(S): 100-103.
5 严蔚敏,吴伟民.数据结构[M].北京:清华大学出版社,2007.12.
6 方炜, 欧立雄. 多项目环境下新产品研发项目资源分配问题研究[J]. 管理工程学报, 2005, 19(S): 6-10.
7 徐孝凯,魏荣.数据结构[M], 北京:机械工业出版社,1996
8 朱洪等译,[美]S巴斯.计算机算法:设计和分析引论[M].上海:复旦大学出版社,1985
9 Endley L G. Towards the Development of a Complete Multi-project Scheduling System [J]. Journal ofIndustrial Engineering (S0022-183X), 1968, 19(10): 505-515.
10 EsakovJ,WeissT.Data Structures:An Advanced Approach Using C.Prentice-Hall,Inc.,1989 2/2 首页 上一页 1 2 |