Notebook_Header_01.png

Lab 0: ようこそ、そしてハローワールド#

2024 IBM Quantum Challengeへようこそ!#

このイベントにご参加いただき、感激しています。今年の Quantum Challenge は、 IBM が今年初めにリリースした Qiskit SDK v1.0 にハイライトを当てるように設計されています。以前参加されたことのある方は、今年の Challenge と以前のチャレンジとの違いにお気づきかもしれません。舞台は違っても、全体的な構成は変わりません。例年通り、今年の Challenge は、実際の量子計算科学者のように問題を解決するために特別にデザインされた Jupyter notebook である一連の「Lab」で構成されています。

このLab notebook は、それぞれ異なるトピックに焦点を当て、前回の学習の上に成り立っています。この最初の Lab は、初心者でも誰でも完成できるようになっていますが、後のLabはもっと難しくなっています。これは結局のところ、 Challenge なのです。ほとんどの参加者は、より高度な Lab で提示されるコードの課題を終わらせるために、外部で調べたり、試行錯誤をしたりする必要があります。あきらめないでください!あなたならできるはずです。

各 Lab には、ドキュメント、チュートリアル、その他特定の問題を解決するために必要なリソースへのリンクがあります。また、これらのリソースのほとんどは、 IBM の量子教育のための新しいホーム IBM Quantum Learning で見つけることができます。ぜひ、時間をとってご覧ください。私たちは、そこで紹介されている一連の Course を特に誇りに思っています。

もし道に迷ったら、今年のホームページ Quantum Challenge here を思い出してください。 Challenge Lab を完了するたびに、あなたの進捗状況がそこに反映されます。

Lab 0 概要#

この Lab では、 Challenge notebook の使い方、提出物の採点 (grade) 方法、量子コードの設定、実行、結果の評価の一般的な流れを管理する方法を教えることに焦点を当てます。

この Lab と他のラボを完了するには、Python プログラミング言語について少し知っている必要があります。各 Lab には、チュートリアルコンテンツ、事前に書かれたコードブロック、およびあなた自身の Qiskit code を記入する必要がある Challenge のコードブロックが混在しています。演習を完了するには、 ## Write your code below here ## コメントがある各行の下に必要なコードを入力する必要があります。

重要なことは、たとえそこにあなたが新しいコードを書いていなくても、 すべてのコードセルを実行する 必要があるということです。こうすることで、後で答案を提出するときに、すべてが最新の状態になっていることを保証します。 あなたが使っているコンピュータの種類にもよりますが、このルールには1つか2つの例外があります。

Qiskit のインストール#

あなたは今、この文章をどこから読んでいるでしょうか?

ローカルで動作している Jupyter notebook 内でこの文章を見ているかもしれません。あるいは、クラウドベースのツール( Google ColabqBraid など)を使っていて、ブラウザーを通してこれを読んでいるかもしれません。 GitHub で見ているかもしれないし、お気に入りの IDE の居心地の良い環境で見ているかもしれません。ワイルドな人たちの中には、コマンドラインを深く使っている人もいるかもしれません。

これがあなたに届いている場所がどこであろうと、 IBM Quantum Challenge を成功させるには、 Qiskit をインストールする必要があるということが真実であることに変わりはありません。

このイベントでは Qiskit 1.0.2 を使用してください。次のいくつかのセルには、実行するインストールコマンドがすべて含まれています。Notebook を実行している場所に基づいて正しい行を選択してください。

Qiskit をインストールし、 ローカルで 実行する方法についてビデオガイドをご覧になりたい場合は、 このビデオでプロセスの全ステップをご覧ください

私たちはすでに、次のいくつかのセルに Qiskit のインストールを用意しています。あなたの環境に合うセルを見つけて、そのセルだけを実行してください。

### INSTALL QISKIT: Cloud-based environment ###

"""!pip install qiskit[visualization]==1.0.2"""
'!pip install qiskit[visualization]==1.0.2'
### INSTALL QISKIT: Locally on a PC ###

# pip install qiskit[visualization]==1.0.2
### INSTALL QISKIT: Locally on a Mac or Linux ###

