1

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

我想要一个“c_if”模拟,它可以链接起来并使用量子位作为控制。喜欢

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

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

在此处输入图像描述

4

2 回答 2

1

查看 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 门或任何你喜欢的,这取决于电路是否看到正确的控制门。

于 2021-09-02T04:39:56.567 回答
1

感谢@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()

代码给了我一个结果

在此处输入图像描述

于 2021-09-24T19:30:05.757 回答