17 assert(extensionElements);
18 if ( !extensionElements->entryGuidance ) {
24 auto guidance = extensionElements->entryGuidance.value().get();
26 guidance->apply(systemState->scenario, systemState->currentTime, decision->
token->
owner->
root->
instance.value(), decision->
token->
node, status, data, globals);
29 return guidance->restrictionsSatisfied(decision->
token->
node,status,data,globals);
39 assert(extensionElements);
40 if ( !extensionElements->exitGuidance ) {
46 auto guidance = extensionElements->exitGuidance.value().get();
48 guidance->apply(systemState->scenario, systemState->currentTime, decision->
token->
owner->
root->
instance.value(), decision->
token->
node, status, data, globals);
50 return guidance->restrictionsSatisfied(decision->
token->
node,status,data,globals);
60 assert(extensionElements);
61 if ( !extensionElements->choiceGuidance ) {
66 auto guidance = extensionElements->choiceGuidance.value().get();
68 guidance->apply(systemState->scenario, systemState->currentTime, decision->
token->
owner->
root->
instance.value(), decision->
token->
node, status, data, globals);
70 return guidance->restrictionsSatisfied(decision->
token->
node,status,data,globals);
80 assert(extensionElements);
81 if ( !extensionElements->messageDeliveryGuidance ) {
86 auto guidance = extensionElements->messageDeliveryGuidance.value().get();
88 guidance->apply(systemState->scenario, systemState->currentTime, decision->
token->
owner->
root->
instance.value(), decision->
token->
node, status, data, globals);
90 return guidance->restrictionsSatisfied(decision->
token->
node,status,data,globals);
94 auto token = decision->
token;
95 assert( token->ready() );
97 assert(extensionElements);
98 Values status = token->status;
100 Values data(*token->data);
101 Values globals = token->globals;
102 double evaluation = (double)extensionElements->getObjective(status,data,globals);
107 bool feasible =
updateValues(decision,status,data,globals);
113 if ( !extensionElements->entryGuidance ) {
114 return evaluation - extensionElements->getObjective(status,data,globals);
118 return evaluation - extensionElements->entryGuidance.value()->getObjective(status,data,globals);
122 auto token = decision->
token;
123 assert( token->completed() );
125 assert(extensionElements);
126 Values status = token->status;
128 Values data(*token->data);
129 Values globals = token->globals;
130 double evaluation = (double)extensionElements->getObjective(status,data,globals);
132 bool feasible =
updateValues(decision,status,data,globals);
138 if ( !extensionElements->exitGuidance ) {
139 return evaluation - extensionElements->getObjective(status,data,globals);
142 return evaluation - extensionElements->exitGuidance.value()->getObjective(status,data,globals);
146 auto token = decision->
token;
147 assert( token->busy() );
149 assert(extensionElements);
150 auto evaluation = (double)extensionElements->getObjective(token->status, *token->data, token->globals);
152 assert(
dynamic_cast<const ChoiceEvent*
>(decision) );
153 Values status(token->status);
155 Values data(*token->data);
156 Values globals = token->globals;
158 for (
size_t i = 0; i < extensionElements->choices.size(); i++) {
159 extensionElements->attributeRegistry.setValue( extensionElements->choices[i]->attribute, status, data, globals, decision->
choices[i] );
162 bool feasible =
updateValues(decision,status,data,globals);
167 if ( !extensionElements->choiceGuidance ) {
168 return evaluation - extensionElements->getObjective(status,data,globals);
171 return evaluation - extensionElements->choiceGuidance.value()->getObjective(status,data,globals);
175 auto token = decision->
token;
176 assert( token->busy() );
179 assert(extensionElements);
180 Values status = token->status;
182 Values data(*token->data);
183 Values globals = token->globals;
184 double evaluation = (double)extensionElements->getObjective(status,data,globals);
189 bool feasible =
updateValues(decision,status,data,globals);
195 if ( !extensionElements->messageDeliveryGuidance ) {
196 return evaluation - extensionElements->getObjective(status,data,globals);
200 return evaluation - extensionElements->messageDeliveryGuidance.value()->getObjective(status,data,globals);
206 assert(extensionElements);
210 if ( extensionElements->entryGuidance.has_value() ) {
211 dependencies.insert(extensionElements->entryGuidance.value()->dependencies.begin(), extensionElements->entryGuidance.value()->dependencies.end());
219 assert(extensionElements);
223 if ( extensionElements->exitGuidance.has_value() ) {
224 dependencies.insert(extensionElements->exitGuidance.value()->dependencies.begin(), extensionElements->exitGuidance.value()->dependencies.end());
232 assert(extensionElements);
236 if ( extensionElements->choiceGuidance.has_value() ) {
237 dependencies.insert(extensionElements->choiceGuidance.value()->dependencies.begin(), extensionElements->choiceGuidance.value()->dependencies.end());
245 assert(extensionElements);
249 if ( extensionElements->messageDeliveryGuidance.has_value() ) {
250 dependencies.insert(extensionElements->messageDeliveryGuidance.value()->dependencies.begin(), extensionElements->messageDeliveryGuidance.value()->dependencies.end());
std::optional< double > evaluate(EntryDecision *decision) override
std::set< const BPMNOS::Model::Attribute * > getDependencies(EntryDecision *decision) override
bool updateValues(EntryDecision *decision, Values &status, Values &data, Values &globals) override
std::set< const BPMNOS::Model::Attribute * > getDependencies(EntryDecision *decision) override
virtual bool updateValues(EntryDecision *decision, Values &status, Values &data, Values &globals)
const SystemState * systemState
const StateMachine * root
Pointer to the root state machine.
std::optional< BPMNOS::number > instance
Numeric representation of instance id (TODO: can we const this?)
const BPMN::FlowNode * node
const StateMachine * owner
State machine owning the token.
Class holding extension elements representing execution data for nodes.
std::unique_ptr< ExtensionElements > extensionElements
Represents the event that choices are made for a DecisionTask.
Represents the event that choices are made for a DecisionTask.
Represents the event of a token entering a node.
Represents the event of a token exiting a node.
Represents the event of a message from the message pool being delivered.
static constexpr size_t Timestamp