# pip install 'qiskit[visualization]'==1.0.2

これらのセルは、この notebook を実行する可能性のある環境の大部分をカバーしていますが、すべての可能なシナリオを掲載することは不可能です。 !pip の代わりに %pip を使うようにという警告が表示されるかもしれません。

では、すべてが正しく機能していることをテストしてみましょう。次のセルに、とても基本的な Qiskit コードを用意しました。このコードは量子回路を作成し、1つのゲートを適用し、その回路を描画します。以下のセルを実行して、システムが正しくセットアップされていることを確認してください。

Hide code cell source
from qiskit import QuantumCircuit

# Create a new circuit with a single qubit
qc = QuantumCircuit(1)

# Add a Not gate to qubit 0
qc.x(0)

# Return a drawing of the circuit using MatPlotLib ("mpl"). This is the
# last line of the cell, so the drawing appears in the cell output.
qc.draw("mpl")
_images/32dfdd1ba5612cd5b8ff614a25f64d893f2c9f378e3975a5b82c3dce4edda923.png

以下のようなものが出力されるはずです:

NotGate.png

すべて期待通りに動きましたか?そうであれば、このステップはほぼ終了です。最後の部分は、この Lab を完了するために必要な他のパッケージをインストールすることです。

### Install the other required packages as well

