コード例 #1
0
    def test_qaoa_initial_state(self, w, init_state):
        """ QAOA initial state test """

        optimizer = COBYLA()
        qubit_op, _ = max_cut.get_operator(w)

        init_pt = [0.0, 0.0]  # Avoid generating random initial point

        if init_state is None:
            initial_state = None
        else:
            initial_state = Custom(num_qubits=4, state_vector=init_state)

        quantum_instance = QuantumInstance(
            BasicAer.get_backend('statevector_simulator'))
        qaoa_zero_init_state = QAOA(qubit_op,
                                    optimizer,
                                    initial_point=init_pt,
                                    initial_state=Zero(qubit_op.num_qubits),
                                    quantum_instance=quantum_instance)
        qaoa = QAOA(qubit_op,
                    optimizer,
                    initial_point=init_pt,
                    initial_state=initial_state,
                    quantum_instance=quantum_instance)

        zero_circuits = qaoa_zero_init_state.construct_circuit(init_pt)
        custom_circuits = qaoa.construct_circuit(init_pt)

        self.assertEqual(len(zero_circuits), len(custom_circuits))

        backend = BasicAer.get_backend('statevector_simulator')
        for zero_circ, custom_circ in zip(zero_circuits, custom_circuits):

            z_length = len(zero_circ.data)
            c_length = len(custom_circ.data)

            self.assertGreaterEqual(c_length, z_length)
            self.assertTrue(zero_circ.data == custom_circ.data[-z_length:])

            custom_init_qc = custom_circ.copy()
            custom_init_qc.data = custom_init_qc.data[0:c_length - z_length]

            if initial_state is None:
                original_init_qc = QuantumCircuit(qubit_op.num_qubits)
                original_init_qc.h(range(qubit_op.num_qubits))
            else:
                original_init_qc = initial_state.construct_circuit()

            job_init_state = execute(original_init_qc, backend)
            job_qaoa_init_state = execute(custom_init_qc, backend)

            statevector_original = job_init_state.result().get_statevector(
                original_init_qc)
            statevector_custom = job_qaoa_init_state.result().get_statevector(
                custom_init_qc)

            self.assertEqual(statevector_original.tolist(),
                             statevector_custom.tolist())
コード例 #2
0
def objective(params):
    
    
    aqua_globals.random_seed = 10598
    quantum_instance = QuantumInstance(Aer.get_backend('qasm_simulator'),
                                   seed_simulator=aqua_globals.random_seed,
                                   seed_transpiler=aqua_globals.random_seed)
    qaoa_mes = QAOA(quantum_instance=quantum_instance,operator = qubitOp,p=n_layers,initial_point= params)   
    circuit2 = QuantumCircuit(n**2)
    circuit = qaoa_mes.construct_circuit(params)
    
    
    #create measurements on classical register
    reg = ClassicalRegister(n**2)
    circuit[0].add_register(reg)
    circuit[0].measure(range(n**2),range(n**2))
    
    
    # Execution of circuit(either simulation or on real quantum machines)
    backend      = Aer.get_backend("qasm_simulator")
    shots        = 1024

    simulate     = execute(circuit[0], backend=backend, shots=shots)
    QAOA_results = simulate.result()
    
    val = 0
    # Evaluate the data from the simulator
    counts = QAOA_results.get_counts()

    expectedCost       = 0
    maxCost       = [0,0]
    hist        = {}
    
    
    for sample in list(counts.keys()):
     
     # use sampled bit string x to compute C(x)
     x2  = [int(num) for num in list(sample)]
     tmp_eng   = cost_function_C(x2)
    
     # compute the expectation value and energy distribution
     expectedCost      = expectedCost     + counts[sample]*tmp_eng

    

    return expectedCost/shots; #/(shots);        
コード例 #3
0
                pauli_list.append([value, Pauli(zp, xp)])
    return WeightedPauliOperator(paulis=pauli_list), constant


isingdict ={(0,1):0.5,(1,2):0.5,(2,3):0.5,(3,4):0.5,():-2.0}
qubitOp, shift  = get_ising_qubitops(isingdict,5)

provider = OpenSuperQ_Provider()
backend = provider.get_backend('OSQ_ETH7_rev1')

optimizer = POWELL()

qaoa = QAOA(qubitOp, optimizer, p=1, operator_mode='paulis',initial_point=[0.0, 0.0])
quantum_instance = QuantumInstance(backend)

circ = qaoa.construct_circuit(parameter=[2.0, 1.0],circuit_name_prefix='Hello',statevector_mode=True)
latex = circ[0].draw(output='latex_source')

result = qaoa.run(quantum_instance)

print('shift: ', shift)
print('name: ', result.keys())
print([str(key) + " " + str(value) for key, value in result.items()])

plot_histogram(result['eigvecs'], figsize = (18,5))
x = max_cut.sample_most_likely(result['eigvecs'][0])
graph_solution = max_cut.get_graph_solution(x)
#qaoa._circuit.draw(output='mpl')

print('Hello')
コード例 #4
0
for i in range(len(sample)):
    if f[i] < f[best_index]:
        best_index = i
        
print(sample[best_index])


# creates circuit using qaoa instance and optimal parameters
aqua_globals.random_seed = 10598
quantum_instance = QuantumInstance(Aer.get_backend('qasm_simulator'),
                                   seed_simulator=aqua_globals.random_seed,
                                   seed_transpiler=aqua_globals.random_seed)
qaoa_mes = QAOA(quantum_instance=quantum_instance,operator = qubitOp,p=n_layers)  #initial_state = initial #initial_point=[0.,0.]
circuit2 = QuantumCircuit(n**2)
circuit = qaoa_mes.construct_circuit(sample[best_index])
    
reg = ClassicalRegister(n**2)
circuit[0].add_register(reg)
circuit[0].measure(range(n**2),range(n**2))


# Execution of circuit(either simulation or on real quantum machines)
backend      = Aer.get_backend("qasm_simulator")
shots        = 1024
simulate     = execute(circuit[0], backend=backend, shots=shots)
QAOA_results = simulate.result()


counts = QAOA_results.get_counts()
counts = {k: v for k, v in sorted(counts.items(), key=lambda item: item[1])}  #sort the counts dictionary