Path: blob/main/notebooks/summer-school/2021/resources/lab-notebooks/lab-1-ja.ipynb
3855 views
Part I: Qiskit入門
Qiskitへようこそ!Exerciseを始める前に、この下のセルを「シフト」+「エンター」で実行してください。
I.1: 1量子ビットにおける基本的な回転とブロッホ球における測定
複数量子ビットにおける複雑な回路を学ぶ前に、単一量子ビットについて見てみることから始めましょう。こちらの章:https://qiskit.org/textbook/ja/ch-states/introduction.html を読むと、ブロッホ球、パウリ演算子、また、アダマールゲート、、ゲートについての基礎を学ぶことができます。
デフォルトでは、qiskitにおける状態はから始まり、これは、ブロッホ球では「上矢印」に相当します。, , , , , ゲートについて試してみて、回転の感覚をつかんでください。そのために、プログラムで示された行に以下のコードの組み合わせを入れてください:
以下の各Exerciseにおいてブロッホ球上の状態を指示された状態に変更してみてください。(コードのセルを実行させるにはシフト+エンターを押します。)
1.) 簡単なビットフリップの実行から始めましょう。状態を にすることがゴールです。
2.) 次に重ね合わせを作ります。 の状態にすることがゴールです。
3.) これら二つを結合させましょう。ゴールは状態 にすることです。
別の方法も考えられますか?
4.) 最後に、複素数を扱いましょう。ゴールは、の状態にすることです。
I.2: 複数量子ビットゲートを使った量子回路
よくできました!単一量子ビットゲートを理解したので、次に複数量子ビットにおけるゲートを見てみましょう。理論を再確認したい方は、こちらの章をご確認ください:https://qiskit.org/textbook/ja/ch-gates/introduction.html 2量子ビットまたは3量子ビットにおける基本のゲートは、
2量子ビットにおける簡単なゲートである制御NOT(CNOT)ゲートから始めます。これは、状態の2量子ビットには何も効果がないので、制御量子ビットを重ね合わせの状態するために先にアダマールゲートを適用します。この方法で、エンタングルメントを作ることができます。結果の状態は、いわゆるベル状態の一つになります。
5.) ベル状態を構築する
次に上の回路に測定を追加することで、実行して(シミュレーターを使います)、対応するカウント数のヒストグラムをプロットできるようになります。
ヒストグラムからわかるように、ありえる結果は"01"と"10"のみなので、2量子ビットの状態は常に完全な反相関しています。
6.) 3量子ビットの量子回路でのGHZ状態を作る関数を作ってください。
ヒント:以下の回路はのGHZ状態を作ります:
おめでとうございます!入門編のExerciseが完了しました。ブロッホ球と基本的な量子ゲートの知識を深めていただけたと思います。それでは、これらの知識をPart II に応用し、最初の量子アルゴリズム、ドイチ・ジョザのアルゴリズムを構築してみましょう。
Part II: オラクルとドイチ・ジョザのアルゴリズム
多くの量子アルゴリズムはいわゆるの概念を中心としています。オラクルは、「ブラックボックス」とみなされる関数です。一般的に、私たちは、この関数の特性を知りたいと思っています。そのために、オラクルに質問(問合せ)をします。そして、問合せの複雑性は、これらの特性を知るための最小の問い合わせ数で定義されます。
オラクルに慣れるために、ドイチ・ジョザ問題を考えます。古典の方法に比べて量子の解法が劇的に少ない問合せ数になることを見ていきましょう。
II.1: ドイチ・ジョザ問題
ビット列の入力によって、またはが返される、以下のような隠れたブール関数が与えられています:
与えられたブール関数の特性はバランス型か定値型のどちらかだと保証されています。定値型関数は、どんな入力に対しても、全てまたは全てを返します。一方、バランス型関数の場合は、すべての入力に対してとを完全に半分ずつ返します。我々のタスクは、与えられた関数がバランス型か定値型のどちらなのか決定することです。
ドイチ・ジョザアルゴリズムは、ベストな古典アルゴリズムよりも優れた性能を発揮する最初の量子アルゴリズムの例でした。このアルゴリズムは、計算ツールとしての量子コンピューターの優位性をある特定の問題に対して証明しました。
ドイチ・ジョザ問題では、未知のオラクルを与えられます。これはQiskitでは以下の関数で実装されます:
この関数は、5量子ビットの入力によって、あるオラクルを与えます。最後の量子ビット()は出力です。オラクルの感覚を得るために、異なる入力文字列を渡しての出力を測定する回路を作ってみましょう。これは、オラクルがバランス型か定値型かを決定する古典的な手法に相当します。
では、結果をシミュレートして、この回路の結果を見てみます。別の入力ビット列も試してその結果も見てみましょう!
オラクルがバランス型か定値型か分かりましたか?この4ビットの古典的なドイチ・ジョザのオラクルがバランス型か定値型かをチェックするためには、最小と最大で何個の入力が必要でしょうか?
II.2: ドイチ・ジョザ問題の量子の解法
量子コンピューターを使うと、たった1回の関数への問い合わせで、オラクルが定値型かバランス型か100%の信頼度でわかります。この関数は量子回路として実装され、状態をにマップします。ここで、はを法とする加算です。以下でこのアルゴリズムを見ていきます。
2つの量子レジスターを準備します。 1つ目は、量子ビットレジスターでで初期化され、2つ目は、1量子ビットレジスターでで初期化されています。 量子状態は、と書かれることに注意してください。つまり、バイナリー数のように、最後のビットが最初の量子ビットの状態に相当します。 従って、初期状態を以下のようにセットしたいということです。
量子ビットオラクルを任意の状態に適用するとの状態になります。 最後の量子ビットの状態に相当するをの状態として用意したので、任意の入力ビット列が与えられた時のオラクルの出力は、以下のようになります:
従って、ビット列 に働く位相オラクルを作ったことになります。
しかし、オラクルを適用する前に、入力状態を最初の量子ビットで作成する必要があります。 そのために、均等な量子重ね合わせ状態が必要となり、量子ビットの状態は以下のように与えられます:
これで、オラクルを準備された量子重ね合わせ状態に適用する用意できました。これは以下の状態になります:
アルゴリズムの最後として、2個目のレジスターの出力を無視し、最初のレジスターにn個のアダマールを適用します。その後、これらの量子ビットの結果を測定します。
このポイントでは、2個目の単一量子ビットレジスターは無視されるでしょう。最初のレジスターの各量子ビットにアダマールゲートを適用すると以下の状態になります:
ここで、はビット単位の積の和です。 次に最初のレジスターの測定を含めた回路をシミュレーターで実行してみましょう:
レクチャーで学んだように、出力のビット列がゼロの場合は、オラクルが定値型だとわかります。出力のビット列がゼロでない場合は、バランス型です。オラクルの定義の最初の部分のオラクル数を変えてみることで、他のオラクルも試してみることができます!