我找的一些基於.NET庫/件的代碼來實現任務/活動調度喜歡在下列情況下,微軟項目調度...任務/活動優先級/依賴性
- 完成啓動
- 完成完成
- 開始到完成
- 開始啓動
請參閱瞭解其中情況下我是TA lking約... 關於鏈接任務 @http://office.microsoft.com/en-us/project-help/link-tasks-within-your-project-HA010364282.aspx?CTT=1
我找的一些基於.NET庫/件的代碼來實現任務/活動調度喜歡在下列情況下,微軟項目調度...任務/活動優先級/依賴性
請參閱瞭解其中情況下我是TA lking約... 關於鏈接任務 @http://office.microsoft.com/en-us/project-help/link-tasks-within-your-project-HA010364282.aspx?CTT=1
你可以寫一個Windows服務,如果你想使調度應用,任務,活動
你說的是CPM - 關鍵路徑法。
評估每個條件類型(Finish to Start,....)是一個簡單的Select-Case。
你需要eval早日期然後日期。這決定了關鍵路徑。
如果您的算法包括ASAP - ALAP對於某些任務,您可以評估預定日期aditional通過。
我對每個傳遞使用遞歸算法(Early Dates,Latest Dates ...)。這發現條件循環並顯示它們(任務1 - >任務2 - >任務1)。
CPM最複雜的任務是日曆管理。 Nothe該功能
Date1 = Calendar.Eval_DateFinish(Start, Duration)
成爲基於資源日曆區間的功能。
這裏是我的Ealy日期功能。
Private Sub cpm_fmte(ByVal n As Int32)
Dim a = Actividades(n), fi, f As FechaCpm, ncit As Integer = 0
fi.value = Integer.MinValue
Dim cal As Calend = a.Cal, dur As Integer = a.dur
sw(n) = 255 : RaBucle.Add(a) 'Marco la actividad para detectar bucle condicionantes
For Each c In a.Predecesoras '/* calcular predecesoras */
If c._Act >= nHitos Then
If c._Act < nTResumen Then Continue For
Select Case sw(c._Act)
Case 0 : cpm_fmte(c._Act)
Case 255 : ShowBucle(c._Act) : Throw New Exception("Cpm_ftme: Error - Bucle Condicionantes")
'case Else - 1 - Ya calculada anteriormente
End Select
End If
Dim Pred = Actividades(c._Act)
Select Case c.Tipo
Case "D"c : f.value = Pred.ffmte.value + c.Demora
Case "I"c : f.value = Pred.fimte.value + c.Demora : ncit += 1
Case "T"c : f = cal.Calc_Fi(Pred.ffmte + c.Demora, dur) : ncit += 1
Case Else : Throw New Exception(String.Format("Error condic.: {0} {1} {2} {3} {4}", _
a.Id, c.Tipo, Pred.Id, c.Demora))
End Select
If f > fi Then fi = f
Next
RaBucle.Count -= 1
If fi.value = Integer.MinValue Then fi = Proyecto.Actprj.FechaPrj
If dur > 0 Then fi = cal.Fecha_Jla_Av(fi)
a.fimte.value = fi.value : a.ffmte = cal.Calc_Ff(fi, dur)
a.Fip = a.fimte : a.Ffp = a.ffmte
If a.ffmte.value > Fmax.value Then mfmax.value = a.ffmte.value
If a.fimte.value < Fmin.value Then mFmin.value = a.fimte.value
sw(n) = 1 'Actividad calculada
End Sub
注意事項。 I'am Spanish then:
我使用FechaCpm類型(結構),作爲Int32類型(FechaCpm.Value)進行處理並將其解釋爲分鐘時間間隔單位。
您可以在SourceForge上獲得更多的CPM代碼,但我從來沒有在網上找到任何代碼。 您可以看到「Open WorkBench」 - Java或「Planner」 - C++。
我的代碼是基於CPM的,大多數Planification程序都是基於CPM的資源。 我只使用一種資源(人力資源),則日曆是任務屬性。
我不是說在特定時間間隔內運行任務,或者像這樣......我只是在談論項目計劃應用程序的類型,其中任務可以根據其持續時間+依賴性進行計劃。 – 2010-07-09 09:19:47