Browse Source
changed pre shield decision tree export example
changed pre shield decision tree export example
added post tree decision tree export examplerefactoring
Thomas Knoll
1 year ago
4 changed files with 98 additions and 26 deletions
-
19examples/shields/09_pre_shield_decision_tree.py
-
43examples/shields/10_post_shield_decision_tree.py
-
43lib/stormpy/decision_tree.py
-
17lib/stormpy/dtcontrol.py
@ -0,0 +1,43 @@ |
|||
import stormpy |
|||
import stormpy.core |
|||
import stormpy.simulator |
|||
|
|||
|
|||
import stormpy.shields |
|||
|
|||
import stormpy.examples |
|||
import stormpy.examples.files |
|||
|
|||
from stormpy.decision_tree import create_decision_tree |
|||
|
|||
def export_shield_as_dot(): |
|||
path = stormpy.examples.files.prism_mdp_lava_simple |
|||
formula_str = "<post, PostSafety, gamma=1> Pmax=? [G !\"AgentIsInLavaAndNotDone\"]" |
|||
|
|||
program = stormpy.parse_prism_program(path) |
|||
formulas = stormpy.parse_properties_for_prism_program(formula_str, program) |
|||
|
|||
options = stormpy.BuilderOptions([p.raw_formula for p in formulas]) |
|||
options.set_build_state_valuations(True) |
|||
options.set_build_choice_labels(True) |
|||
options.set_build_all_labels() |
|||
options.set_build_with_choice_origins(True) |
|||
model = stormpy.build_sparse_model_with_options(program, options) |
|||
|
|||
result = stormpy.model_checking(model, formulas[0], extract_scheduler=True) |
|||
|
|||
assert result.has_shield |
|||
|
|||
shield = result.shield |
|||
filename = "postshield.storm.json" |
|||
filename2 = "postshield.shield" |
|||
stormpy.shields.export_shieldDouble(model, shield, filename) |
|||
stormpy.shields.export_shieldDouble(model, shield, filename2) |
|||
|
|||
output_folder = "post_trees" |
|||
name = 'post_my_output' |
|||
suite = create_decision_tree(filename, name=name , output_folder=output_folder, export_pdf=True) |
|||
suite.display_html() |
|||
|
|||
if __name__ == '__main__': |
|||
export_shield_as_dot() |
@ -0,0 +1,43 @@ |
|||
from sklearn.linear_model import LogisticRegression |
|||
from dtcontrol.benchmark_suite import BenchmarkSuite |
|||
from dtcontrol.decision_tree.decision_tree import DecisionTree |
|||
from dtcontrol.decision_tree.determinization.max_freq_determinizer import MaxFreqDeterminizer |
|||
from dtcontrol.decision_tree.impurity.entropy import Entropy |
|||
from dtcontrol.decision_tree.impurity.multi_label_entropy import MultiLabelEntropy |
|||
from dtcontrol.decision_tree.splitting.axis_aligned import AxisAlignedSplittingStrategy |
|||
from dtcontrol.decision_tree.splitting.linear_classifier import LinearClassifierSplittingStrategy |
|||
|
|||
import pydot |
|||
|
|||
def create_decision_tree(filename, name, output_folder, |
|||
timeout=60*60*2, |
|||
benchmark_file='benchmark', |
|||
save_folder='saved_classifiers', |
|||
export_pdf=False, |
|||
classifiers=None): |
|||
|
|||
suite = BenchmarkSuite(timeout=timeout, |
|||
save_folder=save_folder, |
|||
output_folder=output_folder, |
|||
benchmark_file=benchmark_file, |
|||
rerun=True) |
|||
|
|||
suite.add_datasets([filename]) |
|||
|
|||
|
|||
if classifiers is None: |
|||
aa = AxisAlignedSplittingStrategy() |
|||
aa.priority = 1 |
|||
|
|||
classifiers = [DecisionTree([aa], Entropy(), name)] |
|||
|
|||
suite.benchmark(classifiers) |
|||
if export_pdf: |
|||
for dataset in suite.datasets: |
|||
for classifier in classifiers: |
|||
filename = suite.get_filename(output_folder, dataset=dataset , classifier=classifier, extension='.dot') |
|||
(graph,) = pydot.graph_from_dot_file(filename) |
|||
graph.write_pdf(F'{name}.pdf') |
|||
|
|||
|
|||
return suite |
@ -1,17 +0,0 @@ |
|||
import json |
|||
import logging |
|||
from os.path import splitext, exists |
|||
from sklearn.linear_model import LogisticRegression |
|||
import numpy as np |
|||
|
|||
from dtcontrol.dataset.dataset_loader import DatasetLoader |
|||
from dtcontrol.decision_tree.decision_tree import DecisionTree |
|||
from dtcontrol.decision_tree.impurity.entropy import Entropy |
|||
|
|||
|
|||
from dtcontrol.decision_tree.splitting.axis_aligned import AxisAlignedSplittingStrategy |
|||
from dtcontrol.decision_tree.splitting.linear_classifier import LinearClassifierSplittingStrategy |
|||
|
|||
|
|||
def export_decision_tree(filename): |
|||
pass |
Write
Preview
Loading…
Cancel
Save
Reference in new issue