committed by
							
								
								Matthias Volk
							
						
					
				
				
				  
				  No known key found for this signature in database
				  
				  	
						GPG Key ID: 83A57678F739FCD3
				  	
				  
				
			
		
		
		
	
				 5 changed files with 153 additions and 62 deletions
			
			
		- 
					68examples/building_ctmcs/01-building-ctmcs.py
 - 
					27examples/building_dtmcs/01-building-dtmcs.py
 - 
					10examples/building_mas/01-building-mas.py
 - 
					99examples/building_mdps/01-building-mdps.py
 - 
					11lib/stormpy/examples/files/ctmc/tiny.sm
 
@ -0,0 +1,10 @@ | 
			
		|||||
 | 
				import stormpy | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				# hybrid_states example | 
			
		||||
 | 
				def example_building_mas_01(): | 
			
		||||
 | 
				    print('todo') | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				if __name__ == '__main__': | 
			
		||||
 | 
				    example_building_mas_01() | 
			
		||||
@ -0,0 +1,99 @@ | 
			
		|||||
 | 
				import stormpy | 
			
		||||
 | 
				import numpy as np | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				# Knuth's model of a fair die using only fair coins | 
			
		||||
 | 
				def example_building_mdps_01(): | 
			
		||||
 | 
				    nr_states = 13 | 
			
		||||
 | 
				    nr_choices = 14 | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				    # Building the transition matrix using | 
			
		||||
 | 
				    builder = stormpy.SparseMatrixBuilder(rows = 0, columns = 0, entries = 0, force_dimensions = False, has_custom_row_grouping = True, row_groups = 0) | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				    # New row group, for actions of state 0 | 
			
		||||
 | 
				    builder.new_row_group(0) | 
			
		||||
 | 
				    builder.add_next_value(0, 1, 0.5) | 
			
		||||
 | 
				    builder.add_next_value(0, 2, 0.5) | 
			
		||||
 | 
				    builder.add_next_value(1, 1, 0.2) | 
			
		||||
 | 
				    builder.add_next_value(1, 2, 0.8) | 
			
		||||
 | 
				    # New row group, for actions of state 1 | 
			
		||||
 | 
				    builder.new_row_group(2) | 
			
		||||
 | 
				    builder.add_next_value(2, 3, 0.5) | 
			
		||||
 | 
				    builder.add_next_value(2, 4, 0.5) | 
			
		||||
 | 
				    # New row group, for actions of state 2 | 
			
		||||
 | 
				    builder.new_row_group(3) | 
			
		||||
 | 
				    builder.add_next_value(3, 5, 0.5) | 
			
		||||
 | 
				    builder.add_next_value(3, 6, 0.5) | 
			
		||||
 | 
				    # New row group, for actions of state 3 | 
			
		||||
 | 
				    builder.new_row_group(4) | 
			
		||||
 | 
				    builder.add_next_value(4, 7, 0.5) | 
			
		||||
 | 
				    builder.add_next_value(4, 1, 0.5) | 
			
		||||
 | 
				    # New row group, for actions of state 4 | 
			
		||||
 | 
				    builder.new_row_group(5) | 
			
		||||
 | 
				    builder.add_next_value(5, 8, 0.5) | 
			
		||||
 | 
				    builder.add_next_value(5, 9, 0.5) | 
			
		||||
 | 
				    # New row group, for actions of state 5 | 
			
		||||
 | 
				    builder.new_row_group(6) | 
			
		||||
 | 
				    builder.add_next_value(6, 10, 0.5) | 
			
		||||
 | 
				    builder.add_next_value(6, 11, 0.5) | 
			
		||||
 | 
				    # New row group, for actions of state 6 | 
			
		||||
 | 
				    builder.new_row_group(7) | 
			
		||||
 | 
				    builder.add_next_value(7, 2, 0.5) | 
			
		||||
 | 
				    builder.add_next_value(7, 12, 0.5) | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				    # final states | 
			
		||||
 | 
				    for s in range(8,14): | 
			
		||||
 | 
				        builder.new_row_group(s) | 
			
		||||
 | 
				        builder.add_next_value(s, s-1, 1) | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				    # Build transition matrix, set overridden_row_count = nr_states, no row group count since nondet otherwise set overrridenRowGroupCount | 
			
		||||
 | 
				    transition_matrix = builder.build(nr_choices, nr_states) | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				    # State labeling | 
			
		||||
 | 
				    state_labeling = stormpy.storage.StateLabeling(nr_states) | 
			
		||||
 | 
				    # Add labels | 
			
		||||
 | 
				    labels = {'init','one', 'two', 'three', 'four', 'five', 'six', 'done', 'deadlock'} | 
			
		||||
 | 
				    for label in labels: | 
			
		||||
 | 
				        state_labeling.add_label(label) | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				    # Set label for single states | 
			
		||||
 | 
				    state_labeling.add_label_to_state('init', 0) | 
			
		||||
 | 
				    state_labeling.add_label_to_state('one', 7) | 
			
		||||
 | 
				    state_labeling.add_label_to_state('two', 8) | 
			
		||||
 | 
				    state_labeling.add_label_to_state('three', 9) | 
			
		||||
 | 
				    state_labeling.add_label_to_state('four', 10) | 
			
		||||
 | 
				    state_labeling.add_label_to_state('five', 11) | 
			
		||||
 | 
				    state_labeling.add_label_to_state('six', 12) | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				    # Set label 'done' for multiple states | 
			
		||||
 | 
				    state_labeling.set_states('done', stormpy.BitVector(nr_states, [7, 8, 9, 10, 11, 12])) | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				    # Choice labeling | 
			
		||||
 | 
				    choice_labeling = stormpy.storage.ChoiceLabeling(nr_choices) | 
			
		||||
 | 
				    choice_labels = {'a', 'b'} | 
			
		||||
 | 
				    # Add labels | 
			
		||||
 | 
				    for label in choice_labels: | 
			
		||||
 | 
				        choice_labeling.add_label(label) | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				    # Set label for single choice | 
			
		||||
 | 
				    choice_labeling.add_label_to_choice('a', 0) | 
			
		||||
 | 
				    choice_labeling.add_label_to_choice('b', 1) | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				    # Reward models | 
			
		||||
 | 
				    reward_models = {} | 
			
		||||
 | 
				    # Create a vector representing the state-action rewards. | 
			
		||||
 | 
				    action_reward = [0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] | 
			
		||||
 | 
				    reward_models['coin_flips'] = stormpy.SparseRewardModel(optional_state_action_reward_vector = action_reward) | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				    # Collect components | 
			
		||||
 | 
				    components = stormpy.SparseModelComponents(transition_matrix=transition_matrix, state_labeling=state_labeling, reward_models=reward_models, rate_transitions = False) | 
			
		||||
 | 
				    components.choice_labeling = choice_labeling | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				    # Build the model | 
			
		||||
 | 
				    mdp = stormpy.storage.SparseMdp(components) | 
			
		||||
 | 
				    print(mdp) | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				if __name__ == '__main__': | 
			
		||||
 | 
				    example_building_mdps_01() | 
			
		||||
@ -0,0 +1,11 @@ | 
			
		|||||
 | 
				ctmc | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				module one | 
			
		||||
 | 
				  s : [0 .. 3] init 0; | 
			
		||||
 | 
				   | 
			
		||||
 | 
				  [] s<3 -> 3/2 : (s'=s+1); | 
			
		||||
 | 
				  [] s>0 -> 3 : (s'=s-1); | 
			
		||||
 | 
				endmodule | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				label "empty" = s=0; | 
			
		||||
 | 
				label "full" = s=3; | 
			
		||||
						Write
						Preview
					
					
					Loading…
					
					Cancel
						Save
					
		Reference in new issue