24 changed files with 415 additions and 127 deletions
-
160src/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
-
25src/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
-
47src/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