Je me demandais s'il y avait un moyen de composer un programme avec plusieurs circuits quantiques sans avoir réinitialisé le registre à pour chaque circuit.
Plus précisément, je voudrais exécuter un deuxième circuit quantique après avoir exécuté le premier, comme dans cet exemple:
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'))
Malheureusement, ce que j'obtiens est le même résultat pour les deux exécutions (c'est-à-dire un décompte de 11
pour B1
et B2
au lieu de 11
et 00
pour la seconde, comme s'il B2
était exécuté sur un état complètement nouveau initialisé 00
après B1
.
Réponses:
Dans Qiskit, vous pouvez composer deux circuits pour créer un circuit plus grand. Vous pouvez le faire simplement en utilisant l'
+
opérateur sur les circuits.Voici votre programme réécrit pour illustrer cela (note: vous avez besoin de la dernière version de Qiskit pour cela, mettez à niveau avec
pip install -U qiskit
).Vous pouvez voir que qc3 est une concaténation de q1 et q2.
Rendements:
Maintenant, vous semblez vouloir sonder l'état deux fois: une fois où se termine qc1, et une fois lorsque se termine qc2. Vous pouvez le faire dans un simulateur en insérant des
snapshot
commandes. Cela sauvera le vecteur d'état à un point donné du circuit. Il n'effondre pas l'État.Vous pouvez maintenant exécuter
qc3
sur un simulateur.Rendements: [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}
L'état revient donc à | 00> comme prévu.
la source
Une fois que vous effectuez une mesure, la fonction d'onde de l'état / registre quantique s'effondre et perd sa nature quantique. Cela n'a pas de sens d'appliquer un autre circuit dessus.
la source