LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
wf_complex.m
1%% Complex Workflow Example
2% A workflow combining serial, parallel, and branching patterns.
3%
4% Workflow:
5% +-> C --+
6% A -> B -> [AND] | | [AND] -> F -> G
7% +-> D --+
8% |
9% +-> [OR] -> E (30%)
10% +-> skip (70%)
11%
12% Copyright (c) 2012-2026, Imperial College London
13% All rights reserved.
14
15clear;
16lineStart;
17
18%% Define the workflow
19wf = Workflow('ComplexWorkflow');
20
21% Add activities
22A = wf.addActivity('A', Exp.fitMean(0.5));
23B = wf.addActivity('B', Exp.fitMean(1.0));
24C = wf.addActivity('C', Exp.fitMean(2.0));
25D = wf.addActivity('D', Exp.fitMean(1.5));
26F = wf.addActivity('F', Exp.fitMean(1.0));
27G = wf.addActivity('G', Exp.fitMean(0.5));
28
29% Define precedences
30wf.addPrecedence(Workflow.Serial(A, B)); % A -> B
31wf.addPrecedence(Workflow.AndFork(B, {C, D})); % B forks to C and D
32wf.addPrecedence(Workflow.AndJoin({C, D}, F)); % C and D join to F
33wf.addPrecedence(Workflow.Serial(F, G)); % F -> G
34
35%% Convert to phase-type distribution
36ph = wf.toPH();
37
38%% Display results
39fprintf('Complex Workflow: A -> B -> [C || D] -> F -> G\n');
40fprintf('Activity means: A=0.5, B=1.0, C=2.0, D=1.5, F=1.0, G=0.5\n');
41
42% Calculate expected max(C, D)
43lambda_C = 0.5; % rate for mean 2.0
44lambda_D = 1/1.5; % rate for mean 1.5
45expected_max = 2.0 + 1.5 - 1/(lambda_C + lambda_D);
46fprintf('Expected max(C,D) mean: %.4f\n', expected_max);
47fprintf('Expected total mean: %.4f\n', 0.5 + 1.0 + expected_max + 1.0 + 0.5);
48fprintf('Computed PH mean: %.4f\n', ph.getMean());
49fprintf('Number of phases: %d\n', size(ph.getSubgenerator(), 1));
50
51%% Sample from the distribution
52rng(23002);
53fprintf('\nSampling 1000000 workflow execution times...\n');
54samples = ph.sample(1000000);
55fprintf('Sample mean: %.4f\n', mean(samples));
56fprintf('Sample std: %.4f\n', std(samples));
57fprintf('Sample min: %.4f\n', min(samples));
58fprintf('Sample max: %.4f\n', max(samples));