def sample(step, problem): """ Sample solution space with the previously initalised algorithm. Parameters ---------- step : :class:`SMC` or :class:`pymc3.metropolis.Metropolis` from problem.init_sampler() problem : :class:`Problem` with characteristics of problem to solve """ sc = problem.config.sampler_config pa = sc.parameters if hasattr(pa, 'update_covariances'): if pa.update_covariances: update = problem else: update = None if sc.name == 'Metropolis': logger.info('... Starting Metropolis ...\n') ensuredir(problem.outfolder) sampler.metropolis_sample( n_steps=pa.n_steps, step=step, progressbar=sc.progressbar, buffer_size=sc.buffer_size, homepath=problem.outfolder, burn=pa.burn, thin=pa.thin, model=problem.model, n_jobs=pa.n_jobs, rm_flag=pa.rm_flag) elif sc.name == 'SMC': logger.info('... Starting SMC ...\n') sampler.smc_sample( pa.n_steps, step=step, progressbar=sc.progressbar, model=problem.model, n_jobs=pa.n_jobs, stage=pa.stage, update=update, homepath=problem.outfolder, buffer_size=sc.buffer_size, rm_flag=pa.rm_flag) elif sc.name == 'PT': logger.info('... Starting Parallel Tempering ...\n') sampler.pt_sample( step=step, n_chains=pa.n_chains, n_samples=pa.n_samples, swap_interval=pa.swap_interval, beta_tune_interval=pa.beta_tune_interval, n_workers_posterior=pa.n_chains_posterior, homepath=problem.outfolder, progressbar=sc.progressbar, buffer_size=sc.buffer_size, model=problem.model, rm_flag=pa.rm_flag) else: logger.error('Sampler "%s" not implemented.' % sc.name)
def sample(step, problem): """ Sample solution space with the previously initalised algorithm. Parameters ---------- step : :class:`SMC` or :class:`pymc3.metropolis.Metropolis` from problem.init_sampler() problem : :class:`Problem` with characteristics of problem to solve """ pc = problem.config.problem_config sc = problem.config.sampler_config pa = sc.parameters if hasattr(pa, 'update_covariances'): if pa.update_covariances: update = problem else: update = None if pc.mode == bconfig.ffi_mode_str: logger.info('Chain initialization with:') if pc.mode_config.initialization == 'random': logger.info('Random starting point.\n') start = None elif pc.mode_config.initialization == 'lsq': from tqdm import tqdm logger.info('Least-squares-solution \n') if 'seismic' in pc.datatypes: logger.warning('Least-squares initialization is not' ' supported (yet) for seismic data, only!') start = [] for i in tqdm(range(step.n_chains)): point = problem.get_random_point() start.append(problem.lsq_solution(point)) else: start = None if sc.name == 'Metropolis': logger.info('... Starting Metropolis ...\n') ensuredir(problem.outfolder) sampler.metropolis_sample(n_steps=pa.n_steps, step=step, progressbar=sc.progressbar, buffer_size=sc.buffer_size, buffer_thinning=sc.buffer_thinning, homepath=problem.outfolder, start=start, burn=pa.burn, thin=pa.thin, model=problem.model, n_jobs=pa.n_jobs, rm_flag=pa.rm_flag) elif sc.name == 'SMC': logger.info('... Starting SMC ...\n') sampler.smc_sample(pa.n_steps, step=step, progressbar=sc.progressbar, model=problem.model, start=start, n_jobs=pa.n_jobs, stage=pa.stage, update=update, buffer_thinning=sc.buffer_thinning, homepath=problem.outfolder, buffer_size=sc.buffer_size, rm_flag=pa.rm_flag) elif sc.name == 'PT': logger.info('... Starting Parallel Tempering ...\n') sampler.pt_sample( step=step, n_chains=pa.n_chains + 1, # add master n_samples=pa.n_samples, start=start, swap_interval=pa.swap_interval, beta_tune_interval=pa.beta_tune_interval, n_workers_posterior=pa.n_chains_posterior, homepath=problem.outfolder, progressbar=sc.progressbar, buffer_size=sc.buffer_size, buffer_thinning=sc.buffer_thinning, model=problem.model, resample=pa.resample, rm_flag=pa.rm_flag, record_worker_chains=pa.record_worker_chains) else: logger.error('Sampler "%s" not implemented.' % sc.name)