我从事量子计算的理论任务,并使用 Qiskit 进行简单的实验。不幸的是,我找不到一种方法如何在那里制作复杂的控制门,控制在量子寄存器中。
我想要一个“c_if”模拟,它可以链接起来并使用量子位作为控制。喜欢
swap(q1, q2).c_if(q0,Zero).c_if(q3,One)
qiskit中有这样的操作吗?如果它不存在,我怎么能模拟这样的操作?
我从事量子计算的理论任务,并使用 Qiskit 进行简单的实验。不幸的是,我找不到一种方法如何在那里制作复杂的控制门,控制在量子寄存器中。
我想要一个“c_if”模拟,它可以链接起来并使用量子位作为控制。喜欢
swap(q1, q2).c_if(q0,Zero).c_if(q3,One)
qiskit中有这样的操作吗?如果它不存在,我怎么能模拟这样的操作?
查看 MCXGate 的 Qiskit 文档,称为 Multi-controlled-X Gate。这个门可以让你定义你想要包含多少个控制量子位(可能是你的大部分量子寄存器)并定义一个控制状态。
from qiskit import *
my_circuit = QuantumRegister(3,3)
my_circuit.append(circuit.library.MCXGate(2, ctrl_state='10'), [0,1,2])
在此处查看文档。
还有一些变化可以做 Y 门 Z 门或任何你喜欢的,这取决于电路是否看到正确的控制门。
感谢@Dulah 的回答。我找到了我的旧样本,它们在 0.18.2 qiskit 版本中运行良好。
from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit, execute, Aer
from qiskit.circuit.library.standard_gates.x import XGate, MCXGate
from qiskit.circuit.library.standard_gates.swap import SwapGate
simulator = Aer.get_backend('qasm_simulator')
qreg = QuantumRegister(4)
creg = ClassicalRegister(4)
qc = QuantumCircuit(qreg, creg)
control1 = XGate().control(3, None, '110') #: old-style multy-controlled qubits
#control1 = MCXGate(3, None, '110') # fashion-style multi-controlled qubits
control2 = SwapGate().control(2, None, '10')
qc.append(control1, [0, 1, 2, 3])
qc.append(control2, [0, 1, 2, 3])
qc.measure(qreg,creg)
job = execute(qc, simulator, shots=1000)
result = job.result()
counts = result.get_counts(qc)
print("\nTotal count for 00 and 11 are:",counts)
qc.draw()
代码给了我一个结果