22 ValueType additiveUncertainty, ValueType minimalTransitionProbability, std::optional<uint64_t> maxSuccessors) {
24 auto newMatrixBuilder =
26 origModel->getTransitionMatrix().getNonzeroEntryCount(),
true,
false);
28 for (uint64_t rowIndex = 0; rowIndex < origModel->getTransitionMatrix().getRowCount(); ++rowIndex) {
29 if (!maxSuccessors.has_value() || origModel->getTransitionMatrix().getRowEntryCount(rowIndex) <= maxSuccessors.value()) {
30 for (
auto const& entry : origModel->getTransitionMatrix().getRow(rowIndex)) {
31 newMatrixBuilder.addNextValue(rowIndex, entry.getColumn(), addUncertainty(entry.getValue(), additiveUncertainty, minimalTransitionProbability));
34 for (
auto const& entry : origModel->getTransitionMatrix().getRow(rowIndex)) {
40 if (!origModel->getTransitionMatrix().hasTrivialRowGrouping()) {
41 modelComponents.
transitionMatrix.setRowGroupIndices(origModel->getTransitionMatrix().getRowGroupIndices());
44 std::unordered_map<std::string, models::sparse::StandardRewardModel<IntervalType>> newRewardModels;
45 for (
auto const& rewModel : origModel->getRewardModels()) {
46 auto const& oldRewModel = rewModel.second;
47 std::optional<std::vector<IntervalType>> stateRewards;
48 std::optional<std::vector<IntervalType>> stateActionRewards;
49 if (oldRewModel.hasStateRewards()) {
52 if (oldRewModel.hasStateActionRewards()) {
55 STORM_LOG_THROW(!oldRewModel.hasTransitionRewards(), exceptions::NotImplementedException,
"Transition rewards are not supported.");
57 newRewardModels.emplace(rewModel.first, std::move(newRewModel));
61 modelComponents.
rewardModels = std::move(newRewardModels);
62 modelComponents.
stateValuations = origModel->getOptionalStateValuations();
63 modelComponents.
choiceLabeling = origModel->getOptionalChoiceLabeling();
64 modelComponents.
choiceOrigins = origModel->getOptionalChoiceOrigins();
66 switch (origModel->getType()) {
68 return std::make_shared<storm::models::sparse::Dtmc<IntervalType>>(std::move(modelComponents));
70 return std::make_shared<storm::models::sparse::Mdp<IntervalType>>(std::move(modelComponents));
72 STORM_LOG_THROW(
false, exceptions::NotImplementedException,
"Only DTMC and MDP model types are currently supported.");