Skip to content

Commit ec2c57e

Browse files
authored
Merge pull request #73 from AutomatedProcessImprovement/batching_stats
Added batching ID to the simulation results
2 parents 7b68b7d + 301f8ca commit ec2c57e

16 files changed

+242
-1880
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,4 @@ bimp_test_examples/
1818
.vscode/
1919
dist/
2020
poetry.lock
21+
testing_scripts/assets/simulation_warnings.txt

prosimos/control_flow_manager.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import random
33
import secrets
44
import sys
5+
import uuid
56
from collections import deque
67
from enum import Enum
78
from typing import List
@@ -23,6 +24,7 @@ def __init__(self, all_case_ids, task_batch_info, curr_task_id, batch_spec, star
2324
self.task_batch_info = task_batch_info[curr_task_id]
2425
self.batch_spec = batch_spec
2526
self.start_time_from_rule = start_time_from_rule
27+
self.batch_id = str(uuid.uuid4())
2628

2729
def is_sequential(self):
2830
return self.task_batch_info.type == BATCH_TYPE.SEQUENTIAL

prosimos/execution_info.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ def __init__(self):
2525

2626
class TaskEvent:
2727
def __init__(self, p_case, task_id, resource_id, resource_available_at=None,
28-
enabled_at=None, enabled_datetime=None, bpm_env=None, num_tasks_in_batch=0):
28+
enabled_at=None, enabled_datetime=None, bpm_env=None, num_tasks_in_batch=0, batch_id=None):
2929
self.p_case = p_case # ID of the current trace, i.e., index of the trace in log_info list
3030
self.task_id = task_id # Name of the task related to the current event
3131
self.type = BPMN.TASK # showing whether it's task or event
@@ -35,6 +35,7 @@ def __init__(self, p_case, task_id, resource_id, resource_available_at=None,
3535
self.normalized_waiting = None
3636
self.normalized_processing = None
3737
self.worked_intervals = []
38+
self.batch_id = batch_id
3839

3940
if resource_available_at is not None:
4041
# Time moment in seconds from beginning, i.e., first event has time = 0
@@ -91,6 +92,7 @@ def create_event_entity(cls, c_event: EnabledEvent, ended_at, ended_datetime):
9192
cls.idle_processing_time = 0.0
9293
cls.cycle_time = 0.0
9394
cls.processing_time = 0.0
95+
cls.batch_id = c_event.batch_info_exec.batch_id if c_event.batch_info_exec is not None else None
9496

9597
return cls
9698

prosimos/file_manager.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ def __init__(self, chunk_size, file_writter, additional_column_names = []):
55
self.chunk_size = chunk_size
66
self.data_buffer = list()
77
self.file_writter = file_writter
8-
8+
self.has_batch = "batch_id" in additional_column_names
99
self._add_header_row(additional_column_names)
1010

1111
def add_csv_row(self, csv_row):

prosimos/simulation_engine.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ def __init__(self, sim_setup: SimDiffSetup, stat_fwriter, log_fwriter):
4040
self.sim_resources = dict()
4141
self.stat_fwriter = stat_fwriter
4242
self.additional_columns = self.sim_setup.all_attributes.get_all_columns_generated()
43+
if self.sim_setup.batch_processing not in [None, {}]:
44+
self.additional_columns.append("batch_id")
4345
self.log_writer = FileManager(10000, log_fwriter, self.additional_columns)
4446
self.log_info = LogInfo(sim_setup)
4547
self.executed_events = 0
@@ -363,8 +365,11 @@ def get_csv_row_data(self, full_event: TaskEvent):
363365
)
364366

365367
all_attrs = self.sim_setup.bpmn_graph.get_all_attributes(full_event.p_case)
366-
values = ["" if all_attrs.get(col) is None else all_attrs.get(col) for col in self.additional_columns]
367368

369+
# values = ["" if all_attrs.get(col) is None else all_attrs.get(col) for col in self.additional_columns]
370+
values = ["" if all_attrs.get(col) is None else all_attrs.get(col) for col in self.additional_columns if col != "batch_id"]
371+
if self.log_writer.has_batch:
372+
values.append(str(full_event.batch_id))
368373
return [*row_basic_info, *values]
369374

