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