Exemplo n.º 1
0
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)
Exemplo n.º 2
0
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)