LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
wf_parallel.m
1%% Parallel Workflow Example (AND-fork/join)
2% A workflow with parallel activities that synchronize.
3%
4% Workflow:
5% +-> B --+
6% A --| |--> D
7% +-> C --+
8%
9% Copyright (c) 2012-2026, Imperial College London
10% All rights reserved.
11
12clear;
13lineStart;
14
15%% Define the workflow
16wf = Workflow('ParallelWorkflow');
17
18% Add activities
19A = wf.addActivity('A', Exp.fitMean(1.0));
20B = wf.addActivity('B', Exp.fitMean(2.0));
21C = wf.addActivity('C', Exp.fitMean(3.0));
22D = wf.addActivity('D', Exp.fitMean(0.5));
23
24% Define precedences
25wf.addPrecedence(Workflow.AndFork(A, {B, C}));
26wf.addPrecedence(Workflow.AndJoin({B, C}, D));
27
28%% Convert to phase-type distribution
29ph = wf.toPH();
30
31%% Display results
32fprintf('Parallel Workflow: A -> [B || C] -> D\n');
33fprintf('Activity means: A=1.0, B=2.0, C=3.0, D=0.5\n');
34
35% Expected max of two exponentials: E[max(X,Y)] = 1/λ1 + 1/λ2 - 1/(λ1+λ2)
36lambda_B = 0.5; % rate for mean 2.0
37lambda_C = 1/3; % rate for mean 3.0
38expected_max = 2.0 + 3.0 - 1/(lambda_B + lambda_C);
39fprintf('Expected max(B,C) mean: %.4f\n', expected_max);
40fprintf('Expected total mean: %.4f\n', 1.0 + expected_max + 0.5);
41fprintf('Computed PH mean: %.4f\n', ph.getMean());
42fprintf('Number of phases: %d\n', size(ph.getSubgenerator(), 1));