Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
quantum-kittens
GitHub Repository: quantum-kittens/platypus
Path: blob/main/notebooks/summer-school/2021/resources/lab-notebooks/lab-5-ja.ipynb
3855 views
Kernel: Python 3

このLabでは、機械学習で使われる一般的なパラメーター化された量子回路にノイズが与える影響について、量子プロセス・トモグラフィーを使って学びます。

Gradingのために、全てのexecute関数でのシミュレーターの引数について(noise_model=noise_thermal, seed_simulator=3145, seed_transpiler=3145, shots=8192)を指定してください。
# 一般的なツール import numpy as np import matplotlib.pyplot as plt # Qiskit Circuit 関連機能 from qiskit import execute,QuantumCircuit, QuantumRegister, ClassicalRegister, Aer, transpile import qiskit.quantum_info as qi # トモグラフィーの機能 from qiskit.ignis.verification.tomography import process_tomography_circuits, ProcessTomographyFitter from qiskit.ignis.mitigation.measurement import complete_meas_cal, CompleteMeasFitter import warnings warnings.filterwarnings('ignore')

Question 1

  • この量子回路を作ってください。

target = QuantumCircuit(2) target = # ここにコードを記入します target_unitary = qi.Operator(target)
from qc_grader import grade_lab5_ex1 # grade関数は測定なしの量子回路を期待していることに注意してください grade_lab5_ex1(target)

ショットノイズのみによる量子プロセス・トモグラフィー

ここでは、qasm_simulatorで量子プロセス・トモグラフィー回路をシミュレートします。

Question 2a

  • Qiskitのプロセストモグラフィー(QPT)回路の機能を使って、量子プロセスト・モグラフィーを行う回路とQASMシミュレーター(ショットノイズのみ)のシミュレーションを作ってください。QPT回路の機能は、seed_simulator=3145, seed_transpiler=3145, shots=8192で実行してください。

  • ヒント:必要となる機能、process_tomography_circuits、は上記でインポートされています。完成すると、合計で144の回路がexecute関数によってqasm_simulator に与えられるはずです。len(qpt_circs)を使って作成された回路の数を確認できます。

simulator = Aer.get_backend('qasm_simulator') qpt_circs = # ここにコードを記入します qpt_job = execute(qpt_circs,simulator,seed_simulator=3145,seed_transpiler=3145,shots=8192) qpt_result = qpt_job.result()

Question 2b

  • プロセス・トモグラフィー・フィッターの最小二乗フィッティング法を使って、目標のユニタリー行列の忠実度(Fidelity)を決定してください。

  • ヒント: まず、上記のProcessTomographyFitter関数を使ってQuestion 2aの結果を処理し、ProcessTomographyFitter.fit(method='....')を使って、測定されたユニタリー演算を効果的に記述した"Choi Matrix"を抽出します。ここからは、量子情報モジュールのaverage_gate_fidelity関数を使って、結果が達成した忠実度を抽出します。

# ここにコードを記入します
from qc_grader import grade_lab5_ex2 # grade関数は浮動小数点を期待していることに注意してください grade_lab5_ex2(fidelity)

T1/T2ノイズモデルでの量子プロセス・トモグラフィー

一貫性を保つために、ゲートの持続時間とT1/T2時間を特徴付けるいくつかの値を設定しましょう:

# 量子ビット0〜3のT1、T2の値 T1s = [15000, 19000, 22000, 14000] T2s = [30000, 25000, 18000, 28000] # 命令時間(ナノセカンド) time_u1 = 0 # 仮想gate time_u2 = 50 # (単一X90パルス) time_u3 = 100 # (2個のX90パルス) time_cx = 300 time_reset = 1000 # 1マイクロ秒 time_measure = 1000 # 1マイクロ秒
from qiskit.providers.aer.noise import thermal_relaxation_error from qiskit.providers.aer.noise import NoiseModel

Question 3

  • Qiskitの熱緩和エラーモデルを使って、上記で定義された量子ビット0〜3に対する値を使って、u1,u2,u3, cx, measurement,reset のエラーを定義し、熱ノイズモデルを構築してください。

  • ヒント:Qiskitチュートリアルのbuilding noise modelsが、特に、u1,u2,u3,cx, reset,measurement のエラーに対して役立ちます。(これら全てを含めてください。)

# QuantumErrorオブジェクト errors_reset = [thermal_relaxation_error(t1, t2, time_reset) for t1, t2 in zip(T1s, T2s)] errors_measure = [thermal_relaxation_error(t1, t2, time_measure) for t1, t2 in zip(T1s, T2s)] errors_u1 = [thermal_relaxation_error(t1, t2, time_u1) for t1, t2 in zip(T1s, T2s)] errors_u2 = [thermal_relaxation_error(t1, t2, time_u2) for t1, t2 in zip(T1s, T2s)] errors_u3 = [thermal_relaxation_error(t1, t2, time_u3) for t1, t2 in zip(T1s, T2s)] errors_cx = [[thermal_relaxation_error(t1a, t2a, time_cx).expand( thermal_relaxation_error(t1b, t2b, time_cx)) for t1a, t2a in zip(T1s, T2s)] for t1b, t2b in zip(T1s, T2s)] # ノイズモデルにエラーを加えます noise_thermal = NoiseModel() # ここにコードを記入します
from qc_grader import grade_lab5_ex3 # grade関数はNoiseModelを期待していることに注意してください grade_lab5_ex3(noise_thermal)

Question 4.

  • ノイズモデルを使って、QPTの忠実度を出してください。ただし、エラー軽減の技術は使わないでください。再掲ですが、execute関数にはseed_simulator=3145, seed_transpiler=3145 , shots=8192を使ってください。

  • ヒント:ここでのプロセスは、question 2a/bと大変良く似ていますが、question 3のノイズモデルをexecute関数に含める必要があります。

np.random.seed(0) # ここにコードを記入します
from qc_grader import grade_lab5_ex4 # grade関数は浮動小数点を期待していることに注意してください grade_lab5_ex4(fidelity)

Question 5.

  • Qiskitにあるcomplete_meas_cal関数を使って、1つ前のquestionにおけるQTPの結果に対して適用してください。ともにexecute関数とseed_simulator=3145, seed_transpiler=3145, shots=8192を使ってください。また同様に、question 3のノイズモデルをexecute関数に含める必要があります。

  • ヒント:Qiskitテキストブックにreadout error mitigationというとても良い章があります。特に、complete_meas_cal関数をCompleteMeasureFitterとともに、キャリブレーション行列を作るための回路を望み通りに作成するために使いたいでしょう。そしてこれは、修正行列のmeas_filterを生成するために使えます。Question 4の結果に対してこの関数を適用します。

np.random.seed(0) # ここにコードを記入します
from qc_grader import grade_lab5_ex5 # grade関数は浮動小数点を期待していることに注意してください grade_lab5_ex5(fidelity)

Exploratory Question 6.

  • CXの持続時間を変化させたノイズモデルを実行して、ゲートの忠実度がCXの持続時間にどのように依存するかをテストします(ただし、他の値はすべて固定します)。

(注:理想的には、前のレクチャーで説明したスケーリング技術を使って行いますが、バックエンドの使用が制限されるので、代わりにCX自体の持続時間を調整して効果を実証し ます。このゲートは完全なCXゲートではないので、ハードウェアでの実装方法とは異なります。)