def perform_sequential_line_search(trial_index: int) -> np.ndarray:

        optimality_gaps = np.ndarray(NUM_ITERS, )

        # Instantiate the optimizer with acquisition function specification
        optimizer = pySequentialLineSearch.SequentialLineSearchOptimizer(
            num_dims=num_dims,
            use_map_hyperparams=USE_MAP_HYPERPARAMS,
            acquisition_func_type=acquisition_func_type[0],
            initial_query_generator=generate_initial_slider)

        # Specify a hyperparameter in case the acquisition function is GP-UCB
        optimizer.set_gaussian_process_upper_confidence_bound_hyperparam(
            acquisition_func_type[1])

        for i in range(NUM_ITERS):
            slider_ends = optimizer.get_slider_ends()
            slider_position = ask_human_for_slider_manipulation(slider_ends)
            optimizer.submit_feedback_data(slider_position)

            optimality_gap = -calc_simulated_objective_func(
                optimizer.get_maximizer())

            optimality_gaps[i] = optimality_gap

        return optimality_gaps
    def perform_sequential_line_search(trial_index: int) -> np.ndarray:

        optimality_gaps = np.ndarray(NUM_ITERS, )

        optimizer = pySequentialLineSearch.SequentialLineSearchOptimizer(
            num_dims=num_dims,
            use_map_hyperparams=USE_MAP_HYPERPARAMS,
            kernel_type=kernel_type,
            initial_slider_generator=generate_initial_slider)

        optimizer.set_hyperparams(kernel_signal_var=0.50,
                                  kernel_length_scale=length_scale,
                                  kernel_hyperparams_prior_var=0.10)

        for i in range(NUM_ITERS):
            slider_ends = optimizer.get_slider_ends()
            slider_position = ask_human_for_slider_manipulation(slider_ends)
            optimizer.submit_line_search_result(slider_position)

            optimality_gap = -calc_simulated_objective_func(
                optimizer.get_maximizer())

            optimality_gaps[i] = optimality_gap

        return optimality_gaps
def main():
    optimizer = pySequentialLineSearch.SequentialLineSearchOptimizer(
        num_dims=5)

    optimizer.set_hyperparams(kernel_signal_var=0.50,
                              kernel_length_scale=0.10,
                              kernel_hyperparams_prior_var=0.10)

    for i in range(30):
        slider_ends = optimizer.get_slider_ends()
        slider_position = ask_human_for_slider_manipulation(slider_ends)
        optimizer.submit_feedback_data(slider_position)

        residual = np.linalg.norm(optimizer.get_maximizer() - 0.2)
        print("[#iters = " + str(i + 1) + "] residual: " + str(residual))
optimality_gaps = np.ndarray(shape=(NUM_ITERS, NUM_TRIALS,
                                    len(length_scale_set),
                                    len(map_condition_set), len(num_dims_set)))

# Perform sequential line search procedures with various conditions
for index_num_dims, num_dims in enumerate(num_dims_set):
    print("Testing on a {}-dimensional function...".format(num_dims))
    for index_map_condition, map_condition in enumerate(map_condition_set):
        print("\t" + "Hyperparameters condition: " + str(map_condition))
        for index_length_scale, length_scale in enumerate(length_scale_set):
            print("\t\t" + "Kernel length scale: " + str(length_scale))
            for trial in range(NUM_TRIALS):

                optimizer = pySequentialLineSearch.SequentialLineSearchOptimizer(
                    num_dims=num_dims,
                    use_map_hyperparams=map_condition["use_map_hyperparams"],
                    kernel_type=KERNEL_TYPE,
                    initial_slider_generator=generate_initial_slider)

                optimizer.set_hyperparams(
                    kernel_signal_var=0.50,
                    kernel_length_scale=length_scale,
                    kernel_hyperparams_prior_var=map_condition[
                        "kernel_hyperparams_prior_var"])

                for i in range(NUM_ITERS):
                    slider_ends = optimizer.get_slider_ends()
                    slider_position = ask_human_for_slider_manipulation(
                        slider_ends)
                    optimizer.submit_line_search_result(slider_position)