Пример #1
0
    def test_qaoa(self, w, prob, m, solutions):
        """ QAOA test """
        seed = 0
        aqua_globals.random_seed = seed
        os.environ.pop('QISKIT_AQUA_CIRCUIT_CACHE', None)
        self.log.debug('Testing %s-step QAOA with MaxCut on graph\n%s', prob,
                       w)

        backend = BasicAer.get_backend('statevector_simulator')
        optimizer = COBYLA()
        qubit_op, offset = max_cut.get_qubit_op(w)

        qaoa = QAOA(qubit_op, optimizer, prob, mixer=m)
        # TODO: cache fails for QAOA since we construct the evolution circuit via instruction
        quantum_instance = QuantumInstance(backend,
                                           circuit_caching=False,
                                           seed_simulator=seed,
                                           seed_transpiler=seed)

        result = qaoa.run(quantum_instance)
        x = sample_most_likely(result['eigvecs'][0])
        graph_solution = max_cut.get_graph_solution(x)
        self.log.debug('energy:             %s', result['energy'])
        self.log.debug('time:               %s', result['eval_time'])
        self.log.debug('maxcut objective:   %s', result['energy'] + offset)
        self.log.debug('solution:           %s', graph_solution)
        self.log.debug('solution objective: %s', max_cut.max_cut_value(x, w))
        self.assertIn(''.join([str(int(i)) for i in graph_solution]),
                      solutions)
        if quantum_instance.has_circuit_caching:
            self.assertLess(quantum_instance._circuit_cache.misses, 3)
Пример #2
0
    def test_qaoa(self, w, p, m, solutions):
        os.environ.pop('QISKIT_AQUA_CIRCUIT_CACHE', None)
        self.log.debug('Testing {}-step QAOA with MaxCut on graph\n{}'.format(
            p, w))
        np.random.seed(0)

        backend = BasicAer.get_backend('statevector_simulator')
        optimizer = COBYLA()
        qubit_op, offset = max_cut.get_max_cut_qubitops(w)

        qaoa = QAOA(qubit_op, optimizer, p, mixer=m)
        # TODO: cache fails for QAOA since we construct the evolution circuit via instruction
        quantum_instance = QuantumInstance(backend, circuit_caching=False)

        result = qaoa.run(quantum_instance)
        x = max_cut.sample_most_likely(result['eigvecs'][0])
        graph_solution = max_cut.get_graph_solution(x)
        self.log.debug('energy:             {}'.format(result['energy']))
        self.log.debug('time:               {}'.format(result['eval_time']))
        self.log.debug('maxcut objective:   {}'.format(result['energy'] +
                                                       offset))
        self.log.debug('solution:           {}'.format(graph_solution))
        self.log.debug('solution objective: {}'.format(
            max_cut.max_cut_value(x, w)))
        self.assertIn(''.join([str(int(i)) for i in graph_solution]),
                      solutions)
        if quantum_instance.has_circuit_caching:
            self.assertLess(quantum_instance._circuit_cache.misses, 3)
Пример #3
0
    def test_change_operator_size(self):
        """ QAOA test """
        backend = BasicAer.get_backend('statevector_simulator')
        optimizer = COBYLA(maxiter=2)
        qubit_op, _ = max_cut.get_operator(W1)
        qubit_op = qubit_op.to_opflow().to_matrix_op()

        seed = 0
        aqua_globals.random_seed = seed
        qaoa = QAOA(qubit_op, optimizer, P1)
        quantum_instance = QuantumInstance(backend,
                                           seed_simulator=seed,
                                           seed_transpiler=seed)
        qaoa.run(quantum_instance)
        qaoa.operator = (X ^ qubit_op ^ Z)
        qaoa.run()
