def gen_avg_rom_dataset(dataset_size, resolution=40): V = get_space(resolution) chol = make_cov_chol(V) z = Function(V) solver = Fin(V) phi = np.loadtxt('data/basis_nine_param.txt', delimiter=",") qoi_errors = np.zeros((dataset_size, 5)) # TODO: Needs to be fixed for higher order functions z_s = np.zeros((dataset_size, V.dim())) for i in range(dataset_size): norm = np.random.randn(len(chol)) nodal_vals = np.exp(0.5 * chol.T @ norm) z.vector().set_local(nodal_vals) z_s[i, :] = nodal_vals A_r, B_r, C_r, x_r, y_r = solver.averaged_forward(z, phi) x, y, A, B, C = solver.forward(z) qoi = solver.qoi_operator(x) qoi_r = solver.reduced_qoi_operator(x_r) qoi_errors[i, :] = qoi - qoi_r if (dataset_size > 1000): np.savetxt('data/z_avg_tr.txt', z_s, delimiter=",") np.savetxt('data/errors_avg_tr.txt', qoi_errors, delimiter=",") if (dataset_size < 400): np.savetxt('data/z_avg_eval.txt', z_s, delimiter=",") np.savetxt('data/errors_avg_eval.txt', qoi_errors, delimiter=",") return (z_s, qoi_errors)
def gen_affine_avg_rom_dataset(dataset_size, resolution=40, genrand=False): V = get_space(resolution) dofs = len(V.dofmap().dofs()) z = Function(V) solver = Fin(V, genrand) phi = np.loadtxt('../data/basis_nine_param.txt', delimiter=",") chol = make_cov_chol(V, length=1.6) # prior_cov = np.load('../bayesian_inference/prior_covariance_0.07_0.07.npy') # L = np.linalg.cholesky(prior_cov) # err_model = load_parametric_model_avg('elu', Adam, 0.0003, 5, 58, 200, 2000, V.dim()) err_model = res_bn_fc_model(ELU(), Adam, 3e-5, 3, 100, 1446, solver.n_obs) solver_r = AffineROMFin(V, err_model, phi, genrand) qoi_errors = np.zeros((dataset_size, solver_r.n_obs)) qois = np.zeros((dataset_size, solver_r.n_obs)) # TODO: Needs to be fixed for higher order functions z_s = np.zeros((dataset_size, V.dim())) for i in tqdm(range(dataset_size)): # draw = np.random.randn(dofs) # nodal_vals = np.exp(np.dot(L, draw)) norm = np.random.randn(V.dim()) nodal_vals = np.exp(0.5 * chol.T @ norm) z.vector().set_local(nodal_vals) z_s[i, :] = nodal_vals x, y, A, B, C = solver.forward(z) w_r = solver_r.forward_reduced(z) qoi = solver.qoi_operator(x) qoi_r = solver_r.qoi_reduced(w_r) qoi_errors[i, :] = qoi - qoi_r qois[i, :] = qoi if (dataset_size > 1000): np.save('../data/z_aff_avg_tr_avg_obs_3', z_s) np.save('../data/errors_aff_avg_tr_avg_obs_3', qoi_errors) np.save('../data/qois_avg_tr_avg_obs_3', qois) if (dataset_size < 600): np.save('../data/z_aff_avg_eval_avg_obs_3', z_s) np.save('../data/errors_aff_avg_eval_avg_obs_3', qoi_errors) np.save('../data/qois_avg_eval_avg_obs_3', qois) return (z_s, qoi_errors)
def gen_affine_avg_rom_dataset(dataset_size, resolution=40, genrand=False): V = get_space(resolution) chol = make_cov_chol(V, length=1.6) z = Function(V) solver = Fin(V, genrand) phi = np.loadtxt('../data/basis_nine_param.txt', delimiter=",") # err_model = load_parametric_model_avg('elu', Adam, 0.0003, 5, 58, 200, 2000, V.dim()) err_model = res_bn_fc_model(ELU(), Adam, 3e-5, 3, 200, 1446, 40) solver_r = AffineROMFin(V, err_model, phi, genrand) qoi_errors = np.zeros((dataset_size, solver_r.n_obs)) # TODO: Needs to be fixed for higher order functions z_s = np.zeros((dataset_size, V.dim())) for i in tqdm(range(dataset_size)): norm = np.random.randn(len(chol)) nodal_vals = np.exp(0.5 * chol.T @ norm) z.vector().set_local(nodal_vals) z_s[i, :] = nodal_vals x, y, A, B, C = solver.forward(z) w_r = solver_r.forward_reduced(z) qoi = solver.qoi_operator(x) qoi_r = solver_r.qoi_reduced(w_r) qoi_errors[i, :] = qoi - qoi_r if (dataset_size > 1000): np.savetxt('../data/z_aff_avg_tr.txt', z_s, delimiter=",") np.savetxt('../data/errors_aff_avg_tr.txt', qoi_errors, delimiter=",") if (dataset_size < 400): np.savetxt('../data/z_aff_avg_eval.txt', z_s, delimiter=",") np.savetxt('../data/errors_aff_avg_eval.txt', qoi_errors, delimiter=",") return (z_s, qoi_errors)
sys.path.append('../') import dolfin as dl import numpy as np import matplotlib.pyplot as plt from fom.forward_solve import Fin from fom.thermal_fin import get_space from bayesian_inference.gaussian_field import make_cov_chol # Setup solver V = get_space(40) solver = Fin(V) phi = np.loadtxt('data/basis_five_param.txt', delimiter=",") # Obtain synthetic data chol = make_cov_chol(V, length=0.8) k_true = dl.Function(V) norm = np.random.randn(len(chol)) nodal_vals = np.exp(0.5 * chol.T @ norm) k_true.vector().set_local(nodal_vals) w, y, A, B, C = solver.forward(k_true) data = solver.qoi_operator(w) # Comparing reduced and full w, y, A, B, C = solver.forward(k_true) A_r, B_r, C_r, w_r, y_r = solver.averaged_forward(k_true, phi) k_true_averaged = solver.nine_param_to_function(solver.subfin_avg_op(k_true)) p = dl.plot(k_true_averaged) plt.colorbar(p)
from scipy.optimize import minimize, Bounds # ROMML imports # from fom.forward_solve_exp import Fin from fom.forward_solve import Fin from fom.thermal_fin import get_space from rom.averaged_affine_ROM import AffineROMFin from deep_learning.dl_model import load_bn_model, load_surrogate_model from bayesian_inference.gaussian_field import make_cov_chol # randobs = True randobs = True resolution = 40 V = get_space(resolution) chol = make_cov_chol(V, length=1.6) # Setup DL error model # err_model = load_parametric_model_avg('elu', Adam, 0.0003, 5, 58, 200, 2000, V.dim()) err_model = load_bn_model(randobs) surrogate_model = load_surrogate_model(randobs) # Initialize reduced order model phi = np.loadtxt('../data/basis_nine_param.txt',delimiter=",") solver_r = AffineROMFin(V, err_model, phi, randobs) # Setup synthetic observations solver = Fin(V, randobs) z_true = dl.Function(V) prior_covariance = np.load('prior_covariance_0.07_0.07.npy')