1#include "storm-config.h"
27void testModel(std::string programFile, std::string formulaAsString, std::string constantsAsString) {
30 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
32 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
41 auto timeTravelledDtmc =
BigStep.bigStep(*dtmc, checkTask).first;
52 std::vector<std::map<storm::RationalFunctionVariable, storm::RationalFunctionCoefficient>> testInstantiations;
53 std::map<storm::RationalFunctionVariable, storm::RationalFunctionCoefficient> emptyInstantiation;
54 testInstantiations.push_back(emptyInstantiation);
55 for (
auto const& param : parameters) {
56 std::vector<std::map<storm::RationalFunctionVariable, storm::RationalFunctionCoefficient>> newInstantiations;
57 for (
auto point : testInstantiations) {
60 std::map<storm::RationalFunctionVariable, storm::RationalFunctionCoefficient> newMap(point);
62 newInstantiations.push_back(newMap);
65 testInstantiations = newInstantiations;
72 for (
auto const& instantiation : testInstantiations) {
73 auto result = modelChecker.
check(env, instantiation)->asExplicitQuantitativeCheckResult<storm::RationalNumber>();
74 auto resultTT = modelCheckerTT.
check(env, instantiation)->asExplicitQuantitativeCheckResult<storm::RationalNumber>();
76 storm::RationalNumber resA = result[*modelChecker.
getOriginalModel().getInitialStates().begin()];
77 storm::RationalNumber resB = resultTT[*modelCheckerTT.
getOriginalModel().getInitialStates().begin()];
85 auto resultPLA = pla->getBoundAtInitState(env, region[0], storm::OptimizationDirection::Minimize);
87 auto sharedDtmc = std::make_shared<storm::models::sparse::Dtmc<storm::RationalFunction>>(timeTravelledDtmc);
90 auto resultPLATT = plaTT->getBoundAtInitState(env, region[0], storm::OptimizationDirection::Minimize);
92 ASSERT_TRUE(resultPLA < resultPLATT) <<
"Time-Travelling did not make bound better";
99 GTEST_SKIP() <<
"Z3 not available.";
105 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/crowds3_5.pm";
106 std::string formulaAsString =
"P=? [F \"observeIGreater1\"]";
107 std::string constantsAsString =
"";
108 testModel(programFile, formulaAsString, constantsAsString);
111 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/nand-5-2.pm";
112 std::string formulaAsString =
"P=? [F \"target\"]";
113 std::string constantsAsString =
"";
114 testModel(programFile, formulaAsString, constantsAsString);
117 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/herman5_pla.pm";
118 std::string formulaAsString =
"R=? [F \"stable\"]";
119 std::string constantsAsString =
"";
120 testModel(programFile, formulaAsString, constantsAsString);
void testModel(std::string programFile, std::string formulaAsString, std::string constantsAsString)
SolverEnvironment & solver()
void setMethod(storm::solver::MinMaxMethod value, bool isSetFromDefault=false)
MinMaxSolverEnvironment & minMax()
Class to efficiently check a formula on a parametric model with different parameter instantiations.
virtual std::unique_ptr< CheckResult > check(Environment const &env, storm::utility::parametric::Valuation< typename SparseModelType::ValueType > const &valuation) override
void specifyFormula(CheckTask< storm::logic::Formula, typename SparseModelType::ValueType > const &checkTask)
SparseModelType const & getOriginalModel() const
std::shared_ptr< ModelType > as()
Casts the model into the model type given by the template parameter.
This class represents a discrete-time Markov chain.
std::vector< storm::jani::Property > parsePropertiesForPrismProgram(std::string const &inputString, storm::prism::Program const &program, boost::optional< std::set< std::string > > const &propertyFilter)
std::shared_ptr< storm::models::sparse::Model< ValueType > > buildSparseModel(storm::storage::SymbolicModelDescription const &model, storm::builder::BuilderOptions const &options)
storm::prism::Program parseProgram(std::string const &filename, bool prismCompatibility, bool simplify)
std::shared_ptr< storm::models::sparse::Model< ValueType > > performBisimulationMinimization(std::shared_ptr< storm::models::sparse::Model< ValueType > > const &model, std::vector< std::shared_ptr< storm::logic::Formula const > > const &formulas, storm::storage::BisimulationType type=storm::storage::BisimulationType::Strong, bool graphPreserving=true)
std::unique_ptr< storm::modelchecker::RegionModelChecker< ValueType > > initializeRegionModelChecker(Environment const &env, std::shared_ptr< storm::models::sparse::Model< ValueType > > const &model, storm::modelchecker::CheckTask< storm::logic::Formula, ValueType > const &task, storm::modelchecker::RegionCheckEngine engine, bool allowModelSimplification=true, bool graphPreserving=true, bool preconditionsValidated=false, MonotonicitySetting monotonicitySetting=MonotonicitySetting(), std::optional< std::pair< std::set< typename storm::storage::ParameterRegion< ValueType >::VariableType >, std::set< typename storm::storage::ParameterRegion< ValueType >::VariableType > > > monotoneParameters=std::nullopt)
std::vector< std::shared_ptr< storm::logic::Formula const > > extractFormulasFromProperties(std::vector< storm::jani::Property > const &properties)
storm::storage::ParameterRegion< ValueType > createRegion(std::string const &inputString, std::set< typename storm::storage::ParameterRegion< ValueType >::VariableType > const &consideredVariables)
@ ParameterLifting
Parameter lifting approach.
@ RobustParameterLifting
Parameter lifting approach based on robust markov models instead of generating nondeterminism.
std::set< storm::RationalFunctionVariable > getAllParameters(Model< storm::RationalFunction > const &model)
Get all parameters (probability, rewards, and rates) occurring in the model.
storm::prism::Program preprocess(storm::prism::Program const &program, std::map< storm::expressions::Variable, storm::expressions::Expression > const &constantDefinitions)
TargetType convertNumber(SourceType const &number)