#include "src/models/sparse/Ctmc.h" #include "src/models/sparse/StandardRewardModel.h" #include "src/adapters/CarlAdapter.h" #include "src/utility/macros.h" namespace storm { namespace models { namespace sparse { template Ctmc::Ctmc(storm::storage::SparseMatrix const& rateMatrix, storm::models::sparse::StateLabeling const& stateLabeling, std::unordered_map const& rewardModels, boost::optional> const& optionalChoiceLabeling) : DeterministicModel(storm::models::ModelType::Ctmc, rateMatrix, stateLabeling, rewardModels, optionalChoiceLabeling) { exitRates = createExitRateVector(this->getTransitionMatrix()); } template Ctmc::Ctmc(storm::storage::SparseMatrix&& rateMatrix, storm::models::sparse::StateLabeling&& stateLabeling, std::unordered_map&& rewardModels, boost::optional>&& optionalChoiceLabeling) : DeterministicModel(storm::models::ModelType::Ctmc, std::move(rateMatrix), std::move(stateLabeling), std::move(rewardModels), std::move(optionalChoiceLabeling)) { // It is important to refer to the transition matrix here, because the given rate matrix has been move elsewhere. exitRates = createExitRateVector(this->getTransitionMatrix()); } template std::vector const& Ctmc::getExitRateVector() const { return exitRates; } template std::vector Ctmc::createExitRateVector(storm::storage::SparseMatrix const& rateMatrix) { std::vector exitRates(rateMatrix.getRowCount()); for (uint_fast64_t row = 0; row < rateMatrix.getRowCount(); ++row) { exitRates[row] = rateMatrix.getRowSum(row); } return exitRates; } template class Ctmc; #ifdef STORM_HAVE_CARL template class Ctmc>; template class Ctmc; #endif } // namespace sparse } // namespace models } // namespace storm