задачи / действия приоритеты / зависимости - PullRequest
1 голос
/ 09 июля 2010

Я ищу библиотеку / фрагмент кода на основе .net для реализации планирования задач / действий, например, для планирования проектов Microsoft в следующих случаях ...

  1. Готово к началу
  2. От финиша до финиша
  3. Начало до конца
  4. Старт, чтобы начать

пожалуйста, обратитесь, чтобы понять, в каком контексте я говорю ... О связывании задач @ http://office.microsoft.com/en-us/project-help/link-tasks-within-your-project-HA010364282.aspx?CTT=1

Ответы [ 2 ]

1 голос
/ 20 июля 2010

Вы говорите о CPM - метод критического пути.

Оцените каждый тип условия (Finish to Start, ....) в простом Select - Case.

Вам нужно оценить ранние даты, а затем более поздние. Это определяет Критический Путь.

Если ваш алгоритм включает в себя КАК МОЖНО СКОРЕЕ - ALAP для некоторых задач, вы можете пройти дополнительный проход по запланированным датам.

Я использую рекурсивный алгоритм для каждого прохода (ранние даты, последние даты ...). Это обнаруживает зацикливание условий и показывает их (Задача1 -> Задача2 -> Задача1).

Наиболее сложной задачей для CPM является управление календарем. Не то, что функция

Date1 = Calendar.Eval_DateFinish(Start, Duration)

Становится функцией на основе календарных интервалов ресурсов.

Вот моя функция для Ealy Dates.

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 -> (Finish - начало), "Después",
  • "Я" c -> (Пуск - Старт) "Inician ..."
  • "T" c -> (Finish - Finish) "Терминан ..."
  • Никогда не использовал Start - Finish условие.

Я использую тип (структуру) FechaCpm, который выделяется как тип Int32 (FechaCpm.Value) и интерпретируется как единица измерения минутного интервала времени.

Вы можете получить больше кода для CPM на SourceForge, но я никогда не нахожу никакого кода в сети. Вы можете увидеть «Open WorkBench» - Java или «Planner» - C ++.

Мой код основан на CPM, большинство программ Planification основаны на ресурсах, поддерживающих CPM. Я использую только один ресурс (человеческий ресурс), тогда календарь - это свойство задачи.

0 голосов
/ 09 июля 2010

Вы можете написать Службу Windows, если хотите выполнять планирование приложений, задач, действий

...