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.
196 lines
4.9 KiB
196 lines
4.9 KiB
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Analysis"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Background\n",
|
|
"\n",
|
|
"Storm supports various model checking approaches that we consider in this section on analysis.\n",
|
|
"\n",
|
|
"As always:"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"hide-output": false
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
">>> import stormpy\n",
|
|
">>> import stormpy.examples\n",
|
|
">>> import stormpy.examples.files\n",
|
|
">>> path = stormpy.examples.files.prism_dtmc_die\n",
|
|
">>> prism_program = stormpy.parse_prism_program(path)\n",
|
|
">>> formula_str = \"P=? [F s=7 & d=2]\"\n",
|
|
">>> properties = stormpy.parse_properties(formula_str, prism_program)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Qualitative Analysis"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Adapting the model checking engine\n",
|
|
"\n",
|
|
"[02-analysis.py](https://github.com/moves-rwth/stormpy/blob/master/examples/analysis/02-analysis.py)\n",
|
|
"\n",
|
|
"Instead of using the sparse representation, models can also be built symbolically:"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"hide-output": false
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
">>> model = stormpy.build_symbolic_model(prism_program, properties)\n",
|
|
">>> result = stormpy.model_checking(model, properties[0])"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"To access the result, the result has to be filtered:"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"hide-output": false
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
">>> filter = stormpy.create_filter_initial_states_symbolic(model)\n",
|
|
">>> result.filter(filter)\n",
|
|
">>> assert result.min == result.max"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Then, result.min (or result.max) contains the result. Notice that if there are multiple initial states, result.min will not be equal to result.max.\n",
|
|
"\n",
|
|
"Besides this analysis on the DD, there are approaches that combine both representation.\n",
|
|
"Stormpy does support them, but we have not yet documented them."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Adapting model checking algorithms\n",
|
|
"\n",
|
|
"[03-analysis.py](https://github.com/moves-rwth/stormpy/blob/master/examples/analysis/03-analysis.py)\n",
|
|
"\n",
|
|
"Reconsider the model checking example from the getting started guide:"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"hide-output": false
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
">>> model = stormpy.build_model(prism_program, properties)\n",
|
|
">>> result = stormpy.model_checking(model, properties[0])"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"We can also vary the model checking algorithm:"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"hide-output": false
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
">>> env = stormpy.Environment()\n",
|
|
">>> env.solver_environment.set_linear_equation_solver_type(stormpy.EquationSolverType.native)\n",
|
|
">>> env.solver_environment.native_solver_environment.method = stormpy.NativeLinearEquationSolverMethod.power_iteration\n",
|
|
">>> result = stormpy.model_checking(model, properties[0], environment=env)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Finally, we allow to change some parameters of the algorithms. E.g., in iterative approaches,\n",
|
|
"we allow to change the number of iterations:"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"hide-output": false
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
">>> env.solver_environment.native_solver_environment.maximum_iterations = 3\n",
|
|
">>> result = stormpy.model_checking(model, properties[0])"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Notice that by setting such parameters, the result may be off from the actual model checking algorithm.\n",
|
|
"\n",
|
|
"Environments can be used likewise for symbolic model checking. See the example for more information."
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"date": 1598178167.1206837,
|
|
"filename": "analysis.rst",
|
|
"kernelspec": {
|
|
"display_name": "Python 3",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 3
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython3",
|
|
"version": "3.8.2"
|
|
},
|
|
"title": "Analysis"
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 4
|
|
}
|