如何在 Qiskit 中构建一个复杂的受控门?

How to build a complex controlled gate in the Qiskit?

我从事量子计算方面的理论任务,并使用 Qiskit 进行简单的实验。不幸的是,我找不到一种方法来在那里制作复杂的控制门,控制在量子寄存器中。

我想要一个 "c_if" 类似物,它可以链接起来并使用量子位作为控制。 好像

swap(q1, q2).c_if(q0,Zero).c_if(q3,One)

qiskit中有这样的操作吗?如果它不存在,我怎么能模拟这样的操作?

查看 MCXGate 的 Qiskit 文档,称为多控制 X 门。此门可让您定义要包含多少控制量子位(可能是您的量子寄存器的大部分)并定义控制状态。


from qiskit import * 

my_circuit = QuantumRegister(3,3)

my_circuit.append(circuit.library.MCXGate(2, ctrl_state='10'), [0,1,2]) 
   

查看文档 here

还有一些变体可以执行 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()

代码给了我一个结果