!pip install qiskit_aer
!pip install qiskit_ibm_runtime
!pip install matplotlib
!pip install pylatexenc
!pip install prototype-zne
Requirement already satisfied: qiskit_aer in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (0.14.2)
Requirement already satisfied: qiskit>=0.45.2 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from qiskit_aer) (1.0.2)
Requirement already satisfied: numpy>=1.16.3 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from qiskit_aer) (1.26.4)
Requirement already satisfied: scipy>=1.0 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from qiskit_aer) (1.13.1)
Requirement already satisfied: psutil>=5 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from qiskit_aer) (5.9.8)
Requirement already satisfied: rustworkx>=0.14.0 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from qiskit>=0.45.2->qiskit_aer) (0.14.2)
Requirement already satisfied: sympy>=1.3 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from qiskit>=0.45.2->qiskit_aer) (1.12.1)
Requirement already satisfied: dill>=0.3 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from qiskit>=0.45.2->qiskit_aer) (0.3.8)
Requirement already satisfied: python-dateutil>=2.8.0 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from qiskit>=0.45.2->qiskit_aer) (2.9.0.post0)
Requirement already satisfied: stevedore>=3.0.0 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from qiskit>=0.45.2->qiskit_aer) (5.2.0)
Requirement already satisfied: typing-extensions in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from qiskit>=0.45.2->qiskit_aer) (4.12.1)
Requirement already satisfied: symengine>=0.11 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from qiskit>=0.45.2->qiskit_aer) (0.11.0)
Requirement already satisfied: six>=1.5 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from python-dateutil>=2.8.0->qiskit>=0.45.2->qiskit_aer) (1.16.0)
Requirement already satisfied: pbr!=2.1.0,>=2.0.0 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from stevedore>=3.0.0->qiskit>=0.45.2->qiskit_aer) (6.0.0)
Requirement already satisfied: mpmath<1.4.0,>=1.1.0 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from sympy>=1.3->qiskit>=0.45.2->qiskit_aer) (1.3.0)
Requirement already satisfied: qiskit_ibm_runtime in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (0.23.0)
Requirement already satisfied: requests>=2.19 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from qiskit_ibm_runtime) (2.32.2)
Requirement already satisfied: requests-ntlm>=1.1.0 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from qiskit_ibm_runtime) (1.2.0)
Requirement already satisfied: numpy>=1.13 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from qiskit_ibm_runtime) (1.26.4)
Requirement already satisfied: urllib3>=1.21.1 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from qiskit_ibm_runtime) (2.2.1)
Requirement already satisfied: python-dateutil>=2.8.0 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from qiskit_ibm_runtime) (2.9.0.post0)
Requirement already satisfied: websocket-client>=1.5.1 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from qiskit_ibm_runtime) (1.8.0)
Requirement already satisfied: ibm-platform-services>=0.22.6 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from qiskit_ibm_runtime) (0.53.7)
Requirement already satisfied: pydantic in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from qiskit_ibm_runtime) (2.7.3)
Requirement already satisfied: qiskit>=1.0.0 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from qiskit_ibm_runtime) (1.0.2)
Requirement already satisfied: ibm-cloud-sdk-core<4.0.0,>=3.19.2 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from ibm-platform-services>=0.22.6->qiskit_ibm_runtime) (3.20.1)
Requirement already satisfied: six>=1.5 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from python-dateutil>=2.8.0->qiskit_ibm_runtime) (1.16.0)
Requirement already satisfied: rustworkx>=0.14.0 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from qiskit>=1.0.0->qiskit_ibm_runtime) (0.14.2)
Requirement already satisfied: scipy>=1.5 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from qiskit>=1.0.0->qiskit_ibm_runtime) (1.13.1)
Requirement already satisfied: sympy>=1.3 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from qiskit>=1.0.0->qiskit_ibm_runtime) (1.12.1)
Requirement already satisfied: dill>=0.3 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from qiskit>=1.0.0->qiskit_ibm_runtime) (0.3.8)
Requirement already satisfied: stevedore>=3.0.0 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from qiskit>=1.0.0->qiskit_ibm_runtime) (5.2.0)
Requirement already satisfied: typing-extensions in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from qiskit>=1.0.0->qiskit_ibm_runtime) (4.12.1)
Requirement already satisfied: symengine>=0.11 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from qiskit>=1.0.0->qiskit_ibm_runtime) (0.11.0)
Requirement already satisfied: charset-normalizer<4,>=2 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from requests>=2.19->qiskit_ibm_runtime) (3.3.2)
Requirement already satisfied: idna<4,>=2.5 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from requests>=2.19->qiskit_ibm_runtime) (3.7)
Requirement already satisfied: certifi>=2017.4.17 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from requests>=2.19->qiskit_ibm_runtime) (2024.6.2)
Requirement already satisfied: cryptography>=1.3 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from requests-ntlm>=1.1.0->qiskit_ibm_runtime) (42.0.8)
Requirement already satisfied: pyspnego>=0.1.6 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from requests-ntlm>=1.1.0->qiskit_ibm_runtime) (0.10.2)
Requirement already satisfied: annotated-types>=0.4.0 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from pydantic->qiskit_ibm_runtime) (0.7.0)
Requirement already satisfied: pydantic-core==2.18.4 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from pydantic->qiskit_ibm_runtime) (2.18.4)
Requirement already satisfied: cffi>=1.12 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from cryptography>=1.3->requests-ntlm>=1.1.0->qiskit_ibm_runtime) (1.16.0)
Requirement already satisfied: PyJWT<3.0.0,>=2.8.0 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from ibm-cloud-sdk-core<4.0.0,>=3.19.2->ibm-platform-services>=0.22.6->qiskit_ibm_runtime) (2.8.0)
Requirement already satisfied: pbr!=2.1.0,>=2.0.0 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from stevedore>=3.0.0->qiskit>=1.0.0->qiskit_ibm_runtime) (6.0.0)
Requirement already satisfied: mpmath<1.4.0,>=1.1.0 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from sympy>=1.3->qiskit>=1.0.0->qiskit_ibm_runtime) (1.3.0)
Requirement already satisfied: pycparser in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from cffi>=1.12->cryptography>=1.3->requests-ntlm>=1.1.0->qiskit_ibm_runtime) (2.22)
Requirement already satisfied: matplotlib in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (3.9.0)
Requirement already satisfied: contourpy>=1.0.1 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from matplotlib) (1.2.1)
Requirement already satisfied: cycler>=0.10 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from matplotlib) (0.12.1)
Requirement already satisfied: fonttools>=4.22.0 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from matplotlib) (4.53.0)
Requirement already satisfied: kiwisolver>=1.3.1 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from matplotlib) (1.4.5)
Requirement already satisfied: numpy>=1.23 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from matplotlib) (1.26.4)
Requirement already satisfied: packaging>=20.0 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from matplotlib) (24.0)
Requirement already satisfied: pillow>=8 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from matplotlib) (10.3.0)
Requirement already satisfied: pyparsing>=2.3.1 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from matplotlib) (3.1.2)
Requirement already satisfied: python-dateutil>=2.7 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from matplotlib) (2.9.0.post0)
Requirement already satisfied: six>=1.5 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from python-dateutil>=2.7->matplotlib) (1.16.0)
Requirement already satisfied: pylatexenc in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (2.10)
Requirement already satisfied: prototype-zne in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (1.3.1)
Requirement already satisfied: qiskit>=0.45.1 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from prototype-zne) (1.0.2)
Requirement already satisfied: rustworkx>=0.14.0 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from qiskit>=0.45.1->prototype-zne) (0.14.2)
Requirement already satisfied: numpy<2,>=1.17 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from qiskit>=0.45.1->prototype-zne) (1.26.4)
Requirement already satisfied: scipy>=1.5 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from qiskit>=0.45.1->prototype-zne) (1.13.1)
Requirement already satisfied: sympy>=1.3 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from qiskit>=0.45.1->prototype-zne) (1.12.1)
Requirement already satisfied: dill>=0.3 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from qiskit>=0.45.1->prototype-zne) (0.3.8)
Requirement already satisfied: python-dateutil>=2.8.0 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from qiskit>=0.45.1->prototype-zne) (2.9.0.post0)
Requirement already satisfied: stevedore>=3.0.0 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from qiskit>=0.45.1->prototype-zne) (5.2.0)
Requirement already satisfied: typing-extensions in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from qiskit>=0.45.1->prototype-zne) (4.12.1)
Requirement already satisfied: symengine>=0.11 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from qiskit>=0.45.1->prototype-zne) (0.11.0)
Requirement already satisfied: six>=1.5 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from python-dateutil>=2.8.0->qiskit>=0.45.1->prototype-zne) (1.16.0)
Requirement already satisfied: pbr!=2.1.0,>=2.0.0 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from stevedore>=3.0.0->qiskit>=0.45.1->prototype-zne) (6.0.0)
Requirement already satisfied: mpmath<1.4.0,>=1.1.0 in /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages (from sympy>=1.3->qiskit>=0.45.1->prototype-zne) (1.3.0)