Пример #4
0
    def test_qaoa_qc_mixer_many_parameters(self):
        """ QAOA test with a mixer as a parameterized circuit with the num of parameters > 1. """
        seed = 0
        aqua_globals.random_seed = seed

        optimizer = COBYLA()
        qubit_op, _ = max_cut.get_operator(W1)
        qubit_op = qubit_op.to_opflow()

        num_qubits = qubit_op.num_qubits
        mixer = QuantumCircuit(num_qubits)
        for i in range(num_qubits):
            theta = Parameter('θ' + str(i))
            mixer.rx(theta, range(num_qubits))

        qaoa = QAOA(qubit_op, optimizer=optimizer, p=2, mixer=mixer)
        backend = BasicAer.get_backend('statevector_simulator')
        quantum_instance = QuantumInstance(backend,
                                           seed_simulator=seed,
                                           seed_transpiler=seed)
        result = qaoa.run(quantum_instance)
        x = sample_most_likely(result.eigenstate)
        print(x)
        graph_solution = max_cut.get_graph_solution(x)
        self.assertIn(''.join([str(int(i)) for i in graph_solution]), S1)
Пример #5
0
    def test_qaoa_qc_mixer(self, w, prob, solutions, convert_to_matrix_op):
        """ QAOA test with a mixer as a parameterized circuit"""
        seed = 0
        aqua_globals.random_seed = seed
        self.log.debug(
            'Testing %s-step QAOA with MaxCut on graph with '
            'a mixer as a parameterized circuit\n%s', prob, w)

        backend = BasicAer.get_backend('statevector_simulator')
        optimizer = COBYLA()
        qubit_op, _ = max_cut.get_operator(w)
        qubit_op = qubit_op.to_opflow()
        if convert_to_matrix_op:
            qubit_op = qubit_op.to_matrix_op()

        num_qubits = qubit_op.num_qubits
        mixer = QuantumCircuit(num_qubits)
        theta = Parameter('θ')
        mixer.rx(theta, range(num_qubits))

        qaoa = QAOA(qubit_op, optimizer, prob, mixer=mixer)
        quantum_instance = QuantumInstance(backend,
                                           seed_simulator=seed,
                                           seed_transpiler=seed)

        result = qaoa.run(quantum_instance)
        x = sample_most_likely(result.eigenstate)
        graph_solution = max_cut.get_graph_solution(x)
        self.assertIn(''.join([str(int(i)) for i in graph_solution]),
                      solutions)
Пример #6
0
def run_IBM(H=None,
            backend=None,
            num_samples=100,
            qaoa_steps=3,
            variables=None):

    num_vars = len(list(H.linear))

    qubit_op, offset = get_ising_opt_qubitops(H, variables)

    if backend == None:
        backend = BasicAer.get_backend('qasm_simulator')
    quantum_instance = QuantumInstance(backend)

    spsa = SPSA(max_trials=10)
    qaoa = QAOA(qubit_op, spsa, qaoa_steps)
    result = qaoa.run(quantum_instance)

    circ = qaoa.get_optimal_circuit()
    q = circ.qregs[0]
    c = ClassicalRegister(num_vars, 'c')
    circ.cregs.append(c)
    circ.measure(q, c)

    job = execute(circ, backend, shots=num_samples, memory=True)

    return job.result().get_counts(circ)
Пример #7
0
    def test_qaoa(self, w, prob, m, solutions, convert_to_matrix_op):
        """ QAOA test """
        seed = 0
        aqua_globals.random_seed = seed
        self.log.debug('Testing %s-step QAOA with MaxCut on graph\n%s', prob,
                       w)

        backend = BasicAer.get_backend('statevector_simulator')
        optimizer = COBYLA()
        qubit_op, offset = max_cut.get_operator(w)
        qubit_op = qubit_op.to_opflow()
        if convert_to_matrix_op:
            qubit_op = qubit_op.to_matrix_op()

        qaoa = QAOA(qubit_op, optimizer, prob, mixer=m)
        quantum_instance = QuantumInstance(backend,
                                           seed_simulator=seed,
                                           seed_transpiler=seed)

        result = qaoa.run(quantum_instance)
        x = sample_most_likely(result.eigenstate)
        graph_solution = max_cut.get_graph_solution(x)
        self.log.debug('energy:             %s', result.eigenvalue.real)
        self.log.debug('time:               %s', result.optimizer_time)
        self.log.debug('maxcut objective:   %s',
                       result.eigenvalue.real + offset)
        self.log.debug('solution:           %s', graph_solution)
        self.log.debug('solution objective: %s', max_cut.max_cut_value(x, w))
        self.assertIn(''.join([str(int(i)) for i in graph_solution]),
                      solutions)
