Langkau ke kandungan utama
Projek ini dalam fasa beta. Jumpa pepijat? Buat isu GitHub. Ada soalan atau idea? Tanya dalam Discussions — kami suka dengar maklum balas anda!
Bagaimana kualiti terjemahan pada halaman ini?

Transpile litar fermionik

Penting

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:

>>> 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 transpiled QuantumCircuit of the fermionic time evolution.

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 ...>

The directly constructed QuantumCircuit of the fermionic time evolution.

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 Evolution dalam ruang fermionik, sama ada bagi setiap get atau bagi keseluruhan saluran paip dengan F2FSynthesis (lihat Sintesis get Evolution dalam ruang fermionik).

  • Laksanakan pemetaan fermion-ke-qubit tersuai dengan mencipta pemalam sintesis (lihat F2QSynthesisPlugin).

  • Bina laluan transpiler tersuai.