]> rtime.felk.cvut.cz Git - hubacji1/iamcar2.git/blobdiff - scripts/scenario.py
Fix failure rate, resize plot
[hubacji1/iamcar2.git] / scripts / scenario.py
index 5025dfed28b621a6808c64d311bc85d7ab85bd0b..3ef8be3bae865a3040cdb66131088f982348619e 100644 (file)
@@ -16,6 +16,7 @@ following::
 from json import loads
 from os import listdir
 
+TITLE = ""
 DNAME = "/home/jiri/phd/measurements/iamcar2_uniform-dist-sampling"
 PNAME = [i for i in range(0, 10)]
 PNAME += [chr(i) for i in range(97, 123)]
@@ -27,6 +28,10 @@ PNAME = [
     "G3R", "G3E", "G3M", "G3H",
     "T3R", "T3E", "T3M", "T3H",
 ]
+PNAME = [
+    0,
+    "T3H",
+]
 
 def sort_dict(f):
     """Sort dict returned by ``f``."""
@@ -59,13 +64,15 @@ def load_dir(dname=DNAME):
     """
     if dname is None:
         raise ValueError("Directory name as argument needed")
+    global TITLE
+    TITLE = dname
     scenarios = []
     for d in listdir(dname):
         for f in listdir("{}/{}".format(dname, d)):
             s = load("{}/{}/{}".format(dname, d, f))
             s["dname"] = dname
             s["subdname"] = d
-            s["fname"] = f.split(".")[0]
+            s["fname"] = f.split(".json")[0]
             scenarios.append(s)
     return scenarios
 
@@ -77,6 +84,8 @@ def load_multidir(dname=DNAME):
     """
     if dname is None:
         raise ValueError("Directory name as argument needed")
+    global TITLE
+    TITLE = dname
     s = []
     if isinstance(dname, list):
         for d in dname:
@@ -106,12 +115,30 @@ def grep(what="time", grep_all=False):
             filtered[s["fname"]].append(-1)
     return filtered
 
+def greps(what="time", grep_all=False):
+    """Return the dictionary of ``fname``'s and corresponding list of values.
+
+    If ``what`` not present, use ``-1`` instead.
+
+    Keyword arguments:
+    what -- What to filter.
+    grep_all -- Add ``-1`` if ``what`` not in scenario.
+    """
+    filtered = {}
+    scenarios = load_multidir(DNAME)
+    for s in scenarios:
+        if s["fname"] not in filtered:
+            filtered[s["fname"]] = {}
+        if what in s:
+            filtered[s["fname"]][int(s["subdname"])] = s[what]
+    return filtered
+
 def error_rate():
     """Return the dictionary of ``fname``'s and corresponding error rates."""
     f = grep("cost", True)
     e = {}
     for k, v in f.items():
-        dones = [1 for c in v if c < 9999 and c > -1]
+        dones = [1 for c in v if c < 9999 and c > 0]
         e[k] = 100 * (len(v) - len(dones)) / len(v)
     e2 = {}
     i = 1
@@ -126,7 +153,21 @@ def time():
     r2 = {}
     i = 1
     for k, v in r.items():
-        r2[PNAME[i]] = v
+        r2[k] = v
+        i += 1
+    r = grep("otime")
+    for k, v in r.items():
+        if len(v) > 0:
+            r2["opt. {}".format(k)] = v
+    return r2
+
+def otime():
+    """Return the dictionary of ``fname``'s and corresponding opt. times."""
+    r = grep("otime")
+    r2 = {}
+    i = 1
+    for k, v in r.items():
+        r2[k] = v
         i += 1
     return r2
 
@@ -140,6 +181,39 @@ def cost():
         i += 1
     return r2
 
+def costs():
+    """Return the dictionary of ``fname``'s and corresponding costs."""
+    r = greps("log_path_cost")
+    r2 = {}
+    M = 0
+    MV = 0
+    it = {}
+    for k, v in r.items():
+        for k2, v2 in v.items():
+            M = max(M, len(v2))
+    for k, v in r.items():
+        for k2, v2 in v.items():
+            if len(v2) == M:
+                it[k2] = v2
+            else:
+                MV = max(MV, M - len(v2))
+                it[k2] = [0 for i in range(M - len(v2))]
+                it[k2].extend(v2)
+    r2[PNAME[1]] = it
+    r = greps("path_cost_before_opt")
+    r3 = {}
+    i = 1
+    for k, v in r.items():
+        r3[PNAME[i]] = v
+        i += 1
+    r = greps("iterations")
+    r4 = {}
+    i = 1
+    for k, v in r.items():
+        r4[PNAME[i]] = v
+        i += 1
+    return [r2, r3, r4]
+
 def orig_cost():
     """Return the dictionary of ``fname``'s and corresponding orig. costs."""
     r = grep("orig_path_cost")
@@ -160,6 +234,16 @@ def cusp():
         i += 1
     return r2
 
+def orig_cusp():
+    """Return the dictionary of ``fname``'s and corresponding cusps."""
+    r = grep("orig_cusps-in-path")
+    r2 = {}
+    i = 1
+    for k, v in r.items():
+        r2[PNAME[i]] = v
+        i += 1
+    return r2
+
 def iter():
     """Return the dictionary of ``fname``'s and number of iterations."""
     r = grep("iterations")
@@ -169,3 +253,13 @@ def iter():
         r2[PNAME[i]] = v
         i += 1
     return r2
+
+def log_path_cost():
+    """Return the dictionary of ``fname``'s and logged path costs."""
+    r = grep("log_path_cost")
+    r2 = {}
+    i = 1
+    for k, v in r.items():
+        r2[PNAME[i]] = v
+        i += 1
+    return r2