任务/活动优先级/依赖关系

时间:2010-07-09 08:05:43

标签: c# vb.net scheduling scheduled-tasks project-planning

我正在寻找一些基于.net的库/代码来实现任务/活动调度,如以下情况下的微软项目调度......

  1. 完成开始
  2. 完成至完成
  3. 开始结束
  4. 开始
  5. 请参阅了解我在谈论哪种情况...... 关于关联任务 @ http://office.microsoft.com/en-us/project-help/link-tasks-within-your-project-HA010364282.aspx?CTT=1

2 个答案:

答案 0 :(得分:1)

您正在谈论CPM - 关键路径方法。

Eval每个条件类型(Finish to Start,....)是一个简单的Select - Case。

您需要早期日期,然后是日期。这决定了关键路径。

如果你的算法包括某些任务的ASAP - ALAP,你可以评估预定日期的附加通行证。

我为每个Pass使用Recursive algorhitm(早期日期,最新日期......)。这发现条件循环并显示它们(Task1 - > Task2 - > Task1)。

CPM最无用的任务是日历管理。 不是那个功能

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

注记。我当时是西班牙语:

  • Fmte - &gt;早期日期(FechasmásTempranas),Fmta - &gt;最新日期,Fp - Schedulded。
  • Fi - &gt;开始日期(Fecha Inicio),FF - &gt;完成日期(FechaFín)
  • Actividades - 任务
  • “D”c - &gt; (完成 - 开始),“Después”,
  • “我”c - &gt; (开始 - 开始)“Inician ......”
  • “T”c - &gt; (完成 - 完成)“Terminan ......”
  • 从未使用过Start - Finish条件。

我使用FechaCpm类型(结构)作为Int32类型(FechaCpm.Value),并将其解释为分钟时间间隔单位。

您可以在SourceForge上获得更多CPM代码,但我从未在Net上找到任何代码。 你可以看到“Open WorkBench” - Java或“Planner” - C ++。

我的代码基于CPM,大多数计划化程序都是基于资源的,支持CPM。 我只使用一个资源(人力资源),然后Calendar是一个Task属性。

答案 1 :(得分:0)

如果要进行日程安排应用程序,任务和活动,可以编写Windows服务