Applying Performance Analysis Modeling into Business Processes Management (BPM) Domain
Results of Some Experiments
Modeling Scenarios
Each scenario, by means of a simple model example, covers some important aspect in the modeling of business processes and evidences the pros and cons of the studied formalisms.
Scenario 1: Basic Structures
Example of a typical "Order Processing" business process
BPMN Model
GSPN Model
( Source file of the GSPN model for SMART ⇒
example1.sm )
Timed transitions | ta | tb | tc | td | te | tf | tg | th | ti | tj | tk | tl | tm |
Rate | 0.33 | 0.20 | 1.00 | 0.50 | 0.07 | 1.00 | 0.50 | 0.01 | 0.50 | 1.00 | 0.50 | 1.00 | 1.00 |
Immediate transitions | prob(c) | prob(d) | prob(e) | prob(g) | prob(k) | prob(l) |
Probabilities | 0.10 | 0.90 | 0.25 | 0.75 | 0.05 | 0.95 |
PEPA Model
Source file of the PEPA model for the PEPA
Plug-in Project ⇒
example1.pepa )
// Execution rates associated to each activity
rate_a = 0.33; rate_b = 0.20; rate_c = 1.00;
rate_d = 0.50; rate_e = 0.07; rate_f = 1.00;
rate_g = 0.50; rate_h = 0.01; rate_i = 0.50;
rate_j = 1.00; rate_k = 0.50; rate_l = 1.00;
rate_m = 1.00;
// Routing probabilities associated to the choices
prob_c = 0.1; prob_d = 1 - prob_c;
prob_e = 0.25; prob_g = 1 - prob_e;
prob_k = 0.05; prob_l = 1 - prob_k;
// Number of servers
num_servers = 1;
// Order processing
POrderProcessing = (a, rate_a).((b, prob_c * rate_b).(c, rate_c).POrderProcessing +
(b, prob_d * rate_b).PStock);
PStock = (d, prob_g * rate_d).PFinalize +
(d, prob_e * rate_d).(e, rate_e).(f, rate_f).PFinalize;
PFinalize = (g, rate_g).(h, rate_h).(m, rate_m).POrderProcessing;
PInvoice = (g, infty).(i, rate_i).PCheck;
PCheck = (j, prob_l * rate_j).(l, rate_l).(m, infty).PInvoice +
(j, prob_k * rate_j).(k, rate_k).PCheck;
// Whole process
POrderProcessing[num_servers] <g,m> PInvoice[num_servers]
SAN Model
( Source file of the SAN model for PEPS ⇒
example1.san )
|
Event | Type | Rate |
a | loc | 0.33 |
b1 | loc | prob(d) * 0.20 |
b2 | loc | prob(c) * 0.20 |
c | loc | 1.00 |
d1 | loc | prob(e) * 0.50 |
d2 | loc | prob(g) * 0.50 |
e | loc | 0.07 |
f | loc | 1.00 |
g | sync | 0.50 |
h | loc | 0.01 |
i | loc | 0.50 |
j1 | loc | prob(k) * 1.00 |
j2 | loc | prob(l) * 1.00 |
k | loc | 0.50 |
l | loc | 1.00 |
m | sync | 1.00 |
|
Scenario 2: Advanced Branching / Merging Structures
A simple model of a process to determine the cost of a medical service (based on the french health-care system)
BPMN Model
GSPN Model
( Source file of the GSPN model for SMART ⇒
example2.sm )
|
Timed transitions | ta | tb | tc | td | te |
Rate | 0.50 | 0.20 | 0.25 | 0.01 | 1.00 |
Immediate transitions | prob(b) | 1 - prob(b) | prob(d) | 1 - prob(d) |
Probabilities | 0.85 | 0.15 | 0.73 | 0.27 |
|
PEPA Model
( Source file of the PEPA model for the PEPA
Plug-in Project ⇒
example2.pepa )
// Execution rates associated to each activity
r_a = 0.50; r_b = 0.20; r_c = 0.25; r_d = 0.01;
r_e = 1.00; r_immediate = 50.00;
// Routing probabilities associated to the multi-choice
prob_c = 0.85; prob_d = 0.73;
// Medical service cost calculation sub processes
PCalc = (a,r_a).(b,r_b).(e,r_e).PCalc;
P1 = (b,infty).((c1,prob_c * r_immediate).(c,r_c).(e, infty).P1 +
(c2,(1-prob_c) * r_immediate).(e,infty).P1);
P2 = (b,infty).((d1,prob_d * r_immediate).(d,r_d).(e,infty).P2 +
(d2,(1-prob_d) * r_immediate).(e,infty).P2);
// Whole process
PCalc <b,e> P1 <b,e> P2
SAN Model
( Source file of the SAN model for PEPS ⇒
example2.san )
|
Event | Type | Rate |
a | loc | 0.50 |
b | sync | 0.20 |
c1 | loc | prob(c) * 50 |
c2 | loc | (1 - prob(c)) * 50 |
c | loc | 0.25 |
d1 | loc | prob(d) * 50 |
d2 | loc | (1 - prob(d)) *50 |
d | loc | 0.01 |
e | sync | 1.00 |
|
Scenario 3: Functional Dependencies
A simple "producer / packer" process
BPMN Model
GSPN Model
( Source file of the GSPN model for SMART ⇒
example3.sm )
|
Timed transitions | ta | tb | tc | td |
Rate | 0.02 | 0.10 | 0.33 | 0.12 |
|
PEPA Model
( Source file of the PEPA model for the PEPA
Plug-in Project ⇒
example3.pepa )
// Execution rates associated to each activity
rate_a = 0.02; rate_b = 0.1;
rate_c = 0.33; rate_d = 0.12;
// Sub processes representing the producer and the packer
PProducer = (a, rate_a).(b, rate_b).PProducer;
PPacker = (c, rate_c).(d, rate_d).PPacker;
// Sub process representing a stock with max size = 9
PStock = (a,infty).(b, infty).PStock1;
PStock1 = (a,infty).(b, infty).PStock2;
PStock2 = (a,infty).(b, infty).PStock3;
PStock3 = (a,infty).(b, infty).PStock4 + (c, infty).PStock;
PStock4 = (a,infty).(b, infty).PStock5 + (c, infty).PStock1;
PStock5 = (a,infty).(b, infty).PStock6 + (c, infty).PStock2;
PStock6 = (a,infty).(b, infty).PStock7 + (c, infty).PStock3;
PStock7 = (a,infty).(b, infty).PStock8 + (c, infty).PStock4;
PStock8 = (a,infty).(b, infty).PStock9 + (c, infty).PStock5;
PStock9 = (c,infty).PStock6;
// Whole process
PProducer <a,b> PStock <c> PPacker
SAN Model
( Source file of the SAN model for PEPS ⇒
example3.san )
|
Event | Type | Rate |
a | loc | f |
b | sync | 0.10 |
c | syn | 0.33 |
d | loc | 0.12 |
f = | |
0.00, if state(A3) == 3_9 |
0.02, if state(A3) != 3_9 |
|