1#include "storm-config.h"
13class DoubleSVIEnvironment {
15 typedef double ValueType;
17 static storm::Environment createEnvironment() {
18 storm::Environment env;
25class RationalPiEnvironment {
27 typedef storm::RationalNumber ValueType;
29 static storm::Environment createEnvironment() {
30 storm::Environment env;
35template<
typename TestType>
36class SparseDtmcParameterLiftingMonotonicityTest :
public ::testing::Test {
38 typedef typename TestType::ValueType ValueType;
39 SparseDtmcParameterLiftingMonotonicityTest() : _environment(TestType::createEnvironment()) {}
40 storm::Environment
const& env()
const {
44 std::shared_ptr<storm::models::sparse::Model<storm::RationalFunction>> model, std::shared_ptr<const storm::logic::Formula> formula,
45 bool useMonotonicity) {
50 virtual void SetUp() {
52 GTEST_SKIP() <<
"Z3 not available.";
54 carl::VariablePool::getInstance().clear();
56 virtual void TearDown() {
57 carl::VariablePool::getInstance().clear();
61 storm::Environment _environment;
64typedef ::testing::Types<DoubleSVIEnvironment, RationalPiEnvironment>
TestingTypes;
68TYPED_TEST(SparseDtmcParameterLiftingMonotonicityTest, Brp_Prob_Mon_LEQ) {
69 typedef typename TestFixture::ValueType
ValueType;
71 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp16_2.pm";
72 std::string formulaAsString =
"P<=0.84 [F s=5 ]";
73 std::string constantsAsString =
"";
78 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
80 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
85 ASSERT_TRUE(simplifier.simplify(*(formulas[0])));
87 formulas[0] = simplifier.getSimplifiedFormula();
100 modelParameters.insert(rewParameters.begin(), rewParameters.end());
105 auto order = monRes.begin()->first;
106 ASSERT_EQ(order->getNumberOfAddedStates(), model->getTransitionMatrix().getColumnCount());
107 ASSERT_TRUE(order->getDoneBuilding());
109 std::make_shared<storm::analysis::LocalMonotonicityResult<storm::RationalFunctionVariable>>(monRes.begin()->second.first, order->getNumberOfStates());
129TYPED_TEST(SparseDtmcParameterLiftingMonotonicityTest, Brp_Prob_Mon_GEQ) {
130 typedef typename TestFixture::ValueType
ValueType;
132 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp16_2.pm";
133 std::string formulaAsString =
"P>=0.84 [F s=5 ]";
134 std::string constantsAsString =
"";
139 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
141 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
146 ASSERT_TRUE(simplifier.simplify(*(formulas[0])));
148 formulas[0] = simplifier.getSimplifiedFormula();
161 modelParameters.insert(rewParameters.begin(), rewParameters.end());
166 auto order = monRes.begin()->first;
167 ASSERT_EQ(order->getNumberOfAddedStates(), model->getTransitionMatrix().getColumnCount());
168 ASSERT_TRUE(order->getDoneBuilding());
170 std::make_shared<storm::analysis::LocalMonotonicityResult<storm::RationalFunctionVariable>>(monRes.begin()->second.first, order->getNumberOfStates());
190TYPED_TEST(SparseDtmcParameterLiftingMonotonicityTest, Brp_Prob_Mon_LEQ_Incr) {
191 typedef typename TestFixture::ValueType
ValueType;
193 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp16_2_mon_incr.pm";
194 std::string formulaAsString =
"P<=0.84 [F s=5 ]";
195 std::string constantsAsString =
"";
200 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
202 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
207 ASSERT_TRUE(simplifier.simplify(*(formulas[0])));
209 formulas[0] = simplifier.getSimplifiedFormula();
222 modelParameters.insert(rewParameters.begin(), rewParameters.end());
227 auto order = monRes.begin()->first;
228 ASSERT_EQ(order->getNumberOfAddedStates(), model->getTransitionMatrix().getColumnCount());
229 ASSERT_TRUE(order->getDoneBuilding());
231 std::make_shared<storm::analysis::LocalMonotonicityResult<storm::RationalFunctionVariable>>(monRes.begin()->second.first, order->getNumberOfStates());
251TYPED_TEST(SparseDtmcParameterLiftingMonotonicityTest, Brp_Prob_Mon_GEQ_Incr) {
252 typedef typename TestFixture::ValueType
ValueType;
254 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp16_2_mon_incr.pm";
255 std::string formulaAsString =
"P>=0.84 [F s=5 ]";
256 std::string constantsAsString =
"";
261 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
263 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
268 ASSERT_TRUE(simplifier.simplify(*(formulas[0])));
270 formulas[0] = simplifier.getSimplifiedFormula();
283 modelParameters.insert(rewParameters.begin(), rewParameters.end());
288 auto order = monRes.begin()->first;
289 ASSERT_EQ(order->getNumberOfAddedStates(), model->getTransitionMatrix().getColumnCount());
290 ASSERT_TRUE(order->getDoneBuilding());
292 std::make_shared<storm::analysis::LocalMonotonicityResult<storm::RationalFunctionVariable>>(monRes.begin()->second.first, order->getNumberOfStates());
312TYPED_TEST(SparseDtmcParameterLiftingMonotonicityTest, Parametric_Die_Mon) {
313 typedef typename TestFixture::ValueType
ValueType;
315 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/parametric_die_2.pm";
316 std::string formulaAsString =
"P <=0.5 [F s=7 & d=2 ]";
317 std::string constantsAsString =
"";
322 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
324 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
330 modelParameters.insert(rewParameters.begin(), rewParameters.end());
334 ASSERT_TRUE(simplifier.simplify(*(formulas[0])));
336 formulas[0] = simplifier.getSimplifiedFormula();
367TYPED_TEST(SparseDtmcParameterLiftingMonotonicityTest, Simple1_Mon) {
368 typedef typename TestFixture::ValueType
ValueType;
370 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/simple1.pm";
371 std::string formulaAsString =
"P<0.75 [F s=3 ]";
372 std::string constantsAsString =
"";
377 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
379 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
385 modelParameters.insert(rewParameters.begin(), rewParameters.end());
408TYPED_TEST(SparseDtmcParameterLiftingMonotonicityTest, Casestudy1_Mon) {
409 typedef typename TestFixture::ValueType
ValueType;
411 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/casestudy1.pm";
412 std::string formulaAsString =
"P<0.5 [F s=3 ]";
413 std::string constantsAsString =
"";
418 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
420 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
426 modelParameters.insert(rewParameters.begin(), rewParameters.end());
449TYPED_TEST(SparseDtmcParameterLiftingMonotonicityTest, Casestudy2_Mon) {
450 typedef typename TestFixture::ValueType
ValueType;
452 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/casestudy2.pm";
453 std::string formulaAsString =
"P<0.5 [F s=4 ]";
454 std::string constantsAsString =
"";
459 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
461 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
467 modelParameters.insert(rewParameters.begin(), rewParameters.end());
490TYPED_TEST(SparseDtmcParameterLiftingMonotonicityTest, Casestudy3_Mon) {
491 typedef typename TestFixture::ValueType
ValueType;
493 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/casestudy3.pm";
494 std::string formulaAsString =
"P<0.5 [F s=3 ]";
495 std::string constantsAsString =
"";
500 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
502 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
508 modelParameters.insert(rewParameters.begin(), rewParameters.end());
514 model->getTransitionMatrix().printAsMatlabMatrix(std::cout);
518 ASSERT_TRUE(order->getDoneBuilding());
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)
std::shared_ptr< storm::models::sparse::Model< ValueType > > buildSparseModel(storm::storage::SymbolicModelDescription const &model, storm::builder::BuilderOptions const &options)
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::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::pars::modelchecker::MonotonicityOptions MonotonicitySetting
SFTBDDChecker::ValueType ValueType
RegionCheckEngine
The considered engine for region checking.
@ ParameterLifting
Parameter lifting approach.
@ 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.
SettingsType const & getModule()
Get module.
storm::prism::Program preprocess(storm::prism::Program const &program, std::map< storm::expressions::Variable, storm::expressions::Expression > const &constantDefinitions)
TargetType convertNumber(SourceType const &number)
TYPED_TEST(GraphTestAR, SymbolicProb01StochasticGameDieSmall)
TYPED_TEST_SUITE(GraphTestAR, TestingTypes,)
::testing::Types< Cudd, Sylvan > TestingTypes