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.
		
		
		
		
		
			
		
			
				
					
					
						
							59 lines
						
					
					
						
							1.9 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							59 lines
						
					
					
						
							1.9 KiB
						
					
					
				
								from . import _config
							 | 
						|
								
							 | 
						|
								if not _config.storm_with_pars:
							 | 
						|
								    raise ImportError("No support for parametric analysis was built in Storm.")
							 | 
						|
								
							 | 
						|
								from . import pars
							 | 
						|
								from .pars import *
							 | 
						|
								
							 | 
						|
								from stormpy import ModelType, StormError
							 | 
						|
								
							 | 
						|
								pars._set_up()
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								class ModelInstantiator:
							 | 
						|
								    """
							 | 
						|
								    Class for instantiating models.
							 | 
						|
								    """
							 | 
						|
								
							 | 
						|
								    def __init__(self, model):
							 | 
						|
								        """
							 | 
						|
								        Constructor.
							 | 
						|
								        :param model: Model.
							 | 
						|
								        """
							 | 
						|
								        if model.model_type == ModelType.MDP:
							 | 
						|
								            self._instantiator = PMdpInstantiator(model)
							 | 
						|
								        elif model.model_type == ModelType.DTMC:
							 | 
						|
								            self._instantiator = PDtmcInstantiator(model)
							 | 
						|
								        elif model.model_type == ModelType.CTMC:
							 | 
						|
								            self._instantiator = PCtmcInstantiator(model)
							 | 
						|
								        elif model.model_type == ModelType.MA:
							 | 
						|
								            self._instantiator = PMaInstantiator(model)
							 | 
						|
								        else:
							 | 
						|
								            raise StormError("Model type {} not supported".format(model.model_type))
							 | 
						|
								
							 | 
						|
								    def instantiate(self, valuation):
							 | 
						|
								        """
							 | 
						|
								        Instantiate model with given valuation.
							 | 
						|
								        :param valuation: Valuation from parameter to value.
							 | 
						|
								        :return: Instantiated model.
							 | 
						|
								        """
							 | 
						|
								        return self._instantiator.instantiate(valuation)
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								def simplify_model(model, formula):
							 | 
						|
								    """
							 | 
						|
								    Simplify parametric model preserving the given formula by eliminating states with constant outgoing probabilities.
							 | 
						|
								    :param model: Model.
							 | 
						|
								    :param formula: Formula.
							 | 
						|
								    :return: Tuple of simplified model and simplified formula.
							 | 
						|
								    """
							 | 
						|
								    if model.model_type == ModelType.DTMC:
							 | 
						|
								        simplifier = pars._SparseParametricDtmcSimplifier(model)
							 | 
						|
								    elif model.model_type == ModelType.MDP:
							 | 
						|
								        simplifier = pars._SparseParametricMdpSimplifier(model)
							 | 
						|
								    else:
							 | 
						|
								        raise StormError("Model type {} cannot be simplified.".format(model.model_type))
							 | 
						|
								    if not simplifier.simplify(formula):
							 | 
						|
								        raise StormError("Model could not be simplified")
							 | 
						|
								    return simplifier.simplified_model, simplifier.simplified_formula
							 |