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.
		
		
		
		
		
			
		
			
				
					
					
						
							86 lines
						
					
					
						
							3.5 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							86 lines
						
					
					
						
							3.5 KiB
						
					
					
				| 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()
 |