1#ifndef BPMNOS_Model_StochasticScenario_H
2#define BPMNOS_Model_StochasticScenario_H
65 const std::unordered_map<const Attribute*, BPMNOS::number>& globalValueMap,
126 mutable std::unordered_map<size_t, InstanceData>
instances;
127 std::unordered_map<size_t, std::unordered_map<const BPMN::Node*, BPMNOS::number>>
disclosure;
132 std::unordered_map<size_t, std::unordered_map<const BPMN::Node*, std::vector<ArrivalExpression>>>
arrivalExpressions;
135 std::unordered_map<size_t, std::unordered_map<const BPMN::Node*, std::vector<CompletionExpression>>>
completionExpressions;
138 mutable std::map<std::pair<size_t, const BPMN::Node*>, std::mt19937>
rngs;
Represents a BPMN model with all its processes.
Abstract base class for scenarios holding data for all BPMN instances.
const Model * model
Pointer to the BPMN model.
Data provider supporting stochastic behavior.
std::unordered_map< size_t, std::vector< StochasticPendingDisclosure > > pendingDisclosures
Instance ID -> pending disclosures.
std::unordered_map< size_t, std::unordered_map< const BPMN::Node *, std::vector< ArrivalExpression > > > arrivalExpressions
Arrival expressions per (instance, node)
void revealData(BPMNOS::number currentTime) const
void setValue(const BPMNOS::number instanceId, const Attribute *attribute, std::optional< BPMNOS::number > value)
void addArrivalExpression(const BPMNOS::number instanceId, const BPMN::Node *node, ArrivalExpression &&expr)
void addInstance(const BPMN::Process *process, const BPMNOS::number instanceId, BPMNOS::number instantiationTime)
Values getKnownInitialData(const InstanceData *, const BPMNOS::number time) const override
Method returning the initial data attributes for process instantiation.
BPMNOS::number getEarliestInstantiationTime() const override
Method returning the time of the earliest instantiation.
std::vector< const InstanceData * > getCreatedInstances(const BPMNOS::number currentTime) const override
Method returning a vector of all instances that have been created until the given time.
BPMNOS::number earliestInstantiationTime
std::unordered_map< size_t, InstanceData > instances
void addPendingDisclosure(const BPMNOS::number instanceId, StochasticPendingDisclosure &&pending)
std::vector< const InstanceData * > getKnownInstances(const BPMNOS::number currentTime) const override
Method returning a vector of all instances that have been created or are known for sure until the giv...
void setTaskCompletionStatus(const BPMNOS::number instanceId, const BPMN::Node *task, BPMNOS::Values status) const override
Store the completion status when a task enters BUSY state.
BPMNOS::number latestInstantiationTime
std::vector< std::tuple< const BPMN::Process *, BPMNOS::Values, BPMNOS::Values > > getCurrentInstantiations(const BPMNOS::number currentTime) const override
Method returning a vector of all instances that are known to be instantiated at the given time.
void setDisclosure(const BPMNOS::number instanceId, const BPMN::Node *node, BPMNOS::number disclosureTime)
std::set< std::pair< size_t, const Attribute * > > disclosedAttributes
Track which attributes have been disclosed.
unsigned int scenarioSeed
std::optional< BPMNOS::Values > getKnownData(const BPMNOS::number instanceId, const BPMN::Node *node, const BPMNOS::number currentTime) const override
Method returning all known values of new attributes.
std::map< std::pair< size_t, const BPMN::Node * >, std::mt19937 > rngs
Per (instance, node) RNG for reproducibility.
Values getKnownInitialStatus(const InstanceData *, const BPMNOS::number time) const override
Method returning the initial status attributes for process instantiation.
bool isCompleted(const BPMNOS::number currentTime) const override
Method returning true if the currentTime exceeds the completion time.
RandomDistributionFactory * randomFactory
RandomDistributionFactory for expression evaluation (set by provider)
std::optional< BPMNOS::number > getKnownValue(const Scenario::InstanceData *instance, const BPMNOS::Model::Attribute *attribute, const BPMNOS::number currentTime) const override
Method returning a known value of an attribute.
std::optional< BPMNOS::Values > getKnownValues(const BPMNOS::number instanceId, const BPMN::Node *node, const BPMNOS::number currentTime) const override
Method returning all known values of new attributes.
std::mt19937 & getRng(size_t instanceId, const BPMN::Node *node) const
Get or create RNG for (instance, node) pair.
void initializeArrivalData(BPMNOS::number instanceId, const BPMN::Node *node, const Values &status, const Values &data, const Values &globals) const override
Initialize arrival data when a token arrives at an activity.
void addCompletionExpression(const BPMNOS::number instanceId, const BPMN::Node *task, CompletionExpression &&expr)
StochasticScenario(const Model *model, BPMNOS::number earliestInstantiationTime, BPMNOS::number latestInstantiationTime, const std::unordered_map< const Attribute *, BPMNOS::number > &globalValueMap, unsigned int seed=0)
std::unordered_map< size_t, std::unordered_map< const BPMN::Node *, BPMNOS::number > > disclosure
Instance ID -> Node -> disclosure time.
std::unordered_map< size_t, std::unordered_map< const BPMN::Node *, std::vector< CompletionExpression > > > completionExpressions
Completion expressions per (instance, node)
Factory for random distribution functions in LIMEX expressions.
Base class for all nodes in a BPMN model.
BPMNOS_NUMBER_TYPE number
Structure representing an arrival expression.
std::unique_ptr< Expression > expression
Compiled expression to evaluate at arrival time.
const Attribute * attribute
The attribute to initialize.
Structure representing a completion expression.
const Attribute * attribute
The attribute to update.
std::unique_ptr< Expression > expression
Compiled expression to evaluate at completion time.
Structure representing a pending disclosure.
const Attribute * attribute
The attribute to initialize.
BPMNOS::number disclosureTime
Time when this attribute is disclosed.
BPMNOS::number value
Pre-computed value to reveal at disclosure time.