def generate_uccsd(molecule_data):
    molecule, qubitOp, map_type, num_particles, num_spin_orbitals = load_qubitop_for_molecule(molecule_data)
    nuclear_repulsion_energy = molecule.nuclear_repulsion_energy

    print("# of electrons: {}".format(num_particles))
    print("# of spin orbitals: {}".format(num_spin_orbitals))
    qubit_reduction = False
    HF_state = HartreeFock(num_spin_orbitals, num_particles, map_type, qubit_reduction)
    uccsd_ansatz = UCCSD(reps=1,
                   num_orbitals=num_spin_orbitals, num_particles=num_particles,
                   initial_state=HF_state, qubit_mapping=map_type, 
                   two_qubit_reduction=qubit_reduction)
    circ = uccsd_ansatz.construct_circuit([0.4242] *
                                          uccsd_ansatz.num_parameters)
    circ.measure_all()
    circ_transpiled = processor.transpile(circ)

    q_layer = qiskit2tq(circ_transpiled)
    for name, param in q_layer.named_parameters():
        if not (param % (np.pi / 2)).detach().cpu().numpy().any():
            param.requires_grad = False

    #randlist = np.random.rand(uccsd_ansatz.num_parameters) # ansatz parameters
    #uccsd_ansatz_circuit = uccsd_ansatz.construct_circuit(randlist)
    return q_layer
Esempio n. 2
0
    def _build(self):
        # wipe current state
        self._data = []
        self.qregs = []
        self._qubits = []
        self._parameter_table = ParameterTable()
        print(self.parameters)

        # get UCCSD circuit
        uccsd = UCCSDVarForm(self._num_orbitals, self._num_particles,
                             self.reps)
        params = ParameterVector('th', uccsd.num_parameters)
        circuit = uccsd.construct_circuit(params)

        # transpile to a basis gate set we can handle in the gradient calculation
        transpiled = transpile(circuit, basis_gates=['sx', 'rz', 'cx'])

        # add to self and store the parametervector for assigning
        self._params = params
        qreg = QuantumRegister(uccsd.num_qubits)
        self.add_register(qreg)
        self.compose(transpiled, inplace=True)
Esempio n. 3
0
                         num_particles=core._molecule_info['num_particles'],
                         sq_list=sqlist)
circuit = init_state.construct_circuit()

outfile.write("\nHartree-Fock energy %f \n" % (molecule.hf_energy))
outfile.write("\nHartree-Fock circuit\n")
outfile.write(str(circuit.draw()) + "\n")

var_form = UCCSD(num_orbitals=core._molecule_info['num_orbitals'],
                 num_particles=core._molecule_info['num_particles'],
                 active_occupied=None,
                 active_unoccupied=None,
                 initial_state=init_state,
                 qubit_mapping=core._qubit_mapping,
                 two_qubit_reduction=core._two_qubit_reduction,
                 num_time_slices=1,
                 z2_symmetries=z2syms)

optimizer = L_BFGS_B(maxiter=1000)
algo = VQE(H_op, var_form, optimizer, aux_operators=A_op)

backend = Aer.get_backend('statevector_simulator')
quantum_instance = QuantumInstance(backend=backend)
algo_result = algo.run(quantum_instance)
get_results(H_op, A_op, molecule, core, algo_result, outfile)
print_UCCSD_parameters(molecule, core, var_form, algo_result, z2syms, sqlist,
                       orb_red, outfile)
print_circuit_requirements(
    var_form.construct_circuit(algo_result['optimal_point']),
    'ibmq_16_melbourne', 3, range(H_op.num_qubits), outfile)
Esempio n. 4
0
                # print(n_orbitals)
                initial_hf = HartreeFock(num_qubits=n_qubits,
                                         num_orbitals=n_orbitals,
                                         qubit_mapping=core._qubit_mapping,
                                         two_qubit_reduction=False,
                                         num_particles=n_electrons)
                var_form = UCCSD(num_qubits=n_qubits,
                                 num_orbitals=n_orbitals,
                                 num_particles=n_electrons,
                                 depth=1,
                                 initial_state=initial_hf,
                                 qubit_mapping=core._qubit_mapping,
                                 two_qubit_reduction=False)
                number_amplitudes = len(var_form._single_excitations) + len(
                    var_form._double_excitations)
                amplitudes = [1e-4] * number_amplitudes
                circuit = var_form.construct_circuit(amplitudes)
                dag = circuit_to_dag(circuit)
                dag = Unroller(['cx', 'u1', 'u3']).run(dag)
                circuit = dag_to_circuit(dag)
                qasm = circuit.qasm()
                filename = '{m}_{f}_{q}_{b}.qasm'.format(
                    m=mol_name,
                    f=('frz' if freeze_core else 'cmplt'),
                    q=qm_name,
                    b=basis)
                with open(filename, 'w') as ofile:
                    ofile.write(qasm)
                print(filename)
                print(circuit.count_ops())
Esempio n. 5
0
                 active_unoccupied=None,
                 initial_state=init_state,
                 qubit_mapping=core._qubit_mapping,
                 two_qubit_reduction=core._two_qubit_reduction,
                 num_time_slices=1,
                 z2_symmetries=z2syms)

optimizer = SPSA(max_trials=100)
algo = VQE(H_op, var_form, optimizer, aux_operators=A_op)

backend = Aer.get_backend('qasm_simulator')
provider = IBMQ.load_account()
provider = IBMQ.get_provider(hub='ibm-q-internal',
                             group='deployed',
                             project='default')
device = provider.get_backend('ibmq_athens')
quantum_instance = QuantumInstance(
    backend=backend,
    noise_model=NoiseModel.from_backend(device.properties()),
    coupling_map=device.configuration().coupling_map,
    measurement_error_mitigation_cls=CompleteMeasFitter,
    shots=8092)
algo_result = algo.run(quantum_instance)
get_results(H_op, A_op, molecule, core, algo_result, outfile)
print_UCCSD_parameters(molecule, core, var_form, algo_result,
                       core._molecule_info['z2symmetries'], sqlist, orb_red,
                       outfile)
print_circuit_requirements(
    var_form.construct_circuit(algo_result['optimal_point']), 'ibmq_athens', 3,
    range(H_op.num_qubits), outfile)