ちなみに、インストールの最後にこのエラーが表示されるかもしれません。: ERROR: pip's dependency resolver does not currently take into account all the packages that are installed.

このエラーは無視しても大丈夫です。

他のすべてがインストールされていれば、朗報です: チャレンジ環境の設定に進む準備ができました。

トラブルシューティング#

まだ機能していませんか?インストールとバージョンをチェックして、すべてがあるべき姿になっていることを確認しましょう。

### CHECK QISKIT VERSION
import qiskit
qiskit.__version__
'1.0.2'

Qiskit version 1.0.2 がインストールされているはずです。それ以下のバージョンが表示された場合は、カーネルを再起動して最新バージョンの Qiskit を再インストールする必要があります。

ここで、他の依存関係が正しくインストールされているか再チェックしましょう。 ほんの数分前にこれらのパッケージをインストールした後で、これは本当に必要なのでしょうか? おそらく必要ないでしょう。しかし、 Jupyter Notebook のワイルドな世界では、問題を診断する方法を理解することは貴重な財産です。すべてのパッケージが期待通りにインストールされているか確認することは、バグ修正の最初のステップの1つであり、その場ですべての問題が解決することもあります。

パッケージの再インストールが必要な場合は、まずカーネル(またはランタイム)を再起動することを忘れないでください。

### CHECK OTHER DEPENDENCIES
!pip show pylatexenc matplotlib
Name: pylatexenc
Version: 2.10
Summary: Simple LaTeX parser providing latex-to-unicode and unicode-to-latex conversion
Home-page: https://github.com/phfaist/pylatexenc
Author: Philippe Faist
Author-email: philippe.faist@bluewin.ch
License: MIT
Location: /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages
Requires: 
Required-by: 
---
Name: matplotlib
Version: 3.9.0
Summary: Python plotting package
Home-page: 
Author: John D. Hunter, Michael Droettboom
Author-email: Unknown <matplotlib-users@python.org>
License: License agreement for matplotlib versions 1.3.0 and later
=========================================================