370375
def append_any_enabled_batch_tasks(self, current_event: EnabledEvent) -> List[EnabledEvent]:
@@ -492,6 +497,7 @@ def execute_seq_task_batch(self, c_event: EnabledEvent, chunks):
492497
enabled_datetime,
493498
self,
494499
num_tasks_in_batch,
500+
c_event.batch_info_exec.batch_id
495501
)
496502

497503
self.sim_resources[r_id].worked_time += full_evt.ideal_duration
@@ -543,6 +549,7 @@ def execute_parallel_task_batch(self, c_event: EnabledEvent, chunks):
543549
enabled_datetime,
544550
self,
545551
num_tasks_in_batch,
552+
c_event.batch_info_exec.batch_id
546553
)
547554

548555
(
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<bpmn:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL"
4+
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
5+
xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"
6+
xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_1ou5i7i" targetNamespace="http://bpmn.io/schema/bpmn" exporter="bpmn-js (https://demo.bpmn.io)" exporterVersion="17.7.1">
7+
<bpmn:process id="SIMPLE_LOOP_PROCESS" isExecutable="false">
8+
<bpmn:startEvent id="START_EVENT">
9+
<bpmn:outgoing>FLOW_START_FIRST</bpmn:outgoing>
10+
</bpmn:startEvent>
11+
<bpmn:sequenceFlow id="FLOW_START_FIRST" sourceRef="START_EVENT" targetRef="FIRST_ACTIVITY" />
12+
13+
<bpmn:task id="FIRST_ACTIVITY" name="First Activity">
14+
<bpmn:incoming>FLOW_START_FIRST</bpmn:incoming>
15+
<bpmn:outgoing>FLOW_FIRST_END</bpmn:outgoing>
16+
</bpmn:task>
17+
<bpmn:sequenceFlow id="FLOW_FIRST_END" sourceRef="FIRST_ACTIVITY" targetRef="END_EVENT" />
18+
<bpmn:endEvent id="END_EVENT">
19+
<bpmn:incoming>FLOW_FIRST_END</bpmn:incoming>
20+
</bpmn:endEvent>
21+
</bpmn:process>
22+
</bpmn:definitions>
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
{
2+
"resource_profiles": [
3+
{
4+
"id": "FIRST_ACTIVITY",
5+
"name": "Base Resource Pool",
6+
"resource_list": [
7+
{
8+
"id": "BASE_RESOURCE",
9+
"name": "BASE_RESOURCE",
10+
"cost_per_hour": 10,
11+
"amount": 1,
12+
"calendar": "BASE_CALENDAR",
13+
"assigned_tasks": ["FIRST_ACTIVITY"]
14+
}
15+
],
16+
"fixed_cost_fn": "15"
17+
}
18+
],
19+
"arrival_time_distribution": {
20+
"distribution_name": "fix",
21+
"distribution_params": [{ "value": 86400 }]
22+
},
23+
"arrival_time_calendar": [
24+
{
25+
"from": "MONDAY",
26+
"to": "SUNDAY",
27+
"beginTime": "09:00:00",
28+
"endTime": "10:00:00"
29+
}
30+
],
31+
"gateway_branching_probabilities": [],
32+
"task_resource_distribution": [
33+
{
34+
"task_id": "FIRST_ACTIVITY",
35+
"resources": [
36+
{
37+
"resource_id": "BASE_RESOURCE",
38+
"distribution_name": "fix",
39+
"distribution_params": [{ "value": 3600 }]
40+
}
41+
]
42+
}
43+
],
44+
"resource_calendars": [
45+
{
46+
"id": "BASE_CALENDAR",
47+
"name": "BASE_CALENDAR",
48+
"time_periods": [
49+
{
50+
"to": "FRIDAY",
51+
"from": "MONDAY",
52+
"beginTime": "09:00:00",
53+
"endTime": "18:00:00"
54+
}
55+
]
56+
}
57+
],
58+
"event_distribution": {},
59+
"batch_processing": [
60+
{
61+
"task_id": "FIRST_ACTIVITY",
62+
"type": "Parallel",
63+
"size_distrib": [
64+
{ "key": "1", "value": 0.0 },
65+
{ "key": "4", "value": 1.0 }
66+
],
67+
"duration_distrib": [{ "key": "4", "value": 0.5 }],
68+
"firing_rules": [[{ "attribute": "size", "comparison": "=", "value": 4 }]]
69+
}
70+
],
71+
"start_time": "2000-01-01T00:00:00Z",
72+
"total_cases": 8
73+
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"task_resource_distribution": [{"task_id": "Activity_1gpdzmu", "resources": [{"distribution_name": "fix", "distribution_params": [{"value": 1}], "resource_id": "sid-e9dfbb63-376b-4689-955e-f797570bab28_1"}]}, {"task_id": "Activity_09vt3u8", "resources": [{"distribution_name": "fix", "distribution_params": [{"value": 0}], "resource_id": "sid-e9dfbb63-376b-4689-955e-f797570bab28_1"}]}, {"task_id": "Activity_1do6fuk", "resources": [{"distribution_name": "fix", "distribution_params": [{"value": 0}], "resource_id": "sid-e9dfbb63-376b-4689-955e-f797570bab28_1"}]}], "resource_calendars": [{"id": "sid-30dd3c27-2d47-41da-beaa-997a668ef5b8", "name": "default schedule", "time_periods": [{"from": "MONDAY", "to": "FRIDAY", "beginTime": "00:00:00.000", "endTime": "23:59:00.000", "probability": 0.6807814745471341}], "workload_ratio": [{"from": "MONDAY", "to": "FRIDAY", "beginTime": "00:00:00.000", "endTime": "23:59:00.000", "probability": 0.381054284888934}]}], "gateway_branching_probabilities": [], "arrival_time_distribution": {"distribution_name": "fix", "distribution_params": [{"value": 1}]}, "arrival_time_calendar": [{"from": "MONDAY", "to": "SUNDAY", "beginTime": "00:00:00.000", "endTime": "23:59:00.000"}], "resource_profiles": [{"id": "sid-e9dfbb63-376b-4689-955e-f797570bab28", "name": "Default resource profile", "resource_list": [{"id": "sid-e9dfbb63-376b-4689-955e-f797570bab28_1", "name": "Default resource profile 1", "cost_per_hour": 0, "amount": 1, "calendar": "sid-30dd3c27-2d47-41da-beaa-997a668ef5b8", "assignedTasks": []}]}], "event_distribution": [], "batch_processing": [], "case_attributes": [{"name": "G_CASE_EVENT", "type": "continuous", "values": {"distribution_name": "fix", "distribution_params": [{"value": 1.0}]}}], "prioritisation_rules": [], "model_type": "FUZZY", "granule_size": {"time_unit": "minutes", "value": 1}, "global_attributes": [{"name": "G_CASE_EVENT", "type": "continuous", "values": {"distribution_name": "fix", "distribution_params": [{"value": 0.0}]}}], "event_attributes": [{"event_id": "Activity_1gpdzmu", "attributes": [{"name": "G_CASE_EVENT", "type": "continuous", "values": {"distribution_name": "fix", "distribution_params": [{"value": 2.0}]}}]}]}
1+
{"task_resource_distribution": [{"task_id": "Activity_1gpdzmu", "resources": [{"distribution_name": "fix", "distribution_params": [{"value": 1}], "resource_id": "sid-e9dfbb63-376b-4689-955e-f797570bab28_1"}]}, {"task_id": "Activity_09vt3u8", "resources": [{"distribution_name": "fix", "distribution_params": [{"value": 0}], "resource_id": "sid-e9dfbb63-376b-4689-955e-f797570bab28_1"}]}, {"task_id": "Activity_1do6fuk", "resources": [{"distribution_name": "fix", "distribution_params": [{"value": 0}], "resource_id": "sid-e9dfbb63-376b-4689-955e-f797570bab28_1"}]}], "resource_calendars": [{"id": "sid-30dd3c27-2d47-41da-beaa-997a668ef5b8", "name": "default schedule", "time_periods": [{"from": "MONDAY", "to": "FRIDAY", "beginTime": "00:00:00.000", "endTime": "23:59:00.000", "probability": 0.5741927864656469}], "workload_ratio": [{"from": "MONDAY", "to": "FRIDAY", "beginTime": "00:00:00.000", "endTime": "23:59:00.000", "probability": 0.247589732040706}]}], "gateway_branching_probabilities": [], "arrival_time_distribution": {"distribution_name": "fix", "distribution_params": [{"value": 1}]}, "arrival_time_calendar": [{"from": "MONDAY", "to": "SUNDAY", "beginTime": "00:00:00.000", "endTime": "23:59:00.000"}], "resource_profiles": [{"id": "sid-e9dfbb63-376b-4689-955e-f797570bab28", "name": "Default resource profile", "resource_list": [{"id": "sid-e9dfbb63-376b-4689-955e-f797570bab28_1", "name": "Default resource profile 1", "cost_per_hour": 0, "amount": 1, "calendar": "sid-30dd3c27-2d47-41da-beaa-997a668ef5b8", "assignedTasks": []}]}], "event_distribution": [], "batch_processing": [], "case_attributes": [{"name": "G_CASE_EVENT", "type": "continuous", "values": {"distribution_name": "fix", "distribution_params": [{"value": 1.0}]}}], "prioritisation_rules": [], "model_type": "FUZZY", "granule_size": {"time_unit": "minutes", "value": 1}, "global_attributes": [{"name": "G_CASE_EVENT", "type": "continuous", "values": {"distribution_name": "fix", "distribution_params": [{"value": 0.0}]}}], "event_attributes": [{"event_id": "Activity_1gpdzmu", "attributes": [{"name": "G_CASE_EVENT", "type": "continuous", "values": {"distribution_name": "fix", "distribution_params": [{"value": 2.0}]}}]}]}

testing_scripts/assets/event_attributes/simulation_warnings.txt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,18 @@
11
Gateway sid-6B518C80-2B96-4C95-B6DE-F9E4A75FF191 is using conditions, but some are missing. Flows without conditions: sid-6FD4FFD3-5784-4D33-9509-234EAB886930, sid-9E95A790-241E-4629-8D67-E9A2CE55E3DC
22
Gateway sid-6B518C80-2B96-4C95-B6DE-F9E4A75FF191 is using conditions, but some are missing. Flows without conditions: sid-6FD4FFD3-5784-4D33-9509-234EAB886930, sid-9E95A790-241E-4629-8D67-E9A2CE55E3DC
3+
TASK 'B' (ID: sid-4B24111F-B305-4608-9E12-744B47C44D0D) is used less frequently, only in 0 out of 6 cases (0.00%).
34
Gateway sid-6B518C80-2B96-4C95-B6DE-F9E4A75FF191 is using conditions, but some are missing. Flows without conditions: sid-6FD4FFD3-5784-4D33-9509-234EAB886930, sid-9E95A790-241E-4629-8D67-E9A2CE55E3DC
45
Gateway sid-6B518C80-2B96-4C95-B6DE-F9E4A75FF191 is using conditions, but some are missing. Flows without conditions: sid-6FD4FFD3-5784-4D33-9509-234EAB886930, sid-9E95A790-241E-4629-8D67-E9A2CE55E3DC
56
Gateway sid-6B518C80-2B96-4C95-B6DE-F9E4A75FF191 is using conditions, but some are missing. Flows without conditions: sid-6FD4FFD3-5784-4D33-9509-234EAB886930, sid-9E95A790-241E-4629-8D67-E9A2CE55E3DC
6-
TASK 'B' (ID: sid-4B24111F-B305-4608-9E12-744B47C44D0D) is used less frequently, only in 0 out of 10 cases (0.00%).
77
Gateway sid-6B518C80-2B96-4C95-B6DE-F9E4A75FF191 is using conditions, but some are missing. Flows without conditions: sid-6FD4FFD3-5784-4D33-9509-234EAB886930, sid-9E95A790-241E-4629-8D67-E9A2CE55E3DC
88
Gateway sid-6B518C80-2B96-4C95-B6DE-F9E4A75FF191 is using conditions, but some are missing. Flows without conditions: sid-6FD4FFD3-5784-4D33-9509-234EAB886930, sid-9E95A790-241E-4629-8D67-E9A2CE55E3DC
99
TASK 'B' (ID: sid-4B24111F-B305-4608-9E12-744B47C44D0D) is used less frequently, only in 0 out of 3 cases (0.00%).
1010
Gateway sid-6B518C80-2B96-4C95-B6DE-F9E4A75FF191 is using conditions, but some are missing. Flows without conditions: sid-6FD4FFD3-5784-4D33-9509-234EAB886930, sid-9E95A790-241E-4629-8D67-E9A2CE55E3DC
1111
Gateway sid-6B518C80-2B96-4C95-B6DE-F9E4A75FF191 is using conditions, but some are missing. Flows without conditions: sid-6FD4FFD3-5784-4D33-9509-234EAB886930, sid-9E95A790-241E-4629-8D67-E9A2CE55E3DC
12-
TASK 'B' (ID: sid-4B24111F-B305-4608-9E12-744B47C44D0D) is used less frequently, only in 0 out of 3 cases (0.00%).
1312
Gateway sid-6B518C80-2B96-4C95-B6DE-F9E4A75FF191 is using conditions, but some are missing. Flows without conditions: sid-6FD4FFD3-5784-4D33-9509-234EAB886930, sid-9E95A790-241E-4629-8D67-E9A2CE55E3DC
14-
TASK 'B' (ID: sid-4B24111F-B305-4608-9E12-744B47C44D0D) is used less frequently, only in 0 out of 4 cases (0.00%).
1513
Gateway sid-6B518C80-2B96-4C95-B6DE-F9E4A75FF191 is using conditions, but some are missing. Flows without conditions: sid-6FD4FFD3-5784-4D33-9509-234EAB886930, sid-9E95A790-241E-4629-8D67-E9A2CE55E3DC
1614
Gateway sid-6B518C80-2B96-4C95-B6DE-F9E4A75FF191 is using conditions, but some are missing. Flows without conditions: sid-6FD4FFD3-5784-4D33-9509-234EAB886930, sid-9E95A790-241E-4629-8D67-E9A2CE55E3DC
15+
TASK 'B' (ID: sid-4B24111F-B305-4608-9E12-744B47C44D0D) is used less frequently, only in 0 out of 9 cases (0.00%).
1716
Gateway sid-6B518C80-2B96-4C95-B6DE-F9E4A75FF191 is using conditions, but some are missing. Flows without conditions: sid-6FD4FFD3-5784-4D33-9509-234EAB886930, sid-9E95A790-241E-4629-8D67-E9A2CE55E3DC
1817
Gateway sid-6B518C80-2B96-4C95-B6DE-F9E4A75FF191 is using conditions, but some are missing. Flows without conditions: sid-6FD4FFD3-5784-4D33-9509-234EAB886930, sid-9E95A790-241E-4629-8D67-E9A2CE55E3DC
1918
Gateway sid-6B518C80-2B96-4C95-B6DE-F9E4A75FF191 is using conditions, but some are missing. Flows without conditions: sid-6FD4FFD3-5784-4D33-9509-234EAB886930, sid-9E95A790-241E-4629-8D67-E9A2CE55E3DC
@@ -39,7 +38,6 @@ Gateway sid-6B518C80-2B96-4C95-B6DE-F9E4A75FF191 is using conditions, but some a
3938
Gateway sid-6B518C80-2B96-4C95-B6DE-F9E4A75FF191 is using conditions, but some are missing. Flows without conditions: sid-6FD4FFD3-5784-4D33-9509-234EAB886930, sid-9E95A790-241E-4629-8D67-E9A2CE55E3DC
4039
Gateway sid-6B518C80-2B96-4C95-B6DE-F9E4A75FF191 is using conditions, but some are missing. Flows without conditions: sid-6FD4FFD3-5784-4D33-9509-234EAB886930, sid-9E95A790-241E-4629-8D67-E9A2CE55E3DC
4140
Gateway sid-6B518C80-2B96-4C95-B6DE-F9E4A75FF191 is using conditions, but some are missing. Flows without conditions: sid-6FD4FFD3-5784-4D33-9509-234EAB886930, sid-9E95A790-241E-4629-8D67-E9A2CE55E3DC
42-
TASK 'B' (ID: sid-4B24111F-B305-4608-9E12-744B47C44D0D) is used less frequently, only in 0 out of 10 cases (0.00%).
4341
Gateway sid-6B518C80-2B96-4C95-B6DE-F9E4A75FF191 is using conditions, but some are missing. Flows without conditions: sid-6FD4FFD3-5784-4D33-9509-234EAB886930, sid-9E95A790-241E-4629-8D67-E9A2CE55E3DC
4442
Gateway sid-6B518C80-2B96-4C95-B6DE-F9E4A75FF191 is using conditions, but some are missing. Flows without conditions: sid-6FD4FFD3-5784-4D33-9509-234EAB886930, sid-9E95A790-241E-4629-8D67-E9A2CE55E3DC
4543
Gateway sid-6B518C80-2B96-4C95-B6DE-F9E4A75FF191 is using conditions, but some are missing. Flows without conditions: sid-6FD4FFD3-5784-4D33-9509-234EAB886930, sid-9E95A790-241E-4629-8D67-E9A2CE55E3DC

0 commit comments

Comments
 (0)