@ -20,12 +20,15 @@ TEST(SparseDtmcRegionModelCheckerTest, Brp_Prob) {
std : : string programFile = STORM_CPP_BASE_PATH " /examples/pdtmc/brp/brp16_2.pm " ;
std : : string formulaAsString = " P<=0.84 [F s=5 ] " ;
std : : string constantsAsString = " " ; //e.g. pL=0.9,TOACK=0.5
std : : shared_ptr < storm : : modelchecker : : region : : AbstractSparseRegionModelChecker < storm : : RationalFunction , double > > modelchecker ;
ASSERT_TRUE ( storm : : initializeRegionModelChecker ( modelchecker , programFile , formulaAsString , constantsAsString ) ) ;
auto dtmcModelchecker = std : : dynamic_pointer_cast < storm : : modelchecker : : region : : SparseDtmcRegionModelChecker < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > , double > > ( modelchecker ) ;
ASSERT_FALSE ( dtmcModelchecker = = nullptr ) ;
// Program and formula
storm : : prism : : Program program = storm : : parseProgram ( programFile ) ;
std : : vector < std : : shared_ptr < const storm : : logic : : Formula > > formulas = storm : : parseFormulasForProgram ( formulaAsString , program ) ; ;
std : : shared_ptr < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > > model = storm : : buildSparseModel < storm : : RationalFunction > ( program , formulas ) - > as < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > > ( ) ;
auto const & regionSettings = storm : : settings : : getModule < storm : : settings : : modules : : RegionSettings > ( ) ;
storm : : modelchecker : : region : : SparseRegionModelCheckerSettings settings ( regionSettings . getSampleMode ( ) , regionSettings . getApproxMode ( ) , regionSettings . getSmtMode ( ) ) ;
auto dtmcModelchecker = std : : make_shared < storm : : modelchecker : : region : : SparseDtmcRegionModelChecker < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > , double > > ( model , settings ) ;
//start testing
auto allSatRegion = storm : : modelchecker : : region : : ParameterRegion < storm : : RationalFunction > : : parseRegion ( " 0.7<=pL<=0.9,0.75<=pK<=0.95 " ) ;
auto exBothRegion = storm : : modelchecker : : region : : ParameterRegion < storm : : RationalFunction > : : parseRegion ( " 0.4<=pL<=0.65,0.75<=pK<=0.95 " ) ;
@ -48,8 +51,9 @@ TEST(SparseDtmcRegionModelCheckerTest, Brp_Prob) {
EXPECT_NEAR ( 0.8429289733 , storm : : utility : : region : : convertNumber < double > ( dtmcModelchecker - > evaluateReachabilityFunction ( allVioRegion . getUpperBoundaries ( ) ) ) , storm : : settings : : getModule < storm : : settings : : modules : : GeneralSettings > ( ) . getPrecision ( ) ) ;
//test approximative method
storm : : modelchecker : : region : : SparseRegionModelCheckerSettings settings ( storm : : settings : : modules : : RegionSettings : : ApproxMode : : TESTFIRST , storm : : settings : : modules : : RegionSettings : : SampleMode : : INSTANTIATE , storm : : settings : : modules : : RegionSettings : : SmtMode : : OFF ) ;
dtmcModelchecker = std : : dynamic_pointer_cast < storm : : modelchecker : : region : : SparseDtmcRegionModelChecker < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > , double > > ( modelchecker , settings ) ;
settings = storm : : modelchecker : : region : : SparseRegionModelCheckerSettings ( storm : : settings : : modules : : RegionSettings : : SampleMode : : INSTANTIATE , storm : : settings : : modules : : RegionSettings : : ApproxMode : : TESTFIRST , storm : : settings : : modules : : RegionSettings : : SmtMode : : OFF ) ;
dtmcModelchecker = std : : make_shared < storm : : modelchecker : : region : : SparseDtmcRegionModelChecker < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > , double > > ( model , settings ) ;
ASSERT_TRUE ( settings . doApprox ( ) ) ;
ASSERT_TRUE ( settings . doSample ( ) ) ;
ASSERT_FALSE ( settings . doSmt ( ) ) ;
@ -65,8 +69,8 @@ TEST(SparseDtmcRegionModelCheckerTest, Brp_Prob) {
auto exBothRegionSmt = storm : : modelchecker : : region : : ParameterRegion < storm : : RationalFunction > : : parseRegion ( " 0.4<=pL<=0.65,0.75<=pK<=0.95 " ) ;
auto allVioRegionSmt = storm : : modelchecker : : region : : ParameterRegion < storm : : RationalFunction > : : parseRegion ( " 0.1<=pL<=0.9,0.2<=pK<=0.5 " ) ;
settings = storm : : modelchecker : : region : : SparseRegionModelCheckerSettings ( storm : : settings : : modules : : RegionSettings : : ApproxMode : : OFF , storm : : settings : : modules : : RegionSettings : : SampleMode : : EVALUATE , storm : : settings : : modules : : RegionSettings : : SmtMode : : FUNCTION ) ;
dtmcModelchecker = std : : dynamic_pointer_cast < storm : : modelchecker : : region : : SparseDtmcRegionModelChecker < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > , double > > ( modelchecker , settings ) ;
settings = storm : : modelchecker : : region : : SparseRegionModelCheckerSettings ( storm : : settings : : modules : : RegionSettings : : SampleMode : : EVALUATE , storm : : settings : : modules : : RegionSettings : : ApproxMode : : OFF , storm : : settings : : modules : : RegionSettings : : SmtMode : : FUNCTION ) ;
dtmcModelchecker = std : : make_shared < storm : : modelchecker : : region : : SparseDtmcRegionModelChecker < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > , double > > ( model , settings ) ;
ASSERT_FALSE ( settings . doApprox ( ) ) ;
ASSERT_TRUE ( settings . doSample ( ) ) ;
ASSERT_TRUE ( settings . doSmt ( ) ) ;
@ -84,11 +88,14 @@ TEST(SparseDtmcRegionModelCheckerTest, Brp_Rew) {
std : : string programFile = STORM_CPP_BASE_PATH " /examples/pdtmc/brp_rewards4/brp_rewards16_2.pm " ;
std : : string formulaAsString = " R>2.5 [F ((s=5) | (s=0&srep=3)) ] " ;
std : : string constantsAsString = " pL=0.9,TOAck=0.5 " ;
std : : shared_ptr < storm : : modelchecker : : region : : AbstractSparseRegionModelChecker < storm : : RationalFunction , double > > modelchecker ;
ASSERT_TRUE ( storm : : initializeRegionModelChecker ( modelchecker , programFile , formulaAsString , constantsAsString ) ) ;
auto dtmcModelchecker = std : : dynamic_pointer_cast < storm : : modelchecker : : region : : SparseDtmcRegionModelChecker < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > , double > > ( modelchecker ) ;
storm : : prism : : Program program = storm : : parseProgram ( programFile ) ;
std : : vector < std : : shared_ptr < const storm : : logic : : Formula > > formulas = storm : : parseFormulasForProgram ( formulaAsString , program ) ; ;
std : : shared_ptr < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > > model = storm : : buildSparseModel < storm : : RationalFunction > ( program , formulas ) - > as < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > > ( ) ;
auto const & regionSettings = storm : : settings : : getModule < storm : : settings : : modules : : RegionSettings > ( ) ;
storm : : modelchecker : : region : : SparseRegionModelCheckerSettings settings ( regionSettings . getSampleMode ( ) , regionSettings . getApproxMode ( ) , regionSettings . getSmtMode ( ) ) ;
auto dtmcModelchecker = std : : make_shared < storm : : modelchecker : : region : : SparseDtmcRegionModelChecker < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > , double > > ( model , settings ) ;
//start testing
auto allSatRegion = storm : : modelchecker : : region : : ParameterRegion < storm : : RationalFunction > : : parseRegion ( " 0.7<=pK<=0.875,0.75<=TOMsg<=0.95 " ) ;
auto exBothRegion = storm : : modelchecker : : region : : ParameterRegion < storm : : RationalFunction > : : parseRegion ( " 0.6<=pK<=0.9,0.5<=TOMsg<=0.95 " ) ;
@ -116,10 +123,12 @@ TEST(SparseDtmcRegionModelCheckerTest, Brp_Rew) {
EXPECT_NEAR ( 1.308324558 , storm : : utility : : region : : convertNumber < double > ( dtmcModelchecker - > evaluateReachabilityFunction ( allVioRegion . getUpperBoundaries ( ) ) ) , storm : : settings : : getModule < storm : : settings : : modules : : GeneralSettings > ( ) . getPrecision ( ) ) ;
//test approximative method
storm : : settings : : mutableRegionSettings ( ) . modifyModes ( storm : : settings : : modules : : RegionSettings : : ApproxMode : : TESTFIRST , storm : : settings : : modules : : RegionSettings : : SampleMode : : INSTANTIATE , storm : : settings : : modules : : RegionSettings : : SmtMode : : OFF ) ;
ASSERT_TRUE ( storm : : settings : : getModule < storm : : settings : : modules : : RegionSettings > ( ) . doApprox ( ) ) ;
ASSERT_TRUE ( storm : : settings : : getModule < storm : : settings : : modules : : RegionSettings > ( ) . doSample ( ) ) ;
ASSERT_FALSE ( storm : : settings : : getModule < storm : : settings : : modules : : RegionSettings > ( ) . doSmt ( ) ) ;
settings = storm : : modelchecker : : region : : SparseRegionModelCheckerSettings ( storm : : settings : : modules : : RegionSettings : : SampleMode : : INSTANTIATE , storm : : settings : : modules : : RegionSettings : : ApproxMode : : TESTFIRST , storm : : settings : : modules : : RegionSettings : : SmtMode : : OFF ) ;
dtmcModelchecker = std : : make_shared < storm : : modelchecker : : region : : SparseDtmcRegionModelChecker < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > , double > > ( model , settings ) ;
ASSERT_TRUE ( dtmcModelchecker - > getSettings ( ) . doApprox ( ) ) ;
ASSERT_TRUE ( dtmcModelchecker - > getSettings ( ) . doSample ( ) ) ;
ASSERT_FALSE ( dtmcModelchecker - > getSettings ( ) . doSmt ( ) ) ;
dtmcModelchecker - > checkRegion ( allSatRegion ) ;
EXPECT_EQ ( ( storm : : modelchecker : : region : : RegionCheckResult : : ALLSAT ) , allSatRegion . getCheckResult ( ) ) ;
dtmcModelchecker - > checkRegion ( exBothRegion ) ;
@ -138,10 +147,11 @@ TEST(SparseDtmcRegionModelCheckerTest, Brp_Rew) {
auto exBothRegionSmt = storm : : modelchecker : : region : : ParameterRegion < storm : : RationalFunction > : : parseRegion ( " 0.3<=pK<=0.5,0.5<=TOMsg<=0.75 " ) ;
auto exBothHardRegionSmt = storm : : modelchecker : : region : : ParameterRegion < storm : : RationalFunction > : : parseRegion ( " 0.5<=pK<=0.75,0.3<=TOMsg<=0.4 " ) ; //this region has a local maximum!
auto allVioRegionSmt = storm : : modelchecker : : region : : ParameterRegion < storm : : RationalFunction > : : parseRegion ( " 0.1<=pK<=0.3,0.2<=TOMsg<=0.3 " ) ;
storm : : settings : : mutableRegionSettings ( ) . modifyModes ( storm : : settings : : modules : : RegionSettings : : ApproxMode : : OFF , storm : : settings : : modules : : RegionSettings : : SampleMode : : EVALUATE , storm : : settings : : modules : : RegionSettings : : SmtMode : : FUNCTION ) ;
ASSERT_FALSE ( storm : : settings : : getModule < storm : : settings : : modules : : RegionSettings > ( ) . doApprox ( ) ) ;
ASSERT_TRUE ( storm : : settings : : getModule < storm : : settings : : modules : : RegionSettings > ( ) . doSample ( ) ) ;
ASSERT_TRUE ( storm : : settings : : getModule < storm : : settings : : modules : : RegionSettings > ( ) . doSmt ( ) ) ;
settings = storm : : modelchecker : : region : : SparseRegionModelCheckerSettings ( storm : : settings : : modules : : RegionSettings : : SampleMode : : EVALUATE , storm : : settings : : modules : : RegionSettings : : ApproxMode : : OFF , storm : : settings : : modules : : RegionSettings : : SmtMode : : FUNCTION ) ;
dtmcModelchecker = std : : make_shared < storm : : modelchecker : : region : : SparseDtmcRegionModelChecker < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > , double > > ( model , settings ) ;
ASSERT_FALSE ( dtmcModelchecker - > getSettings ( ) . doApprox ( ) ) ;
ASSERT_TRUE ( dtmcModelchecker - > getSettings ( ) . doSample ( ) ) ;
ASSERT_TRUE ( dtmcModelchecker - > getSettings ( ) . doSmt ( ) ) ;
dtmcModelchecker - > checkRegion ( allSatRegionSmt ) ;
//smt EXPECT_EQ((storm::modelchecker::region::RegionCheckResult::ALLSAT), allSatRegionSmt.getCheckResult());
dtmcModelchecker - > checkRegion ( exBothRegionSmt ) ;
@ -153,14 +163,15 @@ TEST(SparseDtmcRegionModelCheckerTest, Brp_Rew) {
//test smt + approx
auto exBothHardRegionSmtApp = storm : : modelchecker : : region : : ParameterRegion < storm : : RationalFunction > : : parseRegion ( " 0.5<=pK<=0.75,0.3<=TOMsg<=0.4 " ) ; //this region has a local maximum!
storm : : settings : : mutableRegionSettings ( ) . modifyModes ( storm : : settings : : modules : : RegionSettings : : ApproxMode : : TESTFIRST , storm : : settings : : modules : : RegionSettings : : SampleMode : : EVALUATE , storm : : settings : : modules : : RegionSettings : : SmtMode : : FUNCTION ) ;
ASSERT_TRUE ( storm : : settings : : getModule < storm : : settings : : modules : : RegionSettings > ( ) . doApprox ( ) ) ;
ASSERT_TRUE ( storm : : settings : : getModule < storm : : settings : : modules : : RegionSettings > ( ) . doSample ( ) ) ;
ASSERT_TRUE ( storm : : settings : : getModule < storm : : settings : : modules : : RegionSettings > ( ) . doSmt ( ) ) ;
settings = storm : : modelchecker : : region : : SparseRegionModelCheckerSettings ( storm : : settings : : modules : : RegionSettings : : SampleMode : : EVALUATE , storm : : settings : : modules : : RegionSettings : : ApproxMode : : TESTFIRST , storm : : settings : : modules : : RegionSettings : : SmtMode : : FUNCTION ) ;
dtmcModelchecker = std : : make_shared < storm : : modelchecker : : region : : SparseDtmcRegionModelChecker < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > , double > > ( model , settings ) ;
ASSERT_TRUE ( dtmcModelchecker - > getSettings ( ) . doApprox ( ) ) ;
ASSERT_TRUE ( dtmcModelchecker - > getSettings ( ) . doSample ( ) ) ;
ASSERT_TRUE ( dtmcModelchecker - > getSettings ( ) . doSmt ( ) ) ;
dtmcModelchecker - > checkRegion ( exBothHardRegionSmt ) ;
//smt EXPECT_EQ((storm::modelchecker::region::RegionCheckResult::EXISTSBOTH), exBothHardRegionSmtApp.getCheckResult());
storm : : settings : : mutableRegionSettings ( ) . resetModes ( ) ;
carl : : VariablePool : : getInstance ( ) . clear ( ) ;
}
@ -169,11 +180,13 @@ TEST(SparseDtmcRegionModelCheckerTest, Brp_Rew_Infty) {
std : : string programFile = STORM_CPP_BASE_PATH " /examples/pdtmc/brp_rewards4/brp_rewards16_2.pm " ;
std : : string formulaAsString = " R>2.5 [F (s=0&srep=3) ] " ;
std : : string constantsAsString = " " ;
std : : shared_ptr < storm : : modelchecker : : region : : AbstractSparseRegionModelChecker < storm : : RationalFunction , double > > modelchecker ;
ASSERT_TRUE ( storm : : initializeRegionModelChecker ( modelchecker , programFile , formulaAsString , constantsAsString ) ) ;
auto dtmcModelchecker = std : : dynamic_pointer_cast < storm : : modelchecker : : region : : SparseDtmcRegionModelChecker < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > , double > > ( modelchecker ) ;
storm : : prism : : Program program = storm : : parseProgram ( programFile ) ;
std : : vector < std : : shared_ptr < const storm : : logic : : Formula > > formulas = storm : : parseFormulasForProgram ( formulaAsString , program ) ; ;
std : : shared_ptr < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > > model = storm : : buildSparseModel < storm : : RationalFunction > ( program , formulas ) - > as < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > > ( ) ;
auto const & regionSettings = storm : : settings : : getModule < storm : : settings : : modules : : RegionSettings > ( ) ;
storm : : modelchecker : : region : : SparseRegionModelCheckerSettings settings ( regionSettings . getSampleMode ( ) , regionSettings . getApproxMode ( ) , regionSettings . getSmtMode ( ) ) ;
auto dtmcModelchecker = std : : make_shared < storm : : modelchecker : : region : : SparseDtmcRegionModelChecker < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > , double > > ( model , settings ) ;
//start testing
auto allSatRegion = storm : : modelchecker : : region : : ParameterRegion < storm : : RationalFunction > : : parseRegion ( " " ) ;
@ -181,23 +194,24 @@ TEST(SparseDtmcRegionModelCheckerTest, Brp_Rew_Infty) {
EXPECT_EQ ( storm : : utility : : infinity < double > ( ) , dtmcModelchecker - > getReachabilityValue ( allSatRegion . getLowerBoundaries ( ) ) ) ;
//test approximative method
storm : : settings : : mutableRegionSettings ( ) . modifyModes ( storm : : settings : : modules : : RegionSettings : : ApproxMode : : TESTFIRST , storm : : settings : : modules : : RegionSettings : : SampleMode : : INSTANTIATE , storm : : settings : : modules : : RegionSettings : : SmtMode : : OFF ) ;
ASSERT_TRUE ( storm : : settings : : getModule < storm : : settings : : modules : : RegionSettings > ( ) . doApprox ( ) ) ;
ASSERT_TRUE ( storm : : settings : : getModule < storm : : settings : : modules : : RegionSettings > ( ) . doSample ( ) ) ;
ASSERT_FALSE ( storm : : settings : : getModule < storm : : settings : : modules : : RegionSettings > ( ) . doSmt ( ) ) ;
settings = storm : : modelchecker : : region : : SparseRegionModelCheckerSettings ( storm : : settings : : modules : : RegionSettings : : SampleMode : : INSTANTIATE , storm : : settings : : modules : : RegionSettings : : ApproxMode : : TESTFIRST , storm : : settings : : modules : : RegionSettings : : SmtMode : : OFF ) ;
dtmcModelchecker = std : : make_shared < storm : : modelchecker : : region : : SparseDtmcRegionModelChecker < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > , double > > ( model , settings ) ;
ASSERT_TRUE ( dtmcModelchecker - > getSettings ( ) . doApprox ( ) ) ;
ASSERT_TRUE ( dtmcModelchecker - > getSettings ( ) . doSample ( ) ) ;
ASSERT_FALSE ( dtmcModelchecker - > getSettings ( ) . doSmt ( ) ) ;
dtmcModelchecker - > checkRegion ( allSatRegion ) ;
EXPECT_EQ ( ( storm : : modelchecker : : region : : RegionCheckResult : : ALLSAT ) , allSatRegion . getCheckResult ( ) ) ;
//test smt method (the regions need to be created again, because the old ones have some information stored in their internal state)
auto allSatRegionSmt = storm : : modelchecker : : region : : ParameterRegion < storm : : RationalFunction > : : parseRegion ( " " ) ;
storm : : settings : : mutableRegionSettings ( ) . modifyModes ( storm : : settings : : modules : : RegionSettings : : ApproxMode : : OFF , storm : : settings : : modules : : RegionSettings : : SampleMode : : EVALUATE , storm : : settings : : modules : : RegionSettings : : SmtMode : : FUNCTION ) ;
ASSERT_FALSE ( storm : : settings : : getModule < storm : : settings : : modules : : RegionSettings > ( ) . doApprox ( ) ) ;
ASSERT_TRUE ( storm : : settings : : getModule < storm : : settings : : modules : : RegionSettings > ( ) . doSample ( ) ) ;
ASSERT_TRUE ( storm : : settings : : getModule < storm : : settings : : modules : : RegionSettings > ( ) . doSmt ( ) ) ;
settings = storm : : modelchecker : : region : : SparseRegionModelCheckerSettings ( storm : : settings : : modules : : RegionSettings : : SampleMode : : EVALUATE , storm : : settings : : modules : : RegionSettings : : ApproxMode : : OFF , storm : : settings : : modules : : RegionSettings : : SmtMode : : FUNCTION ) ;
dtmcModelchecker = std : : make_shared < storm : : modelchecker : : region : : SparseDtmcRegionModelChecker < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > , double > > ( model , settings ) ;
ASSERT_FALSE ( dtmcModelchecker - > getSettings ( ) . doApprox ( ) ) ;
ASSERT_TRUE ( dtmcModelchecker - > getSettings ( ) . doSample ( ) ) ;
ASSERT_TRUE ( dtmcModelchecker - > getSettings ( ) . doSmt ( ) ) ;
dtmcModelchecker - > checkRegion ( allSatRegionSmt ) ;
//smt EXPECT_EQ((storm::modelchecker::region::RegionCheckResult::ALLSAT), allSatRegionSmt.getCheckResult());
storm : : settings : : mutableRegionSettings ( ) . resetModes ( ) ;
carl : : VariablePool : : getInstance ( ) . clear ( ) ;
}
@ -206,11 +220,14 @@ TEST(SparseDtmcRegionModelCheckerTest, Brp_Rew_4Par) {
std : : string programFile = STORM_CPP_BASE_PATH " /examples/pdtmc/brp_rewards4/brp_rewards16_2.pm " ;
std : : string formulaAsString = " R>2.5 [F ((s=5) | (s=0&srep=3)) ] " ;
std : : string constantsAsString = " " ; //!! this model will have 4 parameters
std : : shared_ptr < storm : : modelchecker : : region : : AbstractSparseRegionModelChecker < storm : : RationalFunction , double > > modelchecker ;
ASSERT_TRUE ( storm : : initializeRegionModelChecker ( modelchecker , programFile , formulaAsString , constantsAsString ) ) ;
auto dtmcModelchecker = std : : dynamic_pointer_cast < storm : : modelchecker : : region : : SparseDtmcRegionModelChecker < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > , double > > ( modelchecker ) ;
storm : : prism : : Program program = storm : : parseProgram ( programFile ) ;
std : : vector < std : : shared_ptr < const storm : : logic : : Formula > > formulas = storm : : parseFormulasForProgram ( formulaAsString , program ) ; ;
std : : shared_ptr < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > > model = storm : : buildSparseModel < storm : : RationalFunction > ( program , formulas ) - > as < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > > ( ) ;
auto const & regionSettings = storm : : settings : : getModule < storm : : settings : : modules : : RegionSettings > ( ) ;
storm : : modelchecker : : region : : SparseRegionModelCheckerSettings settings ( regionSettings . getSampleMode ( ) , regionSettings . getApproxMode ( ) , regionSettings . getSmtMode ( ) ) ;
auto dtmcModelchecker = std : : make_shared < storm : : modelchecker : : region : : SparseDtmcRegionModelChecker < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > , double > > ( model , settings ) ;
//start testing
auto allSatRegion = storm : : modelchecker : : region : : ParameterRegion < storm : : RationalFunction > : : parseRegion ( " 0.7<=pK<=0.9,0.6<=pL<=0.85,0.9<=TOMsg<=0.95,0.85<=TOAck<=0.9 " ) ;
auto exBothRegion = storm : : modelchecker : : region : : ParameterRegion < storm : : RationalFunction > : : parseRegion ( " 0.1<=pK<=0.7,0.2<=pL<=0.8,0.15<=TOMsg<=0.65,0.3<=TOAck<=0.9 " ) ;
@ -227,10 +244,11 @@ TEST(SparseDtmcRegionModelCheckerTest, Brp_Rew_4Par) {
EXPECT_NEAR ( 0.4467496536 , storm : : utility : : region : : convertNumber < double > ( dtmcModelchecker - > evaluateReachabilityFunction ( allVioRegion . getLowerBoundaries ( ) ) ) , storm : : settings : : getModule < storm : : settings : : modules : : GeneralSettings > ( ) . getPrecision ( ) ) ;
//test approximative method
storm : : settings : : mutableRegionSettings ( ) . modifyModes ( storm : : settings : : modules : : RegionSettings : : ApproxMode : : TESTFIRST , storm : : settings : : modules : : RegionSettings : : SampleMode : : INSTANTIATE , storm : : settings : : modules : : RegionSettings : : SmtMode : : OFF ) ;
ASSERT_TRUE ( storm : : settings : : getModule < storm : : settings : : modules : : RegionSettings > ( ) . doApprox ( ) ) ;
ASSERT_TRUE ( storm : : settings : : getModule < storm : : settings : : modules : : RegionSettings > ( ) . doSample ( ) ) ;
ASSERT_FALSE ( storm : : settings : : getModule < storm : : settings : : modules : : RegionSettings > ( ) . doSmt ( ) ) ;
settings = storm : : modelchecker : : region : : SparseRegionModelCheckerSettings ( storm : : settings : : modules : : RegionSettings : : SampleMode : : INSTANTIATE , storm : : settings : : modules : : RegionSettings : : ApproxMode : : TESTFIRST , storm : : settings : : modules : : RegionSettings : : SmtMode : : OFF ) ;
dtmcModelchecker = std : : make_shared < storm : : modelchecker : : region : : SparseDtmcRegionModelChecker < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > , double > > ( model , settings ) ;
ASSERT_TRUE ( dtmcModelchecker - > getSettings ( ) . doApprox ( ) ) ;
ASSERT_TRUE ( dtmcModelchecker - > getSettings ( ) . doSample ( ) ) ;
ASSERT_FALSE ( dtmcModelchecker - > getSettings ( ) . doSmt ( ) ) ;
dtmcModelchecker - > checkRegion ( allSatRegion ) ;
EXPECT_EQ ( ( storm : : modelchecker : : region : : RegionCheckResult : : ALLSAT ) , allSatRegion . getCheckResult ( ) ) ;
dtmcModelchecker - > checkRegion ( exBothRegion ) ;
@ -242,18 +260,18 @@ TEST(SparseDtmcRegionModelCheckerTest, Brp_Rew_4Par) {
auto allSatRegionSmt = storm : : modelchecker : : region : : ParameterRegion < storm : : RationalFunction > : : parseRegion ( " 0.7<=pK<=0.9,0.6<=pL<=0.85,0.9<=TOMsg<=0.95,0.85<=TOAck<=0.9 " ) ;
auto exBothRegionSmt = storm : : modelchecker : : region : : ParameterRegion < storm : : RationalFunction > : : parseRegion ( " 0.1<=pK<=0.7,0.2<=pL<=0.8,0.15<=TOMsg<=0.65,0.3<=TOAck<=0.9 " ) ;
auto allVioRegionSmt = storm : : modelchecker : : region : : ParameterRegion < storm : : RationalFunction > : : parseRegion ( " 0.1<=pK<=0.4,0.2<=pL<=0.3,0.15<=TOMsg<=0.3,0.1<=TOAck<=0.2 " ) ;
storm : : settings : : mutableRegionSettings ( ) . modifyModes ( storm : : settings : : modules : : RegionSettings : : ApproxMode : : OFF , storm : : settings : : modules : : RegionSettings : : SampleMode : : EVALUATE , storm : : settings : : modules : : RegionSettings : : SmtMode : : FUNCTION ) ;
ASSERT_FALSE ( storm : : settings : : getModule < storm : : settings : : modules : : RegionSettings > ( ) . doApprox ( ) ) ;
ASSERT_TRUE ( storm : : settings : : getModule < storm : : settings : : modules : : RegionSettings > ( ) . doSample ( ) ) ;
ASSERT_TRUE ( storm : : settings : : getModule < storm : : settings : : modules : : RegionSettings > ( ) . doSmt ( ) ) ;
settings = storm : : modelchecker : : region : : SparseRegionModelCheckerSettings ( storm : : settings : : modules : : RegionSettings : : SampleMode : : EVALUATE , storm : : settings : : modules : : RegionSettings : : ApproxMode : : OFF , storm : : settings : : modules : : RegionSettings : : SmtMode : : FUNCTION ) ;
dtmcModelchecker = std : : make_shared < storm : : modelchecker : : region : : SparseDtmcRegionModelChecker < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > , double > > ( model , settings ) ;
ASSERT_FALSE ( dtmcModelchecker - > getSettings ( ) . doApprox ( ) ) ;
ASSERT_TRUE ( dtmcModelchecker - > getSettings ( ) . doSample ( ) ) ;
ASSERT_TRUE ( dtmcModelchecker - > getSettings ( ) . doSmt ( ) ) ;
dtmcModelchecker - > checkRegion ( allSatRegionSmt ) ;
//smt EXPECT_EQ((storm::modelchecker::region::RegionCheckResult::ALLSAT), allSatRegionSmt.getCheckResult());
dtmcModelchecker - > checkRegion ( exBothRegionSmt ) ;
//smt EXPECT_EQ((storm::modelchecker::region::RegionCheckResult::EXISTSBOTH), exBothRegionSmt.getCheckResult());
dtmcModelchecker - > checkRegion ( allVioRegionSmt ) ;
//smt EXPECT_EQ((storm::modelchecker::region::RegionCheckResult::ALLVIOLATED), allVioRegionSmt.getCheckResult());
storm : : settings : : mutableRegionSettings ( ) . resetModes ( ) ;
carl : : VariablePool : : getInstance ( ) . clear ( ) ;
}
@ -262,11 +280,14 @@ TEST(SparseDtmcRegionModelCheckerTest, Crowds_Prob) {
std : : string programFile = STORM_CPP_BASE_PATH " /examples/pdtmc/crowds/crowds3_5.pm " ;
std : : string formulaAsString = " P<0.5 [F \" observe0Greater1 \" ] " ;
std : : string constantsAsString = " " ; //e.g. pL=0.9,TOACK=0.5
std : : shared_ptr < storm : : modelchecker : : region : : AbstractSparseRegionModelChecker < storm : : RationalFunction , double > > modelchecker ;
ASSERT_TRUE ( storm : : initializeRegionModelChecker ( modelchecker , programFile , formulaAsString , constantsAsString ) ) ;
auto dtmcModelchecker = std : : dynamic_pointer_cast < storm : : modelchecker : : region : : SparseDtmcRegionModelChecker < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > , double > > ( modelchecker ) ;
storm : : prism : : Program program = storm : : parseProgram ( programFile ) ;
std : : vector < std : : shared_ptr < const storm : : logic : : Formula > > formulas = storm : : parseFormulasForProgram ( formulaAsString , program ) ; ;
std : : shared_ptr < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > > model = storm : : buildSparseModel < storm : : RationalFunction > ( program , formulas ) - > as < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > > ( ) ;
auto const & regionSettings = storm : : settings : : getModule < storm : : settings : : modules : : RegionSettings > ( ) ;
storm : : modelchecker : : region : : SparseRegionModelCheckerSettings settings ( regionSettings . getSampleMode ( ) , regionSettings . getApproxMode ( ) , regionSettings . getSmtMode ( ) ) ;
auto dtmcModelchecker = std : : make_shared < storm : : modelchecker : : region : : SparseDtmcRegionModelChecker < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > , double > > ( model , settings ) ;
//start testing
auto allSatRegion = storm : : modelchecker : : region : : ParameterRegion < storm : : RationalFunction > : : parseRegion ( " 0.1<=PF<=0.75,0.15<=badC<=0.2 " ) ;
auto exBothRegion = storm : : modelchecker : : region : : ParameterRegion < storm : : RationalFunction > : : parseRegion ( " 0.75<=PF<=0.8,0.2<=badC<=0.3 " ) ;
@ -290,10 +311,11 @@ TEST(SparseDtmcRegionModelCheckerTest, Crowds_Prob) {
EXPECT_NEAR ( 0.999895897 , storm : : utility : : region : : convertNumber < double > ( dtmcModelchecker - > evaluateReachabilityFunction ( allVioHardRegion . getUpperBoundaries ( ) ) ) , storm : : settings : : getModule < storm : : settings : : modules : : GeneralSettings > ( ) . getPrecision ( ) ) ;
//test approximative method
storm : : settings : : mutableRegionSettings ( ) . modifyModes ( storm : : settings : : modules : : RegionSettings : : ApproxMode : : TESTFIRST , storm : : settings : : modules : : RegionSettings : : SampleMode : : INSTANTIATE , storm : : settings : : modules : : RegionSettings : : SmtMode : : OFF ) ;
ASSERT_TRUE ( storm : : settings : : getModule < storm : : settings : : modules : : RegionSettings > ( ) . doApprox ( ) ) ;
ASSERT_TRUE ( storm : : settings : : getModule < storm : : settings : : modules : : RegionSettings > ( ) . doSample ( ) ) ;
ASSERT_FALSE ( storm : : settings : : getModule < storm : : settings : : modules : : RegionSettings > ( ) . doSmt ( ) ) ;
settings = storm : : modelchecker : : region : : SparseRegionModelCheckerSettings ( storm : : settings : : modules : : RegionSettings : : SampleMode : : INSTANTIATE , storm : : settings : : modules : : RegionSettings : : ApproxMode : : TESTFIRST , storm : : settings : : modules : : RegionSettings : : SmtMode : : OFF ) ;
dtmcModelchecker = std : : make_shared < storm : : modelchecker : : region : : SparseDtmcRegionModelChecker < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > , double > > ( model , settings ) ;
ASSERT_TRUE ( dtmcModelchecker - > getSettings ( ) . doApprox ( ) ) ;
ASSERT_TRUE ( dtmcModelchecker - > getSettings ( ) . doSample ( ) ) ;
ASSERT_FALSE ( dtmcModelchecker - > getSettings ( ) . doSmt ( ) ) ;
dtmcModelchecker - > checkRegion ( allSatRegion ) ;
EXPECT_EQ ( ( storm : : modelchecker : : region : : RegionCheckResult : : ALLSAT ) , allSatRegion . getCheckResult ( ) ) ;
dtmcModelchecker - > checkRegion ( exBothRegion ) ;
@ -312,10 +334,11 @@ TEST(SparseDtmcRegionModelCheckerTest, Crowds_Prob) {
auto exBothRegionSmt = storm : : modelchecker : : region : : ParameterRegion < storm : : RationalFunction > : : parseRegion ( " 0.75<=PF<=0.8,0.2<=badC<=0.3 " ) ;
auto allVioRegionSmt = storm : : modelchecker : : region : : ParameterRegion < storm : : RationalFunction > : : parseRegion ( " 0.8<=PF<=0.95,0.2<=badC<=0.2 " ) ;
auto allVioHardRegionSmt = storm : : modelchecker : : region : : ParameterRegion < storm : : RationalFunction > : : parseRegion ( " 0.8<=PF<=0.95,0.2<=badC<=0.9 " ) ;
storm : : settings : : mutableRegionSettings ( ) . modifyModes ( storm : : settings : : modules : : RegionSettings : : ApproxMode : : OFF , storm : : settings : : modules : : RegionSettings : : SampleMode : : EVALUATE , storm : : settings : : modules : : RegionSettings : : SmtMode : : FUNCTION ) ;
ASSERT_FALSE ( storm : : settings : : getModule < storm : : settings : : modules : : RegionSettings > ( ) . doApprox ( ) ) ;
ASSERT_TRUE ( storm : : settings : : getModule < storm : : settings : : modules : : RegionSettings > ( ) . doSample ( ) ) ;
ASSERT_TRUE ( storm : : settings : : getModule < storm : : settings : : modules : : RegionSettings > ( ) . doSmt ( ) ) ;
settings = storm : : modelchecker : : region : : SparseRegionModelCheckerSettings ( storm : : settings : : modules : : RegionSettings : : SampleMode : : EVALUATE , storm : : settings : : modules : : RegionSettings : : ApproxMode : : OFF , storm : : settings : : modules : : RegionSettings : : SmtMode : : FUNCTION ) ;
dtmcModelchecker = std : : make_shared < storm : : modelchecker : : region : : SparseDtmcRegionModelChecker < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > , double > > ( model , settings ) ;
ASSERT_FALSE ( dtmcModelchecker - > getSettings ( ) . doApprox ( ) ) ;
ASSERT_TRUE ( dtmcModelchecker - > getSettings ( ) . doSample ( ) ) ;
ASSERT_TRUE ( dtmcModelchecker - > getSettings ( ) . doSmt ( ) ) ;
dtmcModelchecker - > checkRegion ( allSatRegionSmt ) ;
//smt EXPECT_EQ((storm::modelchecker::region::RegionCheckResult::ALLSAT), allSatRegionSmt.getCheckResult());
dtmcModelchecker - > checkRegion ( exBothRegionSmt ) ;
@ -327,14 +350,14 @@ TEST(SparseDtmcRegionModelCheckerTest, Crowds_Prob) {
//test smt + approx
auto allVioHardRegionSmtApp = storm : : modelchecker : : region : : ParameterRegion < storm : : RationalFunction > : : parseRegion ( " 0.8<=PF<=0.95,0.2<=badC<=0.9 " ) ;
storm : : settings : : mutableRegionSettings ( ) . modifyModes ( storm : : settings : : modules : : RegionSettings : : ApproxMode : : TESTFIRST , storm : : settings : : modules : : RegionSettings : : SampleMode : : EVALUATE , storm : : settings : : modules : : RegionSettings : : SmtMode : : FUNCTION ) ;
ASSERT_TRUE ( storm : : settings : : getModule < storm : : settings : : modules : : RegionSettings > ( ) . doApprox ( ) ) ;
ASSERT_TRUE ( storm : : settings : : getModule < storm : : settings : : modules : : RegionSettings > ( ) . doSample ( ) ) ;
ASSERT_TRUE ( storm : : settings : : getModule < storm : : settings : : modules : : RegionSettings > ( ) . doSmt ( ) ) ;
settings = storm : : modelchecker : : region : : SparseRegionModelCheckerSettings ( storm : : settings : : modules : : RegionSettings : : SampleMode : : EVALUATE , storm : : settings : : modules : : RegionSettings : : ApproxMode : : TESTFIRST , storm : : settings : : modules : : RegionSettings : : SmtMode : : FUNCTION ) ;
dtmcModelchecker = std : : make_shared < storm : : modelchecker : : region : : SparseDtmcRegionModelChecker < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > , double > > ( model , settings ) ;
ASSERT_TRUE ( dtmcModelchecker - > getSettings ( ) . doApprox ( ) ) ;
ASSERT_TRUE ( dtmcModelchecker - > getSettings ( ) . doSample ( ) ) ;
ASSERT_TRUE ( dtmcModelchecker - > getSettings ( ) . doSmt ( ) ) ;
dtmcModelchecker - > checkRegion ( allVioHardRegionSmt ) ;
//smt EXPECT_EQ((storm::modelchecker::region::RegionCheckResult::ALLVIOLATED), allVioHardRegionSmtApp.getCheckResult());
storm : : settings : : mutableRegionSettings ( ) . resetModes ( ) ;
carl : : VariablePool : : getInstance ( ) . clear ( ) ;
}
@ -343,11 +366,13 @@ TEST(SparseDtmcRegionModelCheckerTest, Crowds_Prob_1Par) {
std : : string programFile = STORM_CPP_BASE_PATH " /examples/pdtmc/crowds/crowds3_5.pm " ;
std : : string formulaAsString = " P>0.75 [F \" observe0Greater1 \" ] " ;
std : : string constantsAsString = " badC=0.3 " ; //e.g. pL=0.9,TOACK=0.5
std : : shared_ptr < storm : : modelchecker : : region : : AbstractSparseRegionModelChecker < storm : : RationalFunction , double > > modelchecker ;
ASSERT_TRUE ( storm : : initializeRegionModelChecker ( modelchecker , programFile , formulaAsString , constantsAsString ) ) ;
auto dtmcModelchecker = std : : dynamic_pointer_cast < storm : : modelchecker : : region : : SparseDtmcRegionModelChecker < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > , double > > ( modelchecker ) ;
storm : : prism : : Program program = storm : : parseProgram ( programFile ) ;
std : : vector < std : : shared_ptr < const storm : : logic : : Formula > > formulas = storm : : parseFormulasForProgram ( formulaAsString , program ) ; ;
std : : shared_ptr < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > > model = storm : : buildSparseModel < storm : : RationalFunction > ( program , formulas ) - > as < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > > ( ) ;
auto const & regionSettings = storm : : settings : : getModule < storm : : settings : : modules : : RegionSettings > ( ) ;
storm : : modelchecker : : region : : SparseRegionModelCheckerSettings settings ( regionSettings . getSampleMode ( ) , regionSettings . getApproxMode ( ) , regionSettings . getSmtMode ( ) ) ;
auto dtmcModelchecker = std : : make_shared < storm : : modelchecker : : region : : SparseDtmcRegionModelChecker < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > , double > > ( model , settings ) ;
//start testing
auto allSatRegion = storm : : modelchecker : : region : : ParameterRegion < storm : : RationalFunction > : : parseRegion ( " 0.9<=PF<=0.99 " ) ;
auto exBothRegion = storm : : modelchecker : : region : : ParameterRegion < storm : : RationalFunction > : : parseRegion ( " 0.8<=PF<=0.9 " ) ;
@ -366,10 +391,11 @@ TEST(SparseDtmcRegionModelCheckerTest, Crowds_Prob_1Par) {
EXPECT_NEAR ( 0.7085157883 , storm : : utility : : region : : convertNumber < double > ( dtmcModelchecker - > evaluateReachabilityFunction ( allVioRegion . getUpperBoundaries ( ) ) ) , storm : : settings : : getModule < storm : : settings : : modules : : GeneralSettings > ( ) . getPrecision ( ) ) ;
//test approximative method
storm : : settings : : mutableRegionSettings ( ) . modifyModes ( storm : : settings : : modules : : RegionSettings : : ApproxMode : : TESTFIRST , storm : : settings : : modules : : RegionSettings : : SampleMode : : INSTANTIATE , storm : : settings : : modules : : RegionSettings : : SmtMode : : OFF ) ;
ASSERT_TRUE ( storm : : settings : : getModule < storm : : settings : : modules : : RegionSettings > ( ) . doApprox ( ) ) ;
ASSERT_TRUE ( storm : : settings : : getModule < storm : : settings : : modules : : RegionSettings > ( ) . doSample ( ) ) ;
ASSERT_FALSE ( storm : : settings : : getModule < storm : : settings : : modules : : RegionSettings > ( ) . doSmt ( ) ) ;
settings = storm : : modelchecker : : region : : SparseRegionModelCheckerSettings ( storm : : settings : : modules : : RegionSettings : : SampleMode : : INSTANTIATE , storm : : settings : : modules : : RegionSettings : : ApproxMode : : TESTFIRST , storm : : settings : : modules : : RegionSettings : : SmtMode : : OFF ) ;
dtmcModelchecker = std : : make_shared < storm : : modelchecker : : region : : SparseDtmcRegionModelChecker < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > , double > > ( model , settings ) ;
ASSERT_TRUE ( dtmcModelchecker - > getSettings ( ) . doApprox ( ) ) ;
ASSERT_TRUE ( dtmcModelchecker - > getSettings ( ) . doSample ( ) ) ;
ASSERT_FALSE ( dtmcModelchecker - > getSettings ( ) . doSmt ( ) ) ;
dtmcModelchecker - > checkRegion ( allSatRegion ) ;
EXPECT_EQ ( ( storm : : modelchecker : : region : : RegionCheckResult : : ALLSAT ) , allSatRegion . getCheckResult ( ) ) ;
dtmcModelchecker - > checkRegion ( exBothRegion ) ;
@ -381,18 +407,18 @@ TEST(SparseDtmcRegionModelCheckerTest, Crowds_Prob_1Par) {
auto allSatRegionSmt = storm : : modelchecker : : region : : ParameterRegion < storm : : RationalFunction > : : parseRegion ( " 0.9<=PF<=0.99 " ) ;
auto exBothRegionSmt = storm : : modelchecker : : region : : ParameterRegion < storm : : RationalFunction > : : parseRegion ( " 0.8<=PF<=0.9 " ) ;
auto allVioRegionSmt = storm : : modelchecker : : region : : ParameterRegion < storm : : RationalFunction > : : parseRegion ( " 0.01<=PF<=0.8 " ) ;
storm : : settings : : mutableRegionSettings ( ) . modifyModes ( storm : : settings : : modules : : RegionSettings : : ApproxMode : : OFF , storm : : settings : : modules : : RegionSettings : : SampleMode : : EVALUATE , storm : : settings : : modules : : RegionSettings : : SmtMode : : FUNCTION ) ;
ASSERT_FALSE ( storm : : settings : : getModule < storm : : settings : : modules : : RegionSettings > ( ) . doApprox ( ) ) ;
ASSERT_TRUE ( storm : : settings : : getModule < storm : : settings : : modules : : RegionSettings > ( ) . doSample ( ) ) ;
ASSERT_TRUE ( storm : : settings : : getModule < storm : : settings : : modules : : RegionSettings > ( ) . doSmt ( ) ) ;
settings = storm : : modelchecker : : region : : SparseRegionModelCheckerSettings ( storm : : settings : : modules : : RegionSettings : : SampleMode : : EVALUATE , storm : : settings : : modules : : RegionSettings : : ApproxMode : : OFF , storm : : settings : : modules : : RegionSettings : : SmtMode : : FUNCTION ) ;
dtmcModelchecker = std : : make_shared < storm : : modelchecker : : region : : SparseDtmcRegionModelChecker < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > , double > > ( model , settings ) ;
ASSERT_FALSE ( dtmcModelchecker - > getSettings ( ) . doApprox ( ) ) ;
ASSERT_TRUE ( dtmcModelchecker - > getSettings ( ) . doSample ( ) ) ;
ASSERT_TRUE ( dtmcModelchecker - > getSettings ( ) . doSmt ( ) ) ;
dtmcModelchecker - > checkRegion ( allSatRegionSmt ) ;
//smt EXPECT_EQ((storm::modelchecker::region::RegionCheckResult::ALLSAT), allSatRegionSmt.getCheckResult());
dtmcModelchecker - > checkRegion ( exBothRegionSmt ) ;
//smt EXPECT_EQ((storm::modelchecker::region::RegionCheckResult::EXISTSBOTH), exBothRegionSmt.getCheckResult());
dtmcModelchecker - > checkRegion ( allVioRegionSmt ) ;
//smt EXPECT_EQ((storm::modelchecker::region::RegionCheckResult::ALLVIOLATED), allVioRegionSmt.getCheckResult());
storm : : settings : : mutableRegionSettings ( ) . resetModes ( ) ;
carl : : VariablePool : : getInstance ( ) . clear ( ) ;
}
@ -401,11 +427,13 @@ TEST(SparseDtmcRegionModelCheckerTest, Crowds_Prob_Const) {
std : : string programFile = STORM_CPP_BASE_PATH " /examples/pdtmc/crowds/crowds3_5.pm " ;
std : : string formulaAsString = " P>0.6 [F \" observe0Greater1 \" ] " ;
std : : string constantsAsString = " PF=0.9,badC=0.2 " ;
std : : shared_ptr < storm : : modelchecker : : region : : AbstractSparseRegionModelChecker < storm : : RationalFunction , double > > modelchecker ;
ASSERT_TRUE ( storm : : initializeRegionModelChecker ( modelchecker , programFile , formulaAsString , constantsAsString ) ) ;
auto dtmcModelchecker = std : : dynamic_pointer_cast < storm : : modelchecker : : region : : SparseDtmcRegionModelChecker < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > , double > > ( modelchecker ) ;
storm : : prism : : Program program = storm : : parseProgram ( programFile ) ;
std : : vector < std : : shared_ptr < const storm : : logic : : Formula > > formulas = storm : : parseFormulasForProgram ( formulaAsString , program ) ; ;
std : : shared_ptr < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > > model = storm : : buildSparseModel < storm : : RationalFunction > ( program , formulas ) - > as < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > > ( ) ;
auto const & regionSettings = storm : : settings : : getModule < storm : : settings : : modules : : RegionSettings > ( ) ;
storm : : modelchecker : : region : : SparseRegionModelCheckerSettings settings ( regionSettings . getSampleMode ( ) , regionSettings . getApproxMode ( ) , regionSettings . getSmtMode ( ) ) ;
auto dtmcModelchecker = std : : make_shared < storm : : modelchecker : : region : : SparseDtmcRegionModelChecker < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > , double > > ( model , settings ) ;
//start testing
auto allSatRegion = storm : : modelchecker : : region : : ParameterRegion < storm : : RationalFunction > : : parseRegion ( " " ) ;
@ -417,23 +445,24 @@ TEST(SparseDtmcRegionModelCheckerTest, Crowds_Prob_Const) {
EXPECT_NEAR ( 0.6119660237 , storm : : utility : : region : : convertNumber < double > ( dtmcModelchecker - > evaluateReachabilityFunction ( allSatRegion . getLowerBoundaries ( ) ) ) , storm : : settings : : getModule < storm : : settings : : modules : : GeneralSettings > ( ) . getPrecision ( ) ) ;
//test approximative method
storm : : settings : : mutableRegionSettings ( ) . modifyModes ( storm : : settings : : modules : : RegionSettings : : ApproxMode : : TESTFIRST , storm : : settings : : modules : : RegionSettings : : SampleMode : : INSTANTIATE , storm : : settings : : modules : : RegionSettings : : SmtMode : : OFF ) ;
ASSERT_TRUE ( storm : : settings : : getModule < storm : : settings : : modules : : RegionSettings > ( ) . doApprox ( ) ) ;
ASSERT_TRUE ( storm : : settings : : getModule < storm : : settings : : modules : : RegionSettings > ( ) . doSample ( ) ) ;
ASSERT_FALSE ( storm : : settings : : getModule < storm : : settings : : modules : : RegionSettings > ( ) . doSmt ( ) ) ;
settings = storm : : modelchecker : : region : : SparseRegionModelCheckerSettings ( storm : : settings : : modules : : RegionSettings : : SampleMode : : INSTANTIATE , storm : : settings : : modules : : RegionSettings : : ApproxMode : : TESTFIRST , storm : : settings : : modules : : RegionSettings : : SmtMode : : OFF ) ;
dtmcModelchecker = std : : make_shared < storm : : modelchecker : : region : : SparseDtmcRegionModelChecker < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > , double > > ( model , settings ) ;
ASSERT_TRUE ( dtmcModelchecker - > getSettings ( ) . doApprox ( ) ) ;
ASSERT_TRUE ( dtmcModelchecker - > getSettings ( ) . doSample ( ) ) ;
ASSERT_FALSE ( dtmcModelchecker - > getSettings ( ) . doSmt ( ) ) ;
dtmcModelchecker - > checkRegion ( allSatRegion ) ;
EXPECT_EQ ( ( storm : : modelchecker : : region : : RegionCheckResult : : ALLSAT ) , allSatRegion . getCheckResult ( ) ) ;
//test smt method (the regions need to be created again, because the old ones have some information stored in their internal state)
auto allSatRegionSmt = storm : : modelchecker : : region : : ParameterRegion < storm : : RationalFunction > : : parseRegion ( " " ) ;
storm : : settings : : mutableRegionSettings ( ) . modifyModes ( storm : : settings : : modules : : RegionSettings : : ApproxMode : : OFF , storm : : settings : : modules : : RegionSettings : : SampleMode : : EVALUATE , storm : : settings : : modules : : RegionSettings : : SmtMode : : FUNCTION ) ;
ASSERT_FALSE ( storm : : settings : : getModule < storm : : settings : : modules : : RegionSettings > ( ) . doApprox ( ) ) ;
ASSERT_TRUE ( storm : : settings : : getModule < storm : : settings : : modules : : RegionSettings > ( ) . doSample ( ) ) ;
ASSERT_TRUE ( storm : : settings : : getModule < storm : : settings : : modules : : RegionSettings > ( ) . doSmt ( ) ) ;
settings = storm : : modelchecker : : region : : SparseRegionModelCheckerSettings ( storm : : settings : : modules : : RegionSettings : : SampleMode : : EVALUATE , storm : : settings : : modules : : RegionSettings : : ApproxMode : : OFF , storm : : settings : : modules : : RegionSettings : : SmtMode : : FUNCTION ) ;
dtmcModelchecker = std : : make_shared < storm : : modelchecker : : region : : SparseDtmcRegionModelChecker < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > , double > > ( model , settings ) ;
ASSERT_FALSE ( dtmcModelchecker - > getSettings ( ) . doApprox ( ) ) ;
ASSERT_TRUE ( dtmcModelchecker - > getSettings ( ) . doSample ( ) ) ;
ASSERT_TRUE ( dtmcModelchecker - > getSettings ( ) . doSmt ( ) ) ;
dtmcModelchecker - > checkRegion ( allSatRegionSmt ) ;
//smt EXPECT_EQ((storm::modelchecker::region::RegionCheckResult::ALLSAT), allSatRegionSmt.getCheckResult());
storm : : settings : : mutableRegionSettings ( ) . resetModes ( ) ;
carl : : VariablePool : : getInstance ( ) . clear ( ) ;
}