QISKitの単一量子プログラムで複数の量子回路を構成する


9

各回路のレジスタをで再初期化せずに、複数の量子回路でプログラムを構成する方法があるかどうか疑問に思っていました。0

具体的には、次の例のように、最初の量子回路を実行した後に2番目の量子回路を実行したいと思います。

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'))

残念ながら、私が取得することのすなわちA数(二つの実験のために同じ結果である11ためB1B2の代わりに、1100あるかのように、第二のためB2に初期化され、完全に新しい状態で実行され00た後B1


1
では、複数のパーツで構成される1つの長い回路が必要で、各パーツの後に出力を表示したいので、それを理解できますか?
James Wootton

はい。回路を提供するコードベースがあり、それらをパズルとして構成できるようにしたいと想像してください:)
asdf

(測定は、予想される動作ではないことを示すためだけにあります)
asdf

回答:


2

Qiskitでは、2つの回路を構成してより大きな回路を作成できます。これ+は、回路で演算子を使用するだけで実行できます。

これを説明するために書き直したプログラムを次に示します(注:これには最新バージョンの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];

ここで、状態を2回プローブする必要があるようです。1回目はqc1が終了し、1回目は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

測定を行うと、量子状態/レジスタの波動関数が崩壊し、量子の性質が失われます。別の回路を適用しても意味がありません。


確かに確認してください、私はメジャーを削除した場合、私は1に対策を取得しながら、00を得ることを期待するだけで、私は11に初期化量子ビットと第二の回路を開始したいことを示すことである
空自

確かに、私は、波動関数を量子状態で崩壊させ、そのように配置したい場合には00ではなく崩壊させたい...
asdf

2
@Vidya私はそれが崩壊することを理解していますが、前の回路の崩壊した出力に別の回路を適用することは意味がないことに同意しません。
JanVdA
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.