perty 0.0.1

A implementation of the Programme Evaluation and Review Technique (PERT).
Documentation
use perty::{Duration, MontePostProcess, Pert, Task};

fn main() {
    let dur_a = Duration::Uniform { min: 2., max: 4. };
    let a = Task::new("A".to_string(), vec![], dur_a);
    let dur_b = Duration::Uniform { min: 5., max: 9. };
    let b = Task::new("B".to_string(), vec!["A".to_string()], dur_b);

    let project = vec![a, b];

    let mut runs = Vec::new();
    for _ in 0..10 {
        let run = project.solve_pert(1_000).unwrap();
        runs.push(run);
    }

    for (i, run) in runs.iter().enumerate() {
        println!("# RUN {i}");
        for t in run {
            println!("{}: {}", t.id, t.duration);
        }
    }

    println!();

    let mean = runs.mean_project_duration();
    println!("Mean Duration: {mean}");

    let task_criticalities = runs.task_criticality();
    println!("{:?}", task_criticalities);
}