1. This LICENSE AGREEMENT is between the Matplotlib Development Team
("MDT"), and the Individual or Organization ("Licensee") accessing and
otherwise using matplotlib software in source or binary form and its
associated documentation.

2. Subject to the terms and conditions of this License Agreement, MDT
hereby grants Licensee a nonexclusive, royalty-free, world-wide license
to reproduce, analyze, test, perform and/or display publicly, prepare
derivative works, distribute, and otherwise use matplotlib
alone or in any derivative version, provided, however, that MDT's
License Agreement and MDT's notice of copyright, i.e., "Copyright (c)
2012- Matplotlib Development Team; All Rights Reserved" are retained in
matplotlib  alone or in any derivative version prepared by
Licensee.

3. In the event Licensee prepares a derivative work that is based on or
incorporates matplotlib or any part thereof, and wants to
make the derivative work available to others as provided herein, then
Licensee hereby agrees to include in any such work a brief summary of
the changes made to matplotlib .

4. MDT is making matplotlib available to Licensee on an "AS
IS" basis.  MDT MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
IMPLIED.  BY WAY OF EXAMPLE, BUT NOT LIMITATION, MDT MAKES NO AND
DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF MATPLOTLIB
WILL NOT INFRINGE ANY THIRD PARTY RIGHTS.

5. MDT SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF MATPLOTLIB
 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR
LOSS AS A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING
MATPLOTLIB , OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF
THE POSSIBILITY THEREOF.

6. This License Agreement will automatically terminate upon a material
breach of its terms and conditions.

7. Nothing in this License Agreement shall be deemed to create any
relationship of agency, partnership, or joint venture between MDT and
Licensee.  This License Agreement does not grant permission to use MDT
trademarks or trade name in a trademark sense to endorse or promote
products or services of Licensee, or any third party.

8. By copying, installing or otherwise using matplotlib ,
Licensee agrees to be bound by the terms and conditions of this License
Agreement.

License agreement for matplotlib versions prior to 1.3.0
========================================================

1. This LICENSE AGREEMENT is between John D. Hunter ("JDH"), and the
Individual or Organization ("Licensee") accessing and otherwise using
matplotlib software in source or binary form and its associated
documentation.

2. Subject to the terms and conditions of this License Agreement, JDH
hereby grants Licensee a nonexclusive, royalty-free, world-wide license
to reproduce, analyze, test, perform and/or display publicly, prepare
derivative works, distribute, and otherwise use matplotlib
alone or in any derivative version, provided, however, that JDH's
License Agreement and JDH's notice of copyright, i.e., "Copyright (c)
2002-2011 John D. Hunter; All Rights Reserved" are retained in
matplotlib  alone or in any derivative version prepared by
Licensee.

3. In the event Licensee prepares a derivative work that is based on or
incorporates matplotlib  or any part thereof, and wants to
make the derivative work available to others as provided herein, then
Licensee hereby agrees to include in any such work a brief summary of
the changes made to matplotlib.

4. JDH is making matplotlib  available to Licensee on an "AS
IS" basis.  JDH MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
IMPLIED.  BY WAY OF EXAMPLE, BUT NOT LIMITATION, JDH MAKES NO AND
DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF MATPLOTLIB
WILL NOT INFRINGE ANY THIRD PARTY RIGHTS.

5. JDH SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF MATPLOTLIB
 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR
LOSS AS A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING
MATPLOTLIB , OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF
THE POSSIBILITY THEREOF.

6. This License Agreement will automatically terminate upon a material
breach of its terms and conditions.

7. Nothing in this License Agreement shall be deemed to create any
relationship of agency, partnership, or joint venture between JDH and
Licensee.  This License Agreement does not grant permission to use JDH
trademarks or trade name in a trademark sense to endorse or promote
products or services of Licensee, or any third party.

