2121_mpl_logger.setLevel(logging.WARNING)
2222
2323
24- def experiment_measurements(fun, num_measurements,
25- sd, num_trials, seed=21):
24+ def experiment_measurements(fun,
25+ num_measurements,
26+ sd,
27+ num_trials,
28+ seed=21):
2629 """
2730 Fixed sensors, varying how much data is incorporated into the solution.
2831 """
@@ -44,79 +47,84 @@ def experiment_measurements(fun, num_measurements,
4447 return experiments, solutions
4548
4649
47- def experiment_equipment(fun, num_measure,
48- sd_vals, num_trials,
49- reference_value):
50+ def experiment_equipment(fun,
51+ num_measure,
52+ sd_vals,
53+ num_trials,
54+ seed=21):
5055 """
5156 Fixed number of sensors, varying the quality of equipment.
5257 """
53- sd_err = []
54- sd_var = []
58+ experiments = {}
59+ solutions = {}
5560 for sd in sd_vals:
5661 _logger.debug(f'Equipment Experiment. Std Dev: {sd}')
57- temp_err = []
62+ discretizations = []
63+ estimates = []
5864 for t in range(num_trials):
65+ np.random.seed(seed + t)
5966 _d = fun(sd=sd, num_obs=num_measure)
6067 estimate = _d.estimate()
61- temp_err.append(np.linalg.norm(estimate - reference_value))
62- sd_err.append(np.mean(temp_err))
63- sd_var.append(np.var(temp_err))
68+ discretizations.append(_d)
69+ estimates.append(estimate)
70+ experiments[sd] = discretizations
71+ solutions[sd] = estimates
6472
65- return sd_err, sd_var
73+ return experiments, solutions
6674
6775
6876def plot_experiment_equipment(tolerances, res, prefix, fsize=32, linewidth=5,
6977 title="Variance of MUD Error", save=True):
7078 print("Plotting experiments involving equipment differences...")
7179 plt.figure(figsize=(10, 10))
7280 for _res in res:
73- _prefix , _in, _rm, _re = _res
81+ _example , _in, _rm, _re, _fname = _res
7482 regression_err_mean, slope_err_mean, \
7583 regression_err_vars, slope_err_vars, \
7684 sd_means, sd_vars, num_sensors = _re
7785 plt.plot(tolerances, regression_err_mean,
78- label=f"{_prefix:10s } slope: {slope_err_mean:1.4f}",
86+ label=f"{_example.upper() } slope: {slope_err_mean:1.4f}",
7987 lw=linewidth)
8088 plt.scatter(tolerances, sd_means, marker='x', lw=20)
8189
8290 plt.yscale('log')
8391 plt.xscale('log')
8492 plt.Axes.set_aspect(plt.gca(), 1)
85- plt.ylim(2E-3, 2E-2)
93+ # plt.ylim(2E-3, 2E-2)
8694 # plt.ylabel("Absolute Error", fontsize=fsize)
8795 plt.xlabel('Tolerance', fontsize=fsize)
8896 plt.legend()
8997 plt.title(f"Mean of MUD Error for N={num_sensors}", fontsize=1.25 * fsize)
9098 if save:
9199 fdir = ''.join(prefix.split('/')[::-1])
92- check_dir(fdir)
100+ check_dir(f'figures/{_fname}/{ fdir}' )
93101 _logger.info("Saving equipment experiments: mean convergence.")
94- plt.savefig(f'{prefix}_convergence_mud_std_mean.png',
102+ plt.savefig(f'figures/{_fname}/ {prefix}_convergence_mud_std_mean.png',
95103 bbox_inches='tight')
96104 else:
97105 plt.show()
98106
99107 plt.figure(figsize=(10, 10))
100108 for _res in res:
101- _prefix , _in, _rm, _re = _res
109+ _example , _in, _rm, _re, _fname = _res
102110 regression_err_mean, slope_err_mean, \
103111 regression_err_vars, slope_err_vars, \
104112 sd_means, sd_vars, num_sensors = _re
105113 plt.plot(tolerances, regression_err_vars,
106- label=f"{_prefix:10s } slope: {slope_err_vars:1.4f}",
114+ label=f"{_example.upper() } slope: {slope_err_vars:1.4f}",
107115 lw=linewidth)
108116 plt.scatter(tolerances, sd_vars, marker='x', lw=20)
109117 plt.xscale('log')
110118 plt.yscale('log')
111- plt.ylim(2E-5, 2E-4)
119+ # plt.ylim(2E-5, 2E-4)
112120 plt.Axes.set_aspect(plt.gca(), 1)
113121 # plt.ylabel("Absolute Error", fontsize=fsize)
114122 plt.xlabel('Tolerance', fontsize=fsize)
115123 plt.legend()
116124 plt.title(title, fontsize=1.25 * fsize)
117125 if save:
118126 _logger.info("Saving equipment experiments: variance convergence.")
119- plt.savefig(f'{prefix}_convergence_mud_std_var.png',
127+ plt.savefig(f'figures/{_fname}/ {prefix}_convergence_mud_std_var.png',
120128 bbox_inches='tight')
121129 else:
122130 plt.show()
@@ -125,25 +133,25 @@ def plot_experiment_equipment(tolerances, res, prefix, fsize=32, linewidth=5,
125133def plot_experiment_measurements(res, prefix,
126134 fsize=32, linewidth=5,
127135 xlabel='Number of Measurements',
128- save=True, legend=False ):
136+ save=True, legend=True ):
129137 print("Plotting experiments involving increasing # of measurements.")
130138 plt.figure(figsize=(10, 10))
131139 for _res in res:
132- _prefix , _in, _rm, _re = _res
140+ _example , _in, _rm, _re, _fname = _res
133141 solutions = _in[-1]
134142 measurements = list(solutions.keys())
135143 regression_mean, slope_mean, \
136144 regression_vars, slope_vars, \
137145 means, variances = _rm
138146 plt.plot(measurements[:len(regression_mean)], regression_mean,
139- label=f"{_prefix:4s } slope: {slope_mean:1.4f}",
147+ label=f"{_example.upper() } slope: {slope_mean:1.4f}",
140148 lw=linewidth)
141149 plt.scatter(measurements[:len(means)], means, marker='x', lw=20)
142150 plt.xscale('log')
143151 plt.yscale('log')
144152 plt.Axes.set_aspect(plt.gca(), 1)
145- plt.ylim(0.9 * min(means), 1.3 * max(means))
146- plt.ylim(2E-3, 2E-1)
153+ # plt.ylim(0.9 * min(means), 1.3 * max(means))
154+ # plt.ylim(2E-3, 2E-1)
147155 plt.xlabel(xlabel, fontsize=fsize)
148156 if legend:
149157 plt.legend(fontsize=fsize * 0.8)
@@ -152,20 +160,20 @@ def plot_experiment_measurements(res, prefix,
152160 plt.title(title, fontsize=1.25 * fsize)
153161 if save:
154162 fdir = '/'.join(prefix.split('/')[:-1])
155- check_dir(fdir)
163+ check_dir(f'figures/{_fname}/{ fdir}' )
156164 _logger.info("Saving measurement experiments: mean convergence.")
157- plt.savefig(f'{prefix}_convergence_obs_mean.png', bbox_inches='tight')
165+ plt.savefig(f'figures/{_fname}/ {prefix}_convergence_obs_mean.png', bbox_inches='tight')
158166 else:
159167 plt.show()
160168
161169 plt.figure(figsize=(10, 10))
162170 for _res in res:
163- _prefix , _in, _rm, _re = _res
171+ _example , _in, _rm, _re, _fname = _res
164172 regression_mean, slope_mean, \
165173 regression_vars, slope_vars, \
166174 means, variances = _rm
167175 plt.plot(measurements[:len(regression_vars)], regression_vars,
168- label=f"{_prefix:4s } slope: {slope_vars:1.4f}",
176+ label=f"{_example.upper() } slope: {slope_vars:1.4f}",
169177 lw=linewidth)
170178 plt.scatter(measurements[:len(variances)], variances,
171179 marker='x', lw=20)
@@ -174,7 +182,7 @@ def plot_experiment_measurements(res, prefix,
174182 plt.Axes.set_aspect(plt.gca(), 1)
175183# if not len(np.unique(variances)) == 1:
176184# plt.ylim(0.9 * min(variances), 1.3 * max(variances))
177- plt.ylim(5E-6, 5E-4)
185+ # plt.ylim(5E-6, 5E-4)
178186 plt.xlabel(xlabel, fontsize=fsize)
179187 if legend:
180188 plt.legend(fontsize=fsize * 0.8)
@@ -183,6 +191,6 @@ def plot_experiment_measurements(res, prefix,
183191 fontsize=1.25 * fsize)
184192 if save:
185193 _logger.info("Saving measurement experiments: variance convergence.")
186- plt.savefig(f'{prefix}_convergence_obs_var.png', bbox_inches='tight')
194+ plt.savefig(f'figures/{_fname}/ {prefix}_convergence_obs_var.png', bbox_inches='tight')
187195 else:
188196 plt.show()
0 commit comments