BPMN-OS
BPMN for optimization and simulation
Loading...
Searching...
No Matches
StochasticDataProvider.h
Go to the documentation of this file.
1#ifndef BPMNOS_Model_StochasticDataProvider_H
2#define BPMNOS_Model_StochasticDataProvider_H
3
4#include <bpmn++.h>
5#include <limex.h>
6#include "DataProvider.h"
11#include <memory>
12#include <vector>
13
14namespace BPMNOS::Model {
15
16/**
17 * @brief Data provider supporting stochastic behavior.
18 *
19 * StochasticDataProvider supports:
20 * - 3-column format (INSTANCE_ID, NODE_ID, INITIALIZATION) - static behavior
21 * - 4-column format (+ DISCLOSURE) - dynamic behavior
22 * - 6-column format (+ ARRIVAL, COMPLETION) - stochastic behavior
23 *
24 * Has its own LIMEX handle with lookup tables from Model plus random functions.
25 */
27public:
28 StochasticDataProvider(const std::string& modelFile, const std::string& instanceFileOrString,
29 unsigned int seed = 0);
30 StochasticDataProvider(const std::string& modelFile, const std::vector<std::string>& folders,
31 const std::string& instanceFileOrString, unsigned int seed = 0);
32 ~StochasticDataProvider() override = default;
33
34 std::unique_ptr<Scenario> createScenario(unsigned int scenarioId = 0) override;
35
36 /// Get the stochastic LIMEX handle (for expression compilation)
37 const LIMEX::Handle<double>& getStochasticHandle() const { return stochasticHandle; }
38
39protected:
41 unsigned int seed;
43
44 /// Dedicated LIMEX handle with lookup tables + random functions
45 LIMEX::Handle<double> stochasticHandle;
46
47 /// Random distribution factory
49
51 void readInstances();
52
57 std::unordered_map<const Attribute*, BPMNOS::number> data;
58 };
59
60 std::unordered_map<long unsigned int, StochasticInstanceData> instances;
61 std::unordered_map<const Attribute*, BPMNOS::number> globalValueMap;
62
63 /// Pending disclosures with expressions to evaluate at disclosure time
64 std::unordered_map<size_t, std::vector<StochasticPendingDisclosure>> pendingDisclosures;
65
66 /// Arrival expressions per (instance, node)
67 std::unordered_map<size_t, std::unordered_map<const BPMN::Node*, std::vector<ArrivalExpression>>> arrivalExpressions;
68
69 /// Completion expressions per (instance, node)
70 std::unordered_map<size_t, std::unordered_map<const BPMN::Node*, std::vector<CompletionExpression>>> completionExpressions;
71
72 /// Node disclosure times
73 std::unordered_map<size_t, std::unordered_map<const BPMN::Node*, BPMNOS::number>> disclosure;
74
77
78 void ensureDefaultValue(StochasticInstanceData& instance, const std::string attributeId,
79 std::optional<BPMNOS::number> value = std::nullopt);
80 std::pair<std::string, std::string> parseInitialization(const std::string& initialization) const;
81 BPMNOS::number evaluateExpression(const std::string& expression) const;
82 BPMNOS::number getEffectiveDisclosure(size_t instanceId, const BPMN::Node* node, BPMNOS::number ownDisclosure);
83};
84
85} // namespace BPMNOS::Model
86
87#endif // BPMNOS_Model_StochasticDataProvider_H
Abstract base class representing a data provider for BPMN instance data.
Data provider supporting stochastic behavior.
void ensureDefaultValue(StochasticInstanceData &instance, const std::string attributeId, std::optional< BPMNOS::number > value=std::nullopt)
std::unordered_map< size_t, std::unordered_map< const BPMN::Node *, BPMNOS::number > > disclosure
Node disclosure times.
StochasticDataProvider(const std::string &modelFile, const std::string &instanceFileOrString, unsigned int seed=0)
const LIMEX::Handle< double > & getStochasticHandle() const
Get the stochastic LIMEX handle (for expression compilation)
BPMNOS::number evaluateExpression(const std::string &expression) const
std::unordered_map< size_t, std::unordered_map< const BPMN::Node *, std::vector< CompletionExpression > > > completionExpressions
Completion expressions per (instance, node)
std::unordered_map< long unsigned int, StochasticInstanceData > instances
std::unordered_map< size_t, std::unordered_map< const BPMN::Node *, std::vector< ArrivalExpression > > > arrivalExpressions
Arrival expressions per (instance, node)
std::pair< std::string, std::string > parseInitialization(const std::string &initialization) const
BPMNOS::number getEffectiveDisclosure(size_t instanceId, const BPMN::Node *node, BPMNOS::number ownDisclosure)
LIMEX::Handle< double > stochasticHandle
Dedicated LIMEX handle with lookup tables + random functions.
RandomDistributionFactory randomFactory
Random distribution factory.
std::unordered_map< const Attribute *, BPMNOS::number > globalValueMap
std::unique_ptr< Scenario > createScenario(unsigned int scenarioId=0) override
std::unordered_map< size_t, std::vector< StochasticPendingDisclosure > > pendingDisclosures
Pending disclosures with expressions to evaluate at disclosure time.
~StochasticDataProvider() override=default
Factory for random distribution functions in LIMEX expressions.
Base class for all nodes in a BPMN model.
Definition bpmn++.h:16444
BPMNOS_NUMBER_TYPE number
Definition Number.h:50
std::unordered_map< const Attribute *, BPMNOS::number > data