8. By copying, installing or otherwise using matplotlib,
Licensee agrees to be bound by the terms and conditions of this License
Agreement.
Location: /home/dmurata/workspace/quantum/ibm-quantum-challenge-textbook/.venv/lib/python3.11/site-packages
Requires: contourpy, cycler, fonttools, kiwisolver, numpy, packaging, pillow, pyparsing, python-dateutil
Required-by: seaborn

その他のよくある問題は、以下の方法で解決できます:

  • 画像が表示されない? GitHub をみてください

  • 出力が表示されない場合は、各コードセルを実行したことを確認してください。

  • カーネルを再起動してみてください。この方法は使用している環境によって異なります。

それでも問題が解決しない場合は、Coding with Qiskit のビデオをご覧になるか、 ドキュメント をご覧ください。

Challenge 環境の設定#

始める前に、最後にいくつか設定することがあります。

重要なのは、進捗状況を追跡するために API トークンを保存する 必要があるということです。API トークンを適切に保存しないと、ここでの作業は Challenge portal に同期されません。

Screenshot 2024-05-21 at 8.44.51 PM.png

これはとても重要なことなので、ステップバイステップのリストにします。

  1. IBM Quantum Platformに移動します。

  2. このイベントに登録したのと同じEメールを使ってログインしていることを確認してください。

  3. 右上にある API トークン (上の図参照) をクリックしてコピーします。

  4. ルートディレクトリの配下に.envファイルを作成します。

  5. .env.sampleを参考に、3でコピーしたAPI トークンをQXTokenの値に貼り付けます。

  6. 下のコードを実行してAPIトークンを読み込みます。

QXToken=[.envを作成し、ここにAPIトークンを貼り付けます]

以下のコードセルで、 deleteThisAndPasteYourTokenHere をあなたのトークンに置き換えてください。

# Load your API token in .env

%load_ext dotenv
%dotenv

そして最後に、次のセルで残りの Lab に必要なインポートをすべて実行し、クリーンな状態を保ちます。今後の Lab では、これは各 notebook の最初に行います。

### Imports

from qiskit import QuantumCircuit
from qiskit.quantum_info import SparsePauliOp
from qiskit_ibm_runtime import EstimatorV2 as Estimator
from qiskit_aer import AerSimulator
import matplotlib.pyplot as plt

Qiskit patterns を使った2量子ビットのベル状態の作成#

この Lab は、 Coding with Qiskit 1.xの第3話 に沿って進みます。基本を確実に把握するために、いくつかのコーディング課題を追加しました。 IBM Quantum Challenge の最初の Lab なので、簡単だと思ってください。以降の Lab を解くには、より多くの思考と研究が必要になるでしょう。

この Lab の目標は、 Qiskit patterns が提供するアプローチを使って2量子ビットのベル状態を生成することです。

Qiskit pattern とは、量子コンピューターをセットアップし、実行し、結果を得るための4段階のワークフローです。これは、実用規模の量子コンピューターを使用するために設計されたワークフローです。仕組みは以下の通りです:

  1. 回路と演算子のマッピング

  2. 回路の最適化

  3. 回路の実行

  4. 結果を後処理する

Step 1: 回路と演算子のマッピング#

問題を回路や演算子にマッピングするのは、扱う量子ビットが少ないうちはかなり簡単ですが、規模が大きくなると難しくなります。手始めに、ベル状態を構成してみましょう。これは、2つの量子ビット間のエンタングルメントを示す古典的な( あるいは「量子的」と言うべき )例です。

まず、 qubit 0 にアダマールゲートを適用し、重ね合わせ状態にします。次に、 qubits 0 と 1 の間に CNOT ゲートを適用します。 CNOT は量子ビットを効果的にエンタングルします。つまり、この回路の出力を測定すると、両方の量子ビットが接続されていることがわかるはずです。

これで理解できたなら、上出来です。しかし、それが頭から離れなかったとしたら、 Challenge はあなたにとってかなり難しいものになるでしょう。その代わり、この機会にQuantum Information and Computation のコースを復習しておくとよいでしょう。

# Create a new circuit with two qubits
qc = QuantumCircuit(2)

# Add a Hadamard gate to qubit 0
qc.h(0)

# Perform a CNOT gate on qubit 1, controlled by qubit 0
qc.cx(0, 1)