Пример #8
0
    def test_qaoa(self, w, p, m, solutions):
        self.log.debug('Testing {}-step QAOA with MaxCut on graph\n{}'.format(
            p, w))
        np.random.seed(0)

        backend = BasicAer.get_backend('statevector_simulator')
        optimizer = COBYLA()
        qubitOp, offset = max_cut.get_max_cut_qubitops(w)

        qaoa = QAOA(qubitOp, optimizer, p, operator_mode='matrix', mixer=m)
        quantum_instance = QuantumInstance(backend)

        result = qaoa.run(quantum_instance)
        x = max_cut.sample_most_likely(result['eigvecs'][0])
        graph_solution = max_cut.get_graph_solution(x)
        self.log.debug('energy:             {}'.format(result['energy']))
        self.log.debug('time:               {}'.format(result['eval_time']))
        self.log.debug('maxcut objective:   {}'.format(result['energy'] +
                                                       offset))
        self.log.debug('solution:           {}'.format(graph_solution))
        self.log.debug('solution objective: {}'.format(
            max_cut.max_cut_value(x, w)))
        self.assertIn(''.join([str(int(i)) for i in graph_solution]),
                      solutions)
        if quantum_instance.has_circuit_caching:
            self.assertLess(quantum_instance._circuit_cache.misses, 3)
Пример #9
0
    def run_simulation(self, backend):

        seed = int(os.environ.get("SEED", "40598"))
        n = int(os.environ.get("N", "4"))
        #
        # Random 3-regular graph with 12 nodes
        #
        graph = nx.random_regular_graph(3, n, seed=seed)
        for e in graph.edges():
            graph[e[0]][e[1]]["weight"] = 1.0

        # Compute the weight matrix from the graph
        w = np.zeros([n, n])
        for i in range(n):
            for j in range(n):
                temp = graph.get_edge_data(i, j, default=0)
                if temp != 0:
                    w[i, j] = temp["weight"]

        # Create an Ising Hamiltonian with docplex.
        mdl = Model(name="max_cut")
        mdl.node_vars = mdl.binary_var_list(list(range(n)), name="node")
        maxcut_func = mdl.sum(w[i, j] * mdl.node_vars[i] *
                              (1 - mdl.node_vars[j]) for i in range(n)
                              for j in range(n))
        mdl.maximize(maxcut_func)
        qubit_op, offset = docplex.get_operator(mdl)

        aqua_globals.random_seed = seed

        # Run quantum algorithm QAOA on qasm simulator
        spsa = SPSA(max_trials=250)
        qaoa = QAOA(qubit_op, spsa, p=5, max_evals_grouped=4)

        quantum_instance = QuantumInstance(
            backend,
            shots=1024,
            seed_simulator=seed,
            seed_transpiler=seed,
            optimization_level=0,
        )
        result = qaoa.run(quantum_instance)

        x = sample_most_likely(result["eigvecs"][0])
        result["solution"] = max_cut.get_graph_solution(x)
        result["solution_objective"] = max_cut.max_cut_value(x, w)
        result["maxcut_objective"] = result["energy"] + offset
        """
        print("energy:", result["energy"])
        print("time:", result["eval_time"])
        print("max-cut objective:", result["energy"] + offset)
        print("solution:", max_cut.get_graph_solution(x))
        print("solution objective:", max_cut.max_cut_value(x, w))
        """
        return result
