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

불행하게도, 내가 무엇을 얻을 것은의 즉 수 (두 실행에 대해 동일한 결과 11에 대한 B1B2대신 11하고 00있는 것처럼, 두 번째에 B2에서 초기화 완전히 새로운 상태에서 실행 00한 후 B1.


1
여러 부품으로 구성된 하나의 긴 회로를 원할 때 이해할 수 있습니까? 각 부품 후에 출력을 볼 수 있기를 원합니까?
James Wootton

예. 회로를 제공하는 코드 기반이 있고이를 퍼즐로 구성 할 수 있기를 원한다고 상상해보십시오.)
asdf

(측정은 예상 된 동작이 아님을 보여주기위한 것입니다)
asdf

답변:


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

측정을 수행하면 양자 상태 / 레지스터의 파동 기능이 붕괴되고 양자 특성이 손실됩니다. 다른 회로를 적용하는 것은 의미가 없습니다.


확실히, 그러나 측정 값을 제거하면 1을 얻는 동안 00을 얻을 것으로 예상됩니다. 측정 값은 qubits가 11로 초기화 된 상태에서 두 번째 회로를 시작하려고한다는 것을 나타냅니다.
asdf

실제로 내 파형이 양자 상태에서 붕괴되기를 원하며 00으로 바꾸지 않으려면 00이 아닙니다.
asdf

2
@Vidya 나는 그것이 붕괴한다는 것을 이해하지만 이전 회로의 붕괴 된 출력에 다른 회로를 적용하는 것이 의미가 없다는 것에 동의하지 않습니다.
JanVdA
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.