def obj_func(sampler, distr, job_id, **kwargs): num_target_grad_evals = grad_evals[type(distr).__name__] default_args = { "num_grad_steps": num_target_grad_evals, "sample_steps": 1, "num_steps": None, "half_window": True } kwargs = unpack_params(kwargs) kwargs.update(default_args) ac_df = calculate_autocorrelation(sampler, distr, **kwargs) n = ac_df['num grad'].values.astype(int) # necessary to keep curve_fit from borking normed_n = n / (0.5 * num_target_grad_evals) y = ac_df['autocorrelation'].values if use_exp: # wtf fit is mutating input somehow r1 = fit(normed_n.copy(), y.copy())[0] if debug: plot_fit(normed_n, y, r1, job_id, kwargs) return -r1 else: if np.isnan(np.sum(ac_df.autocorrelation.values)): return 11 * num_target_grad_evals for trial, target in enumerate(np.arange(0, 1, 0.1)): score = min_idx(ac_df, target) if score is not None: score += trial * num_target_grad_evals * 0.5 break if debug: plot_search_ac(ac_df['num grad'].values.astype(int), ac_df.autocorrelation.values, job_id, kwargs, score) return score or 5 * num_target_grad_evals
def obj_func(sampler, distr, job_id, **kwargs): """ Scores the performance of sampler on distribution given parameters :param sampler: sampler being tested. instance of mjhmc.samplers.markov_jump_hmc.HMCBase :param distr: distribution being used. instance of mjhmc.misc.distributions.Distribution :param job_id: integer label for job being run :returns: the score :rtype: float """ cos_coef, normed_n_grad_evals, exp_coef, autocor, kwargs = obj_func_helper(sampler, distr, True, kwargs) if debug: plot_fit(normed_n_grad_evals, autocor, exp_coef, cos_coef, job_id, kwargs) return exp_coef
def obj_func(sampler, distr, job_id, **kwargs): """ Scores the performance of sampler on distribution given parameters :param sampler: sampler being tested. instance of mjhmc.samplers.markov_jump_hmc.HMCBase :param distr: distribution being used. instance of mjhmc.misc.distributions.Distribution :param job_id: integer label for job being run :returns: the score :rtype: float """ cos_coef, normed_n_grad_evals, exp_coef, autocor, kwargs = obj_func_helper(sampler, distr, True, kwargs) if debug: plot_fit(normed_n_grad_evals, autocor, exp_coef, cos_coef, job_id, kwargs) return exp_coef
def plot_all_best(custom_params=None): """ Creates a plot with the autocorrelation and fit for each distribution and sampler :param custom_params: dictionary of custom params will be used on all distributions and samplers. if None uses the current best params for each :returns: None :rtype: None """ distributions = [ RoughWell(nbatch=200) # Gaussian(ndims=10, nbatch=200), # MultimodalGaussian(ndims=5, separation=1) ] samplers = [ ControlHMC, MarkovJumpHMC ] with PdfPages("validation.pdf") as pdf: for distribution in distributions: # [control, mjhmc, lahmc] if custom_params is None: params = load_params(distribution) else: params = [custom_params] * 3 active_params = params[:-1] for sampler, hparams in zip(samplers, active_params): print "Now running for {} on {}".format(sampler, distribution) cos_coef, n_grad_evals, exp_coef, autocor, _ = obj_func_helper( sampler, distribution.reset(), False, hparams) fig = plot_fit(n_grad_evals, autocor, exp_coef, cos_coef, 'validation', hparams, save=False ) pdf.savefig(fig)