示例#1
0
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)
示例#2
0
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)
示例#3
0
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)
示例#4
0
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)
示例#5
0
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')