Browse Source

example for UAI18 now with comments

refactoring
Sebastian Junges 5 years ago
parent
commit
b181e807b3
  1. 41
      examples/pomdp/01-pomdps.py

41
examples/pomdp/01-pomdps.py

@ -13,7 +13,7 @@ import stormpy.pomdp
import stormpy._config as config import stormpy._config as config
def example_parametric_models_02():
def example_parametric_models_01():
# Check support for parameters # Check support for parameters
if not config.storm_with_pars: if not config.storm_with_pars:
print("Support parameters is missing. Try building storm-pars.") print("Support parameters is missing. Try building storm-pars.")
@ -26,20 +26,55 @@ def example_parametric_models_02():
else: else:
import pycarl.gmp.formula import pycarl.gmp.formula
###
# How to apply an unknown FSC to obtain a pMC from a POMDP
path = stormpy.examples.files.prism_pomdp_maze path = stormpy.examples.files.prism_pomdp_maze
prism_program = stormpy.parse_prism_program(path) prism_program = stormpy.parse_prism_program(path)
formula_str = "P=? [\"goal\"]" formula_str = "P=? [\"goal\"]"
properties = stormpy.parse_properties_for_prism_program(formula_str, prism_program) properties = stormpy.parse_properties_for_prism_program(formula_str, prism_program)
# construct the POMDP
pomdp = stormpy.build_model(prism_program, properties) pomdp = stormpy.build_model(prism_program, properties)
# make its representation canonic.
pomdp = stormpy.pomdp.make_canonic(pomdp) pomdp = stormpy.pomdp.make_canonic(pomdp)
# make the POMDP simple. This step is optional but often beneficial
pomdp = stormpy.pomdp.make_simple(pomdp) 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_builder = stormpy.pomdp.PomdpMemoryBuilder()
memory = memory_builder.build(stormpy.pomdp.PomdpMemoryPattern.selective_counter, 2) 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) 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) pmc = stormpy.pomdp.apply_unknown_fsc(pomdp, stormpy.pomdp.PomdpFscApplicationMode.simple_linear)
stormpy.export_parametric_to_drn(pmc, "test.out")
####
# 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=? [\"goal\"]"
properties = stormpy.parse_properties_for_prism_program(formula_str, prism_program)
# construct the pPOMDP
pomdp = stormpy.build_parametric_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 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_parametric_to_drn(pmc, "test.out", export_options)
if __name__ == '__main__': if __name__ == '__main__':
example_parametric_models_02()
example_parametric_models_01()
Loading…
Cancel
Save