예제 #1
0
                    default="png")

# Parse command line arguments
arguments = parser.parse_args()

# Format inputs for use in this script
directory_to_analyse = arguments.results_directory
log_file = arguments.log_file
all_bayes_csv = arguments.bayes_csv
qhl_mode = bool(arguments.qhl_mode)
further_qhl_mode = bool(arguments.further_qhl_mode)
run_info_file = arguments.run_info_file
system_measurements_file = arguments.system_measurements_file
exploration_rule = arguments.exploration_rules
gather_summary_results = bool(arguments.gather_summary_results)
true_exploration_class = qmla.get_exploration_class(
    exploration_rules=exploration_rule, log_file=log_file)
latex_mapping_file = arguments.latex_mapping_file
figure_format = arguments.figure_format
probes_plot_file = arguments.probes_plot_file
results_collection_file = "{}/collect_analyses.p".format(directory_to_analyse)

if run_info_file is not None:
    true_params_info = pickle.load(open(run_info_file, 'rb'))
    true_params_dict = true_params_info['params_dict']
    true_model = true_params_info['true_model']
else:
    true_params_dict = None
    true_model = true_exploration_class.true_model
true_model_latex = true_exploration_class.latex_name(true_model)
if not directory_to_analyse.endswith('/'):
    directory_to_analyse += '/'
예제 #2
0
run_directory = arguments.run_directory

# Generate ES instances
exploration_class_attributes = {
    'true_params_path': arguments.run_info_file,
    'plot_probes_path': probes_plot_file,
    'log_file': log_file
}

all_exploration_strategies = [exploration_rules]
alternative_exploration_strategies = arguments.alternative_exploration_strategies
all_exploration_strategies.extend(alternative_exploration_strategies)
all_exploration_strategies = list(set(all_exploration_strategies))

unique_exploration_classes = {
    gr: qmla.get_exploration_class(exploration_rules=gr,
                                   **exploration_class_attributes)
    for gr in all_exploration_strategies
}

exploration_class = unique_exploration_classes[exploration_rules]
probe_max_num_qubits_all_exploration_strategies = max(
    [gr.max_num_probe_qubits for gr in unique_exploration_classes.values()])

# Use setup so far to generate parameters
true_model = exploration_class.true_model

qmla.set_shared_parameters(
    exploration_class=exploration_class,
    run_info_file=arguments.run_info_file,
    all_exploration_strategies=all_exploration_strategies,
    run_directory=run_directory,
예제 #3
0
def time_required(
        exploration_rule,  # ie true growth generator for QHL
        exploration_strategies,
        num_particles,
        num_experiments,
        num_processes=1,
        resource_reallocation=False,
        # num_bayes_times=None,
        minimum_allowed_time=100,
        insurance_factor=2.5,
        **kwargs):
    times_reqd = {}

    num_hamiltonians_per_model = (num_particles * (2 * num_experiments))

    parallelisability = {}

    print("exploration strategies:", exploration_strategies)
    #  print("num models by shape:", generator_max_num_models_by_shape)
    total_time_required = 0
    for gen in exploration_strategies:
        try:
            exploration_class = qmla.get_exploration_class(
                exploration_rules=gen)
            generator_max_num_models_by_shape = exploration_class.max_num_models_by_shape
            print("Got time required from growth generator {}".format(gen))
            print("Num models by num qubits:",
                  generator_max_num_models_by_shape)
        except BaseException:
            generator_max_num_models_by_shape = max_num_models_by_shape[gen]

        parallelisability[
            gen] = exploration_class.num_processes_to_parallelise_over
        max_num_qubits = exploration_class.max_num_qubits

        for q in range(1, max_num_qubits + 1):
            time_per_hamiltonian = hamiltonian_exponentiation_times[q]
            try:
                num_models_this_dimension = generator_max_num_models_by_shape[
                    q]
            except BaseException:
                print(
                    "num models {} not in generator_max_num_models_by_shape; taking default"
                    .format(q))
                num_models_this_dimension = generator_max_num_models_by_shape[
                    'other']
            print("ES:", gen, "max num models for ", q, "qubits:",
                  num_models_this_dimension)
            time_this_dimension = (num_hamiltonians_per_model *
                                   time_per_hamiltonian *
                                   num_models_this_dimension)

            total_time_required += time_this_dimension

    total_time_required = (insurance_factor * np.round(total_time_required))
    times_reqd['qmd'] = max(minimum_allowed_time, int(total_time_required))

    # Get time for QHL
    try:
        true_model = exploration_class.true_model
    except BaseException:
        raise
    highest_parallelisability = max(parallelisability.values())
    times_reqd['num_processes'] = highest_parallelisability

    true_dimension = qmla.get_num_qubits(true_model)
    qhl_insurance_factor = 1.5  # buffer to ensure finished in time
    qhl_time = (qhl_insurance_factor *
                hamiltonian_exponentiation_times[true_dimension] *
                num_particles * num_experiments)
    times_reqd['qhl'] = max(minimum_allowed_time, int(qhl_time))

    # For further qhl, want to account for possibility
    # that winning model is of maximum allowed dimension,
    # so need to request enough time for that case.
    further_qhl_time = (hamiltonian_exponentiation_times[max_num_qubits] *
                        num_hamiltonians_per_model)
    times_reqd['fqhl'] = max(minimum_allowed_time, int(further_qhl_time))
    for k in ['qmd', 'qhl', 'fqhl']:
        times_reqd[k] *= exploration_class.timing_insurance_factor
        times_reqd[k] = max(minimum_allowed_time, int(times_reqd[k]))
        times_reqd[k] = int(times_reqd[k])
    print("Time to request:\n", times_reqd)
    return times_reqd
예제 #4
0
                    type=str,
                    default='Unknown')