# Return a drawing of the circuit using MatPlotLib ("mpl"). This is the
# last line of the cell, so the drawing appears in the cell output.
qc.draw("mpl")
_images/8057fc38443f0440ed5e14e5222ee89479bd5131bc224629ced8bb36b2b04508.png

また、回路が期待通りの動作をすることを視覚化できるようにしたいと思います。これを実現するために、いくつかの 演算子 (operators) を設定してみましょう。

ここでは、2量子ビットの演算子を作成します。 両方の量子ビットを測定するものもあれば(例:XX)、片方だけを測定するものもあります(例: XI)。 後で、回路が正しく動作していることを確認するために、それらの期待値をチェックします。 私たちはエンタングルしたベル状態を作り出したので、片方の量子ビットだけを測定する演算子の期待値は0であることが予想されます。同様に、両方の量子ビットを測定する演算子の期待値は0ではない(できれば1に近い)ことが予想されます。

どうすればこれができるのでしょうか?単純に XZI(Identity) 演算子の組み合わせを使います。

  • I ゲートを量子ビットに適用することは、量子ビットに何もしないことと同じです。 X/ZI の組み合わせを使って XIIXZIIZ の1量子ビット演算子を作ることができます。

  • 作成する必要がある2 量子ビット演算子は XXZZ だけです。 X ゲートと Z ゲートを組み合わせて、それぞれを作ります。

この lab の後半で、回路を視覚化するために、それぞれの演算子の期待値をグラフにします。

Exercise 1

さあ、私たちを見てください。誰が想像できたでしょう - 私たちは Challenge exercise にたどり着いたのです!

この最初の Exercise では、演算子のリストを完成させなければなりません。すでに、 ZZZIIXの3つのオブザーバブルを用意しました。また、各オブザーバブルが何を探しているかを説明するコメントをコードに書きました。

同じアプローチで、あなたの仕事は最後の3つの演算子を作ることです: IZXXXI

# The ZZ applies a Z operator on qubit 0, and a Z operator on qubit 1
ZZ = SparsePauliOp('ZZ')

# The ZI applies a Z operator on qubit 0, and an Identity operator on qubit 1
ZI = SparsePauliOp('ZI')

# The IX applies an Identity operator on qubit 0, and an X operator on qubit 1
IX = SparsePauliOp('IX')



### Write your code below here ###
### Follow the same naming convention we used above



## Don't change any code past this line, but remember to run the cell.

observables = [IZ, IX, ZI, XI, ZZ, XX]
Hide code cell source
# The ZZ applies a Z operator on qubit 0, and a Z operator on qubit 1
ZZ = SparsePauliOp('ZZ')

# The ZI applies a Z operator on qubit 0, and an Identity operator on qubit 1
ZI = SparsePauliOp('ZI')

# The IX applies an Identity operator on qubit 0, and an X operator on qubit 1
IX = SparsePauliOp('IX')



### Write your code below here ###
### Follow the same naming convention we used above
IZ = SparsePauliOp('IZ')
XX = SparsePauliOp('XX')
XI = SparsePauliOp('XI')


## Don't change any code past this line, but remember to run the cell.

observables = [IZ, IX, ZI, XI, ZZ, XX]

Step 2: 回路の最適化#

Qiskit pattern は、 量子コンピューターを ユーティリティースケール で操作するための最適なフレームワークです。 ユーティリティースケールとは、量子コンピューターが従来の総当たりの計算方法を超えるスケールで信頼性の高い計算を実行できるポイントです。 このような計算では、数百の量子ビットを使用できます。 しかし、この入門編では2量子ビットしか使わないので、ここで回路を最適化する作業は必要ありません。

回路を最適化するには、Qiskit transpiler を使います。トランスパイル中に、例えば必要なゲート数を最小化するために量子ビットを最適にレイアウトすることができます。このプロセスについては、後の Lab で詳しく学びます。今は、とりあえず、次のステップに進んでください。

注釈

参考:Qiskit transpilerについてはこちらのLabで学習することが出来ます。

Step 3: 回路の実行#

回路を実行する時が来ました。

