問題タブ [qiskit]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 量子ビット状態の可能性を小数で返す
2 キュービットで X ゲートを実行し、いずれかの状態のキュービットの可能性を 10 進数で返そうとしています。答えを探しましたが、どこにも行きませんでした。
python - 量子回路用 Qiskit Transpiler
さて、Qiskitにはtranspile()
関数があります(ドキュメントを参照してください)。トランスパイラに関する私の理解は、異なるバックエンドでアルゴリズムを実行する目的で、あるゲート操作のセットを別のゲート操作のセットに変換する方法として最もよく説明されています (キュービットの接続性、つまりアーキテクチャのジオメトリが異なるため)。ある量子コンピューターから別の量子コンピューターへ)。冗長性を減らし、アダマール ゲートによって結合された CNOT を CZ に変更してゲート数を減らすなど、同等のゲートに関して物事を書き直すことによって、回路を最適化する方法があります。ハードウェア バックエンドにネイティブ CZ がない場合は、正反対のことを行い、CZ からアダマールによって結合された CNOT に移動することもできます。一般に、固定ハードウェア バックエンドの任意の回路を最適化するためのこの種のトランスパイルは、QMA 完全な問題です (こちらを参照)。たとえば...誰かが似たようなことにLEANを使ったことがあるのではないでしょうか?)。最適な回路を近似するために変分法が使用されることもありますが、ここでは脱線します。
わずかに異なるが関連する問題: Nielsen & Chuangの付録 3 の Kitaev-Solovay Theorem と4.5 の資料を使用すると、任意のユニタリ ゲートをユニバーサル ゲート セットで常に「効率的に」近似できることがわかります (これは、ここでは必ずしも重要ではありません)。どれほど効率的かは未解決の問題だと思いますが、少なくとも上限と下限があります。
これを考えると、回路を最適化するために Qiskittranspile()
関数がユニタリ ゲートを近似し、ゲート セットを最適な (最小化された) ゲート セットにリファクタリングすることが期待されますが、多くの非標準ゲートを含む大規模な回路で問題が発生する可能性があります。ただし、単純な例でも機能させるのに問題があります。たとえば、3 つのキュービットの順列行列は、近似するのに妥当なユニタリのように見えます (一部は、手動で SWAP ゲートと X ゲートに簡単に変換できます)。しかし、Qiskit はこれを行うのが好きではないようで、その理由を理解する助けが必要です。例として、Qiskit でユニタリ (順列) 演算子を定義し、次のように量子回路のゲートに変換できます。
さて、transpile()
次のようにQiskitで関数を使用しようとすると:
で終わる巨大で長い恐ろしいエラーが発生します。
それで、私の質問は...なぜだと思いますか。笑。いいえ、真剣に、これを間違った方法で使用しているだけですか? 私の期待は高すぎますか?私がやりたいことをするための合理的な方法はありますか?ベーシス ゲートの別のセットは機能しますか? もしそうなら、ベーシスゲートをどのように決定しますか?また、それぞれのソースコードを見ると、関数の機能がより制限されているように見えるdecompose()
関数(ドキュメントを参照)も試しました。transpile()
関数decompose()
が実装されます (このビデオとこのビデオで確認できます)。transpile()
関数も実装されています (このビデオの約 10:35 セル In[18] と彼の議論を参照してください)。彼を使用してコマンドを実行することもできます
また、そのインポートでも機能しません。transpile()
関数(またはその関数)が期待どおりに機能しない理由を誰かが理解している場合decompose()
は、説明が大好きです。ありがとう!!!
- - - - -アップデート - - - - -
私はさらに別の問題を発見しました。使用する場合
ランダムな回路を生成してから実行します
一部の結果 (3 キュービット ゲートなし) はトランスパイルされず、一部の結果はトランスパイルされます。したがって、これは、transpile()
. 注: 回路は「ランダム」であるため、3 キュービット ゲートのない回路を取得するには、このコードを数回試行する必要がある場合があります。たとえば、次の回路はトランスパイルしません。
私たちが走るとき
バリアを追加してすべての独立したゲートを個別のステップに分離することも、役に立たないようです。したがって、並列実行の問題ではなく、独立したゲート操作です。
----------アップデート2----------
Qiskit を使用してランダムな 3 キュービット ユニタリを生成すると、これらも機能しません。
ユニタリが動作するキュービットを再定義するか、回路を 3 キュービット回路に縮小するか、この方法でより大きな n キュービット ユニタリを生成することができます。これらの例はどれも機能しません。
python - 時間の経過とともに Python スクリプトの速度が低下する [解決済み]
解決策: 回路を再利用すると、qiskit が異常な動作をするようです。つまり、回路の実行に余分な時間がかかります。解決策は引っ張ることでした
興味のある人のために、 for ループに入れます。
時間の経過とともに単純なPython プログラムが遅くなるのはなぜですか? 進行するにつれてPythonスクリプトが遅くなりますか?ご覧のとおり、そこから学んだことをすべて実装しようとしましたが、役に立ちませんでした。
データの配列に対して何らかの計算を実行しようとしていますが、時間が進むにつれて大幅に遅くなります。具体的には
私のタイミングは、出力でリスト内包表記の要素を完了するたびに見ています。私のconv関数は次のように定義されています
端末出力を見ると、次のようなものが表示されます
これは、同じ画像の各フィルターにかかる時間がほぼ同じであることを示していますが、後続のすべての画像には通常一定の時間がかかります。多くの画像でこれを行う必要があるため、これは私にとって持続可能ではなく、uni マシンでは、3 秒のフィルターから 70 秒のフィルターになりました。
私のレポはここにあります https://github.com/milanleonard/QNN-implementation不足している情報がある場合。なぜこれが減速しているのか想像できません。
いくつかの追加情報については、問題を引き起こしているのはループ内の STEP のようです。これは、quantum_circuits の量、つまり画像ごとのフィルターの数を減らしてもまったく役に立たないためです。各ステップで保存するためのリファクタリングは役に立たず、私の記憶はどこでも急速に増加していません.
問題は img_outputs への追加にあるのではないかと考えましたが、このリファクタリングはそうではないことを示しています。
マイケルが提案したいくつかのプロファイリングの後、私はこれを見ます
2回目の実行
ApplyOperationBack への呼び出しの数は、ループの反復に比例して増加するように見えます
なぜこれが成長しているのかを探しに行くべきだと思います。