在QISKit中的单个量子程序中组成多个量子电路


9

我想知道是否有一种方法可以组成一个具有多个量子电路的程序,而不必为每个电路将寄存器重新初始化为。0

具体来说,我想在运行第一个量子电路之后再运行第二个量子电路,如下例所示:

qp = QuantumProgram()
qr = qp.create_quantum_register('qr',2)
cr = qp.create_classical_register('cr',2)

qc1 = qp.create_circuit('B1',[qr],[cr])
qc1.x(qr)

qc1.measure(qr[0], cr[0])
qc1.measure(qr[1], cr[1])

qc2 = qp.create_circuit('B2', [qr], [cr])
qc2.x(qr)
qc2.measure(qr[0], cr[0])
qc2.measure(qr[1], cr[1])

#qp.add_circuit('B1', qc1)
#qp.add_circuit('B2', qc2)

pprint(qp.get_qasms())

result = qp.execute()

print(result.get_counts('B1'))
print(result.get_counts('B2'))

不幸的是,我得到的是两次运行的结果相同(即11B1B2而不是1100第二次的计数,就好像B2是在00after之后初始化的全新状态下运行一样B1


1
因此,当您想要一个由多个部分组成的长电路,并且希望能够看到每个部分之后的输出时,我能理解吗?
詹姆斯·伍顿

是。想象一下,我有一个给我电路的代码库,我希望能够将它们组成一个谜题:)
asdf

(该措施只是为了向您表明这不是预期的行为)
asdf

Answers:


2

在Qiskit中,您可以组成两个电路以组成更大的电路。您只需+在电路上使用运算符就可以做到这一点。

这是重写您的程序来说明这一点(注意:为此,您需要最新版本的Qiskit,使用进行升级pip install -U qiskit)。

from qiskit import *
qr = QuantumRegister(2)
cr = ClassicalRegister(2)
qc1 = QuantumCircuit(qr, cr)
qc1.x(qr)

qc2 = QuantumCircuit(qr, cr)
qc2.x(qr)

qc3 = qc1 + qc2

您可以看到qc3是q1和q2的串联。

print(qc3.qasm())

产量:

OPENQASM 2.0;
include "qelib1.inc";
qreg q0[2];
creg c0[2];
x q0[0];
x q0[1];
x q0[0];
x q0[1];

现在,您似乎想对状态进行两次探测:一次在qc1结束的地方,一次在qc2结束的地方。您可以在模拟器中通过插入snapshot命令来执行此操作。这将在电路的给定点保存状态向量。它不会使状态崩溃。

from qiskit.extensions.simulator import *
qc1.snapshot('0')    # save the snapshot in slot "0"
qc2.snapshot('1')    # save the snapshot in slot "1"
qc2.measure(qr, cr)  # measure to get final counts

qc3 = qc1 + qc2

您现在可以qc3在模拟器上执行。

job = execute(qc3, 'local_qasm_simulator')
result = job.result()
print(result.get_snapshot('0'))
print(result.get_snapshot('1'))
print(result.get_counts())

收益率:[0. + 0.j 0. + 0.j 0. + 0.j 1. + 0.j] [1. + 0.j 0. + 0.j 0. + 0.j 0. + 0.j] {'00':1024}

因此状态如预期般返回| 00>。


0

一旦进行测量,量子态/寄存器的波函数就会崩溃,并且失去其量子性质。在其上施加其他电路没有任何意义。


当然肯定,但如果我删除的措施,我希望得到00,而我得到1.措施只是为了表明我要开始初始化为11量子比特的第二电路
航空自卫队

确实,我希望我的波函数在量子状态下崩溃,而不是在00时崩溃(如果您希望那样的话……)
asdf

2
@Vidya我知道它崩溃了,但是我不同意在先前电路的崩溃输出上应用另一个电路是没有意义的。
JanVdA
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.