Probability of Failure Estimation with Gaussian Processes¶
In [ ]:
Copied!
import qmcpy as qp
import numpy as np
import scipy.stats
import gpytorch
import torch
import os
import warnings
import pandas as pd
from gpytorch.utils.warnings import NumericalWarning
warnings.filterwarnings("ignore")
pd.set_option(
'display.max_rows', None,
'display.max_columns', None,
'display.width', 1000,
'display.colheader_justify', 'center',
'display.precision',2,
'display.float_format',lambda x:'%.1e'%x)
from matplotlib import pyplot,gridspec
import qmcpy as qp
import numpy as np
import scipy.stats
import gpytorch
import torch
import os
import warnings
import pandas as pd
from gpytorch.utils.warnings import NumericalWarning
warnings.filterwarnings("ignore")
pd.set_option(
'display.max_rows', None,
'display.max_columns', None,
'display.width', 1000,
'display.colheader_justify', 'center',
'display.precision',2,
'display.float_format',lambda x:'%.1e'%x)
from matplotlib import pyplot,gridspec
In [ ]:
Copied!
import pandas as pd
pd.set_option(
'display.max_rows', None,
'display.max_columns', None,
'display.width', 1000,
'display.colheader_justify', 'center',
'display.precision',2,
'display.float_format',lambda x:'%.1e'%x)
from matplotlib import pyplot
import pandas as pd
pd.set_option(
'display.max_rows', None,
'display.max_columns', None,
'display.width', 1000,
'display.colheader_justify', 'center',
'display.precision',2,
'display.float_format',lambda x:'%.1e'%x)
from matplotlib import pyplot
In [5]:
Copied!
gpytorch_use_gpu = torch.cuda.is_available()
gpytorch_use_gpu
gpytorch_use_gpu = torch.cuda.is_available()
gpytorch_use_gpu
Out[5]:
False
Method Visual¶
In [6]:
Copied!
cols = 2
nticks = 129
np.random.seed(7); torch.manual_seed(1)
ci_percentage = .95
beta = scipy.stats.norm.ppf(np.mean([ci_percentage,1]))
f = lambda x: x*np.sin(4*np.pi*x)
x = qp.Lattice(1,seed=7).gen_samples(4).squeeze()
y = f(x)
gp = qp.util.ExactGPyTorchRegressionModel(
x_t = x[:,None],
y_t = y,
prior_mean = gpytorch.means.ZeroMean(),
prior_cov = gpytorch.kernels.ScaleKernel(gpytorch.kernels.MaternKernel(nu=2.5)),
likelihood = gpytorch.likelihoods.GaussianLikelihood(noise_constraint = gpytorch.constraints.Interval(1e-12,1e-8)))
gp.fit(
optimizer = torch.optim.Adam(gp.parameters(),lr=0.1),
mll = gpytorch.mlls.ExactMarginalLogLikelihood(gp.likelihood,gp),
training_iter = 100)
xticks = np.linspace(0,1,nticks)
yticks = f(xticks)
yhatticks_mean,yhatticks_std = gp.predict(xticks[:,None])
f_preds = gp(torch.from_numpy(xticks[:,None]))
f_samples = f_preds.sample(sample_shape=torch.Size((cols,))).numpy()
fig = pyplot.figure(tight_layout=True)
gs = gridspec.GridSpec(2,cols)
ax_top = fig.add_subplot(gs[0,:])
scatter_data = ax_top.scatter(x,y,color='r')
plot_yticks, = ax_top.plot(xticks,yticks,color='c')
plot_post_mean, = ax_top.plot(xticks,yhatticks_mean,color='k')
plot_gp_ci = ax_top.fill_between(xticks,yhatticks_mean+beta*yhatticks_std,yhatticks_mean-beta*yhatticks_std,color='k',alpha=.25)
ax_top.axhline(y=0,color='lightgreen')
for spine in ['top','bottom']: ax_top.spines[spine].set_visible(False)
ax_top.set_xlim([0,1]); ax_top.set_xticks([0,1]); ax_top.set_yticks([])
for c in range(cols):
f_sample = f_samples[c]
ax = fig.add_subplot(gs[1,c]) if c==0 else fig.add_subplot(gs[1,c],sharey=ax)
ax.scatter(x,y,color='r')
ax.plot(xticks,yhatticks_mean,color='k')
ax.set_xlim([0,1]); ax.set_xticks([0,1])
plot_draw, = ax.plot(xticks,f_sample,c='b')
ymin,ymax = ax.get_ylim()#; ax.set_aspect(1/(ymax-ymin))
yminticks,ymaxticks = np.tile(ymin,nticks),np.tile(ymax,nticks)
tp = (f_sample>=0)*(yhatticks_mean>=0)
tn = (f_sample<0)*(yhatticks_mean<0)
fp = (f_sample<0)*(yhatticks_mean>=0)
fn = (f_sample>=0)*(yhatticks_mean<0)
plot_tp, = ax.plot(xticks,np.ma.masked_where(~tp,ymaxticks),color='m',linewidth=5)
plot_fp, = ax.plot(xticks,np.ma.masked_where(~fp,ymaxticks),color='orange',linewidth=5)
plot_tn, = ax.plot(xticks,np.ma.masked_where(~tn,yminticks),color='m',linewidth=5)
plot_fn, = ax.plot(xticks,np.ma.masked_where(~fn,yminticks),color='orange',linewidth=5)
ax.set_ylim([ymin,ymax])
for spine in ['top','bottom']: ax.spines[spine].set_visible(False)
ax.set_yticks([])
plot_failure_threshold = ax.axhline(y=0,color='lightgreen')
fig.legend([scatter_data,plot_yticks,plot_post_mean,plot_gp_ci],
['data','simulation','posterior mean','posterior 95\% CI'],
ncol=4,
frameon=False,
loc='upper center',
bbox_to_anchor=(.5,1.01),
prop={'size':9})
fig.legend([plot_failure_threshold,plot_draw,plot_tp,plot_fp,],
['failure threshold','sample path','True','False'],
ncol=5,
frameon=False,
loc='upper center',
bbox_to_anchor=(.5,.58),
prop={'size':9})
fig.savefig("outputs/TP_FP_TN_FN.png",dpi=256,transparent=True,bbox_inches="tight")
cols = 2
nticks = 129
np.random.seed(7); torch.manual_seed(1)
ci_percentage = .95
beta = scipy.stats.norm.ppf(np.mean([ci_percentage,1]))
f = lambda x: x*np.sin(4*np.pi*x)
x = qp.Lattice(1,seed=7).gen_samples(4).squeeze()
y = f(x)
gp = qp.util.ExactGPyTorchRegressionModel(
x_t = x[:,None],
y_t = y,
prior_mean = gpytorch.means.ZeroMean(),
prior_cov = gpytorch.kernels.ScaleKernel(gpytorch.kernels.MaternKernel(nu=2.5)),
likelihood = gpytorch.likelihoods.GaussianLikelihood(noise_constraint = gpytorch.constraints.Interval(1e-12,1e-8)))
gp.fit(
optimizer = torch.optim.Adam(gp.parameters(),lr=0.1),
mll = gpytorch.mlls.ExactMarginalLogLikelihood(gp.likelihood,gp),
training_iter = 100)
xticks = np.linspace(0,1,nticks)
yticks = f(xticks)
yhatticks_mean,yhatticks_std = gp.predict(xticks[:,None])
f_preds = gp(torch.from_numpy(xticks[:,None]))
f_samples = f_preds.sample(sample_shape=torch.Size((cols,))).numpy()
fig = pyplot.figure(tight_layout=True)
gs = gridspec.GridSpec(2,cols)
ax_top = fig.add_subplot(gs[0,:])
scatter_data = ax_top.scatter(x,y,color='r')
plot_yticks, = ax_top.plot(xticks,yticks,color='c')
plot_post_mean, = ax_top.plot(xticks,yhatticks_mean,color='k')
plot_gp_ci = ax_top.fill_between(xticks,yhatticks_mean+beta*yhatticks_std,yhatticks_mean-beta*yhatticks_std,color='k',alpha=.25)
ax_top.axhline(y=0,color='lightgreen')
for spine in ['top','bottom']: ax_top.spines[spine].set_visible(False)
ax_top.set_xlim([0,1]); ax_top.set_xticks([0,1]); ax_top.set_yticks([])
for c in range(cols):
f_sample = f_samples[c]
ax = fig.add_subplot(gs[1,c]) if c==0 else fig.add_subplot(gs[1,c],sharey=ax)
ax.scatter(x,y,color='r')
ax.plot(xticks,yhatticks_mean,color='k')
ax.set_xlim([0,1]); ax.set_xticks([0,1])
plot_draw, = ax.plot(xticks,f_sample,c='b')
ymin,ymax = ax.get_ylim()#; ax.set_aspect(1/(ymax-ymin))
yminticks,ymaxticks = np.tile(ymin,nticks),np.tile(ymax,nticks)
tp = (f_sample>=0)*(yhatticks_mean>=0)
tn = (f_sample<0)*(yhatticks_mean<0)
fp = (f_sample<0)*(yhatticks_mean>=0)
fn = (f_sample>=0)*(yhatticks_mean<0)
plot_tp, = ax.plot(xticks,np.ma.masked_where(~tp,ymaxticks),color='m',linewidth=5)
plot_fp, = ax.plot(xticks,np.ma.masked_where(~fp,ymaxticks),color='orange',linewidth=5)
plot_tn, = ax.plot(xticks,np.ma.masked_where(~tn,yminticks),color='m',linewidth=5)
plot_fn, = ax.plot(xticks,np.ma.masked_where(~fn,yminticks),color='orange',linewidth=5)
ax.set_ylim([ymin,ymax])
for spine in ['top','bottom']: ax.spines[spine].set_visible(False)
ax.set_yticks([])
plot_failure_threshold = ax.axhline(y=0,color='lightgreen')
fig.legend([scatter_data,plot_yticks,plot_post_mean,plot_gp_ci],
['data','simulation','posterior mean','posterior 95\% CI'],
ncol=4,
frameon=False,
loc='upper center',
bbox_to_anchor=(.5,1.01),
prop={'size':9})
fig.legend([plot_failure_threshold,plot_draw,plot_tp,plot_fp,],
['failure threshold','sample path','True','False'],
ncol=5,
frameon=False,
loc='upper center',
bbox_to_anchor=(.5,.58),
prop={'size':9})
fig.savefig("outputs/TP_FP_TN_FN.png",dpi=256,transparent=True,bbox_inches="tight")
Sin 1d Problem¶
In [9]:
Copied!
mcispfgp = qp.PFGPCI(
integrand = qp.Sin1d(qp.DigitalNetB2(1,seed=17),k=3),
failure_threshold = 0,
failure_above_threshold=True,
abs_tol = 1e-2,
alpha = 1e-1,
n_init = 4,
init_samples = None,
batch_sampler = qp.PFSampleErrorDensityAR(verbose=True),
n_batch = 4,
n_limit = 20,
n_approx = 2**18,
gpytorch_prior_mean = gpytorch.means.ZeroMean(),
gpytorch_prior_cov = gpytorch.kernels.ScaleKernel(
gpytorch.kernels.MaternKernel(nu=2.5,
lengthscale_constraint = gpytorch.constraints.Interval(.01,.1)
),
outputscale_constraint = gpytorch.constraints.Interval(1e-3,10)
),
gpytorch_likelihood = gpytorch.likelihoods.GaussianLikelihood(noise_constraint = gpytorch.constraints.Interval(1e-12,1e-8)),
gpytorch_marginal_log_likelihood_func = lambda likelihood,gpyt_model: gpytorch.mlls.ExactMarginalLogLikelihood(likelihood,gpyt_model),
torch_optimizer_func = lambda gpyt_model: torch.optim.Adam(gpyt_model.parameters(),lr=0.1),
gpytorch_train_iter = 100,
gpytorch_use_gpu = False,
verbose = 50,
n_ref_approx = 2**22,
seed_ref_approx = None)
solution,data = mcispfgp.integrate(seed=7,refit=False)
print(data)
df = pd.DataFrame(data.get_results_dict())
print("\nIteration Summary")
print(df)
fig = data.plot()
df.to_csv("outputs/Sin1D_df.csv",index=False)
fig.savefig("outputs/Sin1D_fig.png",dpi=256,transparent=True,bbox_inches="tight")
mcispfgp = qp.PFGPCI(
integrand = qp.Sin1d(qp.DigitalNetB2(1,seed=17),k=3),
failure_threshold = 0,
failure_above_threshold=True,
abs_tol = 1e-2,
alpha = 1e-1,
n_init = 4,
init_samples = None,
batch_sampler = qp.PFSampleErrorDensityAR(verbose=True),
n_batch = 4,
n_limit = 20,
n_approx = 2**18,
gpytorch_prior_mean = gpytorch.means.ZeroMean(),
gpytorch_prior_cov = gpytorch.kernels.ScaleKernel(
gpytorch.kernels.MaternKernel(nu=2.5,
lengthscale_constraint = gpytorch.constraints.Interval(.01,.1)
),
outputscale_constraint = gpytorch.constraints.Interval(1e-3,10)
),
gpytorch_likelihood = gpytorch.likelihoods.GaussianLikelihood(noise_constraint = gpytorch.constraints.Interval(1e-12,1e-8)),
gpytorch_marginal_log_likelihood_func = lambda likelihood,gpyt_model: gpytorch.mlls.ExactMarginalLogLikelihood(likelihood,gpyt_model),
torch_optimizer_func = lambda gpyt_model: torch.optim.Adam(gpyt_model.parameters(),lr=0.1),
gpytorch_train_iter = 100,
gpytorch_use_gpu = False,
verbose = 50,
n_ref_approx = 2**22,
seed_ref_approx = None)
solution,data = mcispfgp.integrate(seed=7,refit=False)
print(data)
df = pd.DataFrame(data.get_results_dict())
print("\nIteration Summary")
print(df)
fig = data.plot()
df.to_csv("outputs/Sin1D_df.csv",index=False)
fig.savefig("outputs/Sin1D_fig.png",dpi=256,transparent=True,bbox_inches="tight")
reference approximation with d=1: 0.4999997615814209
batch 0
gpytorch model fitting
iter 50 of 100
likelihood.noise_covar.raw_noise.................. -8.37e-02
covar_module.raw_outputscale...................... -3.03e+00
covar_module.base_kernel.raw_lengthscale.......... 5.02e+00
iter 100 of 100
likelihood.noise_covar.raw_noise.................. -9.23e-02
covar_module.raw_outputscale...................... -2.96e+00
covar_module.base_kernel.raw_lengthscale.......... 6.27e+00
batch 1
AR sampling with efficiency 2.8e-01, expect 14 draws: 12, 15, 18, 21, 24,
batch 2
AR sampling with efficiency 1.7e-01, expect 23 draws: 16, 24, 28,
batch 3
AR sampling with efficiency 9.4e-02, expect 42 draws: 28,
batch 4
AR sampling with efficiency 6.0e-02, expect 66 draws: 48, 72,
PFGPCIData (Data)
solution 0.501
error_bound 0.111
bound_low 0.390
bound_high 0.611
n_total 20
time_integrate 0.831
PFGPCI (AbstractStoppingCriterion)
abs_tol 0.010
n_init 2^(2)
n_limit 20
n_batch 2^(2)
Sin1d (AbstractIntegrand)
Uniform (AbstractTrueMeasure)
lower_bound 0
upper_bound 18.850
DigitalNetB2 (AbstractLDDiscreteDistribution)
d 1
replications 1
randomize LMS_DS
gen_mats_source joe_kuo.6.21201.txt
order NATURAL
t 63
alpha 1
n_limit 2^(32)
entropy 17
Iteration Summary
iter n_sum n_batch error_bounds ci_low ci_high solutions solutions_ref error_ref in_ci
0 0 4 4 5.4e-01 0.0e+00 1.0e+00 4.6e-01 5.0e-01 3.9e-02 True
1 1 8 4 5.0e-01 0.0e+00 1.0e+00 5.0e-01 5.0e-01 4.2e-03 True
2 2 12 4 4.7e-01 3.5e-02 9.8e-01 5.1e-01 5.0e-01 6.4e-03 True
3 3 16 4 3.0e-01 2.1e-01 8.1e-01 5.1e-01 5.0e-01 9.4e-03 True
4 4 20 4 1.1e-01 3.9e-01 6.1e-01 5.0e-01 5.0e-01 5.2e-04 True
Multimodal 2d Problem¶
In [10]:
Copied!
mcispfgp = qp.PFGPCI(
integrand = qp.Multimodal2d(qp.DigitalNetB2(2,seed=17)),
failure_threshold = 0,
failure_above_threshold=True,
abs_tol = 1e-2,
alpha = 1e-1,
n_init = 64,
init_samples = None,
batch_sampler = qp.PFSampleErrorDensityAR(verbose=True),
n_batch = 16,
n_limit = 128,
n_approx = 2**18,
gpytorch_prior_mean = gpytorch.means.ZeroMean(),
gpytorch_prior_cov = gpytorch.kernels.ScaleKernel(
gpytorch.kernels.MaternKernel(nu=1.5,
lengthscale_constraint = gpytorch.constraints.Interval(.1,1)
),
outputscale_constraint = gpytorch.constraints.Interval(1e-3,.5)
),
gpytorch_likelihood = gpytorch.likelihoods.GaussianLikelihood(noise_constraint = gpytorch.constraints.Interval(1e-12,1e-8)),
gpytorch_marginal_log_likelihood_func = lambda likelihood,gpyt_model: gpytorch.mlls.ExactMarginalLogLikelihood(likelihood,gpyt_model),
torch_optimizer_func = lambda gpyt_model: torch.optim.Adam(gpyt_model.parameters(),lr=0.1),
gpytorch_train_iter = 800,
gpytorch_use_gpu = gpytorch_use_gpu,
verbose = 200,
n_ref_approx = 2**22,
seed_ref_approx = None)
solution,data = mcispfgp.integrate(seed=7,refit=False)
print(data)
df = pd.DataFrame(data.get_results_dict())
print("\nIteration Summary")
print(df)
fig = data.plot()
df.to_csv("outputs/Multimodal2D_df.csv",index=False)
fig.savefig("outputs/Multimodal2D_fig.png",dpi=256,transparent=True,bbox_inches="tight")
mcispfgp = qp.PFGPCI(
integrand = qp.Multimodal2d(qp.DigitalNetB2(2,seed=17)),
failure_threshold = 0,
failure_above_threshold=True,
abs_tol = 1e-2,
alpha = 1e-1,
n_init = 64,
init_samples = None,
batch_sampler = qp.PFSampleErrorDensityAR(verbose=True),
n_batch = 16,
n_limit = 128,
n_approx = 2**18,
gpytorch_prior_mean = gpytorch.means.ZeroMean(),
gpytorch_prior_cov = gpytorch.kernels.ScaleKernel(
gpytorch.kernels.MaternKernel(nu=1.5,
lengthscale_constraint = gpytorch.constraints.Interval(.1,1)
),
outputscale_constraint = gpytorch.constraints.Interval(1e-3,.5)
),
gpytorch_likelihood = gpytorch.likelihoods.GaussianLikelihood(noise_constraint = gpytorch.constraints.Interval(1e-12,1e-8)),
gpytorch_marginal_log_likelihood_func = lambda likelihood,gpyt_model: gpytorch.mlls.ExactMarginalLogLikelihood(likelihood,gpyt_model),
torch_optimizer_func = lambda gpyt_model: torch.optim.Adam(gpyt_model.parameters(),lr=0.1),
gpytorch_train_iter = 800,
gpytorch_use_gpu = gpytorch_use_gpu,
verbose = 200,
n_ref_approx = 2**22,
seed_ref_approx = None)
solution,data = mcispfgp.integrate(seed=7,refit=False)
print(data)
df = pd.DataFrame(data.get_results_dict())
print("\nIteration Summary")
print(df)
fig = data.plot()
df.to_csv("outputs/Multimodal2D_df.csv",index=False)
fig.savefig("outputs/Multimodal2D_fig.png",dpi=256,transparent=True,bbox_inches="tight")
reference approximation with d=2: 0.3020758628845215
batch 0
gpytorch model fitting
iter 200 of 800
likelihood.noise_covar.raw_noise.................. 1.45e+00
covar_module.raw_outputscale...................... 2.79e+00
covar_module.base_kernel.raw_lengthscale.......... -3.02e+00
iter 400 of 800
likelihood.noise_covar.raw_noise.................. 1.48e+00
covar_module.raw_outputscale...................... 3.54e+00
covar_module.base_kernel.raw_lengthscale.......... -3.33e+00
iter 600 of 800
likelihood.noise_covar.raw_noise.................. 1.52e+00
covar_module.raw_outputscale...................... 4.07e+00
covar_module.base_kernel.raw_lengthscale.......... -3.46e+00
iter 800 of 800
likelihood.noise_covar.raw_noise.................. 1.56e+00
covar_module.raw_outputscale...................... 4.48e+00
covar_module.base_kernel.raw_lengthscale.......... -3.51e+00
batch 1
AR sampling with efficiency 4.9e-02, expect 323 draws: 224, 364, 392, 406,
batch 2
AR sampling with efficiency 3.3e-02, expect 485 draws: 336, 609, 735, 798, 819, 840, 861, 882,
batch 3
AR sampling with efficiency 2.1e-02, expect 764 draws: 528, 891, 1089,
batch 4
AR sampling with efficiency 2.3e-02, expect 692 draws: 480, 660, 750, 810,
PFGPCIData (Data)
solution 0.300
error_bound 0.090
bound_low 0.210
bound_high 0.390
n_total 2^(7)
time_integrate 6.875
PFGPCI (AbstractStoppingCriterion)
abs_tol 0.010
n_init 2^(6)
n_limit 2^(7)
n_batch 2^(4)
Multimodal2d (AbstractIntegrand)
Uniform (AbstractTrueMeasure)
lower_bound [-4 -3]
upper_bound [7 8]
DigitalNetB2 (AbstractLDDiscreteDistribution)
d 2^(1)
replications 1
randomize LMS_DS
gen_mats_source joe_kuo.6.21201.txt
order NATURAL
t 63
alpha 1
n_limit 2^(32)
entropy 17
Iteration Summary
iter n_sum n_batch error_bounds ci_low ci_high solutions solutions_ref error_ref in_ci
0 0 64 64 2.5e-01 2.7e-02 5.2e-01 2.7e-01 3.0e-01 2.8e-02 True
1 1 80 16 1.6e-01 1.2e-01 4.5e-01 2.9e-01 3.0e-01 1.5e-02 True
2 2 96 16 1.0e-01 1.8e-01 3.9e-01 2.9e-01 3.0e-01 1.3e-02 True
3 3 112 16 1.2e-01 1.8e-01 4.1e-01 3.0e-01 3.0e-01 6.1e-03 True
4 4 128 16 9.0e-02 2.1e-01 3.9e-01 3.0e-01 3.0e-01 2.4e-03 True
Four Branch 2d Problem¶
In [11]:
Copied!
mcispfgp = qp.PFGPCI(
integrand = qp.FourBranch2d(qp.DigitalNetB2(2,seed=17)),
failure_threshold = 0,
failure_above_threshold=True,
abs_tol = 1e-2,
alpha = 1e-1,
n_init = 64,
init_samples = None,
batch_sampler = qp.PFSampleErrorDensityAR(verbose=True),
n_batch = 12,
n_limit = 200,
n_approx = 2**18,
gpytorch_prior_mean = gpytorch.means.ZeroMean(),
gpytorch_prior_cov = gpytorch.kernels.ScaleKernel(
gpytorch.kernels.MaternKernel(nu=1.5,
lengthscale_constraint = gpytorch.constraints.Interval(.5,1)
),
outputscale_constraint = gpytorch.constraints.Interval(1e-8,.5)
),
gpytorch_likelihood = gpytorch.likelihoods.GaussianLikelihood(noise_constraint = gpytorch.constraints.Interval(1e-12,1e-8)),
gpytorch_marginal_log_likelihood_func = lambda likelihood,gpyt_model: gpytorch.mlls.ExactMarginalLogLikelihood(likelihood,gpyt_model),
torch_optimizer_func = lambda gpyt_model: torch.optim.Adam(gpyt_model.parameters(),lr=0.1),
gpytorch_train_iter = 800,
gpytorch_use_gpu = gpytorch_use_gpu,
verbose = 200,
n_ref_approx = 2**22,
seed_ref_approx = None)
solution,data = mcispfgp.integrate(seed=7,refit=False)
print(data)
df = pd.DataFrame(data.get_results_dict())
print("\nIteration Summary")
print(df)
fig = data.plot()
df.to_csv("outputs/FourBranch2D_df.csv",index=False)
fig.savefig("outputs/FourBranch2D_fig.png",dpi=256,transparent=True,bbox_inches="tight")
mcispfgp = qp.PFGPCI(
integrand = qp.FourBranch2d(qp.DigitalNetB2(2,seed=17)),
failure_threshold = 0,
failure_above_threshold=True,
abs_tol = 1e-2,
alpha = 1e-1,
n_init = 64,
init_samples = None,
batch_sampler = qp.PFSampleErrorDensityAR(verbose=True),
n_batch = 12,
n_limit = 200,
n_approx = 2**18,
gpytorch_prior_mean = gpytorch.means.ZeroMean(),
gpytorch_prior_cov = gpytorch.kernels.ScaleKernel(
gpytorch.kernels.MaternKernel(nu=1.5,
lengthscale_constraint = gpytorch.constraints.Interval(.5,1)
),
outputscale_constraint = gpytorch.constraints.Interval(1e-8,.5)
),
gpytorch_likelihood = gpytorch.likelihoods.GaussianLikelihood(noise_constraint = gpytorch.constraints.Interval(1e-12,1e-8)),
gpytorch_marginal_log_likelihood_func = lambda likelihood,gpyt_model: gpytorch.mlls.ExactMarginalLogLikelihood(likelihood,gpyt_model),
torch_optimizer_func = lambda gpyt_model: torch.optim.Adam(gpyt_model.parameters(),lr=0.1),
gpytorch_train_iter = 800,
gpytorch_use_gpu = gpytorch_use_gpu,
verbose = 200,
n_ref_approx = 2**22,
seed_ref_approx = None)
solution,data = mcispfgp.integrate(seed=7,refit=False)
print(data)
df = pd.DataFrame(data.get_results_dict())
print("\nIteration Summary")
print(df)
fig = data.plot()
df.to_csv("outputs/FourBranch2D_df.csv",index=False)
fig.savefig("outputs/FourBranch2D_fig.png",dpi=256,transparent=True,bbox_inches="tight")
reference approximation with d=2: 0.208723783493042
batch 0
gpytorch model fitting
iter 200 of 800
likelihood.noise_covar.raw_noise.................. 2.88e+00
covar_module.raw_outputscale...................... 3.85e+00
covar_module.base_kernel.raw_lengthscale.......... -4.50e+00
iter 400 of 800
likelihood.noise_covar.raw_noise.................. 3.63e+00
covar_module.raw_outputscale...................... 4.75e+00
covar_module.base_kernel.raw_lengthscale.......... -5.44e+00
iter 600 of 800
likelihood.noise_covar.raw_noise.................. 4.16e+00
covar_module.raw_outputscale...................... 5.33e+00
covar_module.base_kernel.raw_lengthscale.......... -6.04e+00
iter 800 of 800
likelihood.noise_covar.raw_noise.................. 4.58e+00
covar_module.raw_outputscale...................... 5.77e+00
covar_module.base_kernel.raw_lengthscale.......... -6.48e+00
batch 1
AR sampling with efficiency 8.2e-03, expect 1470 draws: 1020, 1360, 1530, 1615,
batch 2
AR sampling with efficiency 5.1e-03, expect 2344 draws: 1632, 2312, 2856, 3400, 3944, 4080, 4216, 4352, 4488, 4624,
batch 3
AR sampling with efficiency 3.5e-03, expect 3474 draws: 2412, 3216, 3618, 3819, 4020,
batch 4
AR sampling with efficiency 2.5e-03, expect 4789 draws: 3324, 5540, 6925,
batch 5
AR sampling with efficiency 2.1e-03, expect 5641 draws: 3912, 5868, 6194, 6520, 6846,
PFGPCIData (Data)
solution 0.209
error_bound 0.008
bound_low 0.202
bound_high 0.217
n_total 124
time_integrate 6.893
PFGPCI (AbstractStoppingCriterion)
abs_tol 0.010
n_init 2^(6)
n_limit 200
n_batch 12
FourBranch2d (AbstractIntegrand)
Uniform (AbstractTrueMeasure)
lower_bound -8
upper_bound 2^(3)
DigitalNetB2 (AbstractLDDiscreteDistribution)
d 2^(1)
replications 1
randomize LMS_DS
gen_mats_source joe_kuo.6.21201.txt
order NATURAL
t 63
alpha 1
n_limit 2^(32)
entropy 17
Iteration Summary
iter n_sum n_batch error_bounds ci_low ci_high solutions solutions_ref error_ref in_ci
0 0 64 64 4.1e-02 1.7e-01 2.5e-01 2.1e-01 2.1e-01 3.0e-03 True
1 1 76 12 2.6e-02 1.9e-01 2.4e-01 2.1e-01 2.1e-01 5.4e-03 True
2 2 88 12 1.7e-02 1.9e-01 2.3e-01 2.1e-01 2.1e-01 1.9e-03 True
3 3 100 12 1.3e-02 2.0e-01 2.2e-01 2.1e-01 2.1e-01 1.0e-03 True
4 4 112 12 1.1e-02 2.0e-01 2.2e-01 2.1e-01 2.1e-01 8.5e-05 True
5 5 124 12 7.6e-03 2.0e-01 2.2e-01 2.1e-01 2.1e-01 5.5e-04 True
Ishigami 3d Problem¶
In [ ]:
Copied!
mcispfgp = qp.PFGPCI(
integrand = qp.Ishigami(qp.DigitalNetB2(3,seed=17)),
failure_threshold = 0,
failure_above_threshold=False,
abs_tol = 1e-2,
alpha = 1e-1,
n_init = 128,
init_samples = None,
batch_sampler = qp.PFSampleErrorDensityAR(verbose=True),
n_batch = 16,
n_limit = 256,
n_approx = 2**18,
gpytorch_prior_mean = gpytorch.means.ZeroMean(),
gpytorch_prior_cov = gpytorch.kernels.ScaleKernel(
gpytorch.kernels.MaternKernel(nu=2.5,
lengthscale_constraint = gpytorch.constraints.Interval(.5,1)
),
outputscale_constraint = gpytorch.constraints.Interval(1e-8,.5)
),
gpytorch_likelihood = gpytorch.likelihoods.GaussianLikelihood(noise_constraint = gpytorch.constraints.Interval(1e-12,1e-8)),
gpytorch_marginal_log_likelihood_func = lambda likelihood,gpyt_model: gpytorch.mlls.ExactMarginalLogLikelihood(likelihood,gpyt_model),
torch_optimizer_func = lambda gpyt_model: torch.optim.Adam(gpyt_model.parameters(),lr=0.1),
gpytorch_train_iter = 800,
gpytorch_use_gpu = gpytorch_use_gpu,
verbose = 200,
n_ref_approx = 2**22,
seed_ref_approx = None)
solution,data = mcispfgp.integrate(seed=7,refit=False)
print(data)
df = pd.DataFrame(data.get_results_dict())
print("\nIteration Summary")
print(df)
fig = data.plot()
fig.tight_layout()
df.to_csv("outputs/Ishigami3D_df.csv",index=False)
fig.savefig("outputs/Ishigami3D_fig.png",dpi=256,transparent=True,bbox_inches="tight")
mcispfgp = qp.PFGPCI(
integrand = qp.Ishigami(qp.DigitalNetB2(3,seed=17)),
failure_threshold = 0,
failure_above_threshold=False,
abs_tol = 1e-2,
alpha = 1e-1,
n_init = 128,
init_samples = None,
batch_sampler = qp.PFSampleErrorDensityAR(verbose=True),
n_batch = 16,
n_limit = 256,
n_approx = 2**18,
gpytorch_prior_mean = gpytorch.means.ZeroMean(),
gpytorch_prior_cov = gpytorch.kernels.ScaleKernel(
gpytorch.kernels.MaternKernel(nu=2.5,
lengthscale_constraint = gpytorch.constraints.Interval(.5,1)
),
outputscale_constraint = gpytorch.constraints.Interval(1e-8,.5)
),
gpytorch_likelihood = gpytorch.likelihoods.GaussianLikelihood(noise_constraint = gpytorch.constraints.Interval(1e-12,1e-8)),
gpytorch_marginal_log_likelihood_func = lambda likelihood,gpyt_model: gpytorch.mlls.ExactMarginalLogLikelihood(likelihood,gpyt_model),
torch_optimizer_func = lambda gpyt_model: torch.optim.Adam(gpyt_model.parameters(),lr=0.1),
gpytorch_train_iter = 800,
gpytorch_use_gpu = gpytorch_use_gpu,
verbose = 200,
n_ref_approx = 2**22,
seed_ref_approx = None)
solution,data = mcispfgp.integrate(seed=7,refit=False)
print(data)
df = pd.DataFrame(data.get_results_dict())
print("\nIteration Summary")
print(df)
fig = data.plot()
fig.tight_layout()
df.to_csv("outputs/Ishigami3D_df.csv",index=False)
fig.savefig("outputs/Ishigami3D_fig.png",dpi=256,transparent=True,bbox_inches="tight")
reference approximation with d=3: 0.16236066818237305
batch 0
gpytorch model fitting
iter 200 of 800
likelihood.noise_covar.raw_noise.................. 2.21e+00
covar_module.raw_outputscale...................... 3.42e+00
covar_module.base_kernel.raw_lengthscale.......... -4.08e+00
iter 400 of 800
likelihood.noise_covar.raw_noise.................. 2.70e+00
covar_module.raw_outputscale...................... 4.25e+00
covar_module.base_kernel.raw_lengthscale.......... -4.98e+00
iter 600 of 800
likelihood.noise_covar.raw_noise.................. 3.12e+00
covar_module.raw_outputscale...................... 4.81e+00
covar_module.base_kernel.raw_lengthscale.......... -5.56e+00
iter 800 of 800
likelihood.noise_covar.raw_noise.................. 3.48e+00
covar_module.raw_outputscale...................... 5.23e+00
covar_module.base_kernel.raw_lengthscale.......... -5.99e+00
batch 1
AR sampling with efficiency 6.2e-03, expect 2589 draws: 1792, 2240, 2576,
batch 2
AR sampling with efficiency 5.1e-03, expect 3135 draws: 2176, 2992, 3672, 4080, 4352, 4624, 4896,
batch 3
AR sampling with efficiency 4.3e-03, expect 3700 draws: 2560, 3040,
batch 4
AR sampling with efficiency 3.8e-03, expect 4245 draws: 2944, 4600, 4968,
batch 5
AR sampling with efficiency 3.3e-03, expect 4897 draws: 3392, 4876, 5936, 6360, 6572,
batch 6
AR sampling with efficiency 2.9e-03, expect 5482 draws: 3808, 4284,
batch 7
AR sampling with efficiency 2.6e-03, expect 6246 draws: 4336, 5691,
batch 8
AR sampling with efficiency 2.3e-03, expect 6824 draws: 4736, 5328,
PFGPCIData (Data)
solution 0.162
error_bound 0.010
bound_low 0.152
bound_high 0.172
n_total 2^(8)
time_integrate 20.302
PFGPCI (AbstractStoppingCriterion)
abs_tol 0.010
n_init 2^(7)
n_limit 2^(8)
n_batch 2^(4)
Ishigami (AbstractIntegrand)
Uniform (AbstractTrueMeasure)
lower_bound -3.142
upper_bound 3.142
DigitalNetB2 (AbstractLDDiscreteDistribution)
d 3
replications 1
randomize LMS_DS
gen_mats_source joe_kuo.6.21201.txt
order NATURAL
t 63
alpha 1
n_limit 2^(32)
entropy 17
Iteration Summary
iter n_sum n_batch error_bounds ci_low ci_high solutions solutions_ref error_ref in_ci
0 0 128 128 3.1e-02 1.4e-01 2.0e-01 1.7e-01 1.6e-01 8.6e-03 True
1 1 144 16 2.6e-02 1.4e-01 2.0e-01 1.7e-01 1.6e-01 7.7e-03 True
2 2 160 16 2.2e-02 1.5e-01 1.9e-01 1.7e-01 1.6e-01 5.7e-03 True
3 3 176 16 1.9e-02 1.5e-01 1.8e-01 1.7e-01 1.6e-01 3.0e-03 True
4 4 192 16 1.6e-02 1.5e-01 1.8e-01 1.7e-01 1.6e-01 2.8e-03 True
5 5 208 16 1.5e-02 1.5e-01 1.8e-01 1.6e-01 1.6e-01 1.8e-03 True
6 6 224 16 1.3e-02 1.5e-01 1.8e-01 1.6e-01 1.6e-01 1.4e-03 True
7 7 240 16 1.2e-02 1.5e-01 1.7e-01 1.6e-01 1.6e-01 8.9e-04 True
8 8 256 16 1.0e-02 1.5e-01 1.7e-01 1.6e-01 1.6e-01 3.2e-04 True
Hartmann 6d Problem¶
In [ ]:
Copied!
mcispfgp = qp.PFGPCI(
integrand = qp.Hartmann6d(qp.DigitalNetB2(6,seed=17)),
failure_threshold = -2,
failure_above_threshold=False,
abs_tol = 2.5e-3,
alpha = 1e-1,
n_init = 512,
init_samples = None,
batch_sampler = qp.PFSampleErrorDensityAR(verbose=True),
n_batch = 64,
n_limit = 2500,
n_approx = 2**18,
gpytorch_prior_mean = gpytorch.means.ZeroMean(),
gpytorch_prior_cov = gpytorch.kernels.ScaleKernel(gpytorch.kernels.MaternKernel(nu=2.5)),
gpytorch_likelihood = gpytorch.likelihoods.GaussianLikelihood(noise_constraint = gpytorch.constraints.Interval(1e-12,1e-8)),
gpytorch_marginal_log_likelihood_func = lambda likelihood,gpyt_model: gpytorch.mlls.ExactMarginalLogLikelihood(likelihood,gpyt_model),
torch_optimizer_func = lambda gpyt_model: torch.optim.Adam(gpyt_model.parameters(),lr=0.1),
gpytorch_train_iter = 150,
gpytorch_use_gpu = gpytorch_use_gpu,
verbose = 50,
n_ref_approx = 2**23,
seed_ref_approx = None)
solution,data = mcispfgp.integrate(seed=7,refit=False)
print(data)
df = pd.DataFrame(data.get_results_dict())
print("\nIteration Summary")
print(df)
fig = data.plot()
fig.tight_layout()
df.to_csv("outputs/Hartmann6D_df.csv",index=False)
fig.savefig("outputs/Hartmann6D_fig.png",dpi=256,transparent=True,bbox_inches="tight")
mcispfgp = qp.PFGPCI(
integrand = qp.Hartmann6d(qp.DigitalNetB2(6,seed=17)),
failure_threshold = -2,
failure_above_threshold=False,
abs_tol = 2.5e-3,
alpha = 1e-1,
n_init = 512,
init_samples = None,
batch_sampler = qp.PFSampleErrorDensityAR(verbose=True),
n_batch = 64,
n_limit = 2500,
n_approx = 2**18,
gpytorch_prior_mean = gpytorch.means.ZeroMean(),
gpytorch_prior_cov = gpytorch.kernels.ScaleKernel(gpytorch.kernels.MaternKernel(nu=2.5)),
gpytorch_likelihood = gpytorch.likelihoods.GaussianLikelihood(noise_constraint = gpytorch.constraints.Interval(1e-12,1e-8)),
gpytorch_marginal_log_likelihood_func = lambda likelihood,gpyt_model: gpytorch.mlls.ExactMarginalLogLikelihood(likelihood,gpyt_model),
torch_optimizer_func = lambda gpyt_model: torch.optim.Adam(gpyt_model.parameters(),lr=0.1),
gpytorch_train_iter = 150,
gpytorch_use_gpu = gpytorch_use_gpu,
verbose = 50,
n_ref_approx = 2**23,
seed_ref_approx = None)
solution,data = mcispfgp.integrate(seed=7,refit=False)
print(data)
df = pd.DataFrame(data.get_results_dict())
print("\nIteration Summary")
print(df)
fig = data.plot()
fig.tight_layout()
df.to_csv("outputs/Hartmann6D_df.csv",index=False)
fig.savefig("outputs/Hartmann6D_fig.png",dpi=256,transparent=True,bbox_inches="tight")
reference approximation with d=6: 0.007369875907897949
batch 0
gpytorch model fitting
iter 50 of 150
likelihood.noise_covar.raw_noise.................. 1.28e+00
covar_module.raw_outputscale...................... 5.62e-01
covar_module.base_kernel.raw_lengthscale.......... 1.90e-01
iter 100 of 150
likelihood.noise_covar.raw_noise.................. 2.28e+00
covar_module.raw_outputscale...................... 5.14e-01
covar_module.base_kernel.raw_lengthscale.......... 1.83e-01
iter 150 of 150
likelihood.noise_covar.raw_noise.................. 2.84e+00
covar_module.raw_outputscale...................... 5.12e-01
covar_module.base_kernel.raw_lengthscale.......... 1.83e-01
batch 1
AR sampling with efficiency 2.5e-03, expect 25281 draws: 17536, 19180,
batch 2
AR sampling with efficiency 2.5e-03, expect 25500 draws: 17664, 25944, 27600,
batch 3
AR sampling with efficiency 2.0e-03, expect 31766 draws: 22016, 30272, 31992, 33368, 34056, 34744, 35088, 35432, 35776, 36120, 36464, 36808,
batch 4
AR sampling with efficiency 1.7e-03, expect 36697 draws: 25472, 31840, 34626, 35024, 35422,
batch 5
AR sampling with efficiency 1.5e-03, expect 42097 draws: 29184, 42408, 46056,
batch 6
AR sampling with efficiency 1.3e-03, expect 50094 draws: 34752, 45612, 46155, 46698,
batch 7
AR sampling with efficiency 1.1e-03, expect 55935 draws: 38784, 49086, 53328,
batch 8
AR sampling with efficiency 1.0e-03, expect 63192 draws: 43840, 56855,
batch 9
AR sampling with efficiency 9.4e-04, expect 68419 draws: 47424, 57798, 63726, 65949, 68172,
batch 10
AR sampling with efficiency 8.8e-04, expect 72820 draws: 50496, 65487, 67854, 69432, 71010, 71799, 72588,
batch 11
AR sampling with efficiency 8.1e-04, expect 79266 draws: 54976, 65284, 69579, 70438, 71297,
batch 12
AR sampling with efficiency 7.6e-04, expect 84428 draws: 58560, 61305, 63135, 64050, 64965,
batch 13
AR sampling with efficiency 7.0e-04, expect 91332 draws: 63296, 74175, 75164, 76153, 77142, 78131,
batch 14
AR sampling with efficiency 6.7e-04, expect 95110 draws: 65920, 79310, 83430,
batch 15
AR sampling with efficiency 6.4e-04, expect 99354 draws: 68864, 88232, 90384, 92536, 94688,
batch 16
AR sampling with efficiency 6.2e-04, expect 103811 draws: 71936, 104532, 115772, 116896, 118020,
batch 17
AR sampling with efficiency 6.0e-04, expect 106125 draws: 73600, 83950, 86250,
batch 18
AR sampling with efficiency 5.7e-04, expect 111408 draws: 77248, 90525, 95353,
batch 19
AR sampling with efficiency 5.5e-04, expect 116498 draws: 80768, 99698, 112318, 116104, 118628,
batch 20
AR sampling with efficiency 5.3e-04, expect 120838 draws: 83776, 102102, 111265, 112574,
batch 21
AR sampling with efficiency 5.1e-04, expect 124745 draws: 86464, 114835, 131047, 133749, 135100, 136451,
PFGPCIData (Data)
solution 0.007
error_bound 0.002
bound_low 0.005
bound_high 0.010
n_total 1856
time_integrate 414.202
PFGPCI (AbstractStoppingCriterion)
abs_tol 0.003
n_init 2^(9)
n_limit 2500
n_batch 2^(6)
Hartmann6d (AbstractIntegrand)
Uniform (AbstractTrueMeasure)
lower_bound 0
upper_bound 1
DigitalNetB2 (AbstractLDDiscreteDistribution)
d 6
replications 1
randomize LMS_DS
gen_mats_source joe_kuo.6.21201.txt
order NATURAL
t 63
alpha 1
n_limit 2^(32)
entropy 17
Iteration Summary
iter n_sum n_batch error_bounds ci_low ci_high solutions solutions_ref error_ref in_ci
0 0 512 512 1.3e-02 0.0e+00 1.6e-02 3.3e-03 7.4e-03 4.1e-03 True
1 1 576 64 1.3e-02 0.0e+00 1.9e-02 6.9e-03 7.4e-03 5.0e-04 True
2 2 640 64 1.0e-02 0.0e+00 1.7e-02 7.2e-03 7.4e-03 1.4e-04 True
3 3 704 64 8.7e-03 0.0e+00 1.6e-02 7.4e-03 7.4e-03 7.7e-06 True
4 4 768 64 7.6e-03 0.0e+00 1.5e-02 7.4e-03 7.4e-03 1.2e-05 True
5 5 832 64 6.4e-03 1.0e-03 1.4e-02 7.4e-03 7.4e-03 5.7e-05 True
6 6 896 64 5.7e-03 1.7e-03 1.3e-02 7.5e-03 7.4e-03 9.5e-05 True
7 7 960 64 5.1e-03 2.4e-03 1.3e-02 7.5e-03 7.4e-03 9.5e-05 True
8 8 1024 64 4.7e-03 2.7e-03 1.2e-02 7.4e-03 7.4e-03 3.8e-05 True
9 9 1088 64 4.4e-03 3.0e-03 1.2e-02 7.4e-03 7.4e-03 3.8e-05 True
10 10 1152 64 4.0e-03 3.4e-03 1.1e-02 7.4e-03 7.4e-03 1.9e-05 True
11 11 1216 64 3.8e-03 3.6e-03 1.1e-02 7.4e-03 7.4e-03 3.4e-05 True
12 12 1280 64 3.5e-03 3.9e-03 1.1e-02 7.4e-03 7.4e-03 3.1e-05 True
13 13 1344 64 3.4e-03 4.0e-03 1.1e-02 7.4e-03 7.4e-03 3.4e-05 True
14 14 1408 64 3.2e-03 4.2e-03 1.1e-02 7.4e-03 7.4e-03 3.1e-05 True
15 15 1472 64 3.1e-03 4.3e-03 1.0e-02 7.4e-03 7.4e-03 1.5e-05 True
16 16 1536 64 3.0e-03 4.4e-03 1.0e-02 7.4e-03 7.4e-03 2.3e-05 True
17 17 1600 64 2.9e-03 4.5e-03 1.0e-02 7.4e-03 7.4e-03 3.4e-05 True
18 18 1664 64 2.7e-03 4.6e-03 1.0e-02 7.4e-03 7.4e-03 1.5e-05 True
19 19 1728 64 2.6e-03 4.7e-03 1.0e-02 7.4e-03 7.4e-03 1.5e-05 True
20 20 1792 64 2.6e-03 4.8e-03 9.9e-03 7.4e-03 7.4e-03 3.7e-06 True
21 21 1856 64 2.5e-03 4.9e-03 9.9e-03 7.4e-03 7.4e-03 3.7e-06 True
Tsunami¶
In [17]:
Copied!
import umbridge
import umbridge
In [18]:
Copied!
!docker run --name tsunami -d -it -p 4242:4242 linusseelinger/model-exahype-tsunami:latest # https://um-bridge-benchmarks.readthedocs.io/en/docs/models/exahype-tsunami.html
!docker run --name tsunami -d -it -p 4242:4242 linusseelinger/model-exahype-tsunami:latest # https://um-bridge-benchmarks.readthedocs.io/en/docs/models/exahype-tsunami.html
6aaec8dbceffcdae00e17362c385684ca72ef5e5308701505d9e3c135c9447c2
In [19]:
Copied!
ld_sampler = qp.DigitalNetB2(2,seed=7)
origin_distrib = qp.Uniform(ld_sampler,lower_bound=[-239,-339],upper_bound=[739,339])
umbridge_tsu_model = umbridge.HTTPModel('http://localhost:4242','forward')
umbridge_config = {'d': origin_distrib.d, 'level':1}
qmcpy_umbridge_tsu_model = qp.UMBridgeWrapper(origin_distrib,umbridge_tsu_model,umbridge_config,parallel=True)
ld_sampler = qp.DigitalNetB2(2,seed=7)
origin_distrib = qp.Uniform(ld_sampler,lower_bound=[-239,-339],upper_bound=[739,339])
umbridge_tsu_model = umbridge.HTTPModel('http://localhost:4242','forward')
umbridge_config = {'d': origin_distrib.d, 'level':1}
qmcpy_umbridge_tsu_model = qp.UMBridgeWrapper(origin_distrib,umbridge_tsu_model,umbridge_config,parallel=True)
In [28]:
Copied!
class TsunamiMaxWaveHeightBouy1(qp.Integrand):
# https://um-bridge-benchmarks.readthedocs.io/en/docs/models/exahype-tsunami.html#
def __init__(self, qmcpy_umbridge_tsu_model):
self.tsu_model = qmcpy_umbridge_tsu_model
self.true_measure = self.sampler = self.tsu_model.true_measure
assert self.tsu_model.d == 2
super(TsunamiMaxWaveHeightBouy1,self).__init__(
dimension_indv = (),
dimension_comb = (),
parallel = False,
threadpool = False)
def g(self, t):
assert t.ndim==2 and t.shape[1]==self.d
y = self.tsu_model.g(t)
y_buoy1_height = 1000*y[1] # max wave height at buoy (meters SSHA)
height_above_thresh = y_buoy1_height
return height_above_thresh
tmwhb1 = TsunamiMaxWaveHeightBouy1(qmcpy_umbridge_tsu_model)
class TsunamiMaxWaveHeightBouy1(qp.Integrand):
# https://um-bridge-benchmarks.readthedocs.io/en/docs/models/exahype-tsunami.html#
def __init__(self, qmcpy_umbridge_tsu_model):
self.tsu_model = qmcpy_umbridge_tsu_model
self.true_measure = self.sampler = self.tsu_model.true_measure
assert self.tsu_model.d == 2
super(TsunamiMaxWaveHeightBouy1,self).__init__(
dimension_indv = (),
dimension_comb = (),
parallel = False,
threadpool = False)
def g(self, t):
assert t.ndim==2 and t.shape[1]==self.d
y = self.tsu_model.g(t)
y_buoy1_height = 1000*y[1] # max wave height at buoy (meters SSHA)
height_above_thresh = y_buoy1_height
return height_above_thresh
tmwhb1 = TsunamiMaxWaveHeightBouy1(qmcpy_umbridge_tsu_model)
In [29]:
Copied!
mcispfgp = qp.PFGPCI(
integrand = tmwhb1,
failure_threshold = 3,
failure_above_threshold=True,
abs_tol = 1e-3,
alpha = 1e-1,
n_init = 64,
init_samples = None,
batch_sampler = qp.PFSampleErrorDensityAR(verbose=True),
n_batch = 8,
n_limit = 128,
n_approx = 2**20,
gpytorch_prior_mean = gpytorch.means.ConstantMean(),
gpytorch_prior_cov = gpytorch.kernels.ScaleKernel(
gpytorch.kernels.MaternKernel(nu=2.5,
lengthscale_constraint = gpytorch.constraints.Interval(.1,1)),
outputscale_constraint = gpytorch.constraints.Interval(1e-8,1)),
gpytorch_likelihood = gpytorch.likelihoods.GaussianLikelihood(noise_constraint = gpytorch.constraints.Interval(1e-12,1e-10)),
gpytorch_marginal_log_likelihood_func = lambda likelihood,gpyt_model: gpytorch.mlls.ExactMarginalLogLikelihood(likelihood,gpyt_model),
torch_optimizer_func = lambda gpyt_model: torch.optim.Adam(gpyt_model.parameters(),lr=0.1),
gpytorch_train_iter = 1000,
gpytorch_use_gpu = gpytorch_use_gpu,
verbose = 1000,
n_ref_approx = 0)
solution,data = mcispfgp.integrate(seed=11,refit=False)
print(data)
df = pd.DataFrame(data.get_results_dict())
print("\nIteration Summary")
print(df)
fig = data.plot()
df.to_csv("outputs/Tsunami2D_df.csv",index=False)
fig.savefig("outputs/Tsunami2D_fig.png",dpi=256,transparent=True,bbox_inches="tight")
mcispfgp = qp.PFGPCI(
integrand = tmwhb1,
failure_threshold = 3,
failure_above_threshold=True,
abs_tol = 1e-3,
alpha = 1e-1,
n_init = 64,
init_samples = None,
batch_sampler = qp.PFSampleErrorDensityAR(verbose=True),
n_batch = 8,
n_limit = 128,
n_approx = 2**20,
gpytorch_prior_mean = gpytorch.means.ConstantMean(),
gpytorch_prior_cov = gpytorch.kernels.ScaleKernel(
gpytorch.kernels.MaternKernel(nu=2.5,
lengthscale_constraint = gpytorch.constraints.Interval(.1,1)),
outputscale_constraint = gpytorch.constraints.Interval(1e-8,1)),
gpytorch_likelihood = gpytorch.likelihoods.GaussianLikelihood(noise_constraint = gpytorch.constraints.Interval(1e-12,1e-10)),
gpytorch_marginal_log_likelihood_func = lambda likelihood,gpyt_model: gpytorch.mlls.ExactMarginalLogLikelihood(likelihood,gpyt_model),
torch_optimizer_func = lambda gpyt_model: torch.optim.Adam(gpyt_model.parameters(),lr=0.1),
gpytorch_train_iter = 1000,
gpytorch_use_gpu = gpytorch_use_gpu,
verbose = 1000,
n_ref_approx = 0)
solution,data = mcispfgp.integrate(seed=11,refit=False)
print(data)
df = pd.DataFrame(data.get_results_dict())
print("\nIteration Summary")
print(df)
fig = data.plot()
df.to_csv("outputs/Tsunami2D_df.csv",index=False)
fig.savefig("outputs/Tsunami2D_fig.png",dpi=256,transparent=True,bbox_inches="tight")
batch 0
gpytorch model fitting
iter 1000 of 1000
likelihood.noise_covar.raw_noise.................. 1.17e+00
mean_module.raw_constant.......................... -2.25e+00
covar_module.raw_outputscale...................... 1.99e+00
covar_module.base_kernel.raw_lengthscale.......... -3.02e+00
batch 1
AR sampling with efficiency 1.9e-02, expect 426 draws: 296, 444, 555,
batch 2
AR sampling with efficiency 5.5e-03, expect 1450 draws: 1008, 1512, 1638,
batch 3
AR sampling with efficiency 1.1e-02, expect 757 draws: 528, 924, 990,
batch 4
AR sampling with efficiency 3.2e-03, expect 2489 draws: 1728, 3024,
batch 5
AR sampling with efficiency 2.5e-03, expect 3227 draws: 2240, 2800, 3360, 3640,
batch 6
AR sampling with efficiency 1.4e-03, expect 5698 draws: 3952,
batch 7
AR sampling with efficiency 1.7e-03, expect 4841 draws: 3360, 3780,
batch 8
AR sampling with efficiency 1.6e-03, expect 4905 draws: 3400, 4675, 5100,
PFGPCIData (Data)
solution 0.057
error_bound 0.005
bound_low 0.053
bound_high 0.062
n_total 2^(7)
time_integrate 2099.126
PFGPCI (AbstractStoppingCriterion)
abs_tol 0.001
n_init 2^(6)
n_limit 2^(7)
n_batch 2^(3)
TsunamiMaxWaveHeightBouy1 (AbstractIntegrand)
Uniform (AbstractTrueMeasure)
lower_bound [-239 -339]
upper_bound [739 339]
DigitalNetB2 (AbstractLDDiscreteDistribution)
d 2^(1)
replications 1
randomize LMS_DS
gen_mats_source joe_kuo.6.21201.txt
order NATURAL
t 63
alpha 1
n_limit 2^(32)
entropy 7
Iteration Summary
iter n_sum n_batch error_bounds ci_low ci_high solutions
0 0 64 64 9.4e-02 0.0e+00 1.5e-01 5.3e-02
1 1 72 8 2.8e-02 3.5e-02 9.0e-02 6.2e-02
2 2 80 8 5.3e-02 1.9e-02 1.2e-01 7.1e-02
3 3 88 8 1.6e-02 5.0e-02 8.2e-02 6.6e-02
4 4 96 8 1.2e-02 4.9e-02 7.4e-02 6.2e-02
5 5 104 8 7.0e-03 5.4e-02 6.8e-02 6.1e-02
6 6 112 8 8.3e-03 5.1e-02 6.8e-02 5.9e-02
7 7 120 8 8.2e-03 5.2e-02 6.8e-02 6.0e-02
8 8 128 8 4.5e-03 5.3e-02 6.2e-02 5.7e-02
In [30]:
Copied!
!docker rm -f tsunami
!docker rm -f tsunami
python(15698) MallocStackLogging: can't turn off malloc stack logging because it was not enabled.
tsunami
In [ ]:
Copied!