@ -21,14 +21,49 @@ class TestPLA:
checker = stormpy . pars . create_region_checker ( env , model , formulas [ 0 ] . raw_formula )
parameters = model . collect_probability_parameters ( )
assert len ( parameters ) == 2
region = stormpy . pars . ParameterRegion ( " 0.7<=pL<=0.9,0.75<=pK<=0.95 " , parameters )
region = stormpy . pars . ParameterRegion . create_from_string ( " 0.7<=pL<=0.9,0.75<=pK<=0.95 " , parameters )
result = checker . check_region ( env , region )
assert result == stormpy . pars . RegionResult . ALLSAT
region = stormpy . pars . ParameterRegion ( " 0.4<=pL<=0.65,0.75<=pK<=0.95 " , parameters )
result = checker . check_region ( env , region , stormpy . pars . RegionResultHypothesis . UNKNOWN ,
stormpy . pars . RegionResult . UNKNOWN , True )
region = stormpy . pars . ParameterRegion . create_from_string ( " 0.4<=pL<=0.65,0.75<=pK<=0.95 " , parameters )
result = checker . check_region ( env , region , stormpy . pars . RegionResultHypothesis . UNKNOWN , stormpy . pars . RegionResult . UNKNOWN , True )
assert result == stormpy . pars . RegionResult . EXISTSBOTH
region = stormpy . pars . ParameterRegion ( " 0.1<=pL<=0.73,0.2<=pK<=0.715 " , parameters )
region = stormpy . pars . ParameterRegion . create_from_string ( " 0.1<=pL<=0.73,0.2<=pK<=0.715 " , parameters )
result = checker . check_region ( env , region )
assert result == stormpy . pars . RegionResult . ALLVIOLATED
def test_pla_region_valuation ( self ) :
program = stormpy . parse_prism_program ( get_example_path ( " pdtmc " , " brp16_2.pm " ) )
prop = " P<=0.84 [F s=5 ] "
formulas = stormpy . parse_properties_for_prism_program ( prop , program )
model = stormpy . build_parametric_model ( program , formulas )
assert model . nr_states == 613
assert model . nr_transitions == 803
assert model . model_type == stormpy . ModelType . DTMC
assert model . has_parameters
env = stormpy . Environment ( )
checker = stormpy . pars . create_region_checker ( env , model , formulas [ 0 ] . raw_formula )
parameters = model . collect_probability_parameters ( )
assert len ( parameters ) == 2
for par in parameters :
if par . name == " pL " :
pL = par
elif par . name == " pK " :
pK = par
else :
assert False
region_valuation = dict ( )
region_valuation [ pL ] = ( stormpy . RationalRF ( 0.7 ) , stormpy . RationalRF ( 0.9 ) )
region_valuation [ pK ] = ( stormpy . RationalRF ( 0.75 ) , stormpy . RationalRF ( 0.95 ) )
region = stormpy . pars . ParameterRegion ( region_valuation )
result = checker . check_region ( env , region )
assert result == stormpy . pars . RegionResult . ALLSAT
region_valuation [ pL ] = ( stormpy . RationalRF ( 0.4 ) , stormpy . RationalRF ( 0.65 ) )
region = stormpy . pars . ParameterRegion ( region_valuation )
result = checker . check_region ( env , region , stormpy . pars . RegionResultHypothesis . UNKNOWN , stormpy . pars . RegionResult . UNKNOWN , True )
assert result == stormpy . pars . RegionResult . EXISTSBOTH
region_valuation [ pK ] = ( stormpy . RationalRF ( 0.2 ) , stormpy . RationalRF ( 0.715 ) )
region_valuation [ pL ] = ( stormpy . RationalRF ( 0.1 ) , stormpy . RationalRF ( 0.73 ) )
region = stormpy . pars . ParameterRegion ( region_valuation )
result = checker . check_region ( env , region )
assert result == stormpy . pars . RegionResult . ALLVIOLATED
@ -42,7 +77,7 @@ class TestPLA:
checker = stormpy . pars . create_region_checker ( env , model , formulas [ 0 ] . raw_formula )
parameters = model . collect_probability_parameters ( )
assert len ( parameters ) == 2
region = stormpy . pars . ParameterRegion ( " 0.7<=pL<=0.9,0.75<=pK<=0.95 " , parameters )
region = stormpy . pars . ParameterRegion . create_from_string ( " 0.7<=pL<=0.9,0.75<=pK<=0.95 " , parameters )
result = checker . get_bound ( env , region , True )
assert math . isclose ( float ( result . constant_part ( ) ) , 0.8369631383670559 , rel_tol = 1e-6 )
result_vec = checker . get_bound_all_states ( env , region , True )
@ -60,7 +95,7 @@ class TestPLA:
checker . specify ( env , model , formulas [ 0 ] . raw_formula )
parameters = model . collect_probability_parameters ( )
assert len ( parameters ) == 2
region = stormpy . pars . ParameterRegion ( " 0.7<=pL<=0.9,0.75<=pK<=0.95 " , parameters )
region = stormpy . pars . ParameterRegion . create_from_string ( " 0.7<=pL<=0.9,0.75<=pK<=0.95 " , parameters )
result = checker . get_bound ( env , region , True )
assert math . isclose ( float ( result . constant_part ( ) ) , 0.8369631383670559 , rel_tol = 1e-6 )
@ -75,7 +110,7 @@ class TestPLA:
checker . specify ( env , model , formulas [ 0 ] . raw_formula , allow_model_simplification = False )
parameters = model . collect_probability_parameters ( )
assert len ( parameters ) == 2
region = stormpy . pars . ParameterRegion ( " 0.7<=pL<=0.9,0.75<=pK<=0.95 " , parameters )
region = stormpy . pars . ParameterRegion . create_from_string ( " 0.7<=pL<=0.9,0.75<=pK<=0.95 " , parameters )
result = checker . get_bound ( env , region , True )
assert math . isclose ( float ( result . constant_part ( ) ) , 0.836963056082918 , rel_tol = 1e-6 )
@ -90,7 +125,7 @@ class TestPLA:
checker . specify ( env , model , formulas [ 0 ] . raw_formula , allow_model_simplification = False )
parameters = model . collect_probability_parameters ( )
assert len ( parameters ) == 2
region = stormpy . pars . ParameterRegion ( " 0.7<=pL<=0.9,0.75<=pK<=0.95 " , parameters )
region = stormpy . pars . ParameterRegion . create_from_string ( " 0.7<=pL<=0.9,0.75<=pK<=0.95 " , parameters )
result_vec = checker . get_bound_all_states ( env , region , True )
assert len ( result_vec . get_values ( ) ) == model . nr_states
assert math . isclose ( result_vec . at ( model . initial_states [ 0 ] ) , 0.836963056082918 , rel_tol = 1e-6 )