Exemple #1
0
    def test_parameters(self):
        program = stormpy.parse_prism_program(
            get_example_path("pdtmc", "brp16_2.pm"))
        formulas = stormpy.parse_properties_for_prism_program(
            "P=? [F s=5]", program)
        model = stormpy.build_parametric_model(program, formulas)
        model_parameters = model.collect_probability_parameters()
        reward_parameters = model.collect_reward_parameters()
        all_parameters = model.collect_all_parameters()
        assert len(model_parameters) == 2
        assert len(reward_parameters) == 0
        assert len(all_parameters) == 2

        program_reward = stormpy.parse_prism_program(
            get_example_path("pdtmc", "brp_rewards16_2.pm"))
        formulas_reward = stormpy.parse_properties_for_prism_program(
            "Rmin=? [ F \"target\" ]", program_reward)
        model = stormpy.build_parametric_model(program_reward, formulas_reward)
        model_parameters = model.collect_probability_parameters()
        reward_parameters = model.collect_reward_parameters()
        all_parameters = model.collect_all_parameters()
        assert len(model_parameters) == 2
        assert len(reward_parameters) == 2
        assert len(all_parameters) == 4

        model = stormpy.build_symbolic_parametric_model(program, formulas)
        assert len(model.get_parameters()) == 4

        model = stormpy.build_symbolic_parametric_model(
            program_reward, formulas_reward)
        assert len(model.get_parameters()) == 4
def build_model(file, hybrid=False, sylvan_threads=1, sylvan_memory=4096):
    """
    Build model from file and apply bisimulation.
    :param file: File.
    :param hybrid: If true, the model is built symbolically with BDDs and in the end converted to a sparse model.
                   If false, the model is built as a sparse model from the beginning.
    :param sylvan_threads: Number of threads to use in Sylvan library.
    :param sylvan_memory: Memory available to Sylvan.
    :return: Tuple (sparse model, prism program, property, time (s) for building , time (s) for bisimulation).
    """
    logging.debug("Build ({}) model for file {}".format("symbolic" if hybrid else "sparse", file))
    # Build model
    build_start = time.time()
    program = stormpy.parse_prism_program(file)
    prop = "R=? [F \"stable\"]"
    properties = stormpy.parse_properties(prop, program)
    assert (len(properties) == 1)

    program, properties = stormpy.preprocess_prism_program(program, properties, "")
    program = program.as_prism_program()

    if hybrid:
        # Set number of Sylvan threads to use
        stormpy.set_settings(["--sylvan:threads", str(sylvan_threads)])
        # Set memory for Sylvan
        stormpy.set_settings(["--sylvan:maxmem", str(sylvan_memory)])
        model = stormpy.build_symbolic_parametric_model(program, properties)
    else:
        model = stormpy.build_parametric_model(program, properties)
    logging.info("Built ({}) model with {} states and {} transitions.".format("symbolic" if hybrid else "sparse", model.nr_states, model.nr_transitions))
    build_end = time.time()
    time_build = build_end - build_start
    logging.info("Building model took {}s".format(time_build))

    # Bisimulation
    if hybrid:
        # Extract bisimulation quotient as sparse model
        stormpy.set_settings(["--bisimulation:quot", "sparse"])
        model = stormpy.perform_symbolic_bisimulation(model, properties)
    else:
        model = stormpy.perform_bisimulation(model, properties, stormpy.BisimulationType.STRONG)
    assert type(model) is stormpy.SparseParametricDtmc
    logging.info("Model after bisimulation: {} states and {} transitions.".format(model.nr_states, model.nr_transitions))
    time_bisim = time.time() - build_end
    logging.info("Computing bisimulation quotient took {}s".format(time_bisim))

    prop = properties[0]

    # Simplify model (by eliminating constant transitions)
    # Disabled for the moment as this leads to significantly more transitions in Herman
    if False:
        model, formula = stormpy.pars.simplify_model(model, prop.raw_formula)
        logging.info("Model after simplification: {} states and {} transitions.".format(model.nr_states, model.nr_transitions))

    return model, program, prop, time_build, time_bisim
Exemple #3
0
 def test_build_parametric_mdp(self):
     program = stormpy.parse_prism_program(
         get_example_path("pmdp", "two_dice.nm"))
     formulas = stormpy.parse_properties_for_prism_program(
         "P=? [ F \"two\" ]", program)
     model = stormpy.build_symbolic_parametric_model(program, formulas)
     assert model.nr_states == 169
     assert model.nr_transitions == 435
     assert model.model_type == stormpy.ModelType.MDP
     assert model.supports_parameters
     assert type(model) is stormpy.SymbolicSylvanParametricMdp
