Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,4 @@ bimp_test_examples/
.vscode/
dist/
poetry.lock
testing_scripts/assets/simulation_warnings.txt
2 changes: 2 additions & 0 deletions prosimos/control_flow_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import random
import secrets
import sys
import uuid
from collections import deque
from enum import Enum
from typing import List
Expand All @@ -23,6 +24,7 @@ def __init__(self, all_case_ids, task_batch_info, curr_task_id, batch_spec, star
self.task_batch_info = task_batch_info[curr_task_id]
self.batch_spec = batch_spec
self.start_time_from_rule = start_time_from_rule
self.batch_id = str(uuid.uuid4())

def is_sequential(self):
return self.task_batch_info.type == BATCH_TYPE.SEQUENTIAL
Expand Down
4 changes: 3 additions & 1 deletion prosimos/execution_info.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ def __init__(self):

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

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

return cls

Expand Down
2 changes: 1 addition & 1 deletion prosimos/file_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ def __init__(self, chunk_size, file_writter, additional_column_names = []):
self.chunk_size = chunk_size
self.data_buffer = list()
self.file_writter = file_writter

self.has_batch = "batch_id" in additional_column_names
self._add_header_row(additional_column_names)

def add_csv_row(self, csv_row):
Expand Down
9 changes: 8 additions & 1 deletion prosimos/simulation_engine.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ def __init__(self, sim_setup: SimDiffSetup, stat_fwriter, log_fwriter):
self.sim_resources = dict()
self.stat_fwriter = stat_fwriter
self.additional_columns = self.sim_setup.all_attributes.get_all_columns_generated()
if self.sim_setup.batch_processing not in [None, {}]:
self.additional_columns.append("batch_id")
self.log_writer = FileManager(10000, log_fwriter, self.additional_columns)
self.log_info = LogInfo(sim_setup)
self.executed_events = 0
Expand Down Expand Up @@ -363,8 +365,11 @@ def get_csv_row_data(self, full_event: TaskEvent):
)

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

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

def append_any_enabled_batch_tasks(self, current_event: EnabledEvent) -> List[EnabledEvent]:
Expand Down Expand Up @@ -492,6 +497,7 @@ def execute_seq_task_batch(self, c_event: EnabledEvent, chunks):
enabled_datetime,
self,
num_tasks_in_batch,
c_event.batch_info_exec.batch_id
)

self.sim_resources[r_id].worked_time += full_evt.ideal_duration
Expand Down Expand Up @@ -543,6 +549,7 @@ def execute_parallel_task_batch(self, c_event: EnabledEvent, chunks):
enabled_datetime,
self,
num_tasks_in_batch,
c_event.batch_info_exec.batch_id
)

(
Expand Down
22 changes: 22 additions & 0 deletions testing_scripts/assets/1_task-batch.bpmn
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"
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">
<bpmn:process id="SIMPLE_LOOP_PROCESS" isExecutable="false">
<bpmn:startEvent id="START_EVENT">
<bpmn:outgoing>FLOW_START_FIRST</bpmn:outgoing>
</bpmn:startEvent>
<bpmn:sequenceFlow id="FLOW_START_FIRST" sourceRef="START_EVENT" targetRef="FIRST_ACTIVITY" />

<bpmn:task id="FIRST_ACTIVITY" name="First Activity">
<bpmn:incoming>FLOW_START_FIRST</bpmn:incoming>
<bpmn:outgoing>FLOW_FIRST_END</bpmn:outgoing>
</bpmn:task>
<bpmn:sequenceFlow id="FLOW_FIRST_END" sourceRef="FIRST_ACTIVITY" targetRef="END_EVENT" />
<bpmn:endEvent id="END_EVENT">
<bpmn:incoming>FLOW_FIRST_END</bpmn:incoming>
</bpmn:endEvent>
</bpmn:process>
</bpmn:definitions>
73 changes: 73 additions & 0 deletions testing_scripts/assets/1_task-batch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
{
"resource_profiles": [
{
"id": "FIRST_ACTIVITY",
"name": "Base Resource Pool",
"resource_list": [
{
"id": "BASE_RESOURCE",
"name": "BASE_RESOURCE",
"cost_per_hour": 10,
"amount": 1,
"calendar": "BASE_CALENDAR",
"assigned_tasks": ["FIRST_ACTIVITY"]
}
],
"fixed_cost_fn": "15"
}
],
"arrival_time_distribution": {
"distribution_name": "fix",
"distribution_params": [{ "value": 86400 }]
},
"arrival_time_calendar": [
{
"from": "MONDAY",
"to": "SUNDAY",
"beginTime": "09:00:00",
"endTime": "10:00:00"
}
],
"gateway_branching_probabilities": [],
"task_resource_distribution": [
{
"task_id": "FIRST_ACTIVITY",
"resources": [
{
"resource_id": "BASE_RESOURCE",
"distribution_name": "fix",
"distribution_params": [{ "value": 3600 }]
}
]
}
],
"resource_calendars": [
{
"id": "BASE_CALENDAR",
"name": "BASE_CALENDAR",
"time_periods": [
{
"to": "FRIDAY",
"from": "MONDAY",
"beginTime": "09:00:00",
"endTime": "18:00:00"
}
]
}
],
"event_distribution": {},
"batch_processing": [
{
"task_id": "FIRST_ACTIVITY",
"type": "Parallel",
"size_distrib": [
{ "key": "1", "value": 0.0 },
{ "key": "4", "value": 1.0 }
],
"duration_distrib": [{ "key": "4", "value": 0.5 }],
"firing_rules": [[{ "attribute": "size", "comparison": "=", "value": 4 }]]
}
],
"start_time": "2000-01-01T00:00:00Z",
"total_cases": 8
}
Original file line number Diff line number Diff line change
@@ -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}]}}]}]}
{"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}]}}]}]}
Original file line number Diff line number Diff line change
@@ -1,19 +1,18 @@
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
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
TASK 'B' (ID: sid-4B24111F-B305-4608-9E12-744B47C44D0D) is used less frequently, only in 0 out of 6 cases (0.00%).
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
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
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
TASK 'B' (ID: sid-4B24111F-B305-4608-9E12-744B47C44D0D) is used less frequently, only in 0 out of 10 cases (0.00%).
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
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
TASK 'B' (ID: sid-4B24111F-B305-4608-9E12-744B47C44D0D) is used less frequently, only in 0 out of 3 cases (0.00%).
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
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
TASK 'B' (ID: sid-4B24111F-B305-4608-9E12-744B47C44D0D) is used less frequently, only in 0 out of 3 cases (0.00%).
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
TASK 'B' (ID: sid-4B24111F-B305-4608-9E12-744B47C44D0D) is used less frequently, only in 0 out of 4 cases (0.00%).
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
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
TASK 'B' (ID: sid-4B24111F-B305-4608-9E12-744B47C44D0D) is used less frequently, only in 0 out of 9 cases (0.00%).
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
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
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
Expand All @@ -39,7 +38,6 @@ Gateway sid-6B518C80-2B96-4C95-B6DE-F9E4A75FF191 is using conditions, but some a
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
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
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
TASK 'B' (ID: sid-4B24111F-B305-4608-9E12-744B47C44D0D) is used less frequently, only in 0 out of 10 cases (0.00%).
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
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
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
Expand Down
Loading