Пример #10
0
    def test_change_operator_size(self):
        """ QAOA change operator size test """

        aqua_globals.random_seed = 0
        qubit_op, _ = max_cut.get_operator(
            np.array([[0, 1, 0, 1], [1, 0, 1, 0], [0, 1, 0, 1], [1, 0, 1, 0]]))
        qaoa = QAOA(qubit_op.to_opflow(), COBYLA(), 1)
        quantum_instance = QuantumInstance(
            BasicAer.get_backend('statevector_simulator'),
            seed_simulator=aqua_globals.random_seed,
            seed_transpiler=aqua_globals.random_seed)
        result = qaoa.run(quantum_instance)
        x = sample_most_likely(result.eigenstate)
        graph_solution = max_cut.get_graph_solution(x)
        with self.subTest(msg='QAOA 4x4'):
            self.assertIn(''.join([str(int(i)) for i in graph_solution]),
                          {'0101', '1010'})

        try:
            qubit_op, _ = max_cut.get_operator(
                np.array([
                    [0, 1, 0, 1, 0, 1],
                    [1, 0, 1, 0, 1, 0],
                    [0, 1, 0, 1, 0, 1],
                    [1, 0, 1, 0, 1, 0],
                    [0, 1, 0, 1, 0, 1],
                    [1, 0, 1, 0, 1, 0],
                ]))
            qaoa.operator = qubit_op.to_opflow()
        except Exception as ex:  # pylint: disable=broad-except
            self.fail("Failed to change operator. Error: '{}'".format(str(ex)))
            return

        result = qaoa.run()
        x = sample_most_likely(result.eigenstate)
        graph_solution = max_cut.get_graph_solution(x)
        with self.subTest(msg='QAOA 6x6'):
            self.assertIn(''.join([str(int(i)) for i in graph_solution]),
                          {'010101', '101010'})
    def test_portfolio_qaoa(self):
        """ portfolio test with QAOA """
        qaoa = QAOA(self.qubit_op, COBYLA(maxiter=500), initial_point=[0., 0.])

        backend = BasicAer.get_backend('statevector_simulator')
        quantum_instance = QuantumInstance(backend=backend,
                                           seed_simulator=self.seed,
                                           seed_transpiler=self.seed)
        result = qaoa.run(quantum_instance)
        selection = sample_most_likely(result.eigenstate)
        value = portfolio.portfolio_value(selection, self.muu, self.sigma,
                                          self.risk, self.budget, self.penalty)
        np.testing.assert_array_equal(selection, [0, 1, 1, 0])
        self.assertAlmostEqual(value, -0.00679917)
Пример #12
0
    def test_qaoa_random_initial_point(self):
        """ QAOA random initial point """
        aqua_globals.random_seed = 10598
        w = nx.adjacency_matrix(
            nx.fast_gnp_random_graph(5, 0.5,
                                     seed=aqua_globals.random_seed)).toarray()
        qubit_op, _ = max_cut.get_operator(w)
        qaoa = QAOA(qubit_op, NELDER_MEAD(disp=True), 1)

        quantum_instance = QuantumInstance(
            BasicAer.get_backend('qasm_simulator'),
            seed_simulator=aqua_globals.random_seed,
            seed_transpiler=aqua_globals.random_seed,
            shots=4096)
        _ = qaoa.run(quantum_instance)

        np.testing.assert_almost_equal([2.5179, 0.3528],
                                       qaoa.optimal_params,
                                       decimal=4)
