1%% Workflow with Erlang Distribution
2% A workflow
using Erlang distributions
for lower variability.
4% Copyright (c) 2012-2026, Imperial College London
11wf = Workflow(
'ErlangWorkflow');
13% Add activities with Erlang distributions (SCV < 1)
14A = wf.addActivity('A', Erlang.fitMeanAndOrder(2.0, 4)); % 4 phases, SCV=0.25
15B = wf.addActivity('B', Erlang.fitMeanAndOrder(3.0, 2)); % 2 phases, SCV=0.5
16C = wf.addActivity('C', Exp.fitMean(1.0)); % 1 phase, SCV=1.0
18% Define serial precedence
19wf.addPrecedence(Workflow.Serial(A, B, C));
21%% Convert to phase-type distribution
25fprintf('Erlang Workflow: A -> B -> C\n');
26fprintf('Activity A: Erlang(mean=2.0, phases=4), SCV=0.25\n');
27fprintf('Activity B: Erlang(mean=3.0, phases=2), SCV=0.50\n');
28fprintf('Activity C: Exp(mean=1.0), SCV=1.00\n');
29fprintf('Expected total mean: %.2f\n', 2.0 + 3.0 + 1.0);
30fprintf('Computed PH mean: %.4f\n', ph.getMean());
31fprintf('Computed PH SCV: %.4f\n', ph.getSCV());
32fprintf('Number of phases: %d\n', size(ph.getSubgenerator(), 1));