次のセルでは、何か新しいことに気づくかもしれません。 Qiskit Runtime を使って回路を実行します。

IBM Quantum Challenge の次の Lab では、 Qiskit Runtime と Primitives についてもっと詳しく説明します。この Lab では、 Qiskit Runtime が私たちの回路を実行する最も簡単な手段を与えてくれるということ以外、あまり解説しません。

ここでは、 Estimator を使用して回路を実行し、結果を変数 job として保存します。次に、 Qiskit patterns の最後のステップに進み、この情報を視覚化します。

# Set up the Estimator
estimator = Estimator(backend=AerSimulator())

# Submit the circuit to Estimator
pub = (qc, observables)

job = estimator.run(pubs=[pub])

注釈

Qiskit RuntimeとPrimitivesについてはこちらのLabで学習することが出来ます。

Step 4: 結果の後処理#

Qiskit patterns の最後のステップは、 job の結果を処理、分析、視覚化するところです。

これには様々な方法があります。 IBM Quantum Challenge を通じて、さまざまなオプションを紹介しています。 何か新しいことを学ぶ日は、いつも素晴らしい日です!

ここでは、データを収集し、作成したグラフにプロットします。

# Collect the data
data = ['IZ', 'IX', 'ZI', 'XI', 'ZZ', 'XX']
values = job.result()[0].data.evs

# Set up our graph
container = plt.plot(data, values, '-o')

# Label each axis
plt.xlabel('Observables')
plt.ylabel('Values')

# Draw the final graph
plt.show()
_images/bb6dad2c140e67f63463591974f746728bb8c0055b1e6d094c4e9dccc96da785.png

2量子ビット演算子 (ZZXX) の値が1に近く、1量子ビット演算子の値が0に近いことがわかる はずです 。お見事です。

このプロットは折れ線グラフとして表示されますが、本当は棒グラフとして視覚化した方が良いでしょう。

container = plt.bar(data, values, width=0.8)

plt.xlabel('Observables')
plt.ylabel('Values')

plt.show()
_images/341326e0178a6e1e9d035773d6c4d1733fca0414f1c1af52662c7a71dc86e6a1.png

おめでとうございます!#

Lab 0 の終了おめでとうございます!

あなたは Qiskit patterns のワークフローに従って回路をセットアップし、最適化し、実行し、処理する方法を学びました。あなたは2量子ビットのベル状態の作成に成功し、演算子を視覚化することでそれが適切にエンタングルされていることを示しました。自動の Grader の使い方も学びましたね。ロックオン!

基本を押さえたあなたは、量子開発者のような考え方を始める準備ができています。量子物理学者のように考えるのとは少し違います。私たちは、量子力学をツールとして、有意義な問題を解決し、世界にポジティブな変化をもたらそうとしているのです。

私たちは量子ユーティリティーの時代に入ったとよく言います。量子コンピューターは初めて、ブルートフォース(総当り)の古典コンピューティングの能力を超えたことを実行できるのです。現在、私たちは量子コンピューターが問題を解決する最善の方法である、量子の優位性を探しています。私たちは、量子アルゴリズムを発見し、実装し、実際のユースケースに適用する必要があります。この Challenge の残りの時間は、量子開発者のような考え方を身につけることに費やされます。

そしてもちろん、実世界に影響を与える問題を解決するということは、誰にどのように影響を与えるのかを考えるということでもあります。 IBM では、責任を持ってテクノロジーを研究・開発しなければならないと考えています。そのため、 IBM の量子コンピューティングと倫理の専門家は、量子コンピューティングの社会的影響、そして量子コンピューティング・プロバイダーとして、量子コンピューティング・テクノロジーの潜在的な望ましくない影響を軽減するための私たちの役割について研究してきました。 IBM の 責任ある量子コンピューティング の取り組みについて、ぜひお読みください。

これで IBM Quantum Challenge の残りの部分に進む準備ができました。幸運を祈ります!

追加情報#

Created by: Brian Ingmanson

Advised by: Junye Huang, Va Barbosa, Sophy Shin

Translated by: Kifumi Numata

Version: 1.0.0