Пример #13
0
    def test_qaoa_qc_mixer_no_parameters(self):
        """ QAOA test with a mixer as a parameterized circuit with zero parameters. """
        seed = 0
        aqua_globals.random_seed = seed

        qubit_op, _ = max_cut.get_operator(W1)
        qubit_op = qubit_op.to_opflow()

        num_qubits = qubit_op.num_qubits
        mixer = QuantumCircuit(num_qubits)
        # just arbitrary circuit
        mixer.rx(np.pi / 2, range(num_qubits))

        qaoa = QAOA(qubit_op, optimizer=COBYLA(), p=1, mixer=mixer)
        backend = BasicAer.get_backend('statevector_simulator')
        quantum_instance = QuantumInstance(backend,
                                           seed_simulator=seed,
                                           seed_transpiler=seed)
        result = qaoa.run(quantum_instance)
        # we just assert that we get a result, it is not meaningful.
        self.assertIsNotNone(result.eigenstate)
Пример #14
0
def simulate_optimize(n_shots, p_steps, qubitOp, G):
    backend = BasicAer.get_backend('qasm_simulator')
    quantum_instance = QuantumInstance(backend, shots=n_shots)

    qaoa = QAOA(qubitOp, ESCH(max_evals=100), p=p_steps)
    result = qaoa.run(quantum_instance)

    # QAOA converts the problem into finding the maximum eigenval/eigenvec pair
    solution = max_cut.sample_most_likely(
        result['eigvecs'][0])  #returns vector with highest counts
    #print('energy:', result['energy'])
    print('solution:', solution)

    # For p steps, there should be 2*p parameters (beta,gamma)
    #print('optimal parameters', result['opt_params'])
    cost = 0
    for i in range(len(G.nodes)):
        for j in range(len(G.nodes)):
            cost = cost + adj[i, j] * solution[i] * (1 - solution[j])
    print("Sample profit = {}".format(cost))

    return result, solution
Пример #15
0
pos = nx.spring_layout(G)

w = my_graphs.adjacency_matrix(G)
print("\nAdjacency matrix\n", w, "\n")

# setting p
p = 1

# ... QAOA ...
# Create an Ising Hamiltonian with docplex.
mdl = Model(name='max_cut')
mdl.node_vars = mdl.binary_var_list(list(range(n)), name='node')
maxcut_func = mdl.sum(w[i, j] * mdl.node_vars[i] * (1 - mdl.node_vars[j])
                      for i in range(n) for j in range(n))
mdl.maximize(maxcut_func)
qubit_op, offset = docplex.get_operator(mdl)

# Run quantum algorithm QAOA on qasm simulator
optimizer = NELDER_MEAD()
qaoa = QAOA(qubit_op, optimizer, p=p)
backend = Aer.get_backend('qasm_simulator')
quantum_instance = QuantumInstance(backend, shots=1000)
result = qaoa.run(quantum_instance)

x = sample_most_likely(result.eigenstate)
print('energy:', result.eigenvalue.real)
print('time:', result.optimizer_time, 's')
print('max-cut objective:', result.eigenvalue.real + offset)
print('solution:', max_cut.get_graph_solution(x))
print('solution objective:', max_cut.max_cut_value(x, w))
print('angles:', result.optimal_point)
Пример #16
0
def run_experiment(
    G,
    p,
    optimizer,
    backend,
    n_shots=100,  #important for running time, max is 8192
    print_result=False,
    skip_qobj_validation=False,
    noise_model=None,
    coupling_map=None,
    basis_gates=None,
):
    '''Runs (Qiskit) QAOA experiment with the given parameters
    Inputs
    - G, graph
    - p, number of angles
    - optimizer, classical optimizer
    - backend
    - number of shots (n_shots) - Note, this parameter is important for running time but also affects accuracy if too low
    - ...
    
    Returns a dictionary with the following keys
    - energy
    - time (in seconds)
    - iterations
    - max-cut objective
    - solution
    - solution objective
    - eigenstate distribution
    - angles
    
    '''

    n = len(G)  # number of nodes
    w = adjacency_matrix(G)  # calculating adjacency matrix from graph

    # ... QAOA ...
    # Create an Ising Hamiltonian with docplex.
    mdl = Model(name='max_cut')
    mdl.node_vars = mdl.binary_var_list(list(range(n)), name='node')
    maxcut_func = mdl.sum(w[i, j] * mdl.node_vars[i] * (1 - mdl.node_vars[j])
                          for i in range(n) for j in range(n))
    mdl.maximize(maxcut_func)
    qubit_op, offset = docplex.get_operator(mdl)

    # Construct a circuit from the model
    qaoa = QAOA(qubit_op, optimizer, p=p)
    quantum_instance = QuantumInstance(
        backend,
        shots=n_shots,
        skip_qobj_validation=skip_qobj_validation,
        coupling_map=coupling_map,
        basis_gates=basis_gates,
        noise_model=noise_model)

    # Run quantum algorithm QAOA on the backend
    result = qaoa.run(quantum_instance)
    x = sample_most_likely(result.eigenstate)

    # Results
    energy = result.eigenvalue.real
    time = result.optimizer_time
    iterations = result.optimizer_evals
    objective = result.eigenvalue.real + offset  # why offset?
    solution = max_cut.get_graph_solution(x)
    solution_objective = max_cut.max_cut_value(x, w)
    distribution = result.eigenstate
    angles = result.optimal_point

    if print_result:
        print('energy:', energy)
        print('time:', time, 's')
        print('max-cut objective:', objective)
        print('solution:', solution)
        print('solution objective:', solution_objective)
        print('angles:', angles)

    return {
        'energy': energy,
        'time': time,
        'iterations': iterations,
        'max-cut objective': objective,
        'solution': solution,
        'solution objective': solution_objective,
        'distribution': distribution,
        'angles': angles,
        'n_shots': n_shots
    }
