1#include "storm-config.h"
16class DoubleViEnvironment {
18 typedef double ValueType;
20 static storm::Environment createEnvironment() {
21 storm::Environment env;
28class DoubleSVIEnvironment {
30 typedef double ValueType;
32 static storm::Environment createEnvironment() {
33 storm::Environment env;
40class RationalPiEnvironment {
42 typedef storm::RationalNumber ValueType;
44 static storm::Environment createEnvironment() {
45 storm::Environment env;
51template<
typename TestType>
52class SparseDtmcParameterLiftingTest :
public ::testing::Test {
54 typedef typename TestType::ValueType ValueType;
55 SparseDtmcParameterLiftingTest() : _environment(TestType::createEnvironment()) {}
56 storm::Environment
const& env()
const {
59 virtual void SetUp() {
61 GTEST_SKIP() <<
"Z3 not available.";
63 carl::VariablePool::getInstance().clear();
65 virtual void TearDown() {
66 carl::VariablePool::getInstance().clear();
70 storm::Environment _environment;
74 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp16_2.pm";
75 std::string formulaAsString =
"P<=0.84 [F s=5 ]";
76 std::string constantsAsString =
"";
80 program = program.
preprocess(constantsAsString);
81 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
83 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
88 modelParameters.insert(rewParameters.begin(), rewParameters.end());
107 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp16_2.pm";
108 std::string formulaAsString =
"P<=0.84 [F s=5 ]";
109 std::string constantsAsString =
"";
113 program = program.
preprocess(constantsAsString);
114 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
116 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
124 modelParameters.insert(rewParameters.begin(), rewParameters.end());
140 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp_rewards16_2.pm";
141 std::string formulaAsString =
"R>2.5 [F ((s=5) | (s=0&srep=3)) ]";
142 std::string constantsAsString =
"pL=0.9,TOAck=0.5";
145 program = program.
preprocess(constantsAsString);
146 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
148 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
153 modelParameters.insert(rewParameters.begin(), rewParameters.end());
172 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp_rewards16_2.pm";
173 std::string formulaAsString =
"R>2.5 [F ((s=5) | (s=0&srep=3)) ]";
174 std::string constantsAsString =
"pL=0.9,TOAck=0.5";
177 program = program.
preprocess(constantsAsString);
178 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
180 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
188 modelParameters.insert(rewParameters.begin(), rewParameters.end());
204 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp_rewards16_2.pm";
205 std::string formulaAsString =
"R>2.5 [ C<=300]";
206 std::string constantsAsString =
"pL=0.9,TOAck=0.5";
209 program = program.
preprocess(constantsAsString);
210 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
212 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
217 modelParameters.insert(rewParameters.begin(), rewParameters.end());
236 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp_rewards16_2.pm";
237 std::string formulaAsString =
"R>2.5 [ C<=300]";
238 std::string constantsAsString =
"pL=0.9,TOAck=0.5";
241 program = program.
preprocess(constantsAsString);
242 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
244 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
252 modelParameters.insert(rewParameters.begin(), rewParameters.end());
268 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp_rewards16_2.pm";
269 std::string formulaAsString =
"R>2.5 [F (s=0&srep=3) ]";
270 std::string constantsAsString =
"";
272 program = program.
preprocess(constantsAsString);
273 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
275 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
280 modelParameters.insert(rewParameters.begin(), rewParameters.end());
293 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp_rewards16_2.pm";
294 std::string formulaAsString =
"R>2.5 [F ((s=5) | (s=0&srep=3)) ]";
295 std::string constantsAsString =
"";
297 program = program.
preprocess(constantsAsString);
298 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
300 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
305 modelParameters.insert(rewParameters.begin(), rewParameters.end());
324 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/crowds3_5.pm";
325 std::string formulaAsString =
"P<0.5 [F \"observe0Greater1\" ]";
326 std::string constantsAsString =
"";
329 program = program.
preprocess(constantsAsString);
330 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
332 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
337 modelParameters.insert(rewParameters.begin(), rewParameters.end());
359 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/crowds3_5.pm";
360 std::string formulaAsString =
"P<0.5 [F<=300 \"observe0Greater1\" ]";
361 std::string constantsAsString =
"";
364 program = program.
preprocess(constantsAsString);
365 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
367 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
372 modelParameters.insert(rewParameters.begin(), rewParameters.end());
394 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/crowds3_5.pm";
395 std::string formulaAsString =
"P>0.75 [F \"observe0Greater1\" ]";
396 std::string constantsAsString =
"badC=0.3";
399 program = program.
preprocess(constantsAsString);
400 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
402 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
407 modelParameters.insert(rewParameters.begin(), rewParameters.end());
426 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/crowds3_5.pm";
427 std::string formulaAsString =
"P>0.6 [F \"observe0Greater1\" ]";
428 std::string constantsAsString =
"PF=0.9,badC=0.2";
431 program = program.
preprocess(constantsAsString);
432 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
434 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
439 modelParameters.insert(rewParameters.begin(), rewParameters.end());
452 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/zeroconf4.pm";
453 std::string formulaAsString =
"P>0.5 [F s=5 ]";
454 std::string constantsAsString =
" n = 4";
458 program = program.
preprocess(constantsAsString);
459 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
461 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
466 modelParameters.insert(rewParameters.begin(), rewParameters.end());
484typedef ::testing::Types<DoubleViEnvironment, DoubleSVIEnvironment, RationalPiEnvironment>
TestingTypes;
488TYPED_TEST(SparseDtmcParameterLiftingTest, Brp_Prob) {
489 checkBrpProb(this->env(), TypeParam::regionEngine,
true);
492TYPED_TEST(SparseDtmcParameterLiftingTest, Brp_Prob_no_simplification) {
493 checkBrpProb(this->env(), TypeParam::regionEngine,
false);
496TYPED_TEST(SparseDtmcParameterLiftingTest, Brp_Rew) {
497 checkBrpRew(this->env(), TypeParam::regionEngine,
true);
500TYPED_TEST(SparseDtmcParameterLiftingTest, Brp_Rew_Bounded) {
501 checkBrpRewBounded(this->env(), TypeParam::regionEngine,
true);
504TYPED_TEST(SparseDtmcParameterLiftingTest, Brp_Prob_exactValidation) {
505 typedef typename TestFixture::ValueType
ValueType;
506 if (std::is_same<ValueType, storm::RationalNumber>::value) {
509 checkBrpProbValidation(this->env());
512TYPED_TEST(SparseDtmcParameterLiftingTest, Brp_Rew_exactValidation) {
513 typedef typename TestFixture::ValueType
ValueType;
514 if (std::is_same<ValueType, storm::RationalNumber>::value) {
517 checkBrpRewValidation(this->env());
520TYPED_TEST(SparseDtmcParameterLiftingTest, Brp_Rew_Bounded_exactValidation) {
521 typedef typename TestFixture::ValueType
ValueType;
522 if (std::is_same<ValueType, storm::RationalNumber>::value) {
525 checkBrpRewBoundedValidation(this->env());
528TYPED_TEST(SparseDtmcParameterLiftingTest, Brp_Rew_Infty) {
529 checkBrpRewInfty(this->env(), TypeParam::regionEngine);
532TYPED_TEST(SparseDtmcParameterLiftingTest, Brp_Rew_4Par) {
533 checkBrpRew4Par(this->env(), TypeParam::regionEngine);
536TYPED_TEST(SparseDtmcParameterLiftingTest, Crowds_Prob) {
537 checkCrowdsProb(this->env(), TypeParam::regionEngine);
540TYPED_TEST(SparseDtmcParameterLiftingTest, Crowds_Prob_stepBounded) {
541 checkCrowdsProbStepBounded(this->env(), TypeParam::regionEngine);
544TYPED_TEST(SparseDtmcParameterLiftingTest, Crowds_Prob_1Par) {
545 checkCrowdsProb1Par(this->env(), TypeParam::regionEngine);
548TYPED_TEST(SparseDtmcParameterLiftingTest, Crowds_Prob_Const) {
549 checkCrowdsProbConst(this->env(), TypeParam::regionEngine);
552TYPED_TEST(SparseDtmcParameterLiftingTest, ZeroConf) {
553 checkZeroConf(this->env(), TypeParam::regionEngine);
SolverEnvironment & solver()
void setPrecision(storm::RationalNumber value)
void setMethod(storm::solver::MinMaxMethod value, bool isSetFromDefault=false)
MinMaxSolverEnvironment & minMax()
This class represents a discrete-time Markov chain.
Program preprocess(std::map< storm::expressions::Variable, storm::expressions::Expression > const &constantDefinitions) const
Preprocesses the program by defining the given constant definitions, substituting constants and formu...
std::vector< storm::jani::Property > parsePropertiesForPrismProgram(std::string const &inputString, storm::prism::Program const &program, boost::optional< std::set< std::string > > const &propertyFilter)
storm::modelchecker::CheckTask< storm::logic::Formula, ValueType > createTask(std::shared_ptr< const storm::logic::Formula > const &formula, bool onlyInitialStatesRelevant=false)
storm::storage::ParameterRegion< ValueType > parseRegion(std::string const &inputString, std::set< typename storm::storage::ParameterRegion< ValueType >::VariableType > const &consideredVariables)
storm::prism::Program parseProgram(std::string const &filename, bool prismCompatibility, bool simplify)
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::shared_ptr< storm::models::sparse::Model< ValueType > > buildSparseModel(storm::storage::SymbolicModelDescription const &model, storm::builder::BuilderOptions const &options, typename storm::builder::ExplicitModelBuilder< ValueType >::Options const &explorationOptions=typename storm::builder::ExplicitModelBuilder< ValueType >::Options())
std::vector< std::shared_ptr< storm::logic::Formula const > > extractFormulasFromProperties(std::vector< storm::jani::Property > const &properties)
SFTBDDChecker::ValueType ValueType
@ AllSat
the formula is satisfied for all well-defined parameters in the given region
@ AllViolated
the formula is violated for all well-defined parameters in the given region
@ ExistsBoth
the formula is satisfied for some parameters but also violated for others
@ CenterViolated
the formula is violated for the parameter Valuation that corresponds to the center point of the regio...
RegionCheckEngine
The considered engine for region checking.
@ ParameterLifting
Parameter lifting approach.
@ ValidatingParameterLifting
Parameter lifting approach with a) inexact (and fast) computation first and b) exact validation of ob...
@ ExactParameterLifting
Parameter lifting approach with exact arithmethics.
std::set< storm::RationalFunctionVariable > getRewardParameters(Model< storm::RationalFunction > const &model)
Get all parameters occurring in rewards.
std::set< storm::RationalFunctionVariable > getProbabilityParameters(Model< storm::RationalFunction > const &model)
Get all probability parameters occurring on transitions.
TargetType convertNumber(SourceType const &number)
TYPED_TEST(GraphTestAR, SymbolicProb01StochasticGameDieSmall)
TYPED_TEST_SUITE(GraphTestAR, TestingTypes,)
::testing::Types< Cudd, Sylvan > TestingTypes