def IMRun_EGO(nbrs_list_i, incident_edge_list_i, edges_i, J, h, S_ref, S_in, h_effective_in, beta_true, gammas, SAW_length_min, SAW_length_max, nmoves, nadaptations, nruns_per_param_update, policy_size, strategy, exp_temp, MH_rate, S_reset = None, h_effective_reset = None): assert(not(S_reset is None and h_effective_reset is not None)) print 'strategy', strategy if S_reset is None: S_reset = S_in h_effective_reset = h_effective_in num_nodes_c, num_edges_c,\ edges_i_c, \ nbrs_list_ptrs, nbrs_list_ptrs_c, \ nbrs_list_lens, nbrs_list_lens_c, \ incident_edge_list_ptrs, incident_edge_list_ptrs_c, \ incident_edge_list_lens, incident_edge_list_lens_c \ = grph_c.make_ctypes_for_graph_repr \ (nbrs_list_i, incident_edge_list_i, edges_i) J_c, h_c, h_effective_in_c, h_effective_reset_c = \ map(grph_c.make_ctypes_for_graph_weights, [J, h, h_effective_in, h_effective_reset]) S_end = zeros(S_in.shape, dtype=int32) S_ref_c, S_in_c, S_reset_c, S_end_c = \ map(grph_c.make_ctypes_for_node_activations, [S_ref, S_in, S_reset, S_end]) beta_true_c, nmoves_c, nruns_per_param_update_c, \ gammas_c, len_gammas_c, \ SAW_length_min_c, SAW_length_max_c \ = make_ctypes_for_simulation_parameters\ (beta_true, nmoves, nruns_per_param_update, \ gammas, SAW_length_min, SAW_length_max) nadaptations_c = c.c_int32(nadaptations) nactions = (SAW_length_max - SAW_length_min + 1) * len(gammas) E_samples, E_proposeds, log_f_fwds, log_f_revs, \ MH_ratios, SAW_lengths, used_gammas, rewards \ = make_output_buffers(nmoves, nactions) E_samples_c, E_proposeds_c, log_f_fwds_c, log_f_revs_c, \ MH_ratios_c, SAW_lengths_c, used_gammas_c, rewards_c \ = make_ctypes_for_output_buffers\ (E_samples, E_proposeds, log_f_fwds, log_f_revs, MH_ratios, SAW_lengths, used_gammas, rewards) policy_size_c = c.c_int32(policy_size) policy = zeros([policy_size*2, 1], dtype=double) policy_c = policy.ctypes.data_as(c.POINTER(c.c_double)) kernel_hyperparms = \ array([SAW_length_max - SAW_length_min + 1, gammas[-1] - gammas[0]]) * 0.1 kernel = GaussianKernel_ard(kernel_hyperparms) gp = GaussianProcess(kernel, noise=0.1) # Bind the GP in closures. References to these closures need to be # kept, so that they only get garbage-collected when the C code # has finished running. maximize_EI_lmbd = \ lambda bounds_ptr, max_x_ptr, x_size:\ ego_c.maximizeEI_wrap(gp, bounds_ptr, max_x_ptr, x_size) add_data_to_gp_lmbd = \ lambda x_ptr, x_size, y:\ ego_c.add_data_to_gp(gp, x_ptr, x_size, y) maximize_gp_lmbd = \ lambda x_ptr, x_size, y_ptr:\ ego_c.maximize_gp(gp, x_ptr, x_size, y_ptr) gp_posterior_mean_lmbd = \ lambda coords_ptr, coords_size:\ ego_c.gp_posterior_mean(gp, coords_ptr, coords_size) maximize_EI_local_lmbd = \ lambda bounds_ptr, max_x_ptr, x_size:\ ego_c.maximizeEI_local_wrap(gp, bounds_ptr, max_x_ptr, x_size, strategy) sample_gp_posterior_mean_lmbd = \ lambda coords_ptr, coords_size, bounds_ptr, sample_x_ptr, num_samples:\ ego_c.sample_gp_posterior_mean(gp, coords_ptr, coords_size, bounds_ptr, sample_x_ptr, num_samples, None, exp_temp, MH_rate) # Create the callbacks. maximize_EI_c = ego_c.ACQ_MAXIMIZER_FUNC(maximize_EI_lmbd) add_data_to_gp_c = ego_c.GP_ADD_DATA_FUNC(add_data_to_gp_lmbd) maximize_gp_c = ego_c.GP_MAXIMIZER_FUNC(maximize_gp_lmbd) gp_posterior_mean_c = ego_c.GP_POSTERIOR_MEAN_FUNC(gp_posterior_mean_lmbd) maximize_EI_local_c = ego_c.LOCAL_ACQ_MAXIMIZER_FUNC(maximize_EI_local_lmbd) sample_gp_posterior_mean_c = ego_c.SAMPLE_GP_POSTERIOR_MEAN_FUNC(sample_gp_posterior_mean_lmbd) # Make the call. libimsampler.sampleIM_ego_ext\ (num_nodes_c, num_edges_c, nbrs_list_ptrs_c, nbrs_list_lens_c, incident_edge_list_ptrs_c, incident_edge_list_lens_c, edges_i_c, J_c, h_c, S_ref_c, S_in_c, S_reset_c, S_end_c, h_effective_in_c, h_effective_reset_c, beta_true_c, len_gammas_c, gammas_c, SAW_length_min_c, SAW_length_max_c, nmoves_c, nadaptations_c, nruns_per_param_update_c, maximize_EI_c, add_data_to_gp_c, maximize_gp_c, gp_posterior_mean_c, maximize_EI_local_c, sample_gp_posterior_mean_c, strategy, E_samples_c, E_proposeds_c, log_f_fwds_c, log_f_revs_c, MH_ratios_c, SAW_lengths_c, used_gammas_c, rewards_c, policy_c, policy_size_c) gamma_min = gammas[0] gamma_max = gammas[-1] # Return the answers. return S_end, E_samples, E_proposeds, log_f_fwds, log_f_revs, \ MH_ratios, SAW_lengths, used_gammas, rewards, gp, \ gamma_min, gamma_max, policy
def SARDRun_EGO(nbrs_list_i, incident_edge_list_i, edges_i, J, h, S_in, h_effective_in, beta_true, gamma_hi_bounds, gamma_lo_bounds, iters_per_move_bounds, max_SAW_length_bounds, min_SAW_length_bounds, nmoves, nadaptations, nruns_per_param_update, policy_size, strategy, exp_temp, MH_rate, return_samples, S_reset = None, h_effective_reset = None): assert(not(S_reset is None and h_effective_reset is not None)) nparams = 8 nmoves = array([nmoves], dtype='int') nadaptations = array([nadaptations], dtype='int') nruns_per_param_update = \ array([nruns_per_param_update], dtype='int') policy_size = array([policy_size], dtype='int') if S_reset is None: S_reset = S_in h_effective_reset = h_effective_in num_nodes_c, num_edges_c,\ edges_i_c, \ nbrs_list_ptrs, nbrs_list_ptrs_c, \ nbrs_list_lens, nbrs_list_lens_c, \ incident_edge_list_ptrs, incident_edge_list_ptrs_c, \ incident_edge_list_lens, incident_edge_list_lens_c \ = grph_c.make_ctypes_for_graph_repr \ (nbrs_list_i, incident_edge_list_i, edges_i) J_c, h_c, h_effective_in_c, h_effective_reset_c = \ map(grph_c.make_ctypes_for_graph_weights, [J, h, h_effective_in, h_effective_reset]) S_end = zeros(S_in.shape, dtype=int32) S_in_c, S_reset_c, S_end_c = \ map(grph_c.make_ctypes_for_node_activations, [S_in, S_reset, S_end]) beta_true_c, \ gamma_hi_max_c, gamma_hi_min_c, gamma_lo_max_c, gamma_lo_min_c, \ max_SAW_length_bound_max_c, max_SAW_length_bound_min_c, \ min_SAW_length_bound_max_c, min_SAW_length_bound_min_c, \ iters_per_move_max_c, iters_per_move_min_c, \ nmoves_c, nadaptations_c, nruns_per_param_update_c \ = map(make_ctype_for_var, [beta_true, gamma_hi_bounds[1], gamma_hi_bounds[0], gamma_lo_bounds[1], gamma_lo_bounds[0], max_SAW_length_bounds[1], max_SAW_length_bounds[0], min_SAW_length_bounds[1], min_SAW_length_bounds[0], iters_per_move_bounds[1], iters_per_move_bounds[0], nmoves, nadaptations, nruns_per_param_update]) iters_per_move_max = iters_per_move_bounds[1] E_samples, E_proposeds, log_f_fwds, log_f_revs, \ MH_ratios, move_types, used_sigma_lengths, used_rho_lengths, \ used_iters_per_move, used_gammas_his, used_gammas_los, \ used_P_LL, used_P_LH, used_P_HL, rewards \ = make_output_buffers(nmoves, iters_per_move_max) E_samples_c, E_proposeds_c, log_f_fwds_c, log_f_revs_c, \ MH_ratios_c, move_types_c, \ used_sigma_lengths_c, used_rho_lengths_c, used_iters_per_move_c, \ used_gammas_his_c, used_gammas_los_c, \ used_P_LL_c, used_P_LH_c, used_P_HL_c, rewards_c \ = map(make_ctype_for_buffer, [E_samples, E_proposeds, log_f_fwds, log_f_revs, MH_ratios, move_types, used_sigma_lengths, used_rho_lengths, used_iters_per_move, used_gammas_his, used_gammas_los, used_P_LL, used_P_LH, used_P_HL, rewards]) return_samples_c = make_ctype_for_var(return_samples) policy_size_c = make_ctype_for_var(policy_size) policy = zeros([policy_size * nparams, 1], dtype=double) policy_c = make_ctype_for_buffer(policy) kernel_hyperparms = \ array( [iters_per_move_bounds[1] - iters_per_move_bounds[0] + 1, min_SAW_length_bounds[1] - min_SAW_length_bounds[0] + 1, max_SAW_length_bounds[1] - max_SAW_length_bounds[0] + 1, 1.0, 1.0, 1.0, gamma_hi_bounds[1] - gamma_hi_bounds[0], gamma_lo_bounds[1] - gamma_lo_bounds[0]]) kernel = GaussianKernel_ard(kernel_hyperparms) gp = GaussianProcess(kernel, noise=0.1) # NOTE: This method is no longer useful. Take it out! def check_constraint(nx_pt, bounds, coords_size): if nx_pt[1] <= nx_pt[2]: return False else: return False # Samples to be returned samples = [] # Bind the GP in closures. References to these closures need to be # kept, so that they only get garbage-collected when the C code # has finished running. maximize_EI_lmbd = \ lambda bounds_ptr, max_x_ptr, x_size:\ ego_c.maximizeEI_wrap(gp, bounds_ptr, max_x_ptr, x_size) add_data_to_gp_lmbd = \ lambda x_ptr, x_size, y:\ ego_c.add_data_to_gp(gp, x_ptr, x_size, y) maximize_gp_lmbd = \ lambda x_ptr, x_size, y_ptr:\ ego_c.maximize_gp(gp, x_ptr, x_size, y_ptr) gp_posterior_mean_lmbd = \ lambda coords_ptr, coords_size:\ ego_c.gp_posterior_mean(gp, coords_ptr, coords_size) maximize_EI_local_lmbd = \ lambda bounds_ptr, max_x_ptr, x_size:\ ego_c.maximizeEI_local_wrap(gp, bounds_ptr, max_x_ptr, x_size, strategy) sample_gp_posterior_mean_lmbd = \ lambda coords_ptr, coords_size, bounds_ptr, sample_x_ptr, num_samples:\ ego_c.sample_gp_posterior_mean(gp, coords_ptr, coords_size, bounds_ptr, sample_x_ptr, num_samples, check_constraint, exp_temp, MH_rate) return_sample_lmbd = \ lambda sample_x_ptr, coords_size:\ ego_c.return_sample(samples, sample_x_ptr, coords_size) # Create the callbacks. maximize_EI_c = ego_c.ACQ_MAXIMIZER_FUNC(maximize_EI_lmbd) add_data_to_gp_c = ego_c.GP_ADD_DATA_FUNC(add_data_to_gp_lmbd) maximize_gp_c = ego_c.GP_MAXIMIZER_FUNC(maximize_gp_lmbd) gp_posterior_mean_c = ego_c.GP_POSTERIOR_MEAN_FUNC(gp_posterior_mean_lmbd) maximize_EI_local_c = ego_c.LOCAL_ACQ_MAXIMIZER_FUNC(maximize_EI_local_lmbd) sample_gp_posterior_mean_c = ego_c.SAMPLE_GP_POSTERIOR_MEAN_FUNC(sample_gp_posterior_mean_lmbd) return_sample_c = ego_c.RETURN_SAMPLE(return_sample_lmbd) # Make the call. libsardsampler.sampleSARD_ego_ext\ (num_nodes_c, num_edges_c, nbrs_list_ptrs_c, nbrs_list_lens_c, incident_edge_list_ptrs_c, incident_edge_list_lens_c, edges_i_c, J_c, h_c, S_in_c, S_reset_c, S_end_c, h_effective_in_c, h_effective_reset_c, beta_true_c, gamma_hi_max_c, gamma_hi_min_c, gamma_lo_max_c, gamma_lo_min_c, max_SAW_length_bound_max_c, max_SAW_length_bound_min_c, min_SAW_length_bound_max_c, min_SAW_length_bound_min_c, iters_per_move_min_c, iters_per_move_max_c, nmoves_c, nadaptations_c, nruns_per_param_update_c, maximize_EI_c, add_data_to_gp_c, maximize_gp_c, gp_posterior_mean_c, maximize_EI_local_c, sample_gp_posterior_mean_c, return_sample_c, return_samples_c, strategy, E_samples_c, E_proposeds_c, log_f_fwds_c, log_f_revs_c, MH_ratios_c, move_types_c, used_sigma_lengths_c, used_rho_lengths_c, used_iters_per_move_c, used_gammas_his_c, used_gammas_los_c, used_P_LL_c, used_P_LH_c, used_P_HL_c, rewards_c, policy_c, policy_size_c) print len(samples) return S_end, E_samples, E_proposeds, log_f_fwds, log_f_revs, \ MH_ratios, move_types, \ used_sigma_lengths, used_rho_lengths, used_iters_per_move, \ used_gammas_his, used_gammas_los, \ used_P_LL, used_P_LH, used_P_HL, \ rewards, gp, policy, samples