Пример #17
0
    def test_readme_sample(self):
        """ readme sample test """

        # pylint: disable=import-outside-toplevel,redefined-builtin

        def print(*args):
            """ overloads print to log values """
            if args:
                self.log.debug(args[0], *args[1:])

        # --- Exact copy of sample code ----------------------------------------

        import networkx as nx
        import numpy as np
        from docplex.mp.model import Model

        from qiskit import BasicAer
        from qiskit.aqua import aqua_globals, QuantumInstance
        from qiskit.aqua.algorithms import QAOA
        from qiskit.aqua.components.optimizers import SPSA
        from qiskit.optimization.applications.ising import docplex, max_cut
        from qiskit.optimization.applications.ising.common import sample_most_likely

        # Generate a graph of 4 nodes
        n = 4
        graph = nx.Graph()
        graph.add_nodes_from(np.arange(0, n, 1))
        elist = [(0, 1, 1.0), (0, 2, 1.0), (0, 3, 1.0), (1, 2, 1.0),
                 (2, 3, 1.0)]
        graph.add_weighted_edges_from(elist)
        # Compute the weight matrix from the graph
        w = np.zeros([n, n])
        for i in range(n):
            for j in range(n):
                temp = graph.get_edge_data(i, j, default=0)
                if temp != 0:
                    w[i, j] = temp['weight']

        # Create an Ising Hamiltonian with docplex.
        mdl = Model(name='max_cut')
        mdl.node_vars = mdl.binary_var_list(list(range(n)), name='node')
        maxcut_func = mdl.sum(w[i, j] * mdl.node_vars[i] *
                              (1 - mdl.node_vars[j]) for i in range(n)
                              for j in range(n))
        mdl.maximize(maxcut_func)
        qubit_op, offset = docplex.get_operator(mdl)

        # Run quantum algorithm QAOA on qasm simulator
        seed = 40598
        aqua_globals.random_seed = seed

        spsa = SPSA(max_trials=250)
        qaoa = QAOA(qubit_op, spsa, p=5)
        backend = BasicAer.get_backend('qasm_simulator')
        quantum_instance = QuantumInstance(backend,
                                           shots=1024,
                                           seed_simulator=seed,
                                           seed_transpiler=seed)
        result = qaoa.run(quantum_instance)

        x = sample_most_likely(result.eigenstate)
        print('energy:', result.eigenvalue.real)
        print('time:', result.optimizer_time)
        print('max-cut objective:', result.eigenvalue.real + offset)
        print('solution:', max_cut.get_graph_solution(x))
        print('solution objective:', max_cut.max_cut_value(x, w))

        # ----------------------------------------------------------------------

        self.assertListEqual(
            max_cut.get_graph_solution(x).tolist(), [1, 0, 1, 0])
        self.assertAlmostEqual(max_cut.max_cut_value(x, w), 4.0)
