【问题标题】:task/activity precedences/dependencies任务/活动优先级/依赖关系
【发布时间】:2011-03-13 18:10:40
【问题描述】:

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

  1. 完成开始
  2. 完成到完成
  3. 从头到尾
  4. 开始开始

请参考理解我在说什么... 关于链接任务@http://office.microsoft.com/en-us/project-help/link-tasks-within-your-project-HA010364282.aspx?CTT=1

【问题讨论】:

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


    【解决方案1】:

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

    评估每个条件类型(完成到开始,...)是一个简单的选择 - 案例。

    您需要先评估早期日期,然后再评估后期日期。这决定了关键路径。

    如果您的算法包括针对某些任务的 ASAP - ALAP,您可以评估 Scheduled Dates 附加通过。

    我对每个通道使用递归算法(早期日期,最新日期......)。这会发现条件循环并显示它们(Task1 -> Task2 -> Task1)。

    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 -> 早期日期(Fechas más Tempranas),Fmta -> 最新日期,Fp - 预定。
    • Fi -> 开始日期 (Fecha Inicio), FF -> 完成日期 (Fecha Fín)
    • Actividades - 任务
    • “D”c ->(完成 - 开始),“Después”,
    • “I”c ->(开始 - 开始)“Inician...”
    • “T”c ->(完成 - 完成)“Terminan ...”
    • 从未使用过开始 - 结束条件。

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

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

    我的代码基于 CPM,大多数规划程序都是基于资源的支持 CPM。 我只使用一种资源(人力资源),然后日历是一个任务属性。

    【讨论】:

      【解决方案2】:

      如果你想制作调度应用程序、任务、活动,你可以编写一个 Windows 服务

      【讨论】:

      • 我不是在谈论以特定间隔运行任务或类似这样......我只是在谈论项目计划类型的应用程序,其中任务可以根据其持续时间 + 依赖性来安排......
      猜你喜欢
      • 1970-01-01
      • 2015-05-16
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 2017-10-29
      • 1970-01-01
      相关资源
      最近更新 更多