55 auto parametricRow = parametricMatrix.
getRow(row);
56 ConstantType dummyValue = storm::utility::one<ConstantType>() / storm::utility::convertNumber<ConstantType>(parametricRow.getNumberOfEntries());
57 for (
auto const& paramEntry : parametricRow) {
58 matrixBuilder.addNextValue(row, paramEntry.getColumn(), dummyValue);
63 return matrixBuilder.build();
66template<
typename ParametricSparseModelType,
typename ConstantSparseModelType>
67std::unordered_map<std::string, typename ConstantSparseModelType::RewardModelType>
68ModelInstantiator<ParametricSparseModelType, ConstantSparseModelType>::buildDummyRewardModels(
69 std::unordered_map<std::string, typename ParametricSparseModelType::RewardModelType>
const& parametricRewardModel)
const {
70 std::unordered_map<std::string, typename ConstantSparseModelType::RewardModelType> result;
71 for (
auto const& paramRewardModel : parametricRewardModel) {
72 auto const& rewModel = paramRewardModel.second;
73 std::optional<std::vector<ConstantType>> optionalStateRewardVector;
74 if (rewModel.hasStateRewards()) {
75 optionalStateRewardVector = std::vector<ConstantType>(rewModel.getStateRewardVector().size());
77 std::optional<std::vector<ConstantType>> optionalStateActionRewardVector;
78 if (rewModel.hasStateActionRewards()) {
79 optionalStateActionRewardVector = std::vector<ConstantType>(rewModel.getStateActionRewardVector().size());
81 std::optional<storm::storage::SparseMatrix<ConstantType>> optionalTransitionRewardMatrix;
82 if (rewModel.hasTransitionRewards()) {
83 optionalTransitionRewardMatrix = buildDummyMatrix(rewModel.getTransitionRewardMatrix());
86 std::move(optionalStateRewardVector), std::move(optionalStateActionRewardVector),
87 std::move(optionalTransitionRewardMatrix))));
92template<
typename ParametricSparseModelType,
typename ConstantSparseModelType>
93void ModelInstantiator<ParametricSparseModelType, ConstantSparseModelType>::initializeMatrixMapping(
97 ConstantType dummyValue = storm::utility::one<ConstantType>();
98 auto constantEntryIt = constantMatrix.
begin();
99 auto parametricEntryIt = parametricMatrix.
begin();
100 while (parametricEntryIt != parametricMatrix.
end()) {
101 STORM_LOG_ASSERT(parametricEntryIt->getColumn() == constantEntryIt->getColumn(),
102 "Entries of parametric and constant matrix are not at the same position");
105 constantEntryIt->setValue(storm::utility::convertNumber<ConstantType>(parametricEntryIt->getValue()));
108 auto functionsIt = functions.insert(std::make_pair(parametricEntryIt->getValue(), dummyValue)).first;
109 mapping.emplace_back(std::make_pair(constantEntryIt, &(functionsIt->second)));
115 STORM_LOG_ASSERT(constantEntryIt == constantMatrix.
end(),
"Parametric matrix seems to have more or less entries then the constant matrix");
119template<
typename ParametricSparseModelType,
typename ConstantSparseModelType>
120void ModelInstantiator<ParametricSparseModelType, ConstantSparseModelType>::initializeVectorMapping(
121 std::vector<ConstantType>& constantVector, std::unordered_map<ParametricType, ConstantType>& functions,
122 std::vector<std::pair<
typename std::vector<ConstantType>::iterator, ConstantType*>>& mapping, std::vector<ParametricType>
const& parametricVector)
const {
123 ConstantType dummyValue = storm::utility::one<ConstantType>();
124 auto constantEntryIt = constantVector.begin();
125 auto parametricEntryIt = parametricVector.begin();
126 while (parametricEntryIt != parametricVector.end()) {
129 *constantEntryIt = storm::utility::convertNumber<ConstantType>(*parametricEntryIt);
132 auto functionsIt = functions.insert(std::make_pair(*parametricEntryIt, dummyValue)).first;
133 mapping.emplace_back(std::make_pair(constantEntryIt, &(functionsIt->second)));
139 STORM_LOG_ASSERT(constantEntryIt == constantVector.end(),
"Parametric vector seems to have more or less entries then the constant vector");
142template<
typename ParametricSparseModelType,
typename ConstantSparseModelType>
146 instantiate_helper(valuation);
149 for (
auto& entryValuePair : this->matrixMapping) {
150 entryValuePair.first->setValue(*(entryValuePair.second));
152 for (
auto& entryValuePair : this->vectorMapping) {
153 *(entryValuePair.first) = *(entryValuePair.second);
156 return *this->instantiatedModel;
159template<
typename ParametricSparseModelType,
typename ConstantSparseModelType>