def main(): parser = argparse.ArgumentParser() parser.add_argument('propNO', nargs='?', type=int, default=1) parser.add_argument('num_samp', nargs='?', type=int, default=10000) parser.add_argument('num_burnin', nargs='?', type=int, default=10000) parser.add_argument('step_sizes', nargs='?', type=float, default=[.1,.2]) # SNR10: [.5,1.]; SNR100: [.1,.2] # parser.add_argument('step_nums', nargs='?', type=int, default=[1]) parser.add_argument('props', nargs='?', type=str, default=['LI_prior', 'LI_Langevin']) args = parser.parse_args() ## define the inverse elliptic problem ## # parameters for PDE model nx=40;ny=40; # parameters for prior model sigma=1.25;s=0.0625 # parameters for misfit model SNR=100 # 100 # define the inverse problem elliptic=Elliptic(nx=nx,ny=ny,SNR=SNR,sigma=sigma,s=s) # initialization # unknown=elliptic.prior.sample(whiten=True) unknown=elliptic.prior.gen_vector() # unknown=df.Function(elliptic.pde.V) # MAP_file=os.path.join(os.getcwd(),'result/MAP_SNR'+str(SNR)+'.h5') # if os.path.isfile(MAP_file): # f=df.HDF5File(elliptic.pde.mpi_comm,MAP_file,"r") # f.read(unknown,'parameter') # f.close() # else: # unknown=elliptic.get_MAP(SAVE=True) # unknown=elliptic.prior.u2v(unknown.vector()) # run MCMC to generate samples print("Preparing DILI sampler using {} proposal with step sizes {} for LIS and CS resp....".format(args.props[args.propNO],args.step_sizes,)) dili=DILI(unknown,elliptic,args.step_sizes,proposal=args.props[args.propNO],n_lag=100,n_max=100) dili.adaptive_MCMC(args.num_samp,args.num_burnin,threshold_l=1e-3,threshold_g=1e-3) # append PDE information including the count of solving filename_=os.path.join(dili.savepath,dili.filename+'.pckl') filename=os.path.join(dili.savepath,'Elliptic_'+dili.filename+'.pckl') # change filename os.rename(filename_, filename) f=open(filename,'ab') soln_count=elliptic.pde.soln_count pickle.dump([nx,ny,sigma,s,SNR,soln_count,args],f) f.close()
Shiwei Lan @ CalTech, 2017 """ import os,pickle import dolfin as df import numpy as np import matplotlib.pyplot as plt # import pandas as pd from itertools import cycle from Elliptic_dili import Elliptic # define the inverse problem np.random.seed(2017) SNR=100 elliptic = Elliptic(nx=40,ny=40,SNR=SNR) # algorithms algs=('pCN','infMALA','infHMC','DRinfmMALA','DRinfmHMC','DILI','aDRinfmMALA','aDRinfmHMC') alg_names=('pCN','$\infty$-MALA','$\infty$-HMC','DR-$\infty$-mMALA','DR-$\infty$-mHMC','DILI','aDR-$\infty$-mMALA','aDR-$\infty$-mHMC') num_algs=len(algs) found = np.zeros(num_algs,dtype=np.bool) # preparation for estimates folder = './analysis_f_SNR'+str(SNR) h5_names=[f for f in os.listdir(folder) if f.endswith('.h5')] num_samp=2000 pckl_names=[f for f in os.listdir(folder) if f.endswith('.pckl')] max_iter=1000 max_time=1500
def main(): parser = argparse.ArgumentParser() parser.add_argument('algNO', nargs='?', type=int, default=0) parser.add_argument('propNO', nargs='?', type=int, default=1) parser.add_argument('num_samp', nargs='?', type=int, default=10000) parser.add_argument('num_burnin', nargs='?', type=int, default=10000) parser.add_argument('step_sizes', nargs='?', type=float, default=[.25, .1]) # SNR10: [3.,1.5]; SNR100: [.22,.06] parser.add_argument('step_nums', nargs='?', type=int, default=[1, 4]) parser.add_argument('algs', nargs='?', type=str, default=('aDRinfmMALA', 'aDRinfmHMC')) parser.add_argument('props', nargs='?', type=str, default=('LI_prior', 'LI_Langevin')) args = parser.parse_args() ## define the inverse elliptic problem ## # parameters for PDE model nx = 40 ny = 40 # parameters for prior model sigma = 1.25 s = 0.0625 # parameters for misfit model SNR = 100 # 100 # define the inverse problem elliptic = Elliptic(nx=nx, ny=ny, SNR=SNR, sigma=sigma, s=s) # initialization # unknown=elliptic.prior.sample(whiten=True) unknown = elliptic.prior.gen_vector() # unknown=df.Function(elliptic.pde.V) # MAP_file=os.path.join(os.getcwd(),'result/MAP_SNR'+str(SNR)+'.h5') # if os.path.isfile(MAP_file): # f=df.HDF5File(elliptic.pde.mpi_comm,MAP_file,"r") # f.read(unknown,'parameter') # f.close() # else: # unknown=elliptic.get_MAP(SAVE=True) # unknown=elliptic.prior.u2v(unknown.vector()) # run MCMC to generate samples print( "Preparing %s sampler using %s proposal with step size %g for %d step(s)..." % (args.algs[args.algNO], args.props[args.propNO], args.step_sizes[args.algNO], args.step_nums[args.algNO])) # if args.algs[args.algNO] is 'aDRinfmMALA': # adrinfmGMC=aDRinfmMALA(unknown,elliptic,args.step_size,proposal=args.props[args.propNO]) # elif args.algs[args.algNO] is 'aDRinfmHMC': # adrinfmGMC=aDRinfmHMC(unknown,elliptic,args.step_size,args.step_nums[args.algNO],proposal=args.props[args.propNO]) # else: # print('Algorithm not available!') # raise adrinfmGMC = aDRinfGMC(unknown, elliptic, args.step_sizes[args.algNO], args.step_nums[args.algNO], args.algs[args.algNO], args.props[args.propNO], n_lag=100, n_max=100) adrinfmGMC.adaptive_MCMC(args.num_samp, args.num_burnin, threshold_l=1e-3, threshold_g=1e-3) # append PDE information including the count of solving filename_ = os.path.join(adrinfmGMC.savepath, adrinfmGMC.filename + '.pckl') filename = os.path.join(adrinfmGMC.savepath, 'Elliptic_' + adrinfmGMC.filename + '.pckl') # change filename os.rename(filename_, filename) f = open(filename, 'ab') soln_count = elliptic.pde.soln_count pickle.dump([nx, ny, sigma, s, SNR, soln_count, args], f) f.close()
def main(): parser = argparse.ArgumentParser() parser.add_argument('algNO', nargs='?', type=int, default=0) parser.add_argument('num_samp', nargs='?', type=int, default=2000) parser.add_argument('num_burnin', nargs='?', type=int, default=500) parser.add_argument( 'step_sizes', nargs='?', type=float, default=[.5, 2., 1.3, 6., 4.]) # SNR10: [.5,2,1.3,6.,4.];SNR100: [.01,.04,0.04,.52,.25] parser.add_argument('step_nums', nargs='?', type=int, default=[1, 1, 4, 1, 4, 1, 4]) parser.add_argument('algs', nargs='?', type=str, default=('pCN', 'infMALA', 'infHMC', 'DRinfmMALA', 'DRinfmHMC')) args = parser.parse_args() ## define the inverse elliptic problem ## # parameters for PDE model nx = 40 ny = 40 # parameters for prior model sigma = 1.25 s = 0.0625 # parameters for misfit model SNR = 10 # 100 # define the inverse problem elliptic = Elliptic(nx=nx, ny=ny, SNR=SNR, sigma=sigma, s=s) # initialization # unknown=elliptic.prior.sample(whiten=False) unknown = elliptic.prior.gen_vector() # unknown=df.Function(elliptic.pde.V) # MAP_file=os.path.join(os.getcwd(),'result/MAP.h5') # if os.path.isfile(MAP_file): # f=df.HDF5File(elliptic.pde.mpi_comm,MAP_file,"r") # f.read(unknown,'parameter') # f.close() # else: # unknown=elliptic.get_MAP(SAVE=True) # run MCMC to generate samples print("Preparing %s sampler with step size %g for %d step(s)..." % (args.algs[args.algNO], args.step_sizes[args.algNO], args.step_nums[args.algNO])) inf_GMC = geoinfMC(unknown, elliptic, args.step_sizes[args.algNO], args.step_nums[args.algNO], args.algs[args.algNO], k=5) mc_fun = inf_GMC.sample mc_args = (args.num_samp, args.num_burnin) mc_fun(*mc_args) # append PDE information including the count of solving filename_ = os.path.join(inf_GMC.savepath, inf_GMC.filename + '.pckl') filename = os.path.join(inf_GMC.savepath, 'Elliptic_' + inf_GMC.filename + '.pckl') # change filename os.rename(filename_, filename) f = open(filename, 'ab') # soln_count=[elliptic.soln_count,elliptic.pde.soln_count] soln_count = elliptic.pde.soln_count pickle.dump([nx, ny, sigma, s, SNR, soln_count, args], f) f.close()
""" eigs=kwargs.pop('eigs',None) if eigs:# is not None: return _GA_posterior_lr(prior,eigs,**kwargs) metact=kwargs.pop('metact',None) rtmetact=kwargs.pop('rtmetact',None) if metact and rtmetact: return _GA_posterior_exct(prior,metact,rtmetact,**kwargs) else: df.error('Definition not specified!') if __name__ == '__main__': # np.random.seed(2017) from Elliptic_dili import Elliptic # define the inverse problem elliptic=Elliptic(nx=40,ny=40,SNR=10) # get MAP unknown=df.Function(elliptic.pde.V) MAP_file=os.path.join(os.getcwd(),'MAP.h5') if os.path.isfile(MAP_file): f=df.HDF5File(elliptic.pde.mpi_comm,MAP_file,"r") f.read(unknown,'parameter') f.close() else: unknown=elliptic.get_MAP(SAVE=True) import time start = time.time() # get eigen-decomposition of posterior Hessian at MAP _,_,_,eigs=elliptic.get_geom(unknown.vector(),geom_ord=[1.5],whitened=False,k=100)#threshold=1e-2) # define approximate Gaussian posterior