5 changed files with 59 additions and 24 deletions
			
			
		- 
					16src/storm/models/sparse/Mdp.cpp
 - 
					7src/storm/models/sparse/Mdp.h
 - 
					4src/storm/permissivesched/PermissiveSchedulers.h
 - 
					26src/storm/transformer/ChoiceSelector.cpp
 - 
					30src/storm/transformer/ChoiceSelector.h
 
@ -0,0 +1,26 @@ | 
				
			|||
#include "storm/transformer/ChoiceSelector.h"
 | 
				
			|||
#include "storm/models/sparse/Mdp.h"
 | 
				
			|||
 | 
				
			|||
namespace  storm { | 
				
			|||
    namespace transformer { | 
				
			|||
        template <typename ValueType, typename RewardModelType> | 
				
			|||
        std::shared_ptr<storm::models::sparse::NondeterministicModel<ValueType, RewardModelType>> ChoiceSelector<ValueType, RewardModelType>::transform(storm::storage::BitVector const& enabledActions) const | 
				
			|||
        { | 
				
			|||
            storm::storage::sparse::ModelComponents<ValueType, RewardModelType> newComponents(inputModel.getTransitionMatrix().restrictRows(enabledActions)); | 
				
			|||
            newComponents.stateLabeling = inputModel.getStateLabeling(); | 
				
			|||
            for (auto const& rewardModel : inputModel.getRewardModels()) { | 
				
			|||
                newComponents.rewardModels.emplace(rewardModel.first, rewardModel.second.restrictActions(enabledActions)); | 
				
			|||
            } | 
				
			|||
            if (inputModel.hasChoiceLabeling()) { | 
				
			|||
                newComponents.choiceLabeling = inputModel.getChoiceLabeling().getSubLabeling(enabledActions); | 
				
			|||
            } | 
				
			|||
            newComponents.stateValuations = inputModel.getOptionalStateValuations(); | 
				
			|||
            if (inputModel.hasChoiceOrigins()) { | 
				
			|||
                newComponents.choiceOrigins = inputModel.getChoiceOrigins()->selectChoices(enabledActions); | 
				
			|||
            } | 
				
			|||
            return std::make_shared<storm::models::sparse::Mdp<ValueType, RewardModelType>>(std::move(newComponents)); | 
				
			|||
        } | 
				
			|||
 | 
				
			|||
        template class ChoiceSelector<double>; | 
				
			|||
    } | 
				
			|||
} | 
				
			|||
@ -0,0 +1,30 @@ | 
				
			|||
#pragma once | 
				
			|||
 | 
				
			|||
#include "storm/models/sparse/StandardRewardModel.h" | 
				
			|||
#include "storm/models/sparse/NondeterministicModel.h" | 
				
			|||
 | 
				
			|||
 | 
				
			|||
namespace storm { | 
				
			|||
    namespace transformer { | 
				
			|||
 | 
				
			|||
        template<typename ValueType, typename RewardModelType = storm::models::sparse::StandardRewardModel<ValueType>> | 
				
			|||
        class ChoiceSelector { | 
				
			|||
        public: | 
				
			|||
            ChoiceSelector(storm::models::sparse::NondeterministicModel<ValueType, RewardModelType> const& inputModel) : inputModel(inputModel) { | 
				
			|||
 | 
				
			|||
            } | 
				
			|||
 | 
				
			|||
            /*! | 
				
			|||
             * Constructs an MDP by copying the current MDP and restricting the choices of each state to the ones given by the bitvector. | 
				
			|||
             * | 
				
			|||
             * @param enabledActions A BitVector of lenght numberOfChoices(), which is one iff the action should be kept. | 
				
			|||
             * @return A subMDP. | 
				
			|||
            */ | 
				
			|||
            std::shared_ptr<storm::models::sparse::NondeterministicModel<ValueType, RewardModelType>> transform(storm::storage::BitVector const& enabledActions) const; | 
				
			|||
        private: | 
				
			|||
 | 
				
			|||
            storm::models::sparse::NondeterministicModel<ValueType, RewardModelType> const& inputModel; | 
				
			|||
        }; | 
				
			|||
 | 
				
			|||
    } | 
				
			|||
} | 
				
			|||
						Write
						Preview
					
					
					Loading…
					
					Cancel
						Save
					
		Reference in new issue