Lumaktaw sa pangunahing nilalaman
Ang proyektong ito ay nasa beta. Nakakita ng bug? Mag-bukas ng GitHub issue. May tanong o ideya? Magtanong sa Discussions — gusto naming marinig ang iyong feedback!
Gaano kaganda ang kalidad ng pagsasalin sa pahinang ito?

I-transpile ang mga fermionic circuit

Mahalaga

Ang mga konsepto sa gabay na ito ay kasalukuyang magagamit lang sa Python API. Magiging available ang katumbas na functionality sa C API sa isang susunod na release.

Ipinapaliwanag ng gabay na ito kung paano i-transpile ang isang FermionicCircuit sa karaniwang QuantumCircuit. Ipinagpapatuloy nito ang parehong halimbawa ng time evolution mula sa gabay sa fermionic circuit.

Mga stage ng transpilation​

Gaya ng ipinaliwanag sa qiskit_fermions.transpiler, hinahati ng mga preset pass manager sa proyektong ito ang transpilation sa mga sumusunod na stage:

Pasok​

Kino-convert ang input circuit sa isang directed acyclic graph (DAG) na data structure.

Pag-optimize​

Pinananatili ang circuit sa fermionic space. Ginagamit ng mga pass na ito ang fermionic structure at mga commutation relation habang ganap pang magagamit ang kaalamang may kinalaman sa problema. Ang F2FSynthesis ang pass na nagte-Trotterize ng isang Evolution gate dito, gamit ang product formula o ang FermionicQDrift, at ang QDriftTrotterization ang occupation-aware na variant nito; tingnan ang Optimization Passes para sa buong set at ang Mag-synthesize ng Evolution gate sa fermionic space para sa kung paano pinipili ang product formula.

Pagkakaayos​

Minamapa ang mga fermionic mode register sa mga quantum register. Para sa mga occupation-basis mapping tulad ng Jordan-Wigner, ang bawat fermionic mode ay minamapa sa iisang qubit. Sinusuportahan din ng stage na ito ang mas pangkalahatang mapping kung saan iba ang bilang ng mga qubit sa bilang ng mga fermionic mode.

Sintesis​

Kino-convert ang mga fermionic gate sa mga qubit operation gamit ang napiling fermion-to-qubit mapping. Ang mga instance ng FermionicGate ay ginagawang mga sequence ng karaniwang quantum gate. Ang isang barrier ay dinadala sa bawat qubit ng bawat register na hinawakan nito, kaya patuloy nitong pinaghihiwalay ang mga gate sa magkabilang panig nito sa qubit stage.

Qubit​

Tina-transpile ang resultang qubit circuit gamit ang mga karaniwang paraan ng Qiskit, kasama ang optimization, layout, at routing para sa target mong hardware.

Resulta​

Kino-convert ang internal na DAG data structure sa nais na output format.

Isang praktikal na halimbawa: transpilation gamit ang Jordan-Wigner​

Gamitin ang preset pass manager para i-transpile ang iyong fermionic circuit gamit ang Jordan-Wigner fermion-to-qubit mapping:

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

Ihambing sa tradisyonal na workflow​

Inilalarawan ng gabay sa fermionic circuit kung paano ginagawa ng tradisyonal na workflow ang fermion-to-qubit encoding bago buuin ang QuantumCircuit. Ihambing ang dalawang diskarte:

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

Parehong gumagawa ng magkaparehong circuit ang dalawang workflow. Gayunman, kailangan mong ipatupad nang mano-mano ang mga optimization step sa tradisyonal na workflow, samantalang sa fermionic-first na diskarte ay maisasama mo ang mga optimization na may kamalayan sa problema sa proseso ng transpilation.

Mga advanced na workflow​

Ang preset pass manager ay nagbibigay ng maginhawang panimulang punto. Para sa mas advanced na gamit, maaari mong gawin ang sumusunod:

  • I-customize ang mga transpiler pass na tumatakbo sa bawat stage.

  • Piliin ang product formula na nagte-Trotterize ng isang Evolution gate sa fermionic space, kada gate man o para sa buong pipeline gamit ang F2FSynthesis (tingnan ang Mag-synthesize ng Evolution gate sa fermionic space).

  • Magpatupad ng mga custom na fermion-to-qubit mapping sa pamamagitan ng paggawa ng mga synthesis plugin (tingnan ang F2QSynthesisPlugin).

  • Bumuo ng mga custom na transpiler pass.