我从事量子计算的理论任务,并使用Qiskit进行简单的实验。不幸的是,我找不到一种方法来制作一个复杂的控制门,在那里,控制是在量子寄存器中。
我想有一个"c_if“模拟,它可以链接,并使用量子比特作为控制。Smth喜欢
swap(q1, q2).c_if(q0,Zero).c_if(q3,One)
qiskit中有这样的操作吗?如果这样的操作不存在,我怎么能模拟它?
发布于 2021-09-02 04:39:57
查看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门或任何你喜欢的,取决于电路是否看到正确的控制门。
发布于 2021-09-24 19:30:06
感谢@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()
代码给了我一个结果
https://stackoverflow.com/questions/61286903
复制相似问题