Skip to content
Snippets Groups Projects
checkEntropies.py 1.74 KiB
Newer Older
Davide Cavezza's avatar
Davide Cavezza committed
import Refinement.experiment_properties as exp
import Weakness.src.automaton as a
import csv
import numpy as np

# This script computes the entropy of each refinement in one or more datafiles

for case_study in ["amba08", "ColorSort_fairviolation"]:
    exp.changeCaseStudy(case_study)
    datafile = open(exp.datafile,"r")
    entropiesfile = open(exp.datafile[:-4]+"_entropies.csv","w")

    reader = csv.reader(datafile,delimiter=";")
    headers = reader.next()
    idx_id = headers.index("Id")
    idx_refinement = headers.index("Refinement")
    idx_goodness = headers.index("Goodness")

    entropiesfile.write("Id;Refinement;Goodness;HausDim;Entropy;Hausdim=Entropy\n")
    print "Id;Goodness;HausDim;Entropy;Hausdim=Entropy"

#    automaton_base_assumptions = a.Automaton("ltl",ltlFormula=" & ".join(exp.initialGR1Units),var_set=exp.varsList)

    inf = np.inf

    reader.next() # Skip line of base assumptions
    for ref_line in reader:
        id = ref_line[idx_id]
        refinement = eval(ref_line[idx_refinement])
        goodness = eval(ref_line[idx_goodness])
        hausdim = goodness[0]

#        automaton_refinement = a.Automaton("ltl",ltlFormula=" & ".join(refinement),var_set=exp.varsList)
        automaton = a.Automaton("ltl",ltlFormula=" & ".join(exp.initialGR1Units + refinement), var_set=exp.varsList)

        entropy = automaton.getEntropy()

        entropiesfile.write(str(id) + ";" + str(refinement) + ";" + str(goodness) + ";" + ("%.12f" % hausdim) + ";" + ("%.12f" % entropy) + ";" + str(("%.12f" % hausdim) == ("%.12f" % entropy)) + "\n")
        print str(id) + ";" + str(goodness) + ";" + ("%.12f" % hausdim) + ";" + ("%.12f" % entropy) + ";" + str(("%.12f" % hausdim) == ("%.12f" % entropy))

    datafile.close()
    entropiesfile.close()