ทรานสไพล์วงจรเฟอร์มิออน
แนวคิดในคู่มือนี้ใช้ได้เฉพาะใน Python API ในขณะนี้ ฟังก์ชันการทำงานที่เทียบเท่ากันจะมีใน C API ในรุ่นอนาคต
คู่มือนี้อธิบายวิธีทรานสไพล์ FermionicCircuit เป็น QuantumCircuit มาตรฐาน โดยต่อจากตัวอย่างวิวัฒนาการตามเวลาเดียวกันจากคู่มือวงจรเฟอร์มิออน
สเตจการทรานสไพล์
ตามที่อธิบายใน qiskit_fermions.transpiler พาสเมเนเจอร์พรีเซ็ตในโปรเจกต์นี้แบ่งการทรานสไพล์เป็นสเตจต่อไปนี้:
อินพุต
แปลงวงจรอินพุตเป็นโครงสร้างข้อมูลกราฟไร้วงวนแบบมีทิศทาง (DAG)
การเพิ่มประสิทธิภาพ
คงวงจรไว้ในสเปซเฟอร์มิออน พาสเหล่านี้ใช้โครงสร้างเฟอร์มิออนและความสัมพันธ์การสลับที่ในขณะที่ความรู้เฉพาะปัญหายังมีครบ F2FSynthesis คือพาสที่ทำทรอตเตอร์ไรเซชัน Gate Evolution ที่นี่ ด้วยสูตรผลคูณหรือด้วย FermionicQDrift และ QDriftTrotterization คือตัวแปรที่คำนึงถึงการครอบครอง ดู Optimization Passes สำหรับชุดทั้งหมด และดู สังเคราะห์ Gate Evolution ในสเปซเฟอร์มิออน สำหรับวิธีเลือกสูตรผลคูณ
เลย์เอาต์
แมปรีจิสเตอร์เฟอร์มิออนไปยังรีจิสเตอร์ควอนตัม สำหรับการแมปฐานจำนวนครอบครองอย่าง Jordan-Wigner แต่ละโหมดเฟอร์มิออนแมปไปยังคิวบิตเดียว สเตจนี้ยังรองรับการแมปทั่วไปกว่าที่จำนวนคิวบิตต่างจากจำนวนโหมดเฟอร์มิออนด้วย
การสังเคราะห์
แปลง Gate เฟอร์มิออนเป็นการดำเนินการของคิวบิตโดยใช้การแมปเฟอร์มิออนเป็นคิวบิตที่เลือก อินสแตนซ์ของ FermionicGate ถูกแปลงเป็นลำดับของ Gate ควอนตัมมาตรฐาน แบริเออร์ถูกส่งผ่านไปยังทุกคิวบิตของแต่ละรีจิสเตอร์ที่มันแตะ จึงยังคงแยก Gate สองฝั่งของมันในสเตจคิวบิต
Qubit
ทรานสไพล์วงจรคิวบิตที่ได้โดยใช้วิธีมาตรฐานของ Qiskit รวมถึงการปรับให้เหมาะสม เลย์เอาต์ และการจัดเส้นทางสำหรับฮาร์ดแวร์เป้าหมายของคุณ
เอาต์พุต
แปลงโครงสร้างข้อมูล DAG ภายในเป็นรูปแบบเอาต์พุตที่ต้องการ
ตัวอย่างใช้งานจริง: การทรานสไพล์ด้วย Jordan-Wigner
ใช้พาสเมเนเจอร์พรีเซ็ตเพื่อทรานสไพล์วงจรเฟอร์มิออนด้วยการแมปเฟอร์มิออนเป็นคิวบิตแบบ 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.
เปรียบเทียบกับเวิร์กโฟลว์แบบดั้งเดิม
คู่มือวงจรเฟอร์มิออน อธิบายว่าเวิร์กโฟลว์แบบดั้งเดิมทำการเข้ารหัสเฟอร์มิออนเป็นคิวบิตก่อนสร้าง QuantumCircuit อย่างไร เปรียบเทียบสองแนวทาง:
>>> 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 ...>
ทั้งสองเวิร์กโฟลว์สร้างวงจรที่เทียบเท่ากัน อย่างไรก็ตาม เวิร์กโฟลว์แบบดั้งเดิมต้องให้คุณทำขั้นตอนการปรับให้เหมาะสมด้วยตนเอง ขณะที่แนวทางเฟอร์มิออนก่อนทำให้คุณผสานการปรับให้เหมาะสมที่คำนึงถึงปัญหาเข้าไปในกระบวนการทรานสไพล์ได้
เวิร์กโฟลว์ขั้นสูง
พาสเมเนเจอร์พรีเซ็ตเป็นจุดเริ่มต้นที่สะดวก สำหรับกรณีใช้งานขั้นสูงกว่า คุณสามารถทำสิ่งต่อไปนี้:
-
ปรับแต่งพาสทรานสไพล์เลอร์ที่รันในแต่ละสเตจ
-
เลือกสูตรผลคูณที่ทำทรอตเตอร์ไรเซชัน Gate
Evolutionในสเปซเฟอร์มิออน ไม่ว่าจะต่อ Gate หรือสำหรับทั้งไปป์ไลน์ด้วยF2FSynthesis(ดูสังเคราะห์ Gate Evolution ในสเปซเฟอร์มิออน) -
implement การแมปเฟอร์มิออนเป็นคิวบิตแบบกำหนดเองโดยสร้างปลั๊กอินการสังเคราะห์ (ดู
F2QSynthesisPlugin) -
สร้างพาสทรานสไพล์เลอร์แบบกำหนดเอง