簡體   English   中英

任務/活動優先級/依賴性

[英]task/activity precedences/dependencies

我正在尋找一些基於.net的庫/代碼來實現任務/活動計划,例如在以下情況下的Microsoft項目計划...

  1. 完成開始
  2. 完成到完成
  3. 開始完成
  4. 開始開始

請參閱了解我在說什么上下文。 關於鏈接任務 @ http://office.microsoft.com/zh-cn/project-help/link-tasks-within-your-project-HA010364282.aspx? CTT = 1

您正在談論CPM-關鍵路徑方法。

評估每個條件類型(完成到開始....)是一個簡單的Select-Case。

您需要先評估,然后再評估。 這確定了關鍵路徑。

如果您的算法包括針對某些任務的ASAP-ALAP,則可以評估“計划日期”附加通行證。

我為每個通行證使用遞歸算法(早期日期,最新日期...)。 發現條件循環並顯示它們(任務1->任務2->任務1)。

CPM最無能為力的任務是日歷管理。 那個功能

Date1 = Calendar.Eval_DateFinish(Start, Duration)

根據資源日歷間隔成為函數。

這是我的約會日期功能。

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

筆記。 我是西班牙人:

  • Fmte->早期日期(FechasmásTempranas),Fmta->最新日期,Fp-Schedulded。
  • Fi->開始日期(Fecha Inicio),FF->完成日期(FechaFín)
  • Actividades-任務
  • “ D” c->(完成-開始),“Después”,
  • “ I” c->(開始-開始)“ Inician ...”
  • “ T” c->(完成-完成)“ Terminan ...”
  • 從未使用過Start-Finish條件。

我使用的是FechaCpm類型(結構),該類型相當於Int32類型(FechaCpm.Value),並解釋為分鍾時間間隔單位。

您可以在SourceForge上獲得有關CPM的更多代碼,但我在Net上找不到任何代碼。 您可以看到“ Open WorkBench”-Java或“ Planner”-C ++。

我的代碼基於CPM,大多數規划程序都是基於資源的支持CPM。 我只使用一種資源(人力資源),所以Calendar是Task屬性。

如果要調度應用程序,任務,活動,可以編寫Windows服務

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM