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
|