20 auto newMatrixBuilder =
22 origModel->getTransitionMatrix().getNonzeroEntryCount(),
true,
false);
24 for (uint64_t rowIndex = 0; rowIndex < origModel->getTransitionMatrix().getRowCount(); ++rowIndex) {
25 for (
auto const& entry : origModel->getTransitionMatrix().getRow(rowIndex)) {
26 newMatrixBuilder.addNextValue(rowIndex, entry.getColumn(), addUncertainty(entry.getValue(), additiveUncertainty, minimalTransitionProbability));
30 if (!origModel->getTransitionMatrix().hasTrivialRowGrouping()) {
31 modelComponents.
transitionMatrix.setRowGroupIndices(origModel->getTransitionMatrix().getRowGroupIndices());
34 std::unordered_map<std::string, models::sparse::StandardRewardModel<storm::Interval>> newRewardModels;
35 for (
auto const& rewModel : origModel->getRewardModels()) {
36 auto const& oldRewModel = rewModel.second;
37 std::optional<std::vector<storm::Interval>> stateRewards;
38 std::optional<std::vector<storm::Interval>> stateActionRewards;
39 if (oldRewModel.hasStateRewards()) {
40 stateRewards = utility::vector::convertNumericVector<storm::Interval>(oldRewModel.getStateRewardVector());
42 if (oldRewModel.hasStateActionRewards()) {
43 stateActionRewards = utility::vector::convertNumericVector<storm::Interval>(oldRewModel.getStateActionRewardVector());
45 STORM_LOG_THROW(!oldRewModel.hasTransitionRewards(), exceptions::NotImplementedException,
"Transition rewards are not supported.");
47 newRewardModels.emplace(rewModel.first, std::move(newRewModel));
51 modelComponents.
rewardModels = std::move(newRewardModels);
52 modelComponents.
stateValuations = origModel->getOptionalStateValuations();
53 modelComponents.
choiceLabeling = origModel->getOptionalChoiceLabeling();
54 modelComponents.
choiceOrigins = origModel->getOptionalChoiceOrigins();
56 switch (origModel->getType()) {
58 return std::make_shared<storm::models::sparse::Dtmc<storm::Interval>>(std::move(modelComponents));
60 return std::make_shared<storm::models::sparse::Mdp<storm::Interval>>(std::move(modelComponents));
62 STORM_LOG_THROW(
false, exceptions::NotImplementedException,
"Only DTMC and MDP model types are currently supported.");