61 template<
typename PMT = ParametricSparseModelType>
62 typename std::enable_if<std::is_same<PMT, storm::models::sparse::Dtmc<typename ParametricSparseModelType::ValueType>>::value ||
63 std::is_same<PMT, storm::models::sparse::Mdp<typename ParametricSparseModelType::ValueType>>::value>::type
64 initializeModelSpecificData(PMT
const& parametricModel) {
66 buildDummyMatrix(parametricModel.getTransitionMatrix()));
67 components.stateLabeling = parametricModel.getStateLabeling();
68 components.rewardModels = buildDummyRewardModels(parametricModel.getRewardModels());
69 components.choiceLabeling = parametricModel.getOptionalChoiceLabeling();
71 this->instantiatedModel = std::make_shared<ConstantSparseModelType>(std::move(components));
74 template<
typename PMT = ParametricSparseModelType>
75 typename std::enable_if<std::is_same<PMT, storm::models::sparse::Ctmc<typename ParametricSparseModelType::ValueType>>::value>::type
76 initializeModelSpecificData(PMT
const& parametricModel) {
78 buildDummyMatrix(parametricModel.getTransitionMatrix()));
79 components.stateLabeling = parametricModel.getStateLabeling();
80 components.rewardModels = buildDummyRewardModels(parametricModel.getRewardModels());
81 components.exitRates = std::vector<ConstantType>(parametricModel.getExitRateVector().size(), storm::utility::one<ConstantType>());
82 components.rateTransitions =
true;
83 components.choiceLabeling = parametricModel.getOptionalChoiceLabeling();
84 this->instantiatedModel = std::make_shared<ConstantSparseModelType>(std::move(components));
86 initializeVectorMapping(this->instantiatedModel->getExitRateVector(), this->functions, this->vectorMapping, parametricModel.getExitRateVector());
89 template<
typename PMT = ParametricSparseModelType>
90 typename std::enable_if<std::is_same<PMT, storm::models::sparse::MarkovAutomaton<typename ParametricSparseModelType::ValueType>>::value>::type
91 initializeModelSpecificData(PMT
const& parametricModel) {
93 buildDummyMatrix(parametricModel.getTransitionMatrix()));
94 components.stateLabeling = parametricModel.getStateLabeling();
95 components.rewardModels = buildDummyRewardModels(parametricModel.getRewardModels());
96 components.exitRates = std::vector<ConstantType>(parametricModel.getExitRates().size(), storm::utility::one<ConstantType>());
97 components.markovianStates = parametricModel.getMarkovianStates();
98 components.choiceLabeling = parametricModel.getOptionalChoiceLabeling();
99 this->instantiatedModel = std::make_shared<ConstantSparseModelType>(std::move(components));
101 initializeVectorMapping(this->instantiatedModel->getExitRates(), this->functions, this->vectorMapping, parametricModel.getExitRates());
104 template<
typename PMT = ParametricSparseModelType>
105 typename std::enable_if<std::is_same<PMT, storm::models::sparse::StochasticTwoPlayerGame<typename ParametricSparseModelType::ValueType>>::value>::type
106 initializeModelSpecificData(PMT
const& parametricModel) {
108 buildDummyMatrix(parametricModel.getTransitionMatrix()));
109 components.stateLabeling = parametricModel.getStateLabeling();
110 components.rewardModels = buildDummyRewardModels(parametricModel.getRewardModels());
111 components.player1Matrix = parametricModel.getPlayer1Matrix();
112 components.choiceLabeling = parametricModel.getOptionalChoiceLabeling();
114 this->instantiatedModel = std::make_shared<ConstantSparseModelType>(std::move(components));
117 template<
typename PMT = ParametricSparseModelType>
118 typename std::enable_if<std::is_same<PMT, ConstantSparseModelType>::value>::type instantiate_helper(
120 for (
auto& functionResult : this->functions) {
125 template<
typename PMT = ParametricSparseModelType>
126 typename std::enable_if<!std::is_same<PMT, ConstantSparseModelType>::value>::type instantiate_helper(
128 for (
auto& functionResult : this->functions) {
132 functionResult.second = annotation.evaluate(storm::utility::convertNumber<ConstantType>(valuation.at(annotation.getParameter())));
134 functionResult.second = storm::utility::parametric::evaluate<ConstantType>(functionResult.first, valuation);
149 std::unordered_map<std::string, typename ConstantSparseModelType::RewardModelType> buildDummyRewardModels(
150 std::unordered_map<std::string, typename ParametricSparseModelType::RewardModelType>
const& parametricRewardModel)
const;
176 void initializeVectorMapping(std::vector<ConstantType>& constantVector, std::unordered_map<ParametricType, ConstantType>& functions,
177 std::vector<std::pair<
typename std::vector<ConstantType>::iterator,
ConstantType*>>& mapping,
178 std::vector<ParametricType>
const& parametricVector)
const;
181 std::shared_ptr<ConstantSparseModelType> instantiatedModel;
183 std::unordered_map<ParametricType, ConstantType> functions;
185 std::vector<std::pair<typename storm::storage::SparseMatrix<ConstantType>::iterator,
ConstantType*>> matrixMapping;
187 std::vector<std::pair<typename std::vector<ConstantType>::iterator,
ConstantType*>> vectorMapping;