Transpile litar fermionik
Konsep dalam panduan ini kini hanya tersedia dalam API Python. Fungsi setara akan disediakan dalam API C pada keluaran akan datang.
Panduan ini menerangkan cara mentranspile FermionicCircuit kepada QuantumCircuit standard. Ia menyambung contoh evolusi masa yang sama daripada panduan litar fermionik.
Peringkat transpilasi
Seperti yang diterangkan dalam qiskit_fermions.transpiler, pengurus laluan pratetap dalam projek ini membahagikan transpilasi kepada peringkat berikut:
Masukan
Menukarkan litar input kepada struktur data graf berarah tanpa kitaran (DAG).
Pengoptimuman
Mengekalkan litar dalam ruang fermionik. Laluan ini menggunakan struktur fermionik dan hubungan kekomutan manakala pengetahuan sedar-masalah kekal tersedia sepenuhnya. F2FSynthesis ialah laluan yang mentrotterisasi get Evolution di sini, dengan formula hasil darab atau dengan FermionicQDrift, dan QDriftTrotterization ialah varian sedar-penghunian daripadanya; lihat Laluan Pengoptimuman untuk set lengkap dan Sintesis get Evolution dalam ruang fermionik untuk cara formula hasil darab dipilih.
Susun atur
Memetakan daftar mod fermionik kepada daftar kuantum. Bagi pemetaan asas penghunian seperti Jordan-Wigner, setiap mod fermionik dipetakan kepada satu qubit. Peringkat ini juga menyokong pemetaan yang lebih umum di mana bilangan qubit berbeza daripada bilangan mod fermionik.
Sintesis
Menukarkan get fermionik kepada operasi qubit dengan menggunakan pemetaan fermion-ke-qubit yang dipilih. Instans FermionicGate diubah menjadi jujukan get kuantum standard. Sesuatu penghalang dibawa ke setiap qubit bagi setiap daftar yang disentuhnya, supaya ia terus memisahkan get di kedua-dua sisinya semasa peringkat qubit.
Qubit
Mentranspile litar qubit yang terhasil dengan menggunakan kaedah Qiskit standard, termasuk pengoptimuman, susun atur dan penghalaan untuk perkakasan sasaran anda.
Keluaran
Menukarkan struktur data DAG dalaman kepada format output yang dikehendaki.
Contoh praktikal: transpilasi menggunakan Jordan-Wigner
Gunakan pengurus laluan pratetap untuk mentranspile litar fermionik anda dengan pemetaan fermion-ke-qubit Jordan-Wigner:
- Python
- C
>>> from qiskit_fermions.circuit import FermionicCircuit
>>> from qiskit_fermions.circuit.library import Evolution
>>> from qiskit_fermions.operators import FermionOperator, cre, ann
>>> from qiskit_fermions.transpiler.presets import generate_preset_jw_pass_manager
>>>
>>> # Create the same fermionic circuit from the previous guide
>>> circuit = FermionicCircuit(4)
>>> hamiltonian = FermionOperator.from_terms([
... ([cre(0), ann(2)], 0.5),
... ([cre(2), ann(0)], 0.5),
... ([cre(1), ann(3)], 0.5),
... ([cre(3), ann(1)], 0.5),
... ])
>>> hamiltonian.groups = [0, 0, 1, 1]
>>> evolution = Evolution(4, hamiltonian, time=1.0)
>>> circuit.append(evolution, circuit.register)
>>>
>>> # Generate the Jordan-Wigner transpilation pipeline
>>> pm = generate_preset_jw_pass_manager()
>>>
>>> # Transpile the fermionic circuit to a qubit circuit
>>> qubit_circuit = pm.run(circuit)
>>>
>>> # The result is a standard QuantumCircuit
>>> print(type(qubit_circuit))
<class 'qiskit.circuit.quantumcircuit.QuantumCircuit'>
// The C API for transpilation will be made available in a future release.
Bandingkan dengan aliran kerja tradisional
Panduan litar fermionik menerangkan bagaimana aliran kerja tradisional melakukan pengekodan fermion-ke-qubit sebelum membina QuantumCircuit. Bandingkan kedua-dua pendekatan:
>>> from qiskit_fermions.mappers.library import jordan_wigner
>>> from qiskit.circuit import QuantumCircuit
>>> from qiskit.circuit.library import PauliEvolutionGate
>>>
>>> # Map the fermionic Hamiltonian to a qubit operator
>>> qubit_hamiltonian = jordan_wigner(hamiltonian, 4).simplify()
>>>
>>> # Build the QuantumCircuit directly
>>> quantum_circuit = QuantumCircuit(4)
>>> pauli_evolution = PauliEvolutionGate(qubit_hamiltonian, time=1.0)
>>> quantum_circuit.append(pauli_evolution, quantum_circuit.qubits)
<qiskit.circuit.instructionset.InstructionSet object at ...>
Kedua-dua aliran kerja menghasilkan litar yang setara. Walau bagaimanapun, aliran kerja tradisional memerlukan anda melaksanakan langkah pengoptimuman secara manual, manakala dengan pendekatan fermionik-dahulu anda boleh menyepadukan pengoptimuman sedar-masalah ke dalam proses transpilasi.
Aliran kerja lanjutan
Pengurus laluan pratetap menyediakan titik permulaan yang mudah. Untuk kes penggunaan yang lebih lanjutan, anda boleh melakukan perkara berikut:
-
Sesuaikan laluan transpiler yang dijalankan semasa setiap peringkat.
-
Pilih formula hasil darab yang mentrotterisasi get
Evolutiondalam ruang fermionik, sama ada bagi setiap get atau bagi keseluruhan saluran paip denganF2FSynthesis(lihat Sintesis get Evolution dalam ruang fermionik). -
Laksanakan pemetaan fermion-ke-qubit tersuai dengan mencipta pemalam sintesis (lihat
F2QSynthesisPlugin). -
Bina laluan transpiler tersuai.