1#include "storm-config.h"
20class DoubleSVIEnvironment {
31class RationalPiEnvironment {
40template<
typename TestType>
41class SparseDtmcParameterLiftingMonotonicityTest :
public ::testing::Test {
43 typedef typename TestType::ValueType
ValueType;
44 SparseDtmcParameterLiftingMonotonicityTest() : _environment(TestType::createEnvironment()) {}
48 virtual void SetUp() {
50 GTEST_SKIP() <<
"Z3 not available.";
52 carl::VariablePool::getInstance().clear();
54 virtual void TearDown() {
55 carl::VariablePool::getInstance().clear();
62typedef ::testing::Types<DoubleSVIEnvironment, RationalPiEnvironment>
TestingTypes;
66TYPED_TEST(SparseDtmcParameterLiftingMonotonicityTest, Brp_Prob_Mon_LEQ) {
67 typedef typename TestFixture::ValueType
ValueType;
69 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp16_2.pm";
70 std::string formulaAsString =
"P<=0.84 [F s=5 ]";
71 std::string constantsAsString =
"";
76 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
78 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
83 ASSERT_TRUE(simplifier.simplify(*(formulas[0])));
85 formulas[0] = simplifier.getSimplifiedFormula();
92 model = storm::api::performBisimulationMinimization<storm::RationalFunction>(model, formulas, bisimType)
98 modelParameters.insert(rewParameters.begin(), rewParameters.end());
103 auto order = monRes.begin()->first;
104 ASSERT_EQ(order->getNumberOfAddedStates(), model->getTransitionMatrix().getColumnCount());
105 ASSERT_TRUE(order->getDoneBuilding());
107 std::make_shared<storm::analysis::LocalMonotonicityResult<storm::RationalFunctionVariable>>(monRes.begin()->second.first, order->getNumberOfStates());
110 auto regionCheckerMon = storm::api::initializeParameterLiftingRegionModelChecker<storm::RationalFunction, ValueType>(
112 auto regionChecker = storm::api::initializeParameterLiftingRegionModelChecker<storm::RationalFunction, ValueType>(
113 this->env(), model, storm::api::createTask<storm::RationalFunction>(formulas[0],
true),
false,
false,
false);
116 auto allSatRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.7<=pL<=0.9,0.75<=pK<=0.95", modelParameters);
122 auto exBothRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.4<=pL<=0.65,0.75<=pK<=0.95", modelParameters);
128 auto allVioRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.1<=pL<=0.73,0.2<=pK<=0.715", modelParameters);
135TYPED_TEST(SparseDtmcParameterLiftingMonotonicityTest, Brp_Prob_Mon_GEQ) {
136 typedef typename TestFixture::ValueType
ValueType;
138 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp16_2.pm";
139 std::string formulaAsString =
"P>=0.84 [F s=5 ]";
140 std::string constantsAsString =
"";
145 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
147 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
152 ASSERT_TRUE(simplifier.simplify(*(formulas[0])));
154 formulas[0] = simplifier.getSimplifiedFormula();
161 model = storm::api::performBisimulationMinimization<storm::RationalFunction>(model, formulas, bisimType)
167 modelParameters.insert(rewParameters.begin(), rewParameters.end());
172 auto order = monRes.begin()->first;
173 ASSERT_EQ(order->getNumberOfAddedStates(), model->getTransitionMatrix().getColumnCount());
174 ASSERT_TRUE(order->getDoneBuilding());
176 std::make_shared<storm::analysis::LocalMonotonicityResult<storm::RationalFunctionVariable>>(monRes.begin()->second.first, order->getNumberOfStates());
179 auto regionCheckerMon = storm::api::initializeParameterLiftingRegionModelChecker<storm::RationalFunction, ValueType>(
181 auto regionChecker = storm::api::initializeParameterLiftingRegionModelChecker<storm::RationalFunction, ValueType>(
182 this->env(), model, storm::api::createTask<storm::RationalFunction>(formulas[0],
true),
false,
false,
false);
185 auto allSatRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.1<=pL<=0.73,0.2<=pK<=0.715", modelParameters);
191 auto exBothRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.4<=pL<=0.65,0.75<=pK<=0.95", modelParameters);
197 auto allVioRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.7<=pL<=0.9,0.75<=pK<=0.95", modelParameters);
204TYPED_TEST(SparseDtmcParameterLiftingMonotonicityTest, Brp_Prob_Mon_LEQ_Incr) {
205 typedef typename TestFixture::ValueType
ValueType;
207 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp16_2_mon_incr.pm";
208 std::string formulaAsString =
"P<=0.84 [F s=5 ]";
209 std::string constantsAsString =
"";
214 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
216 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
221 ASSERT_TRUE(simplifier.simplify(*(formulas[0])));
223 formulas[0] = simplifier.getSimplifiedFormula();
230 model = storm::api::performBisimulationMinimization<storm::RationalFunction>(model, formulas, bisimType)
236 modelParameters.insert(rewParameters.begin(), rewParameters.end());
241 auto order = monRes.begin()->first;
242 ASSERT_EQ(order->getNumberOfAddedStates(), model->getTransitionMatrix().getColumnCount());
243 ASSERT_TRUE(order->getDoneBuilding());
245 std::make_shared<storm::analysis::LocalMonotonicityResult<storm::RationalFunctionVariable>>(monRes.begin()->second.first, order->getNumberOfStates());
248 auto regionCheckerMon = storm::api::initializeParameterLiftingRegionModelChecker<storm::RationalFunction, ValueType>(
250 auto regionChecker = storm::api::initializeParameterLiftingRegionModelChecker<storm::RationalFunction, ValueType>(
251 this->env(), model, storm::api::createTask<storm::RationalFunction>(formulas[0],
true),
false,
false,
false);
254 auto allSatRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.7<=pL<=0.9,0.75<=pK<=0.95", modelParameters);
260 auto exBothRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.4<=pL<=0.65,0.75<=pK<=0.95", modelParameters);
266 auto allVioRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.1<=pL<=0.73,0.2<=pK<=0.715", modelParameters);
273TYPED_TEST(SparseDtmcParameterLiftingMonotonicityTest, Brp_Prob_Mon_GEQ_Incr) {
274 typedef typename TestFixture::ValueType
ValueType;
276 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp16_2_mon_incr.pm";
277 std::string formulaAsString =
"P>=0.84 [F s=5 ]";
278 std::string constantsAsString =
"";
283 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
285 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
290 ASSERT_TRUE(simplifier.simplify(*(formulas[0])));
292 formulas[0] = simplifier.getSimplifiedFormula();
299 model = storm::api::performBisimulationMinimization<storm::RationalFunction>(model, formulas, bisimType)
305 modelParameters.insert(rewParameters.begin(), rewParameters.end());
310 auto order = monRes.begin()->first;
311 ASSERT_EQ(order->getNumberOfAddedStates(), model->getTransitionMatrix().getColumnCount());
312 ASSERT_TRUE(order->getDoneBuilding());
314 std::make_shared<storm::analysis::LocalMonotonicityResult<storm::RationalFunctionVariable>>(monRes.begin()->second.first, order->getNumberOfStates());
317 auto regionCheckerMon = storm::api::initializeParameterLiftingRegionModelChecker<storm::RationalFunction, ValueType>(
319 auto regionChecker = storm::api::initializeParameterLiftingRegionModelChecker<storm::RationalFunction, ValueType>(
320 this->env(), model, storm::api::createTask<storm::RationalFunction>(formulas[0],
true),
false,
false,
false);
323 auto allSatRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.1<=pL<=0.73,0.2<=pK<=0.715", modelParameters);
329 auto exBothRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.4<=pL<=0.65,0.75<=pK<=0.95", modelParameters);
335 auto allVioRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.7<=pL<=0.9,0.75<=pK<=0.95", modelParameters);
342TYPED_TEST(SparseDtmcParameterLiftingMonotonicityTest, Parametric_Die_Mon) {
343 typedef typename TestFixture::ValueType
ValueType;
345 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/parametric_die_2.pm";
346 std::string formulaAsString =
"P <=0.5 [F s=7 & d=2 ]";
347 std::string constantsAsString =
"";
352 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
354 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
360 modelParameters.insert(rewParameters.begin(), rewParameters.end());
364 ASSERT_TRUE(simplifier.simplify(*(formulas[0])));
366 formulas[0] = simplifier.getSimplifiedFormula();
373 model = storm::api::performBisimulationMinimization<storm::RationalFunction>(model, formulas, bisimType)
377 auto regionCheckerMon = storm::api::initializeParameterLiftingRegionModelChecker<storm::RationalFunction, ValueType>(
379 auto regionChecker = storm::api::initializeParameterLiftingRegionModelChecker<storm::RationalFunction, ValueType>(
380 this->env(), model, storm::api::createTask<storm::RationalFunction>(formulas[0],
true),
false,
false,
false);
383 auto allSatRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.1<=p<=0.2,0.8<=q<=0.9", modelParameters);
392 auto exBothRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.1<=p<=0.9,0.1<=q<=0.9", modelParameters);
398 auto allVioRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.8<=p<=0.9,0.1<=q<=0.2", modelParameters);
405TYPED_TEST(SparseDtmcParameterLiftingMonotonicityTest, Simple1_Mon) {
406 typedef typename TestFixture::ValueType
ValueType;
408 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/simple1.pm";
409 std::string formulaAsString =
"P<0.75 [F s=3 ]";
410 std::string constantsAsString =
"";
415 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
417 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
423 modelParameters.insert(rewParameters.begin(), rewParameters.end());
426 auto regionCheckerMon = storm::api::initializeParameterLiftingRegionModelChecker<storm::RationalFunction, ValueType>(
428 auto regionChecker = storm::api::initializeParameterLiftingRegionModelChecker<storm::RationalFunction, ValueType>(
429 this->env(), model, storm::api::createTask<storm::RationalFunction>(formulas[0],
true),
false,
false,
false);
432 auto allSatRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.4<=p<=0.6", modelParameters);
441 auto exBothRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.1<=p<=0.9", modelParameters);
447 auto allVioRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.05<=p<=0.1", modelParameters);
454TYPED_TEST(SparseDtmcParameterLiftingMonotonicityTest, Casestudy1_Mon) {
455 typedef typename TestFixture::ValueType
ValueType;
457 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/casestudy1.pm";
458 std::string formulaAsString =
"P<0.5 [F s=3 ]";
459 std::string constantsAsString =
"";
464 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
466 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
472 modelParameters.insert(rewParameters.begin(), rewParameters.end());
475 auto regionCheckerMon = storm::api::initializeParameterLiftingRegionModelChecker<storm::RationalFunction, ValueType>(
477 auto regionChecker = storm::api::initializeParameterLiftingRegionModelChecker<storm::RationalFunction, ValueType>(
478 this->env(), model, storm::api::createTask<storm::RationalFunction>(formulas[0],
true),
false,
false,
false);
481 auto allSatRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.1<=p<=0.5", modelParameters);
490 auto exBothRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.4<=p<=0.8", modelParameters);
496 auto allVioRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.7<=p<=0.9", modelParameters);
503TYPED_TEST(SparseDtmcParameterLiftingMonotonicityTest, Casestudy2_Mon) {
504 typedef typename TestFixture::ValueType
ValueType;
506 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/casestudy2.pm";
507 std::string formulaAsString =
"P<0.5 [F s=4 ]";
508 std::string constantsAsString =
"";
513 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
515 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
521 modelParameters.insert(rewParameters.begin(), rewParameters.end());
524 auto regionCheckerMon = storm::api::initializeParameterLiftingRegionModelChecker<storm::RationalFunction, ValueType>(
526 auto regionChecker = storm::api::initializeParameterLiftingRegionModelChecker<storm::RationalFunction, ValueType>(
527 this->env(), model, storm::api::createTask<storm::RationalFunction>(formulas[0],
true),
false,
false,
false);
530 auto allSatRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.1<=p<=0.4", modelParameters);
539 auto exBothRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.4<=p<=0.9", modelParameters);
545 auto allVioRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.8<=p<=0.9", modelParameters);
552TYPED_TEST(SparseDtmcParameterLiftingMonotonicityTest, Casestudy3_Mon) {
553 typedef typename TestFixture::ValueType
ValueType;
555 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/casestudy3.pm";
556 std::string formulaAsString =
"P<0.5 [F s=3 ]";
557 std::string constantsAsString =
"";
562 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
564 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
570 modelParameters.insert(rewParameters.begin(), rewParameters.end());
573 auto regionCheckerMon = storm::api::initializeParameterLiftingRegionModelChecker<storm::RationalFunction, ValueType>(
575 auto regionChecker = storm::api::initializeParameterLiftingRegionModelChecker<storm::RationalFunction, ValueType>(
576 this->env(), model, storm::api::createTask<storm::RationalFunction>(formulas[0],
true),
false,
false,
false);
578 model->getTransitionMatrix().printAsMatlabMatrix(std::cout);
582 ASSERT_TRUE(order->getDoneBuilding());
585 auto allSatRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.6<=p<=0.9", modelParameters);
592 auto exBothRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.3<=p<=0.7", modelParameters);
599 auto allVioRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.1<=p<=0.4", modelParameters);
SolverEnvironment & solver()
void setPrecision(storm::RationalNumber value)
void setMethod(storm::solver::MinMaxMethod value, bool isSetFromDefault=false)
MinMaxSolverEnvironment & minMax()
std::map< std::shared_ptr< Order >, std::pair< std::shared_ptr< MonotonicityResult< VariableType > >, std::vector< std::shared_ptr< expressions::BinaryRelationExpression > > > > checkMonotonicityInBuild(std::ostream &outfile, bool usePLA=false, std::string dotOutfileName="dotOutput")
Builds Reachability Orders for the given model and simultaneously uses them to check for Monotonicity...
std::shared_ptr< LocalMonotonicityResult< VariableType > > createLocalMonotonicityResult(std::shared_ptr< Order > order, storage::ParameterRegion< ValueType > region)
Builds Reachability Orders for the given model and simultaneously uses them to check for Monotonicity...
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)
storm::prism::Program parseProgram(std::string const &filename, bool prismCompatibility, bool simplify)
std::vector< std::shared_ptr< storm::logic::Formula const > > extractFormulasFromProperties(std::vector< storm::jani::Property > const &properties)
SFTBDDChecker::ValueType ValueType
@ Unknown
the result is unknown
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.
SettingsType const & getModule()
Get module.
storm::prism::Program preprocess(storm::prism::Program const &program, std::map< storm::expressions::Variable, storm::expressions::Expression > const &constantDefinitions)
TYPED_TEST(GraphTestAR, SymbolicProb01StochasticGameDieSmall)
TYPED_TEST_SUITE(GraphTestAR, TestingTypes,)
::testing::Types< Cudd, Sylvan > TestingTypes