2 """Plot scenario's runs cost."""
5 from sys import argv, exit
6 import matplotlib.pyplot as plt
13 """Load scenario from file.
21 raise ValueError("File name as argument needed")
23 with open(fn, "r") as f:
27 def load_dir(dn=None, fn=None):
28 """Load scenarios from directory.
33 - `dn` -- Directory name.
36 raise ValueError("Directory name as argument needed")
41 s = load("{}/{}/{}.json".format(dn, d, fn))
49 return np.percentile(li, p) if len(li) > 0 else p
51 if __name__ == "__main__":
53 print("""Usage: ./plot_cost.py DIR FN
56 - DIR is the directory with the results.
57 - FN is the desired test filename.
62 scenarios = load_dir(result_dir, test_fn)
64 err_hist = [0 for i in range(L)]
65 val_list = [[] for i in range(L)]
85 val_list[i].append(lpc[i])
86 if min_c == 0.0 or s["goal_cc"] < min_c:
89 if s["goal_cc"] > max_c:
93 cc_list.append(s["goal_cc"])
95 icnt_list.append(s["icnt"])
96 bcnt_list.append(s["bcnt"])
97 rcnt_list.append(s["rcnt"])
98 ncnt_list.append(s["ncnt"])
102 time_list.append(s["time"])
106 otime_list.append(s["otime"])
109 o_err_hist = list(err_hist)
110 err_hist = [i * 100.0 / RUNS if i > 0 else -6 for i in o_err_hist]
111 # this is failure rate
114 print("Failure {} % in the iteration {}".format(err_hist[w_it], w_it))
117 print("Failure 0.0 % in the iteration {}".format(err_hist.index(0.0)))
119 print("Failure 0.0 % not reached")
121 print("{} {}".format(min_s, max_s))
122 icnt_avg = np.average(icnt_list)
123 bcnt_avg = np.average(bcnt_list)
124 rcnt_avg = np.average(rcnt_list)
125 ncnt_avg = np.average(ncnt_list)
126 cc_avg = np.average(cc_list)
128 cc_max = np.max(cc_list)
131 time_avg = np.average(time_list)
132 time_max = np.max(time_list)
133 otime_avg = np.average(otime_list)
135 otime_max = np.max(otime_list)
138 br_avg = np.average([b / r for (b, r) in zip(bcnt_list, rcnt_list)])
139 print("avg. icnt = {}".format(icnt_avg))
140 print("avg. bcnt = {}".format(bcnt_avg))
141 print("avg. rcnt = {}".format(rcnt_avg))
142 print("avg. ncnt = {}".format(ncnt_avg))
143 print("avg. cc = {}".format(cc_avg))
144 print("max. cc = {}".format(cc_max))
145 print("avg. time = {}".format(time_avg))
146 print("max. time = {}".format(time_max))
147 print("avg. otime = {}".format(otime_avg))
148 print("max. otime = {}".format(otime_max))
149 print("b/r avg. {}".format(br_avg))
150 print("last avg. cost = {}".format(np.average(val_list[-1])))
151 #print("last max. cost = {}".format(perc(val_list[-1], 100)))
154 plt.rcParams["figure.figsize"] = [14, 7]
155 plt.rcParams["font.size"] = 24
156 plt.rcParams["font.family"] = "cmr10"
157 plt.rcParams["hatch.linewidth"] = 1.0
158 plt.rcParams["lines.linewidth"] = 1.0
159 plt.rc('axes', unicode_minus=False)
161 f, ax = plt.subplots()
163 ax.grid(which="major", linestyle=":", color="tab:gray")
164 #ax.grid(which="minor", linestyle=":", color="gray")
165 #ax.set_title(scenarios[0]["fn"])
166 #ax.set_title("Scenario 3: Final path cost after optimization")
167 ax.set_xlabel("Number of iterations [-]")
168 ax.set_ylabel("Cost [m]")
169 eax.set_ylabel("Failure rate [%]")
170 #ax.set_ylim([20.1, 57]) # scenario 7
171 #ax.set_ylim([18, 43]) # scenario 2
172 ax.set_ylim([10, 60])
173 eax.set_ylim([-5, 100])
178 y2=[i for i in err_hist],
181 label="Failure rate",
195 y1=[perc(val_list[i], 50 - (5-j)*10) for i in range(L)],
196 y2=[perc(val_list[i], 50 + (5-j)*10) for i in range(L)],
203 [np.average(val_list[i]) for i in range(L)],
206 label="Average cost",
210 ax.tick_params(axis='x', labelrotation=45)
211 h1, la1 = ax.get_legend_handles_labels()
212 h2, la2 = eax.get_legend_handles_labels()
217 ax.legend(h, la, loc="upper right", ncol=1)
218 plt.savefig("out.pdf", bbox_inches="tight")