24 changed files with 415 additions and 127 deletions
-
146src/storm/modelchecker/parametric/ParameterLifting.cpp
-
33src/storm/modelchecker/parametric/ParameterLifting.h
-
1src/storm/modelchecker/parametric/SparseDtmcInstantiationModelChecker.cpp
-
61src/storm/modelchecker/parametric/SparseDtmcParameterLifting.cpp
-
27src/storm/modelchecker/parametric/SparseDtmcParameterLifting.h
-
23src/storm/modelchecker/parametric/SparseDtmcParameterLiftingModelChecker.cpp
-
3src/storm/modelchecker/parametric/SparseDtmcParameterLiftingModelChecker.h
-
3src/storm/modelchecker/parametric/SparseInstantiationModelChecker.cpp
-
1src/storm/modelchecker/parametric/SparseMdpInstantiationModelChecker.cpp
-
62src/storm/modelchecker/parametric/SparseMdpParameterLifting.cpp
-
28src/storm/modelchecker/parametric/SparseMdpParameterLifting.h
-
20src/storm/modelchecker/parametric/SparseMdpParameterLiftingModelChecker.cpp
-
4src/storm/modelchecker/parametric/SparseMdpParameterLiftingModelChecker.h
-
2src/storm/modelchecker/parametric/SparseParameterLiftingModelChecker.cpp
-
1src/storm/models/sparse/StochasticTwoPlayerGame.cpp
-
6src/storm/settings/modules/ParametricSettings.cpp
-
6src/storm/settings/modules/ParametricSettings.h
-
1src/storm/solver/GameSolver.cpp
-
1src/storm/transformer/ParameterLifter.cpp
-
6src/storm/utility/ModelInstantiator.cpp
-
6src/storm/utility/constants.cpp
-
27src/storm/utility/storm.h
-
20src/test/modelchecker/SparseDtmcParameterLiftingTest.cpp
-
18src/test/modelchecker/SparseMdpParameterLiftingTest.cpp
@ -0,0 +1,61 @@ |
|||||
|
#include "storm/modelchecker/parametric/SparseDtmcParameterLifting.h"
|
||||
|
|
||||
|
#include "storm/adapters/CarlAdapter.h"
|
||||
|
|
||||
|
#include "storm/modelchecker/parametric/SparseDtmcParameterLiftingModelChecker.h"
|
||||
|
#include "storm/modelchecker/parametric/SparseDtmcInstantiationModelChecker.h"
|
||||
|
#include "storm/transformer/SparseParametricDtmcSimplifier.h"
|
||||
|
#include "storm/models/sparse/StandardRewardModel.h"
|
||||
|
#include "storm/models/sparse/Dtmc.h"
|
||||
|
#include "SparseMdpParameterLifting.h"
|
||||
|
|
||||
|
namespace storm { |
||||
|
namespace modelchecker { |
||||
|
namespace parametric { |
||||
|
|
||||
|
template <typename SparseModelType, typename ConstantType> |
||||
|
SparseDtmcParameterLifting<SparseModelType, ConstantType>::SparseDtmcParameterLifting(SparseModelType const& parametricModel) : ParameterLifting<SparseModelType, ConstantType>(parametricModel) { |
||||
|
// Intentionally left empty
|
||||
|
} |
||||
|
|
||||
|
template <typename SparseModelType, typename ConstantType> |
||||
|
void SparseDtmcParameterLifting<SparseModelType, ConstantType>::simplifyParametricModel(CheckTask<storm::logic::Formula, typename SparseModelType::ValueType> const& checkTask) { |
||||
|
storm::transformer::SparseParametricDtmcSimplifier<SparseModelType> simplifier(this->parametricModel); |
||||
|
if(simplifier.simplify(checkTask.getFormula())) { |
||||
|
this->simplifiedModel = simplifier.getSimplifiedModel(); |
||||
|
this->currentFormula = simplifier.getSimplifiedFormula(); |
||||
|
} else { |
||||
|
this->simplifiedModel = nullptr; |
||||
|
this->currentFormula = checkTask.getFormula().asSharedPointer(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
template <typename SparseModelType, typename ConstantType> |
||||
|
void SparseDtmcParameterLifting<SparseModelType, ConstantType>::initializeUnderlyingCheckers() { |
||||
|
if (this->settings.applyExactValidation) { |
||||
|
STORM_LOG_WARN_COND((std::is_same<ConstantType, typename ParameterLifting<SparseModelType, ConstantType>::CoefficientType>::value) , "Exact validation is not necessarry if the original computation is already exact"); |
||||
|
this->exactParameterLiftingChecker = std::make_unique<SparseDtmcParameterLiftingModelChecker<SparseModelType, typename ParameterLifting<SparseModelType, ConstantType>::CoefficientType>>(this->getConsideredParametricModel()); |
||||
|
} |
||||
|
this->parameterLiftingChecker = std::make_unique<SparseDtmcParameterLiftingModelChecker<SparseModelType, ConstantType>>(this->getConsideredParametricModel()); |
||||
|
this->instantiationChecker = std::make_unique<SparseDtmcInstantiationModelChecker<SparseModelType, ConstantType>>(this->getConsideredParametricModel()); |
||||
|
} |
||||
|
|
||||
|
template <typename SparseModelType, typename ConstantType> |
||||
|
void SparseDtmcParameterLifting<SparseModelType, ConstantType>::applyHintsToExactChecker() { |
||||
|
auto dtmcPLChecker = dynamic_cast<storm::modelchecker::parametric::SparseDtmcParameterLiftingModelChecker<SparseModelType, ConstantType>*>(this->parameterLiftingChecker.get()); |
||||
|
STORM_LOG_ASSERT(dtmcPLChecker, "Underlying Parameter lifting checker has unexpected type"); |
||||
|
auto exactDtmcPLChecker = dynamic_cast<storm::modelchecker::parametric::SparseDtmcParameterLiftingModelChecker<SparseModelType, typename ParameterLifting<SparseModelType, ConstantType>::CoefficientType>*>(this->exactParameterLiftingChecker.get()); |
||||
|
STORM_LOG_ASSERT(exactDtmcPLChecker, "Underlying exact parameter lifting checker has unexpected type"); |
||||
|
exactDtmcPLChecker->getCurrentMaxScheduler() = dtmcPLChecker->getCurrentMaxScheduler(); |
||||
|
exactDtmcPLChecker->getCurrentMinScheduler() = dtmcPLChecker->getCurrentMinScheduler(); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
#ifdef STORM_HAVE_CARL
|
||||
|
template class SparseDtmcParameterLifting<storm::models::sparse::Dtmc<storm::RationalFunction>, double>; |
||||
|
template class SparseDtmcParameterLifting<storm::models::sparse::Dtmc<storm::RationalFunction>, storm::RationalNumber>; |
||||
|
#endif
|
||||
|
} // namespace parametric
|
||||
|
} //namespace modelchecker
|
||||
|
} //namespace storm
|
||||
|
|
@ -0,0 +1,27 @@ |
|||||
|
#pragma once |
||||
|
|
||||
|
#include <memory> |
||||
|
|
||||
|
#include "storm/modelchecker/parametric/ParameterLifting.h" |
||||
|
|
||||
|
namespace storm { |
||||
|
namespace modelchecker{ |
||||
|
namespace parametric{ |
||||
|
|
||||
|
|
||||
|
template<typename SparseModelType, typename ConstantType> |
||||
|
class SparseDtmcParameterLifting : public ParameterLifting<SparseModelType, ConstantType> { |
||||
|
|
||||
|
public: |
||||
|
SparseDtmcParameterLifting(SparseModelType const& parametricModel); |
||||
|
|
||||
|
protected: |
||||
|
virtual void simplifyParametricModel(CheckTask<storm::logic::Formula, typename SparseModelType::ValueType> const& checkTask) override; |
||||
|
virtual void initializeUnderlyingCheckers() override; |
||||
|
virtual void applyHintsToExactChecker() override; |
||||
|
|
||||
|
}; |
||||
|
|
||||
|
} //namespace parametric |
||||
|
} //namespace modelchecker |
||||
|
} //namespace storm |
@ -0,0 +1,62 @@ |
|||||
|
#include "storm/modelchecker/parametric/SparseMdpParameterLifting.h"
|
||||
|
|
||||
|
#include "storm/adapters/CarlAdapter.h"
|
||||
|
|
||||
|
#include "storm/modelchecker/parametric/SparseMdpParameterLiftingModelChecker.h"
|
||||
|
#include "storm/modelchecker/parametric/SparseMdpInstantiationModelChecker.h"
|
||||
|
#include "storm/transformer/SparseParametricMdpSimplifier.h"
|
||||
|
#include "storm/models/sparse/StandardRewardModel.h"
|
||||
|
#include "storm/models/sparse/Mdp.h"
|
||||
|
#include "SparseMdpParameterLifting.h"
|
||||
|
|
||||
|
namespace storm { |
||||
|
namespace modelchecker { |
||||
|
namespace parametric { |
||||
|
|
||||
|
template <typename SparseModelType, typename ConstantType> |
||||
|
SparseMdpParameterLifting<SparseModelType, ConstantType>::SparseMdpParameterLifting(SparseModelType const& parametricModel) : ParameterLifting<SparseModelType, ConstantType>(parametricModel) { |
||||
|
// Intentionally left empty
|
||||
|
} |
||||
|
|
||||
|
template <typename SparseModelType, typename ConstantType> |
||||
|
void SparseMdpParameterLifting<SparseModelType, ConstantType>::simplifyParametricModel(CheckTask<storm::logic::Formula, typename SparseModelType::ValueType> const& checkTask) { |
||||
|
storm::transformer::SparseParametricMdpSimplifier<SparseModelType> simplifier(this->parametricModel); |
||||
|
if(simplifier.simplify(checkTask.getFormula())) { |
||||
|
this->simplifiedModel = simplifier.getSimplifiedModel(); |
||||
|
this->currentFormula = simplifier.getSimplifiedFormula(); |
||||
|
} else { |
||||
|
this->simplifiedModel = nullptr; |
||||
|
this->currentFormula = checkTask.getFormula().asSharedPointer(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
template <typename SparseModelType, typename ConstantType> |
||||
|
void SparseMdpParameterLifting<SparseModelType, ConstantType>::initializeUnderlyingCheckers() { |
||||
|
if (this->settings.applyExactValidation) { |
||||
|
STORM_LOG_WARN_COND((std::is_same<ConstantType, typename ParameterLifting<SparseModelType, ConstantType>::CoefficientType>::value), "Exact validation is not necessarry if the original computation is already exact"); |
||||
|
this->exactParameterLiftingChecker = std::make_unique<SparseMdpParameterLiftingModelChecker<SparseModelType, typename ParameterLifting<SparseModelType, ConstantType>::CoefficientType>>(this->getConsideredParametricModel()); |
||||
|
} |
||||
|
this->parameterLiftingChecker = std::make_unique<SparseMdpParameterLiftingModelChecker<SparseModelType, ConstantType>>(this->getConsideredParametricModel()); |
||||
|
this->instantiationChecker = std::make_unique<SparseMdpInstantiationModelChecker<SparseModelType, ConstantType>>(this->getConsideredParametricModel()); |
||||
|
} |
||||
|
|
||||
|
template <typename SparseModelType, typename ConstantType> |
||||
|
void SparseMdpParameterLifting<SparseModelType, ConstantType>::applyHintsToExactChecker() { |
||||
|
auto MdpPLChecker = dynamic_cast<storm::modelchecker::parametric::SparseMdpParameterLiftingModelChecker<SparseModelType, ConstantType>*>(this->parameterLiftingChecker.get()); |
||||
|
STORM_LOG_ASSERT(MdpPLChecker, "Underlying Parameter lifting checker has unexpected type"); |
||||
|
auto exactMdpPLChecker = dynamic_cast<storm::modelchecker::parametric::SparseMdpParameterLiftingModelChecker<SparseModelType, typename ParameterLifting<SparseModelType, ConstantType>::CoefficientType>*>(this->exactParameterLiftingChecker.get()); |
||||
|
STORM_LOG_ASSERT(exactMdpPLChecker, "Underlying exact parameter lifting checker has unexpected type"); |
||||
|
exactMdpPLChecker->getCurrentMaxScheduler() = MdpPLChecker->getCurrentMaxScheduler(); |
||||
|
exactMdpPLChecker->getCurrentMinScheduler() = MdpPLChecker->getCurrentMinScheduler(); |
||||
|
exactMdpPLChecker->getCurrentPlayer1Scheduler() = MdpPLChecker->getCurrentPlayer1Scheduler(); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
#ifdef STORM_HAVE_CARL
|
||||
|
template class SparseMdpParameterLifting<storm::models::sparse::Mdp<storm::RationalFunction>, double>; |
||||
|
template class SparseMdpParameterLifting<storm::models::sparse::Mdp<storm::RationalFunction>, storm::RationalNumber>; |
||||
|
#endif
|
||||
|
} // namespace parametric
|
||||
|
} //namespace modelchecker
|
||||
|
} //namespace storm
|
||||
|
|
@ -0,0 +1,28 @@ |
|||||
|
#pragma once |
||||
|
|
||||
|
#include <memory> |
||||
|
|
||||
|
#include "storm/modelchecker/parametric/ParameterLifting.h" |
||||
|
|
||||
|
namespace storm { |
||||
|
namespace modelchecker{ |
||||
|
namespace parametric{ |
||||
|
|
||||
|
|
||||
|
template<typename SparseModelType, typename ConstantType> |
||||
|
class SparseMdpParameterLifting : public ParameterLifting<SparseModelType, ConstantType> { |
||||
|
|
||||
|
public: |
||||
|
SparseMdpParameterLifting(SparseModelType const& parametricModel); |
||||
|
|
||||
|
protected: |
||||
|
|
||||
|
virtual void initializeUnderlyingCheckers() override; |
||||
|
virtual void simplifyParametricModel(CheckTask<storm::logic::Formula, typename SparseModelType::ValueType> const& checkTask) override; |
||||
|
virtual void applyHintsToExactChecker() override; |
||||
|
|
||||
|
}; |
||||
|
|
||||
|
} //namespace parametric |
||||
|
} //namespace modelchecker |
||||
|
} //namespace storm |
Write
Preview
Loading…
Cancel
Save
Reference in new issue