The source code and dockerfile for the GSW2024 AI Lab.
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.
|
|
import stormpy import stormpy.core import stormpy.info
import pycarl import pycarl.core
import stormpy.examples import stormpy.examples.files
import stormpy.pomdp
import stormpy._config as config
def example_parametric_models_01(): # Check support for parameters if not config.storm_with_pars: print("Support parameters is missing. Try building storm-pars.") return
import stormpy.pars from pycarl.formula import FormulaType, Relation if stormpy.info.storm_ratfunc_use_cln(): import pycarl.cln.formula else: import pycarl.gmp.formula
# Prevent curious side effects from earlier runs (for tests only) pycarl.clear_pools() # ### # # How to apply an unknown FSC to obtain a pMC from a POMDP # path = stormpy.examples.files.prism_pomdp_maze # prism_program = stormpy.parse_prism_program(path) # # formula_str = "P=? [!\"bad\" U \"goal\"]" # properties = stormpy.parse_properties_for_prism_program(formula_str, prism_program) # # construct the POMDP # pomdp = stormpy.build_model(prism_program, properties) # # make its representation canonic. # pomdp = stormpy.pomdp.make_canonic(pomdp) # # make the POMDP simple. This step is optional but often beneficial # pomdp = stormpy.pomdp.make_simple(pomdp) # # construct the memory for the FSC # # in this case, a selective counter with two states # memory_builder = stormpy.pomdp.PomdpMemoryBuilder() # memory = memory_builder.build(stormpy.pomdp.PomdpMemoryPattern.selective_counter, 2) # # apply the memory onto the POMDP to get the cartesian product # pomdp = stormpy.pomdp.unfold_memory(pomdp, memory) # # apply the memory onto the POMDP to get the cartesian product # pmc = stormpy.pomdp.apply_unknown_fsc(pomdp, stormpy.pomdp.PomdpFscApplicationMode.simple_linear)
#### # How to apply an unknown FSC to obtain a pMC from a pPOMDP path = stormpy.examples.files.prism_par_pomdp_maze prism_program = stormpy.parse_prism_program(path)
formula_str = "P=? [!\"bad\" U \"goal\"]" properties = stormpy.parse_properties_for_prism_program(formula_str, prism_program) # construct the pPOMDP options = stormpy.BuilderOptions([p.raw_formula for p in properties]) options.set_build_state_valuations() options.set_build_choice_labels() pomdp = stormpy.build_sparse_parametric_model_with_options(prism_program, options) # make its representation canonic. pomdp = stormpy.pomdp.make_canonic(pomdp)
# construct the memory for the FSC # in this case, a selective counter with two states memory_builder = stormpy.pomdp.PomdpMemoryBuilder() memory = memory_builder.build(stormpy.pomdp.PomdpMemoryPattern.selective_counter, 3) # apply the memory onto the POMDP to get the cartesian product pomdp = stormpy.pomdp.unfold_memory(pomdp, memory, add_memory_labels=True, keep_state_valuations=True) # make the POMDP simple. This step is optional but often beneficial pomdp = stormpy.pomdp.make_simple(pomdp, keep_state_valuations=True) # apply the unknown FSC to obtain a pmc from the POMDP pmc = stormpy.pomdp.apply_unknown_fsc(pomdp, stormpy.pomdp.PomdpFscApplicationMode.simple_linear)
export_pmc = False # Set to True to export the pMC as drn. if export_pmc: export_options = stormpy.core.DirectEncodingOptions() export_options.allow_placeholders = False stormpy.export_to_drn(pmc, "test.out", export_options)
if __name__ == '__main__': example_parametric_models_01()
|