|
@ -895,7 +895,6 @@ namespace storm { |
|
|
if (action.isInputEnabled()) { |
|
|
if (action.isInputEnabled()) { |
|
|
// If the action is input-enabled, we add self-loops to all states.
|
|
|
// If the action is input-enabled, we add self-loops to all states.
|
|
|
transitions *= actionGuard.ite(action.transitions, encodeIndex(0, action.getLowestLocalNondeterminismVariable(), action.getHighestLocalNondeterminismVariable() - action.getLowestLocalNondeterminismVariable(), this->variables) * actionIdentityPair.second); |
|
|
transitions *= actionGuard.ite(action.transitions, encodeIndex(0, action.getLowestLocalNondeterminismVariable(), action.getHighestLocalNondeterminismVariable() - action.getLowestLocalNondeterminismVariable(), this->variables) * actionIdentityPair.second); |
|
|
actionGuard.ite(action.transitions, encodeIndex(0, action.getLowestLocalNondeterminismVariable(), action.getHighestLocalNondeterminismVariable() - action.getLowestLocalNondeterminismVariable(), this->variables) * actionIdentityPair.second).exportToDot("this.dot"); |
|
|
|
|
|
} else { |
|
|
} else { |
|
|
transitions *= action.transitions; |
|
|
transitions *= action.transitions; |
|
|
} |
|
|
} |
|
@ -1107,7 +1106,8 @@ namespace storm { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// Add the source location and the guard.
|
|
|
// Add the source location and the guard.
|
|
|
transitions *= this->variables.manager->getEncoding(this->variables.automatonToLocationDdVariableMap.at(automaton.getName()).first, edge.getSourceLocationIndex()).template toAdd<ValueType>() * guard; |
|
|
|
|
|
|
|
|
storm::dd::Add<Type, ValueType> sourceLocationAndGuard = this->variables.manager->getEncoding(this->variables.automatonToLocationDdVariableMap.at(automaton.getName()).first, edge.getSourceLocationIndex()).template toAdd<ValueType>() * guard; |
|
|
|
|
|
transitions *= sourceLocationAndGuard; |
|
|
|
|
|
|
|
|
// If we multiply the ranges of global variables, make sure everything stays within its bounds.
|
|
|
// If we multiply the ranges of global variables, make sure everything stays within its bounds.
|
|
|
if (!globalVariablesInSomeDestination.empty()) { |
|
|
if (!globalVariablesInSomeDestination.empty()) { |
|
@ -1124,7 +1124,9 @@ namespace storm { |
|
|
// Finally treat the transient assignments.
|
|
|
// Finally treat the transient assignments.
|
|
|
std::map<storm::expressions::Variable, storm::dd::Add<Type, ValueType>> transientEdgeAssignments; |
|
|
std::map<storm::expressions::Variable, storm::dd::Add<Type, ValueType>> transientEdgeAssignments; |
|
|
if (!this->transientVariables.empty()) { |
|
|
if (!this->transientVariables.empty()) { |
|
|
performTransientAssignments(edge.getAssignments().getTransientAssignments(), [this, &transientEdgeAssignments, &guard] (storm::jani::Assignment const& assignment) { transientEdgeAssignments[assignment.getExpressionVariable()] = guard * this->variables.rowExpressionAdapter->translateExpression(assignment.getAssignedExpression()); } ); |
|
|
|
|
|
|
|
|
performTransientAssignments(edge.getAssignments().getTransientAssignments(), [this, &transientEdgeAssignments, &guard, &sourceLocationAndGuard] (storm::jani::Assignment const& assignment) { |
|
|
|
|
|
transientEdgeAssignments[assignment.getExpressionVariable()] = sourceLocationAndGuard * this->variables.rowExpressionAdapter->translateExpression(assignment.getAssignedExpression()); |
|
|
|
|
|
} ); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
return EdgeDd(isMarkovian, guard, guard * transitions, transientEdgeAssignments, globalVariablesInSomeDestination); |
|
|
return EdgeDd(isMarkovian, guard, guard * transitions, transientEdgeAssignments, globalVariablesInSomeDestination); |
|
|