울타리 방식의 양자컴퓨터로 반가법기의 필기를 만들다

13451 단어 QISKIT양자문
다음은 참고 문헌에 Qiskit의 그리드 방식을 사용한 양자컴퓨터의 학습 노트.
Qiskit은 Python의 모듈입니다.콘다가 설치되어 있으면 pip로 설치할 수 있습니다.
conda create -n qiskit python=3.8
conda activate qiskit
pip install jupyter matplotlib pylatexenc qiskit
양자문으로 반가법기를 조립하다
양자 비트의 덧셈을 두 개 하다.모드는 다음과 같습니다.
0 + 0 = 00
1 + 0 = 01
0 + 1 = 01
1 + 1 = 10
이번 양자회로는 입력 시 양자비트를 2개, 출력 시 양자비트를 2개 사용하기 때문에 총 4개의 양자비트를 준비한다.
회로 앞에 있는 두 개의 CNOT(cx)가 첫 번째 덧셈 회로다.CNOT는 제어 양자위(이번은 입력)가 1인 경우에만 출력(이번은 출력의 1위)의 위치를 반전시킨다.세 번째 Toffoli(ccx)는 두 개의 양자 비트의 AND 결과를 출력한다(이번에는 출력의 두 번째).
다음은 1과 1로 입력한 경우입니다.
# 4量子ビット、測定した結果は2つの量子回路を作成
qc_ha = QuantumCircuit(4,2)
# 入力値設定
qc_ha.x(0) # 1を設定(初期値が0なので1になる)
qc_ha.x(1) # 1を設定(初期値が0なので1になる)
# 回路
qc_ha.barrier()
qc_ha.cx(0,2)
qc_ha.cx(1,2)
qc_ha.ccx(0,1,3)
qc_ha.barrier()
# 結果計測
qc_ha.measure(2,0)
qc_ha.measure(3,1)
qc_ha.draw(output='mpl')

계산해봐.
sim = Aer.get_backend('aer_simulator')
counts = sim.run(qc_ha, shots=1000).result().get_counts()
# ヒストグラムで測定された確率をプロット
plot_histogram(counts)
1과 1을 입력하고 결과는 10입니다.입력을 변경할 때 입력 값 설정 부분을 주석으로 합니다.

중첩 상태의 입력을 반가법기에 넣으려고 시도하다
양자컴퓨터와 같지 않기 때문에 아다마멘에서는 0과 1의 상태를 확률의 50% 중첩 상태로 설정한다.
qc_ha = QuantumCircuit(4,2)
# 入力値設定
qc_ha.h(0) # Hゲートで確立0.5の重ね合わせ状態を設定
qc_ha.h(1) # Hゲートで確立0.5の重ね合わせ状態を設定
# 回路
qc_ha.barrier()
qc_ha.cx(0,2)
qc_ha.cx(1,2)
qc_ha.ccx(0,1,3)
qc_ha.barrier()
# 結果計測
qc_ha.measure(2,0)
qc_ha.measure(3,1)
qc_ha.draw(output='mpl')

계산해봐.
sim = Aer.get_backend('aer_simulator')
# 1000回ショット
counts = sim.run(qc_ha, shots=1000).result().get_counts()
# ヒストグラムで測定された確率をプロット
plot_histogram(counts)
입력한 양자 비트는 0이나 1이기 때문에 01의 출력은 00이나 10에 비해 약 2배이다.
0 + 0 = 00
1 + 0 = 01
0 + 1 = 01
1 + 1 = 10

시행 횟수를 더 늘리면 두 배가 된다.
sim = Aer.get_backend('aer_simulator')
# 1000000回ショット
counts = sim.run(qc_ha, shots=1000000).result().get_counts()
# ヒストグラムで測定された確率をプロット
plot_histogram(counts)

그나저나 한 번만 실행한 경우의 결과도 적어야 한다.
sim = Aer.get_backend('aer_simulator')
# 1回ショット
counts = sim.run(qc_ha, shots=1).result().get_counts()
# ヒストグラムで測定された確率をプロット
plot_histogram(counts)
매번 실행 결과는 00이 25%, 10이 50%, 11이 25%이다.(실행 결과마다 변경됨)

백엔드 변경
시뮬레이터도 변경할 수 있습니다.다음 명령 목록으로 백엔드를 표시할 수 있습니다.
백엔드는 다음 URL을 참조하십시오.
https://qiskit.org/documentation/locale/ja_JP/tutorials/simulators/1_aer_provider.html
Aer.backends()
백엔드 목록
[AerSimulator('aer_simulator'),
 AerSimulator('aer_simulator_statevector'),
 AerSimulator('aer_simulator_density_matrix'),
 AerSimulator('aer_simulator_stabilizer'),
 AerSimulator('aer_simulator_matrix_product_state'),
 AerSimulator('aer_simulator_extended_stabilizer'),
 AerSimulator('aer_simulator_unitary'),
 AerSimulator('aer_simulator_superop'),
 QasmSimulator('qasm_simulator'),
 StatevectorSimulator('statevector_simulator'),
 UnitarySimulator('unitary_simulator'),
 PulseSimulator('pulse_simulator')]
QASM 시뮬레이터로 변경합니다.
sim = Aer.get_backend('qasm_simulator')
# 1000回ショット
counts = sim.run(qc_ha, shots=1000).result().get_counts()
# ヒストグラムで測定された確率をプロット
plot_histogram(counts)
아날로그 런 이외에excute를 통해 실행할 수 있습니다.
# executeを使う場合の書き方もある
sim = Aer.get_backend('qasm_simulator')
# 1000回ショット
job = execute(qc_ha, backend=sim, shots=1000)
result = job.result()
counts = result.get_counts(qc_ha)
# カウントされた結果をプリント
print(counts)
# ヒストグラムで測定された確率をプロット
plot_histogram( counts )
이번 필기는 이것으로 끝냅니다.

좋은 웹페이지 즐겨찾기