parser.add_argument('-exp',
                    '--experimental_data',
                    help='Use experimental data if provided',
                    type=int,
                    default=0)

arguments = parser.parse_args()
results_directory = arguments.results_directory
output_file_name = arguments.output_file_name

exploration_rules = arguments.exploration_rules
exploration_class = qmla.get_exploration_class(
    exploration_rules=exploration_rules,
    use_experimental_data=arguments.experimental_data,
    log_file=arguments.log_file)

variables = vars(arguments)
# and some others arguments not explicitly set in launch script

# variables['measurement_type'] = exploration_class.measurement_type
variables[
    'expectation_value_func'] = exploration_class.expectation_value_subroutine.__name__
variables['heuristic'] = exploration_class.model_heuristic_subroutine.__name__
variables[
    'probe_generation_function'] = exploration_class.plot_probes_generation_subroutine.__name__
variables[
    'plot_probes_generation_subroutine'] = exploration_class.plot_probes_generation_subroutine.__name__

qmla.analysis.combine_analysis_plots(results_directory=results_directory,
예제 #5
0
# Parse command line arguments
arguments = parser.parse_args()

# Format inputs for use in this script
directory_to_analyse = arguments.results_directory
log_file = arguments.log_file
all_bayes_csv = arguments.bayes_csv
qhl_mode = bool(arguments.qhl_mode)
further_qhl_mode = bool(arguments.further_qhl_mode)
run_info_file = arguments.run_info_file
system_measurements_file = arguments.system_measurements_file
exploration_rule = arguments.exploration_rules
gather_summary_results = bool(arguments.gather_summary_results)
true_exploration_class = qmla.get_exploration_class(
    exploration_rules=exploration_rule,
    true_params_path=arguments.run_info_file,
    plot_probes_path=arguments.probes_plot_file,
    log_file=log_file)
true_exploration_class.get_true_parameters()
latex_mapping_file = arguments.latex_mapping_file
figure_format = arguments.figure_format
probes_plot_file = arguments.probes_plot_file
results_collection_file = "{}/collect_analyses.p".format(directory_to_analyse)

if run_info_file is not None:
    true_params_info = pickle.load(open(run_info_file, 'rb'))
    true_params_dict = true_params_info['params_dict']
    true_model = true_params_info['true_model']
else:
    true_params_dict = None
    true_model = true_exploration_class.true_model