Пример #18
0
    # (("GBP", "EUR"), 1.),
    # (("EUR", "GBP"), 1.3),
    # no arb
    # (("EUR", "GBP"), 0.88),
    # (("GBP", "EUR"), 1.13),
    # (("EUR", "CAD"), 1.47),
    # (("CAD", "EUR"), 0.68),
    # (("GBP", "CAD"), 1.65),
    # (("CAD", "GBP"), 0.6),
    # GBP -> EUR -> CAD -> GBP makes you money. The other cycles do not.
    (("EUR", "GBP"), 0.88),
    (("GBP", "EUR"), 1.13),
    (("EUR", "CAD"), 1.58),
    (("CAD", "EUR"), 0.61),
    (("GBP", "CAD"), 1.65),
    (("CAD", "GBP"), 0.6),
))
op = get_cost_hamiltonian(rates, 1, 1)
#%%
ee = ExactEigensolver(op)
result = ee.run()
print(bin(result['eigvecs'][0].argmax()))
#%%
p = 1
optimizer = COBYLA()
qaoa = QAOA(op, optimizer, p)
backend = BasicAer.get_backend('statevector_simulator')
quantum_instance = QuantumInstance(backend)
r2 = qaoa.run(quantum_instance)
print(bin(np.absolute(r2['eigvecs'][0]).argmax()))
Пример #19
0
def libraryoptimize(qubo,
                    edges,
                    cedges,
                    n,
                    p,
                    plotoptangles=False,
                    modulo=False):
    if (qubo == "qubo1"):
        H = makeNPMatrix1(edges, cedges, n)
    if (qubo == "qubo2"):
        H = makeNPMatrix2(edges, cedges, n)
    if (qubo == "qubo3"):
        H = makeNPMatrix2(edges, cedges, n)

    optimizer = COBYLA()
    qaoa_mes = QAOA(H,
                    p=p,
                    optimizer=optimizer,
                    quantum_instance=Aer.get_backend('statevector_simulator'))
    results = qaoa_mes.run()
    qc1 = qaoa_mes.get_optimal_circuit()
    print(type(results.optimal_parameters))
    print(type(results.optimal_parameters.items()))
    i = 0
    for key, value in results.optimal_parameters.items():
        if (i == 0):
            gamma = value
            i += 1
        else:
            beta = value
    print("beta", beta)
    print("gamma", gamma)
    print('optimal params:      ', results.optimal_parameters)
    print('optimal value:       ', results.optimal_value)
    qcl = qaoa_mes.get_optimal_circuit()
    optgammasbetas = []
    isgamma = 0
    for key, value in results.optimal_parameters.items():
        if (modulo):
            if (isgamma < p):
                optgammasbetas.append(value % (2 * math.pi))
                isgamma += 1
            else:
                optgammasbetas.append(value % (math.pi))
        else:
            optgammasbetas.append(value)

    if (plotoptangles):
        plottheoptangles(optgammasbetas, p)
    if (qubo == "qubo1"):
        qc = makeCircuit1(n, edges, cedges, optgammasbetas, p)
    if (qubo == "qubo2"):
        qc = makeCircuit2(n, edges, cedges, optgammasbetas, p)
    if (qubo == "qubo3"):
        qc = makeCircuit3(n, edges, cedges, optgammasbetas, p)

    ans = ClassicalRegister(n)
    sol = QuantumRegister(n)
    QAOA2 = QuantumCircuit(sol, ans)
    QAOA2.append(qc1, range(n))
    return qc, optgammasbetas