Exemple #4
0
 def test_parametric_model_checking_dd(self):
     program = stormpy.parse_prism_program(get_example_path("pdtmc", "parametric_die.pm"))
     prop = "P=? [F s=5]"
     formulas = stormpy.parse_properties_for_prism_program(prop, program)
     model = stormpy.build_symbolic_parametric_model(program, formulas)
     assert model.nr_states == 11
     assert model.nr_transitions == 17
     assert model.model_type == stormpy.ModelType.DTMC
     assert model.has_parameters
     result = stormpy.check_model_dd(model, formulas[0])
     assert type(result) is stormpy.SymbolicParametricQuantitativeCheckResult
Exemple #5
0
 def test_build_dtmc_supporting_parameters(self):
     program = stormpy.parse_prism_program(
         get_example_path("dtmc", "die.pm"))
     formulas = stormpy.parse_properties_for_prism_program(
         "P=? [ F \"one\" ]", program)
     model = stormpy.build_symbolic_parametric_model(program, formulas)
     assert model.nr_states == 13
     assert model.nr_transitions == 20
     assert model.model_type == stormpy.ModelType.DTMC
     assert model.supports_parameters
     assert not model.has_parameters
     assert type(model) is stormpy.SymbolicSylvanParametricDtmc
Exemple #6
0
 def test_build_parametric_dtmc(self):
     program = stormpy.parse_prism_program(
         get_example_path("pdtmc", "brp16_2.pm"))
     formulas = stormpy.parse_properties_for_prism_program(
         "P=? [ F s=5 ]", program)
     model = stormpy.build_symbolic_parametric_model(program, formulas)
     assert model.nr_states == 613
     assert model.nr_transitions == 803
     assert model.model_type == stormpy.ModelType.DTMC
     assert model.supports_parameters
     assert model.has_parameters
     assert type(model) is stormpy.SymbolicSylvanParametricDtmc
Exemple #7
0
 def test_transform_symbolic_parametric_dtmc_to_sparse(self):
     program = stormpy.parse_prism_program(
         get_example_path("pdtmc", "parametric_die.pm"))
     model = stormpy.build_symbolic_parametric_model(program)
     assert model.nr_states == 13
     assert model.nr_transitions == 20
     assert model.model_type == stormpy.ModelType.DTMC
     assert model.supports_parameters
     assert type(model) is stormpy.SymbolicSylvanParametricDtmc
     symbolic_model = stormpy.transform_to_sparse_model(model)
     assert symbolic_model.nr_states == 13
     assert symbolic_model.nr_transitions == 20
     assert symbolic_model.model_type == stormpy.ModelType.DTMC
     assert symbolic_model.supports_parameters
     assert type(symbolic_model) is stormpy.SparseParametricDtmc
Exemple #8
0
 def test_symbolic_parametric_bisimulation(self):
     program = stormpy.parse_prism_program(
         get_example_path("pdtmc", "brp16_2.pm"))
     prop = "P=? [F \"error\"]"
     properties = stormpy.parse_properties_for_prism_program(prop, program)
     model = stormpy.build_symbolic_parametric_model(program, properties)
     assert model.nr_states == 613
     assert model.nr_transitions == 803
     assert model.model_type == stormpy.ModelType.DTMC
     assert model.has_parameters
     model_bisim = stormpy.perform_symbolic_bisimulation(model, properties)
     assert model_bisim.nr_states == 326
     assert model_bisim.nr_transitions == 454
     assert model_bisim.model_type == stormpy.ModelType.DTMC
     assert model_bisim.has_parameters
Exemple #9
0
 def test_build_parametric_dtmc_preprocess(self):
     program = stormpy.parse_prism_program(
         get_example_path("pdtmc", "herman5.pm"))
     formulas = stormpy.parse_properties_for_prism_program(
         "R=? [ F \"stable\" ]", program)
     trans_program, trans_formulas = stormpy.preprocess_symbolic_input(
         program, formulas, "")
     trans_prism = trans_program.as_prism_program()
     model = stormpy.build_symbolic_parametric_model(
         trans_prism, trans_formulas)
     assert model.nr_states == 33
     assert model.nr_transitions == 266
     assert model.model_type == stormpy.ModelType.DTMC
     assert model.supports_parameters
     assert model.has_parameters
     assert type(model) is stormpy.SymbolicSylvanParametricDtmc