def main(): ndim = 2 np.random.seed(3) tf = 25 nsteps = 1000 u_init = [0, 0] noise = Noise([0, tf]) oscil = Oscillator(noise, tf, nsteps, u_init) my_map = BlackBox(map_def, args=(oscil, )) n_init = 4 n_iter = 80 mean, cov = np.zeros(ndim), np.ones(ndim) domain = [[-6, 6]] * ndim inputs = GaussianInputs(domain, mean, cov) X = inputs.draw_samples(n_init, "lhs") Y = my_map.evaluate(X) o = OptimalDesign(X, Y, my_map, inputs, fix_noise=True, noise_var=0.0, normalize_Y=True) m_list = o.optimize(n_iter, acquisition="US", num_restarts=10, parallel_restarts=True) # Compute true pdf filename = "map_samples{:d}D.txt".format(ndim) try: smpl = np.genfromtxt(filename) pts = smpl[:, 0:-1] yy = smpl[:, -1] except: pts = inputs.draw_samples(n_samples=100, sample_method="grd") yy = my_map.evaluate(pts, parallel=True, include_noise=False) np.savetxt(filename, np.column_stack((pts, yy))) pdf = custom_KDE(yy, weights=inputs.pdf(pts)) for ii in np.arange(0, n_iter + 1, 10): pb, pp, pm = model_pdf(m_list[ii], inputs, pts=pts) plot_pdf(pdf, pb, [pm, pp], filename="pdfs%.4d.pdf" % (ii), xticks=[-3, 0, 3], yticks=[-8, -3, 2]) plot_smp(m_list[ii], inputs, n_init, filename="smps%.4d.pdf" % (ii), xticks=[-6, 0, 6], yticks=[-5, 0, 5], cmapticks=[-2, -1, 0, 1, 2])
def run(function, prefix): noise_var = 1e-3 b = augment(function)(noise_var=noise_var, rescale_X=True) my_map, inputs, true_ymin, true_xmin = b.my_map, b.inputs, b.ymin, b.xmin # Use Gaussian prior domain = inputs.domain mean = np.zeros(inputs.input_dim) + 0.5 cov = np.ones(inputs.input_dim) * 0.01 inputs = GaussianInputs(domain, mean, cov) record_time = np.linspace(0, 15, 226) n_trials = 50 n_jobs = 20 pts = inputs.draw_samples(n_samples=int(1e5), sample_method="uni") yy = my_map.evaluate(pts, parallel=True, include_noise=False) y_list = [yy] * len(record_time) pt_list = [custom_KDE(yy, weights=inputs.pdf(pts))] * len(record_time) true_ymin_list = [true_ymin] * len(record_time) true_xmin_list = [true_xmin] * len(record_time) metric = [(rmse, dict(pts=pts, y_list=y_list, t_list=record_time)), (mll, dict(pts=pts, y_list=y_list, t_list=record_time)), (log_pdf, dict(pts=pts, pt_list=pt_list, t_list=record_time)), (distmin_model, dict(true_xmin_list=true_xmin_list, t_list=record_time)), (regret_tmap, dict(true_ymin_list=true_ymin_list, tmap=my_map, t_list=record_time))] X_pose = (0, 0, np.pi / 4) planner = PathPlanner(inputs.domain, look_ahead=0.2, turning_radius=0.02) acq_list = ["US_IW", "US_LW", "IVR_IW", "IVR_LW"] for acq in acq_list: print("Benchmarking " + acq) b = BenchmarkerPath(my_map, acq, planner, X_pose, record_time, inputs, metric) result = b.run_benchmark(n_trials, n_jobs=n_jobs, filename=prefix + acq)
def main(): ndim = 2 tf = 25 nsteps = 1000 u_init = [0, 0] noise = Noise([0, tf]) oscil = Oscillator(noise, tf, nsteps, u_init) mean, cov = np.zeros(ndim), np.ones(ndim) domain = [[-6, 6]] * ndim inputs = GaussianInputs(domain, mean, cov) prefix = "oscill_" noise_var = 1e-3 my_map = BlackBox(map_def, args=(oscil, ), noise_var=noise_var) n_init = 3 n_iter = 80 n_trials = 100 n_jobs = 30 # Compute true pdf filename = "map_samples{:d}D.txt".format(ndim) try: smpl = np.genfromtxt(filename) pts = smpl[:, 0:-1] yy = smpl[:, -1] except: pts = inputs.draw_samples(n_samples=100, sample_method="grd") yy = my_map.evaluate(pts, parallel=True, include_noise=False) np.savetxt(filename, np.column_stack((pts, yy))) weights = inputs.pdf(pts) pt = custom_KDE(yy, weights=weights) metric = [("log_pdf", dict(pt=pt, pts=pts))] acq_list = ["US", "US_LW", "IVR_IW", "IVR_LW"] for acq in acq_list: print("Benchmarking " + acq) b = Benchmarker(my_map, acq, n_init, n_iter, inputs, metric) result = b.run_benchmark(n_trials, n_jobs, filename=prefix + acq) b = BenchmarkerLHS(my_map, n_init, n_iter, inputs, metric) result = b.run_benchmark(n_trials, n_jobs, filename=prefix + "LHS")
def main(): ndim = 3 np.random.seed(2) tf = 4000 dt = 0.01 nsteps = int(tf/dt) u_init = [0, 0.01, 0.01] pre = PRE(tf, nsteps, u_init) u, t = pre.solve() plot_observable(t, u[:,2], ylabel="z", xticks=[0,2000,4000], yticks=[-0.5,0,0.5,1]) plot_trajectory(t, u) # Do PCA iostep = 100 tsnap = t[::iostep] usnap = u[::iostep] lam, psi, usnap_mean = comp_pca(usnap, ndim) print("PCA Eigenvalues:", lam) n_init = 3 n_iter = 50 mean = np.zeros(ndim) cov = np.diag(lam) a_bnds = 4.0 domain = [ [-a, a] for a in a_bnds*np.sqrt(np.diag(cov)) ] inputs = GaussianInputs(domain, mean, cov) my_map = BlackBox(map_def, args=(psi,usnap_mean)) X = inputs.draw_samples(n_init, "lhs") Y = my_map.evaluate(X) o = OptimalDesign(X, Y, my_map, inputs, fix_noise=True, noise_var=0.0, normalize_Y=True) m_list = o.optimize(n_iter, acquisition="EI", num_restarts=10, parallel_restarts=True)
def plot_likelihood_ratio(function, n_GMM, filename): my_map, inputs = function.my_map, function.inputs mu = np.random.randn(inputs.input_dim) cov = 4*np.random.randn(inputs.input_dim)**2 inputs = GaussianInputs(inputs.domain, mu=mu, cov=cov) ngrid = 10 pts = inputs.draw_samples(n_samples=ngrid, sample_method="grd") ndim = pts.shape[-1] grd = pts.reshape( (ngrid,)*ndim + (ndim,) ).T X, Y = grd[0], grd[1] # Compute map yy = my_map.evaluate(pts) # Compute GPy model model = GPy.models.GPRegression(pts, yy, normalizer=True) likelihood = Likelihood(model, inputs) x_new = np.random.rand(2, inputs.input_dim) print(likelihood._evaluate_raw(x_new)) print(likelihood._jacobian_raw(x_new)) g = GradientChecker(lambda x: likelihood._evaluate_gmm(x), lambda x: likelihood._jacobian_gmm(x), x_new, 'x') assert(g.checkgrad()) yy = model.predict(pts)[0].flatten() dyy_dx, _ = model.predictive_gradients(pts) dyy_dx = dyy_dx[:,:,0] ZZ = yy.reshape( (ngrid,)*ndim ).T # Compute likelihood ratio x, y = custom_KDE(yy, weights=inputs.pdf(pts)).evaluate() fnTn = scipy.interpolate.interp1d(x, y) fx = inputs.pdf(pts).flatten() fy = fnTn(yy).flatten() w = fx/fy ZL = w.reshape( (ngrid,)*ndim ).T # Compute gradient of likelihood ratio dy_dx = np.gradient(y,x) fnTn_dx = scipy.interpolate.interp1d(x, dy_dx) tmp = -fx / fy**2 * fnTn_dx(yy) dw_dx = tmp[:,None] * dyy_dx plt.figure() plt.plot(x,y) plt.plot(x,fnTn(x), '-.') from scipy.interpolate import InterpolatedUnivariateSpline spl = InterpolatedUnivariateSpline(x, y) plt.plot(x, spl(x), '--') plt.figure() plt.semilogy(x,dy_dx) plt.semilogy(x,fnTn_dx(x), '-.') plt.semilogy(x, spl.derivative()(x), '--') plt.show(); exit()
def main(): np.random.seed(2) casename = "izu3" fh = Dataset("../benchmarks/bathymetry/data/" + casename + ".nc", mode="r") lons = fh.variables["lon"][:] lats = fh.variables["lat"][:] depths = fh.variables["elevation"][:] # Rescale data and flip depths to have anomalies as minima lons = MinMaxScaler().fit_transform(lons.reshape(-1, 1)) lats = MinMaxScaler().fit_transform(lats.reshape(-1, 1)) tmp = StandardScaler().fit_transform(depths.reshape(-1, 1)) depths = -tmp.reshape(depths.shape) if casename in ["cuba", "challenger", "izu", "izu2"]: depths = -depths domain = [ [0, 1], [0, 1] ] #inputs = UniformInputs(domain) inputs = GaussianInputs(domain, [0.5,0.5], [0.01,0.01]) noise_var = 0.0 interpolant = interpolate.interp2d(lons, lats, depths, kind="cubic") my_map = BlackBox(map_def, args=(interpolant,), noise_var=noise_var) # Set up path-planner record_time = np.linspace(0,2,31) #record_time = np.linspace(0,4,61) #record_time = np.linspace(0,10,151) my_map.kwargs["time"] = record_time[0] X_pose = (0,0,np.pi/4); X = X_pose[0:2] Y_pose = my_map.evaluate(X); print(Y_pose); p = PathPlanner(inputs.domain, look_ahead=0.2, turning_radius=0.02) # Run mission # o = OptimalPathStatic(X_pose, Y_pose, my_map, inputs) o = OptimalPath(X_pose, Y_pose, my_map, inputs)#, static=True) m_list, p_list, s_list = o.optimize(record_time, path_planner=p, acquisition="US") # Plot stuff ngrid = 50 pts = inputs.draw_samples(n_samples=ngrid, sample_method="grd") ndim = pts.shape[-1] grd = pts.reshape( (ngrid,)*ndim + (ndim,) ).T X, Y = grd[0], grd[1] yy = my_map.evaluate(pts, include_noise=False) ZZt = yy.reshape( (ngrid,)*ndim ).T r_list = [ np.array(p.make_itinerary(path,1000)[0]) for path in p_list ] for ii in range(0, len(m_list)): model = m_list[ii] stamp = model.X[-1,-1]*np.ones(len(pts)) yy = model.predict( np.hstack((pts, stamp[:,None])) )[0] ZZ = yy.reshape( (ngrid,)*ndim ).T fig = plt.figure(figsize=(10,4)) plt.subplot(121) plt.contourf(X, Y, ZZ); for rr in r_list[0:ii+1]: plt.plot(rr[:,0], rr[:,1], 'r-') plt.plot(model.X[:,0],model.X[:,1],'ro') plt.xlim(0,1); plt.ylim(0,1) plt.axis('equal'); plt.subplot(122) plt.contourf(X, Y, ZZt); plt.xlim(0,1); plt.ylim(0,1) plt.axis('equal'); plt.show();