Transpilasi circuit fermionik
Konsep dalam panduan ini saat ini hanya tersedia di Python API. Fungsionalitas yang setara akan tersedia di C API pada rilis mendatang.
Panduan ini menjelaskan cara mentranspilasi FermionicCircuit menjadi QuantumCircuit standar. Panduan ini melanjutkan contoh evolusi waktu yang sama dari panduan circuit fermionik.
Tahap transpilasi
Seperti dijelaskan di qiskit_fermions.transpiler, pass manager preset dalam proyek ini membagi transpilasi menjadi tahap-tahap berikut:
Input
Mengubah circuit input menjadi struktur data directed acyclic graph (DAG).
Optimisasi
Menjaga circuit tetap dalam ruang fermionik. Pass ini memanfaatkan struktur fermionik dan relasi komutasi sementara pengetahuan yang sadar masalah tetap tersedia sepenuhnya. F2FSynthesis adalah pass yang mentrotterisasi gate Evolution di sini, dengan product formula atau dengan FermionicQDrift, dan QDriftTrotterization adalah varian yang sadar okupansi; lihat Optimization Passes untuk kumpulan lengkapnya dan Synthesize an Evolution gate in fermionic space untuk cara memilih product formula.
Tata letak
Memetakan register mode fermionik ke register kuantum. Untuk pemetaan basis okupansi seperti Jordan-Wigner, setiap mode fermionik dipetakan ke satu qubit. Tahap ini juga mendukung pemetaan yang lebih umum di mana jumlah qubit berbeda dari jumlah mode fermionik.
Sintesis
Mengubah gate fermionik menjadi operasi qubit dengan memakai pemetaan fermion-ke-qubit yang dipilih. Instance FermionicGate diubah menjadi rangkaian gate kuantum standar. Sebuah barrier diteruskan ke setiap qubit pada tiap register yang disentuhnya, sehingga barrier itu tetap memisahkan gate di kedua sisinya selama tahap qubit.
Qubit
Mentranspilasi circuit qubit yang dihasilkan dengan metode Qiskit standar, termasuk optimisasi, layout, dan routing untuk hardware targetmu.
Output
Mengubah struktur data DAG internal menjadi format output yang diinginkan.
Contoh praktis: transpilasi memakai Jordan-Wigner
Gunakan pass manager preset untuk mentranspilasi circuit fermionikmu 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 alur kerja tradisional
Panduan circuit fermionik menjelaskan bagaimana alur kerja tradisional melakukan encoding fermion-ke-qubit sebelum membangun QuantumCircuit. Bandingkan kedua 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 alur kerja menghasilkan circuit yang setara. Namun, alur kerja tradisional mengharuskanmu mengimplementasikan langkah optimisasi secara manual, sedangkan dengan pendekatan fermionic-first kamu bisa mengintegrasikan optimisasi yang sadar masalah ke dalam proses transpilasi.
Alur kerja lanjutan
Pass manager preset menyediakan titik awal yang praktis. Untuk kasus penggunaan yang lebih lanjut, kamu bisa melakukan hal berikut:
-
Sesuaikan pass transpiler yang dijalankan pada setiap tahap.
-
Pilih product formula yang mentrotterisasi gate
Evolutiondalam ruang fermionik, baik per gate maupun untuk seluruh pipeline denganF2FSynthesis(lihat Synthesize an Evolution gate in fermionic space). -
Implementasikan pemetaan fermion-ke-qubit kustom dengan membuat plugin sintesis (lihat
F2QSynthesisPlugin). -
Bangun pass transpiler kustom.