Пример #1
0
def perform_run(n_gates, model_number):
    model_name = "random_circuits_" + str(model_number)
    start_time = time_module.clock()
    test_circuit_generation_function = lambda: generate_completely_random_circuit(
        20, n_gates)

    environment = IBMQ20Tokyo(test_circuit_generation_function().to_dqn_rep())
    agent = DoubleDQNAgent(environment)
    agent.load_model(model_name)

    average_test_time = 0.0
    average_circuit_depth_overhead = 0.0
    average_circuit_depth_ratio = 0.0

    for e in range(test_episodes):
        circuit = test_circuit_generation_function()
        original_depth = circuit.depth()

        actions, circuit_depth = schedule_swaps(environment,
                                                agent,
                                                circuit=circuit.to_dqn_rep(),
                                                experience_db=None)
        average_test_time += (1.0 / test_episodes) * len(actions)
        average_circuit_depth_overhead += (1.0 / test_episodes) * (
            circuit_depth - original_depth)
        average_circuit_depth_ratio += (1.0 / test_episodes) * (
            float(circuit_depth) / float(original_depth))

    end_time = time_module.clock()
    total_time = end_time - start_time
    result = (n_gates, average_test_time, average_circuit_depth_overhead,
              average_circuit_depth_ratio, total_time)
    print('Completed run:', result)
    return result
Пример #2
0
def test_parameters(_gamma):

    start_time = time_module.clock()

    environment = GridEnvironment(n_rows, n_cols, circuit)
    agent = SimpleDQNAgent(environment)

    train_model(environment,
                agent,
                training_episodes=training_episodes,
                should_print=False)

    average_test_time = 0.0
    average_circuit_depth_overhead = 0.0

    for e in range(test_episodes):
        actions, circuit_depth = schedule_swaps(environment,
                                                agent,
                                                experience_db=None)
        average_test_time += (1.0 / test_episodes) * len(actions)
        average_circuit_depth_overhead += (1.0 /
                                           test_episodes) * (circuit_depth - 1)

    end_time = time_module.clock()

    total_time = end_time - start_time

    return average_circuit_depth_overhead, total_time
Пример #3
0
def perform_run(f_initial_locations, f_model_number):
    model_name = "random_circuits_" + str(f_model_number)

    start_time = time_module.clock()

    environment = GridEnvironment(4, 4, test_set_circuits[0].to_dqn_rep())
    agent = DoubleDQNAgent(environment)
    agent.load_model(model_name)

    average_test_time = 0.0
    average_circuit_depth_overhead = 0.0
    average_circuit_depth_ratio = 0.0

    test_episodes = len(test_set_circuits)

    for e in range(test_episodes):
        circuit = test_set_circuits[e]
        f_qubit_locations = f_initial_locations[e]
        original_depth = circuit.depth()

        actions, circuit_depth = schedule_swaps(
            environment,
            agent,
            circuit=circuit,
            experience_db=None,
            qubit_locations=f_qubit_locations,
            safety_checks_on=True)
        average_test_time += (1.0 / test_episodes) * len(actions)
        average_circuit_depth_overhead += (1.0 / test_episodes) * (
            circuit_depth - original_depth)
        average_circuit_depth_ratio += (1.0 / test_episodes) * (
            float(circuit_depth) / float(original_depth))

    end_time = time_module.clock()

    time_taken = end_time - start_time
    result = (f_model_number, average_test_time,
              average_circuit_depth_overhead, average_circuit_depth_ratio,
              time_taken)

    print('Completed run:', result)

    return result
Пример #4
0
def perform_run(num_rows, num_cols, training_episodes, test_episodes=100):
    """

    :param num_rows: dummy arg, number of rows of TODO???
    :param num_cols: dummy arg, number of rows of TODO???
    :param training_episodes: number of episodes to train for
    :param test_episodes: number of episodes to test for
    :return: datapoint: TODO what does that mean?
    """
    def circuit_generation_function():
        return generate_full_layer_circuit(num_rows * num_cols).to_dqn_rep()

    environment = GridEnvironment(num_rows, num_cols,
                                  circuit_generation_function())
    agent = DoubleDQNAgent(environment)

    start_time = time_module.perf_counter()
    # Pass the number of training steps and episodes to control how much we train for
    train_model(environment,
                agent,
                training_episodes=training_episodes,
                circuit_generation_function=circuit_generation_function,
                should_print=True)

    average_circuit_depth_overhead = 0.0

    for e in range(test_episodes):
        actions, circuit_depth = schedule_swaps(
            environment,
            agent,
            circuit=circuit_generation_function(),
            experience_db=None)
        average_circuit_depth_overhead += (1.0 /
                                           test_episodes) * (circuit_depth - 1)
    end_time = time_module.perf_counter()

    time_taken = end_time - start_time
    datapoint = (num_rows, num_cols, average_circuit_depth_overhead,
                 time_taken)
    print('Completed run:', datapoint)
    return datapoint
Пример #5
0
def perform_run(nrows, ncols, training_episodes):
    test_episodes = 100

    circuit_generation_function = lambda: generate_full_layer_circuit(
        nrows * ncols).to_dqn_rep()

    environment = GridEnvironment(nrows, ncols, circuit_generation_function())
    agent = DQNAgent(environment)

    start_time = time_module.clock()

    train_model(environment,
                agent,
                training_episodes=training_episodes,
                circuit_generation_function=circuit_generation_function,
                should_print=False)

    average_circuit_depth_overhead = 0.0

    for e in range(test_episodes):
        actions, circuit_depth = schedule_swaps(
            environment,
            agent,
            circuit=circuit_generation_function(),
            experience_db=None)
        average_circuit_depth_overhead += (1.0 /
                                           test_episodes) * (circuit_depth - 1)

    end_time = time_module.clock()

    total_time = end_time - start_time

    datapoint = (nrows, ncols, average_circuit_depth_overhead, total_time)

    print('Completed run:', datapoint)

    return datapoint
    if use_saved_model:
        agent.load_model(experiment_name)
    else:
        train_model(environment, agent, training_episodes=training_episodes, circuit_generation_function=circuit_generation_function, should_print=True)
        agent.save_model(experiment_name)

    average_test_time = 0.0
    average_circuit_depth_overhead = 0.0

    for e in range(test_episodes):
        if circuit_generation_function is not None:
            circuit = circuit_generation_function()
        else:
            circuit = None

        actions, circuit_depth = schedule_swaps(environment, agent, circuit=circuit, experience_db=db)
        average_test_time += (1.0/test_episodes) * len(actions)
        average_circuit_depth_overhead += (1.0/test_episodes) * (circuit_depth - 1)

        print('Test time',len(actions))
        print('Total circuit depth', circuit_depth)
        print()

    print('Average time' , average_test_time)
    print('Average depth overhead' , average_circuit_depth_overhead)

    end_time = time_module.clock()

    total_time = end_time-start_time

    print('Total time taken:', total_time)