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.
		
		
		
		
		
			
		
			
				
					
					
						
							71 lines
						
					
					
						
							2.4 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							71 lines
						
					
					
						
							2.4 KiB
						
					
					
				| import stormpy | |
| import stormpy.core | |
| import stormpy.simulator | |
| 
 | |
| import stormpy.examples | |
| import stormpy.examples.files | |
| import random | |
| 
 | |
| """ | |
| Simulator for nondeterministic models | |
| """ | |
| def example_simulator_02(): | |
|     path = stormpy.examples.files.prism_mdp_maze | |
|     prism_program = stormpy.parse_prism_program(path) | |
| 
 | |
|     model = stormpy.build_model(prism_program) | |
|     simulator = stormpy.simulator.create_simulator(model, seed=42) | |
|     # 5 paths of at most 20 steps. | |
|     paths = [] | |
|     for m in range(5): | |
|         path = [] | |
|         state, reward = simulator.restart() | |
|         path = [f"{state}"] | |
|         for n in range(20): | |
|             actions = simulator.available_actions() | |
|             select_action = random.randint(0,len(actions)-1) | |
|             #print(f"Randomly select action nr: {select_action} from actions {actions}") | |
|             path.append(f"--act={actions[select_action]}-->") | |
|             state, reward = simulator.step(actions[select_action]) | |
|             #print(state) | |
|             path.append(f"{state}") | |
|             if simulator.is_done(): | |
|                 #print("Trapped!") | |
|                 break | |
|         paths.append(path) | |
|     for path in paths: | |
|         print(" ".join(path)) | |
| 
 | |
|     options = stormpy.BuilderOptions() | |
|     options.set_build_state_valuations() | |
|     options.set_build_choice_labels(True) | |
|     model = stormpy.build_sparse_model_with_options(prism_program, options) | |
|     print(model) | |
|     simulator = stormpy.simulator.create_simulator(model, seed=42) | |
|     simulator.set_observation_mode(stormpy.simulator.SimulatorObservationMode.PROGRAM_LEVEL) | |
|     simulator.set_action_mode(stormpy.simulator.SimulatorActionMode.GLOBAL_NAMES) | |
|     # 5 paths of at most 20 steps. | |
|     paths = [] | |
|     for m in range(5): | |
|         path = [] | |
|         state, reward = simulator.restart() | |
|         path = [f"{state}"] | |
|         for n in range(20): | |
|             actions = simulator.available_actions() | |
|             select_action = random.randint(0,len(actions)-1) | |
|             #print(f"Randomly select action nr: {select_action} from actions {actions}") | |
|             path.append(f"--act={actions[select_action]}-->") | |
|             state, reward = simulator.step(actions[select_action]) | |
|             #print(state) | |
|             path.append(f"{state}") | |
|             if simulator.is_done(): | |
|                 #print("Trapped!") | |
|                 break | |
|         paths.append(path) | |
|     for path in paths: | |
|         print(" ".join(path)) | |
| 
 | |
| 
 | |
| 
 | |
| if __name__ == '__main__': | |
|     example_simulator_02()
 |