API

ProjectManagement.ProjectType
Project(task_durations, links)
  • task_durations::NamedTuple: a namedtuple where the keys are the names of the tasks, and the values indicate the timing.
    • The timing values can be a Real value (like 5.0) to represent a fixed duration; or anything sampleable to represent a duration only probabilistically known. i.e. any object dur that has rand(rng, dur)::Real defined on it. e.g. any collection or distribution object. Particularly relevent is PertBeta(min, mode, max) which is the standard used for PERT estimation.
  • links::Vector{Pair{Symbol, Symbol}}: a collection of pairs for all the depencencies of tasks. e.g. [:a => :b, :a=>:c, :c=>:d]. A convienent way to write this is often using broadcasting and matrix notation for vcat: [:a .=> [:b, :c]; :c => :d].

The task names start and finish are special, in that they represent the begining and ending milestones of the project. They must be in the task_durations with duration 0, and they respectively must be the root and only leaf of the graph decribed by the links.

source
ProjectManagement.critical_pathMethod
critical_path([f=mean], proj::Project)

Computes the critical path though the project. This is the path who's duration determines the completion time of the project.

You may pass in a function f to transform the duration when computing the cost. By default it uses mean, but for example you can assume everything is worst case using path_durations(maximum, proj); or you could compute the path length in terms of number of tasks using path_durations(x->1, proj).

See also path_durations.

source
ProjectManagement.densityFunction
density(proj::Project, nsamples=100_000, rng=Random.default_rng())

Displayed a probability density function for how long it will take to complete the project. nsamples controls how many samples are used to estimate the distribution, increasing this makes it take longer, but be more accurate. rng controls the random number generator to use, you shouldn't normally need to touch this.

Gadfly.jl is used for the displaying. A RecipesBase.jl recipe is also provided and so this can be used with StatsPlots.jl similarly: as StatsPlots.density(proj).

source
ProjectManagement.path_durationsMethod
path_durations([f=mean], proj::Project)

Compute the duration of every path of tasks with in the project. They are returned as a vector of pairs: path => cost, sorted by cost (descending). Thus the first is the critical path, and the last is the least critical path.

You may pass in a function f to transform the duration when computing the cost. By default it uses mean, but for example you can assume everything is worst case using path_durations(maximum, proj); or you could compute the path length in terms of number of tasks using path_durations(x->1, proj).

See also critical_path.

source
ProjectManagement.validate_linksMethod
validate_links(proj)

Checks that: - the links in proj form a directed acyclic graph - that every end-point in the links is on task_durations - that every task in task_durations occurs in links

source
ProjectManagement.visualize_chartMethod
visualize_chart(proj::Project; fontsize=2)

Visualizes the project as a PERT Chart. Each task is places to the right of the tasks that much be completed first.

source