今月のサーキット 12月21日:洗練されたオラクルの作成
オラクルは量子コンピューティング・アルゴリズムにおいて非常に重要な要素である。オラクルとは本質的に、他のアルゴリズムの入力として使用される「ブラックボックス」関数のことである。例えば、グローバー探索では、オラクルはどの値が探索に一致し、どの値が探索に一致しないかを特定する。
単純なオラクルを作るのは比較的簡単な問題である。例えば、Qiskitの教科書の一部である以下のGrover回路のオラクルを考えてみよう。
この特殊なオラクルの仕事は、状態|101>と |110>をマークして、回路の次の部分で増幅されるようにすることである。
しかし、もっと洗練されたオラクルを書きたい場合はどうなるだろうか?例えば、3つの量子変数があるとする、 a, b と c. 各変数は単一の量子ビットではなく、複数の量子ビットで構成されるレジスタである。仮に aは2量子ビット幅であるとする、 bも2量子ビット幅で cは3量子ビット幅である。我々のオラクルは a, b および c Python記法を使って):
a+ b+(c& 15) % 8 ^ 3 &a^ 10 == 4
このオラクルはもっと複雑で、ユーザーの好みによっては次のようになるかもしれない:
ハイレベルの機能性と、個々のブロックの詳細が確認できる。
そのような神託を作るには長い時間がかかるだろう。
Classiqプラットフォームを使っている場合は別です。これがClassiq上でこのオラクルを作成するコードだ:
異なる算術式を書いたり、各変数の幅を変えたりといった明らかな自由度に加え、希望する量子ビットの数、オラクルの作成方法、その他多くのパラメーターを制御することができる。
回路全体はこんな感じです。下の色のついたブロックの上にカーソルを置いて、下のブロックの「+」マークをクリックすると、回路が拡張され、心ゆくまで拡張し続けることができます。
オラクルは量子コンピューティング・アルゴリズムにおいて非常に重要な要素である。オラクルとは本質的に、他のアルゴリズムの入力として使用される「ブラックボックス」関数のことである。例えば、グローバー探索では、オラクルはどの値が探索に一致し、どの値が探索に一致しないかを特定する。
単純なオラクルを作るのは比較的簡単な問題である。例えば、Qiskitの教科書の一部である以下のGrover回路のオラクルを考えてみよう。
この特殊なオラクルの仕事は、状態|101>と |110>をマークして、回路の次の部分で増幅されるようにすることである。
しかし、もっと洗練されたオラクルを書きたい場合はどうなるだろうか?例えば、3つの量子変数があるとする、 a, b と c. 各変数は単一の量子ビットではなく、複数の量子ビットで構成されるレジスタである。仮に aは2量子ビット幅であるとする、 bも2量子ビット幅で cは3量子ビット幅である。我々のオラクルは a, b および c Python記法を使って):
a+ b+(c& 15) % 8 ^ 3 &a^ 10 == 4
このオラクルはもっと複雑で、ユーザーの好みによっては次のようになるかもしれない:
ハイレベルの機能性と、個々のブロックの詳細が確認できる。
そのような神託を作るには長い時間がかかるだろう。
Classiqプラットフォームを使っている場合は別です。これがClassiq上でこのオラクルを作成するコードだ:
異なる算術式を書いたり、各変数の幅を変えたりといった明らかな自由度に加え、希望する量子ビットの数、オラクルの作成方法、その他多くのパラメーターを制御することができる。
回路全体はこんな感じです。下の色のついたブロックの上にカーソルを置いて、下のブロックの「+」マークをクリックすると、回路が拡張され、心ゆくまで拡張し続けることができます。