Skip to main content
IBM Quantum Platform

Qiskit 0.23 リリースノート


0.23.6

Terra 0.16.4

変更なし

エア 0.7.5

前奏曲

1.20.0 このリリースは、コンパイル済みのバイナリホイールパッケージの numpy バージョンとの互換性を修正するバグフィックスリリースです。 以前のリリース 0.7.4 では、numpy 1.20.0 を必要とする方法でバイナリをビルドしていましたが、現在は解決されており、コンパイル済みのバイナリホイールパッケージは、numpy互換のどのバージョンでも動作します。

イグニス 0.5.2

変更なし

アクア 0.8.2

変更なし

IBM Q プロバイダー 0.11.1

変更なし


0.23.5

Terra 0.16.4

前奏曲

このリリースは、主にnumpy 1.20.0 との互換性を修正するバグフィックスリリースです。 今回のnumpyリリースでは、 Python 'の数値型のローカルエイリアス(np.int -> int, np.float -> float, など)が非推奨となった で、Qiskitでこれらのエイリアスを使用した結果、大量の非推奨警告が発せられた。 本リリースではこれを修正し、非推奨の警告を出さずにnumpy 1.20.0 でQiskitを実行できるようにしました。

エア 0.7.4

バグ修正

numpy 1.20.0 との互換性を修正した。 今回のnumpyリリースでは、 Python 'の数値型のローカルエイリアス(np.int -> int, np.float -> float, など)が非推奨となった とQiskit Aerでこれらのエイリアスを使用した結果、大量の非推奨警告が発せられた。 このリリースではこの問題を修正し、非推奨の警告を出さずにQiskit Aerをnumpy 1.20.0 で実行できるようにしました。

イグニス 0.5.2

前奏曲

このリリースは、主にnumpy 1.20.0 との互換性を修正するバグフィックスリリースです。 また、 Python 3.9 をサポートする最初のリリースでもある。 それ以前のリリース( 0.5.0 および 0.5.1 を含む)は、 Python 3.9 で動作しましたが、パッケージのメタデータにはその旨が記載されておらず、これらのリリースに対するアップストリームテストは行われていませんでした。 このリリースではこの問題を修正し、 Python 3.9 ( 3.6、 3.7、 3.8 に加えて)でテストしました。

バグ修正

  • networkxは依存関係として明示的にリストされるようになった。 以前は、 qiskit.ignis.verification.topological_codes モジュールに必要なため、暗黙の依存関係でしたが、qiskit-terra も networkx を必要とし、ignis の依存関係でもあるため、実際には常にインストールされるため、依存関係として正しくリストされていませんでした。 しかし、networkxを必要としないqiskit-terraの将来のリリースの要件としてリストアップする必要があります。 また、将来的に必要なバージョン間に互換性がない場合に備えて、ignisの依存関係を正しくリストアップしておくことも重要だ。

アクア 0.8.2

IBM Q プロバイダー 0.11.1

変更なし


0.23.4

Terra 0.16.3

バグ修正

  • 0.16.2。 transpile() を実行するとエラーが発生する問題を修正しました(例: Reset)。 5736番を修正

エア 0.7.3

変更なし

イグニス 0.5.1

変更なし

アクア 0.8.1

変更なし

IBM Q プロバイダー 0.11.1

変更なし


0.23.3

Terra 0.16.2

新機能

  • Python 3.9 のサポートが追加されました。 Python 3.9 を使ってQiskit Terraを実行できるようになりました。

アップグレードの注意

  • クラス MCXGrayCode は、 num_ctrl_qubits が3の場合は C3XGatenum_ctrl_qubits が4の場合は C4XGate 。 class:' qiskit.library.standard_gates.x.MCXGate\ のどのモードでも、 num_ctrl_bitsが1の場合はCXGate、2の場合はCCXGate` 。

バグ修正

  • パルス Delay 命令は PulseQobjInstruction オブジェクトとして明示的に組み立てられるようになりました。 PulseQobj から出力される。 assemble().

    以前は Delay 命令を無視することができた。 Schedule の一部として assemble() オブジェクトの中で時間が明示されていたので PulseQobj オブジェクトの しかし、現在ではパルスゲートを使えば、遅延だけをスケジューリングすることができ、遅延自体を含めなければ遅延がなくなる状況もある。

  • カスタムゲートキャリブレーションを持つ回路は、各回路キャリブレーションの持続時間を明示的に提供することなく、トランスパイラでスケジューリングできるようになりました。

  • その BasisTranslatorUnroller のパスは、場合によっては、トランスピレーション下の回路のグローバルな位相を保っていなかった。 現在では、修正されています。

  • のバグ。 qiskit.pulse.builder.frequency_offset()compensate_phase がセットされたとき、 2π2\pi のファクターが追加フェーズから欠落していたバグ。

  • の出力のグローバル位相を固定する。 QuantumCircuit メソッド repeat(). グローバル位相を持つ回路が別の回路に付加される場合、現在グローバル位相は伝播されない。 シミュレーターは、位相が複数回適用されるため、これに依存している。 これは repeat() を0 に設定してから繰り返し回路を追加する。

  • のバグを修正した。 SparsePauliOpPython 以外の Numpy 組み込みのスカラー型の乗算が不正な値を返すというバグを修正した。 5408を修正

  • ヘリンガー・フィデリティの定義は、P, Qの対角密度行列としての量子状態フィデリティと等しくなるように、以前の定義 1H(P,Q)1-H(P,Q) から [1H(P,Q)2]2[1-H(P,Q)^2]^2 に修正された。

  • 3制御Xゲートの分解でCXゲートの数を減らす、 C3XGate. U CXベースでコンパイルされ最適化された結果、従来の20ゲートと22ゲートの代わりに、14CXゲートと16Uゲートのみが使用されている。

  • Jupyterバックエンドのウィジェットもしくは qiskit.tools.backend_monitor() を使用すると、バックエンドの基底ゲートに従来の u1, u2, u3 が含まれていない場合に失敗する問題を修正した。

  • 単一の要素を持つ回路のリストに対して qiskit.compiler.transpile() を実行すると、関数はリストの代わりに回路を返す。 これで qiskit.compiler.transpile() を呼び出すと、そのリストの要素が1つであってもリストを返す。 5260を参照。

    from qiskit import *
    
    qc = QuantumCircuit(2)
    qc.h(0)
    qc.cx(0, 1)
    qc.measure_all()
    
    transpiled = transpile([qc])
    print(type(transpiled), len(transpiled))
    <class 'list'> 1

エア 0.7.3

新機能

  • Python 3.9 のサポートが追加されました。 ソースからビルドすることなく、 Python 3.9、Qiskit Aerを実行できるようになりました。

バグ修正

  • "method""noise_model" オプションを同時に使用する場合、および from_backend() を使用して構築されたシミュレーターで使用する場合に、 QasmSimulator の基底ゲートを設定する際の問題を修正しました。 これでリストアップされた基底ゲートは、バックエンドのコンフィギュレーション、シミュレーション方法、ノイズモデルの基底ゲートがサポートするゲートの交差点となる。 ノイズモデルの基底ゲートとシミュレータの基底ゲートの交点が空の場合、警告が記録されます。
  • 条件レジスタの幅が64より大きい場合にc_ifが機能しないバグを修正した。 1077番を参照。
  • from_backend() および from_backend() において、 basis_gates['id', 'rz', 'sx', 'x', 'cx'] に設定された IBMQ デバイスに正しく設定されないバグを修正。 これでノイズモデルは、バックエンドの基底ゲートと同じ基底ゲートを持つことになる。
  • QasmSimulator の行列積状態メソッドで切り捨てを適用する際のバグを修正。

イグニス 0.5.1

変更なし

アクア 0.8.1

変更なし

IBM Q プロバイダー 0.11.1

変更なし


0.23.2

Terra 0.16.1

変更なし

エア 0.7.2

新機能

  • CMakeフラグ DISABLE_CONAN (default=OFF)s を追加する。 ソースからインストールする場合、これを ON に設定すると、Conan パッケージ・マネージャーをバイパスして、システムにすでにインストールされているライブラリを見つけることができる。 これは環境変数 DISABLE_CONAN としても利用可能で、CMakeフラグよりも優先される。 これはAERの正式な構築手順ではない。 したがって、ユーザーはCMakeが見つけられるように、必要なライブラリと対応するファイルをすべて提供する責任がある。

バグ修正

  • ネストされた OpenMP フラグが、本来設定されるべきでないのに true に設定されていたバグを修正。

イグニス 0.5.1

変更なし

アクア 0.8.1

変更なし

IBM Q プロバイダー 0.11.1

変更なし


0.23.1

Terra 0.16.1

バグ修正

  • ディレイを使用して構築された有効な回路の実行時にエラーがスローされる問題を修正しました。
  • qelib1.inc の ‘c4x’ の QASM 定義は、 C4XGate の標準ライブラリ定義と一致するように修正されました。
  • 量子チャンネル ABA - BBB がオブジェクトであった場合の減算のバグを修正。 Operator オブジェクトであった。 演算子表現では行列に否定が適用されていたが、量子チャンネル表現では否定と等価ではない。
  • _evolve_instruction() 、複数のレジスタを持つ命令を扱うために、量子ビットへのアクセス方法を変更する。

エア 0.7.1

アップグレードの注意

  • qiskit-aer をビルドする cmake の最小バージョンが 3.6 から 3.8 に上がりました。 この変更は、 AVX2 命令を持たない x86_64 CPU 上での実行をサポートする GPU バージョンのビルドを修正できるようにするために必要でした。

バグ修正

  • GPUをサポートするqiskit-aerが、 AVX2 命令を欠く x86_64 CPUを持つシステムで動作するようになりました。 以前は、GPUパッケージは AVX2 命令が利用可能な場合にのみ実行されていました。 修正番号 #1023
  • set_options() を使用して返されたバックエンドに設定されたオプションがプロバイダに保存され、同じ名前のバックエンドに対して get_backend() をそれ以降呼び出した場合にも保持される AerProvider のバグを修正。 これで、 backends() を呼び出すたびに、設定可能なシミュレータ・バックエンドの新しいインスタンスが返される。
  • 回路にサポートされていないシミュレータ命令が含まれている場合に返されるエラーメッセージのバグを修正しました。 以前は、サポートされている命令の一部が、サポートされていない命令とともにエラーメッセージに表示されていました。
  • sx"◆ゲートがC++コードでサポートされるゲートとしてリストされていなかったバグを修正。 SXGateStateOpSet matrix_product_state.hp が C++ コードでサポートされているゲートとしてリストされていなかったバグを修正。
  • QasmSimulator"density_matrix" メソッドでサポートされる基底ゲートとして "csx", "cu2", "cu3" が誤って表示されていたバグを修正。
  • MPSでは、apply_krausは内部量子ビットではなく、パラメータ量子ビットの入力ビットを直接操作していた。 MPSアルゴリズムでは、量子ビットは常に移動しているので、すべての演算は内部の量子ビットに適用されるべきである。
  • MPS::sample_measureを呼び出すとき、最初にqubitsをデフォルトの順序に並べ替える必要がある。これは qasm_controller.This の仮定であり、メソッドmove_all_qubits_orderingを呼び出すことで行われる。 sample_measure では正しいが、sample_measure では見つからない。

イグニス 0.5.1

バグ修正

  • TomographyFitter, StateTomographyFitter, ProcessTomographyFitter"auto" メソッドを修正し、CVXPY がインストールされ、 SCS 以外のサードパーティ製 SDP ソルバーが利用可能な場合にのみ "cvx" を使用するようにしました。 これは、SCSソルバーが他のソルバー手法よりも精度が低く、密度行列やChoi行列を返すことが多いためである。 qiskit.quantum_info.state_fidelity() または qiskit.quantum_info.process_fidelity() 関数と併用した場合、検証に失敗します。

アクア 0.8.1

0.8.1

新機能

  • 新しいアルゴリズムとして、分子の異なる自由度に沿ったポテンシャルエネルギー曲面を計算するBorn Openheimerポテンシャルエネルギー曲面が追加されました。 このアルゴリズムは BOPESSampler と呼ばれる。 さらに、ポテンシャルエネルギー曲面を、事前に定義された potentials.some 詳細の解析関数にフィットさせる機能を提供する。

重大な問題

  • QAOAinitial_state パラメーターは、バグフィックスの結果、異なる実装になっていることに注意してください。 以前の実装では、ユーザーが提供した initial_state とハダマードゲートを誤って混合していた。 問題は修正された。 あなたのコードが、ユーザーが提供した initial_state パラメータを使用しない場合は、注意する必要はありません。

バグ修正

  • qpp_solverのoptimize_svmメソッドが時々失敗して、次のようなエラーが発生した ValueError: cannot reshape array of size 1 into shape (200,1) この問題を解決するために、 L2 ノルム・パラメータ、 lambda2 を追加した。デフォルトは 0.001 であるが、収束を促進するために、必要に応じてQSVMアルゴリズムで変更できる。
  • DOCplexの最新ビルドでは、 VarType からメソッド one_letter_symbol が削除されたため、Aquaはこのバージョンと互換性がない。 そこで、この方法を使用する代わりに、Aqua最適化モジュールに変数の型を明示的にチェックする方法が導入された。
  • :meth`~qiskit.aqua.operators.state_fns.DictStateFn.sample()◆実数振幅しか扱えませんでしたが、複素数振幅も扱えるように修正しました。詳細は#1311 <https://github.com/qiskit-community/qiskit-aqua/issues/1311> を参照。
  • Trotterクラスがコンストラクタでreps引数を使用していなかった。詳細は#1317 <https://github.com/qiskit-community/qiskit-aqua/issues/1317> を参照。
  • :class`qiskit.aqua.operators.converters.CircuitSampler` が空の演算子をサンプリングした場合、 AquaError。詳細は#1321 <https://github.com/qiskit-community/qiskit-aqua/issues/1321> を参照。
  • to_opflow() は、係数が複素数の場合に正しい演算子を返します。詳細は#1381 <https://github.com/qiskit-community/qiskit-aqua/issues/1381>。
  • バックエンドシミュレータは、 QuantumInstance のAerのみに制限する代わりに、 NoiseModel のサポートを検証できるようにする。
  • QuantumInstance transpile メソッドに PassManager が存在する場合は、その run メソッドを呼び出すことで、 を正しく処理する。
  • QAOA のカスタム initial_state とハダマードゲートが混在するバグが修正されました。 これは、ユーザーからinitial_stateが提供されない場合、QAOAの機能を変更しない。 最適化結果が異なる可能性があるため、実装でQAOAをcusom initial_state パラメーターで使用している場合は注意が必要です。
  • 以前は、 QuantumInstance で seed_simulator=0 を設定しても、シードは設定されなかった。 これは値0にのみ影響する。 現在では、修正されています。

IBM Q プロバイダー 0.11.1

新機能

  • qiskit.providers.ibmq.experiment.Experiment には、実験作成に使用されたプロバイダを特定する3つの属性、hub、group、projectが追加された。
  • メソッド qiskit.providers.ibmq.experiment.ExperimentService.experiments()qiskit.providers.ibmq.experiment.ExperimentService.analysis_results() は、返される実験と分析結果の数を制限できる limit パラメータをサポートするようになった。

アップグレードの注意

  • 新しいパラメータ、 limit は、 qiskit.providers.ibmq.experiment.ExperimentService.experiments()qiskit.providers.ibmq.experiment.ExperimentService.analysis_results() の両メソッドの最初のパラメータとなった。 この limit 、デフォルト値は10である。つまり、dafultによって10個の実験と分析結果のみが返される。

バグ修正

  • ジョブの投入が途中で失敗した場合、ジョブが CREATING の状態で放置されることがあった問題を修正しました。
  • IBMQRandomService のインスタンスを子プロセスに渡す際に発生する無限ループを修正。

0.23.0

Terra 0.16.0

前奏曲

0.16.0 リリースにはいくつかの新機能とバグ修正が含まれている。 今回のリリースの主な特徴は以下の通り:

  • 遅延を利用して回路内の動作のタイミングと整列を制御できるスケジュール回路の導入。
  • オラクルなどの古典関数から量子回路をコンパイルする。
  • 位相+平方根(X)基底(すなわち ['p', 'sx'])だけでなく、異なるオイラー基底上で単一量子ビットの回転をコンパイルし、最適化する能力、 これは、 ['u1', 'u2', 'u3'] の古い IBM 量子基盤に取って代わるものである。
  • 追跡 global_phase() クラスの QuantumCircuit クラスは transpiler, quantum_infoおよび assembler モジュールや、 BasicAer、Aerシミュレーターによって拡張されている。 ユニタリー行列と状態ベクトルのシミュレーションで、大域的に位相補正されたユニタリー行列と状態ベクトルが返されるようになりました。

また、今回のリリースで特に重要なのは、 Python 3.5 がサポートされなくなったことだ。 Qiskit Terraを Python 3.5 で使用している場合、 0.15.2 リリースが動作する最後のバージョンです。

新機能

  • グローバルRゲートが qiskit.circuit.library. これにはグローバルRゲート(GR)、グローバルRx (GRX)およびグローバルRy(GRY)ゲートが含まれる。 GR ゲート、そしてグローバルRz( GRZゲートと同様に定義されるグローバルRz()が含まれる。 GR ゲートと同様に定義される。 グローバルRゲートは、同時に多数の量子ビット上で定義され、各量子ビット上のRゲートの直接和として働く。

    例:

    from qiskit import QuantumCircuit, QuantumRegister
    import numpy as np
    
    num_qubits = 3
    qr = QuantumRegister(num_qubits)
    qc = QuantumCircuit(qr)
    
    qc.compose(GR(num_qubits, theta=np.pi/3, phi=2*np.pi/3), inplace=True)

    を作成します。 QuantumCircuit を作成し QuantumRegister を作成し RGate を実行する。ブロッホ球のxy平面上の軸を中心に、各クビット上でx軸と ϕ=2π3\phi = \frac{2\pi}{3} の角度をなす角度 θ=π3\theta = \frac{\pi}{3}

  • 回路ドロワーの mpl バックエンドに、新しいカラースキーム iqx が追加された。 qiskit.visualization.circuit_drawer() そして qiskit.circuit.QuantumCircuit.draw(). これは、 IBM Quantum エクスペリエンス・ウェブサイトのサーキット・コンポーザーと同じ配色を使用している。 defaultiqxbw の3つのカラースキームがあります。

    配色を選ぶには2つの方法がある。 1つ目は、ユーザー設定ファイルを使用することです。デフォルトでは、 ~/.qiskit ディレクトリにあり、 [Default] の見出しの下にあるファイル settings.conf で、ユーザーは circuit_mpl_style = iqx を入力し、 iqx の配色を選択することができます。

    もうひとつの方法は、 QuantumCircuit.draw メソッドまたは circuit_drawer 関数の style クワーグに {'name': 'iqx'} を追加する方法である。 2つ目の方法は、 settings.conf ファイルの設定を上書きする。 例:

    from qiskit.circuit import QuantumCircuit
    
    circuit = QuantumCircuit(2)
    circuit.h(0)
    circuit.cx(0, 1)
    circuit.measure_all()
    circuit.draw('mpl', style={'name': 'iqx'})
  • 回路引き出しの style kwargで qiskit.visualization.circuit_drawer()qiskit.circuit.QuantumCircuit.draw()mpl バックエンドの displaycolor フィールドでは、各ゲート・タイプのゲート・カラーとテキスト・カラーの両方をフォーム (gate_color, text_color) に入力できるようになりました。 これにより、明暗のあるゲートカラーと対照的なテキストカラーを使用することができる。 その場合、 gatetextcolor フィールドが使用されます。 ゲートカラーは、 style dictで、1つから displaycolor dict全体まで、ゲートタイプの数だけ設定できる。 例:

    from qiskit.circuit import QuantumCircuit
    
    circuit = QuantumCircuit(1)
    circuit.h(0)
    
    style_dict = {'displaycolor': {'h': ('#FA74A6', '#000000')}}
    circuit.draw('mpl', style=style_dict)

    または

    style_dict = {'displaycolor': {'h': '#FA74A6'}}
    circuit.draw('mpl', style=style_dict)
  • パルスビルダー(qiskit.pulse.builder)に追加されている。

    • qiskit.pulse.builder.align_equispaced() は、コンテキスト内のパルススケジュール間に、同等の長さの遅延を挿入する。
    • qiskit.pulse.builder.align_func() は、より高度なパルス位置制御を提供する。 このコンテキストは、i番目のパルスの分数座標を計算するcallableを取り、コンテキスト内でパルスの整列を行う。 これによって、ダイナミック・デカップリングのコーディングが容易になる。
  • rep_delayQasmQobj クラスに追加されました、 QasmQobjConfig. このパラメータは、プログラムの実行間隔を示すために使用される。 で指定されたバックエンドの範囲から選ばなければならない。 BackendConfiguration メソッド rep_delay_range() で与えられるバックエンドの範囲から選ばなければならない。 値が指定されない場合は、バックエンドのデフォルト値 qiskit.providers.models.BackendConfiguration.default_rep_delay が使用される。 rep_delay は、動的な繰り返し時間を許可するバックエンドでのみ動作します。 これは BackendConfiguration プロパティ dynamic_reprate_enabled

  • qiskit.schemasqobj_schema.json JSON Schema ファイルが更新され、QASM Qobjs のオプション設定プロパティとして rep_delay が追加されました。

  • qiskit.schemasbackend_configuration_schema.json JSON Schema ファイルが更新され、 dynamic_reprate_enabledrep_delay_rangedefault_rep_delay が QASM バックエンド設定ペイロードのオプションプロパティとして追加されました。

  • 新しい最適化パス qiskit.transpiler.passes.TemplateOptimization がトランスパイラに追加された。 このパスでは arXiv:1909.05270 で説明されるテンプレートマッチングアルゴリズムを適用します。

    template_circuitsこの新しいトランスパイラー・パスを実装するために、回路ライブラリ(qiskit.circuit.library).この新しいモジュールには、回路ライブラリ( )で使用されているすべてのToffoli回路テンプレートが含まれています。 TemplateOptimization.

    この新しいパスは現在**、** プリセット・パス・マネージャー(qiskit.transpiler.preset_passmanagers)には含まれていないので、使用するにはカスタム PassManager.

  • プロバイダー・インターフェースの新バージョンが追加された。 この新しいインターフェイスは qiskit.providersにあるこの新しいインターフェースは、新しいバージョン管理メカニズムを提供し、インターフェースの変更を互換性のある方法で行うことを可能にする。 新しいインターフェイスは、明示的なバージョン管理以外はほとんど同じなので、既存のプロバイダーを移行するのは簡単なはずだ。

    抽象クラスが明示的にバージョン管理されることに加え、新しいインターフェイスの主な変更点は BackendV1 メソッド run() メソッドが QuantumCircuit オブジェクトの代わりに または ScheduleQobj オブジェクトを入力として受け取れるようになったことです。 これに伴い、オプションはバックエンド・クラスの一部となり、ユーザーはサーキットで実行する際のランタイム・オプションを設定できるようになった。 最後の変更は qiskit.providers.JobV1 これを設定するための正確な設定と方法はプロバイダ次第ですが、ジョブがどの実行モデルのもとで実行されているかを明示するためのインターフェイスフックポイントが JobV1 の抽象クラスに用意されています。

  • 新しいクワーグ、 inplace が関数に追加された。 qiskit.result.marginal_counts(). このkwargは、オブジェクトの入力に対して、内容をその場でマージナル化するか、新しいコピーを返すかを制御するために使われる。 Result オブジェクトの入力に対して このパラメータは、入力 dict または Counts オブジェクトの場合、このパラメータは何の効果も持たない。

  • 古典的な関数コンパイラの初期バージョン、 qiskit.circuit.classicalfunctionが追加された。 これにより、型付けされたpython関数(現時点では Int1 型のビットでのみ動作)を QuantumCircuit オブジェクトにコンパイルできます。 例:

    from qiskit.circuit import classical_function, Int1
    
    @classical_function
    def grover_oracle(a: Int1, b: Int1, c: Int1, d: Int1) -> Int1:
         x = not a and b
         y = d and not c
         z = not x or y
         return z
    
    quantum_circuit = grover_oracle.synth()
    quantum_circuit.draw()

    のパラメータ registerless=Falseqiskit.circuit.classicalfunction.ClassicalFunction メソッド synth() は、パラメータ名を参照するレジスタを持つ回路を作成する。 例:

    quantum_circuit = grover_oracle.synth(registerless=False)
    quantum_circuit.draw()

    装飾された古典関数は、回路に追加する際に他の量子ゲートと同じように使うことができる。

    circuit = QuantumCircuit(5)
    circuit.append(grover_oracle, range(5))
    circuit.draw()

    GROVER_ORACLE ゲートは、その分解が必要なときに合成される。

    circuit.decompose().draw()

    この機能には、量子回路を合成するためのライブラリである tweedledum が必要で、pip を使って pip install tweedledum をインストールすることができる。

  • 新しいクラス qiskit.circuit.Delay が追加されました。 新しい方法 delay() は、回路に遅延を簡単に追加できるようになりました。 これにより、タイミングに敏感な実験(例えば T1/T2 実験)を回路レベルで記述することが可能になる。

    from qiskit import QuantumCircuit
    
    qc = QuantumCircuit(1, 1)
    qc.delay(500, 0, unit='ns')
    qc.measure(0, 0)
    
    qc.draw()
  • の新しい引数 scheduling_method が追加された。 qiskit.compiler.transpile() が追加された。 遅延のある回路をトランスパイルする際に必要となる。 scheduling_method が指定された場合、トランスパイラーは、その中のすべてのアイドル時間が遅延でパディングされた(すなわち、各命令の開始時間が一意に決定された)スケジュール回路を返す。 これにより、スケジュールされた命令(ゲート)が回路レベルでどのように見えるかを見ることができる。

    from qiskit import QuantumCircuit, transpile
    from qiskit.test.mock.backends import FakeAthens
    
    qc = QuantumCircuit(2)
    qc.h(0)
    qc.cx(0, 1)
    
    scheduled_circuit = transpile(qc, backend=FakeAthens(), scheduling_method="alap")
    print("Duration in dt:", scheduled_circuit.duration)
    scheduled_circuit.draw(idle_wires=False)

    また timeline_drawer() を参照してください。

  • 新しい機能 qiskit.compiler.sequence() 関数が追加され、スケジュールされた回路を Schedule に変換し、パルス対応バックエンドで実行できるようにしました。

    from qiskit.compiler import sequence
    
    sched = sequence(scheduled_circuit, pulse_enabled_backend)
  • この schedule() が更新され、遅延のある回路もスケジューリングできるようになった。 さて、遅延のある回路をスケジューリングするには2つの方法がある:

    qc = QuantumCircuit(1, 1)
    qc.h(0)
    qc.delay(500, 0, unit='ns')
    qc.h(0)
    qc.measure(0, 0)
    
    sched_path1 = schedule(qc.decompose(), backend)
    sched_path2 = sequence(transpile(qc, backend, scheduling_method='alap'), backend)
    assert pad(sched_path1) == sched_path2

    のリリースノートとドキュメントを参照してください。 transpile() および sequence() のリリースノートとドキュメントを参照してください。

  • を追加した。 GroverOperator を回路ライブラリ(qiskit.circuit.library)に追加し、Groverの探索アルゴリズムと量子振幅増幅/推定で使用されるGrover演算子を構成できるようにした。 GroverOperator 、回路形式のオラクルが与えられ、教科書的なグローバー演算子を作成する。 これを振幅増幅のために一般化し、状態準備としてハダマードゲートの代わりに一般的な演算子を使うには、 state_in の引数を使うことができる。

  • その InstructionScheduleMap メソッド get()pop() メソッドは ParameterExpression インスタンスを取るようになりました。 ジェネレーターが関数の場合、式は関数呼び出しの前または関数呼び出しの中でバインドすることができる。 ジェネレーターが ParametrizedSchedule の場合、式はスケジュール自体がバインド/コールされる前にバインドされなければならない。

  • 新しいクラス LinearAmplitudeFunction が回路ライブラリ(qiskit.circuit.library)に新しいクラスが追加されました、

Fx0=1f(x)x0+f(x)x1F|x\rangle |0\rangle = \sqrt{1 - f(x)}|x\rangle |0\rangle + \sqrt{f(x)}|x\rangle |1\rangle

マッピングは、以下のように、制御されたパウリY回転とテイラー近似に基づいている。 https://arxiv.org/abs/1806.06893. この回路は、量子振幅推定アルゴリズムを使って線形関数の期待値を計算するのに使うことができる。

  • 新しいjupyter magic monospaced_outputqiskit.tools.jupyter モジュールに追加されました。 このマジックはJupyterノートブックの出力フォントを可能な限り "Courier New "に設定します。 このフォントを使用すると、より整列されたテキスト回路図が返されます。

    import qiskit.tools.jupyter
    %monospaced_output
  • 新しいトランスパイラー・パスが追加されました、 Optimize1qGatesDecompositionが追加された。 このトランスパイラー・パスは、既存の Optimize1qGates クラスを使って OneQubitEulerDecomposer クラスを使って単一量子ビット・ゲートの連鎖を分解し、単純化します。 この方法はどのような基底セットとも互換性がある。 Optimize1qGates は u1, u2, u3 でのみ動作する。 optimization_level 1、2、3 のデフォルト・パス・マネージャーは、基本セットに u1、 u2、 u3 が含まれていない場合、この新しいパスを使用するように更新された。

  • をサポートしている。 OneQubitEulerDecomposer は、 'PSX''U' の2つの新しい基底をサポートしている。 これらはコンストラクターの basis kwargで指定できる。 これは、 PGateSXGate'PSX' を使って回路に分解する。 UGate'U'

  • 新しいメソッド remove() メソッドが qiskit.transpiler.PassManager クラスに追加されました。 このメソッドは PassManager インスタンスからパスを削除することができます。 と同様にインデックス上で動作します。 replace(). 例えば RemoveResetInZeroState 最適化レベル1で使用されたパス・マネージャからパスを削除する:

    from qiskit.transpiler.preset_passmanagers import level_1_pass_manager
    from qiskit.transpiler.passmanager_config import PassManagerConfig
    
    pm = level_1_pass_manager(PassManagerConfig())
    pm.draw()
    [0] FlowLinear: UnrollCustomDefinitions, BasisTranslator
    [1] FlowLinear: RemoveResetInZeroState
    [2] DoWhile: Depth, FixedPoint, Optimize1qGates, CXCancellation

    ステージ [1] RemoveResetInZeroState はこのように取り外すことができる:

    pass_manager.remove(1)
    pass_manager.draw()
    [0] FlowLinear: UnrollCustomDefinitions, BasisTranslator
    [1] DoWhile: Depth, FixedPoint, Optimize1qGates, CXCancellation
  • 確率分布を量子ビット振幅にロードするためのいくつかのクラス、 UniformDistributionNormalDistributionLogNormalDistribution が回路ライブラリ(qiskit.circuit.library).正規分布と対数正規分布は、一変量分布と多変量分布の両方をサポートしています。 これらの回路は、量子振幅推定が使用される金融分野のアプリケーションの中心となっている。

  • パルスゲートのサポートが QuantumCircuit クラスに追加されました。 これにより QuantumCircuit の定義をオーバーライド(基底ゲートの場合)または指定(標準およびカスタム・ゲートの場合)することができる。 Gate 演算の定義を、ハードウェア・チャネルをまたがる時間順の信号で指定することができます。 言い換えれば、パルスレベルのカスタム・ゲート校正を提供するオプションが可能になる。

    回路は以前とまったく同じように作られている。 例:

    from qiskit import pulse
    from qiskit.circuit import QuantumCircuit, Gate
    
    class RxGate(Gate):
        def __init__(self, theta):
            super().__init__('rxtheta', 1, [theta])
    
    circ = QuantumCircuit(1)
    circ.h(0)
    circ.append(RxGate(3.14), [0])

    次に、ゲートのキャリブレーションは QuantumCircuit メソッド add_calibration() メソッドを使って登録することができます。 Schedule 定義と定義された量子ビットとパラメータを受け取ります:

    # Define the gate implementation as a schedule
    with pulse.build() as custom_h_schedule:
        pulse.play(pulse.library.Drag(...), pulse.DriveChannel(0))
    
    with pulse.build() as q1_x180:
        pulse.play(pulse.library.Gaussian(...), pulse.DriveChannel(1))
    
    # Register the schedule to the gate
    circ.add_calibration('h', [0], custom_h_schedule)  # or gate.name string to register
    circ.add_calibration(RxGate(3.14), [0], q1_x180)   # Can accept gate

    以前は、この機能は完全なパルス・スケジュールでしか使用できなかった。 さらに、カスタム定義で回路をバックエンドに送信できるようになりました(バックエンドのサポートに依存します)。

    パルスゲートを持つ回路は、パルスゲートを使用することにより Schedule に下げることができる。 schedule() 関数を使用する。

    較正されたゲートは、通常のトランスパイルプロセスを使用してトランスパイルすることもできる:

    transpiled_circuit = transpile(circ, backend)

    トランスパイルされた回路は、較正されたゲートを元の回路と同じ量子ビットに残し、基底ゲートに展開しない。

  • オブジェクトの逆アセンブルのサポートが PulseQobj オブジェクトの逆アセンブルのサポートが qiskit.assembler.disassemble() 関数に追加された。 例:

    from qiskit import pulse
    from qiskit.assembler.disassemble import disassemble
    from qiskit.compiler.assemble import assemble
    from qiskit.test.mock import FakeOpenPulse2Q
    
    backend = FakeOpenPulse2Q()
    
    d0 = pulse.DriveChannel(0)
    d1 = pulse.DriveChannel(1)
    with pulse.build(backend) as sched:
        with pulse.align_right():
            pulse.play(pulse.library.Constant(10, 1.0), d0)
            pulse.shift_phase(3.11, d0)
            pulse.measure_all()
    
    qobj = assemble(sched, backend=backend, shots=512)
    scheds, run_config, header = disassemble(qobj)
  • 新しいクワーグ、 coord_type が追加された。 qiskit.visualization.plot_bloch_vector(). このkwargは、生成された視覚化におけるBloch球面上のベクトルの位置を記述する入力パラメータに使用される座標系を変更することができます。 この新しいkwargには、 'cartesian' (デフォルト値)と 'spherical' の2つの値がサポートされている。 coord_type kwargが 'spherical' に設定されている場合、取り込まれるパラメータのリストは [r, theta,  phi] 形式のもので、 r は半径、 theta は+z方向からの傾き、 phi は+x方向からの方位角である。 例:

    from numpy import pi
    
    from qiskit.visualization import plot_bloch_vector
    
    x = 0
    y = 0
    z = 1
    r = 1
    theta = pi
    phi = 0
    
    
    # Cartesian coordinates, where (x,y,z) are cartesian coordinates
    # for bloch vector
    plot_bloch_vector([x,y,z])
    plot_bloch_vector([x,y,z], coord_type="cartesian")  # Same as line above
    # Spherical coordinates, where (r,theta,phi) are spherical coordinates
    # for bloch vector
    plot_bloch_vector([r, theta, phi], coord_type="spherical")
  • パルス Schedule オブジェクトが ParameterExpression オブジェクトを使用できるようになりました。

    例:

    from qiskit.circuit import Parameter
    from qiskit import pulse
    
    alpha = Parameter('⍺')
    phi = Parameter('ϕ')
    qubit = Parameter('q')
    amp = Parameter('amp')
    
    schedule = pulse.Schedule()
    schedule += SetFrequency(alpha, DriveChannel(qubit))
    schedule += ShiftPhase(phi, DriveChannel(qubit))
    schedule += Play(Gaussian(duration=128, sigma=4, amp=amp),
                     DriveChannel(qubit))
    schedule += ShiftPhase(-phi, DriveChannel(qubit))

    パラメーターの割り当ては assign_parameters() メソッドで行われます:

    schedule.assign_parameters({alpha: 4.5e9, phi: 1.57,
                                qubit: 0, amp: 0.2})

    次のような式や部分的な代入も機能する:

    beta = Parameter('b')
    schedule += SetFrequency(alpha + beta, DriveChannel(0))
    schedule.assign_parameters({alpha: 4.5e9})
    schedule.assign_parameters({beta: phi / 6.28})
  • 新しい視覚化機能 timeline_drawer()qiskit.visualization モジュールに追加された。

    例:

    from qiskit.visualization import timeline_drawer
    from qiskit import QuantumCircuit, transpile
    from qiskit.test.mock import FakeAthens
    
    qc = QuantumCircuit(2)
    qc.h(0)
    qc.cx(0,1)
    timeline_drawer(transpile(qc, FakeAthens(), scheduling_method='alap'))

アップグレードの注意

  • クラスおよびサブクラスのコンストラクタの params kwarg の型チェックが変更されました。 Gate クラスとそのサブクラスのコンストラクタの型チェックが変更されました。 以前は Gate クラスで定義された許容される型のセットでなければなりませんでした。 Instruction クラスで定義された 新しいメソッド validate_parameter() は、パラメータ型が有効かどうかを判定するために使われます。 サブクラスでのこのメソッドの定義は、その親よりも優先される。 例えば、 UnitaryGate は、 numpy.ndarray 型のパラメーターを受け入れ、それが numpy.ndarray である場合にパラメーターを返すカスタム validate_parameter() メソッドを定義する。 これは、親クラスで定義された関数よりも優先されます。 Gate. UnitaryGate が新しいクラスの親として使われる場合、新しい子クラスが独自のメソッドを定義しない限り、この validate_parameter メソッドが使われる。

  • n_qubitsnumberofqubits という名前のメソッド、引数、プロパティは削除されました。 これらは 0.13.0 リリースで非推奨となった。 変更点は以下の通り:

    クラス
    新規
    QuantumCircuitn_qubitsnum_qubits
    Paulinumberofqubitsnum_qubits
    関数
    古い議論
    新しい議論
    qiskit.circuit.random.random_circuit()n_qubitsnum_qubits
    qiskit.circuit.library.MSGaten_qubitsnum_qubits
  • パラメータ化されたインスタンスを Gate インスタンスを QuantumCircuit に挿入すると、回路で使用されるそのゲートのコピーが作成されます。 回路に挿入されたインスタンスに変更が加えられた場合、回路内のゲートには反映されなくなる。 この変更は、1つのパラメータ化されたオブジェクトを複数の回路に挿入する際の問題を修正するために行われました。 Gate オブジェクトを複数の回路に挿入するときの問題を修正するために行われました。

  • 関数 qiskit.result.marginal_counts() はデフォルトでは qiskit.result.Result インスタンスパラメータを変更しません。 以前は、 Result オブジェクトは常にその場で修正されていた。 新しいkwarg inplace が追加された。 marginal_counts() が追加されました。これは、 inplace=True が設定されている場合に、以前の動作を使えるようにするものです。

  • 定義は U3Gate の定義に変更された。 UGate クラスに変更された。 この UGate クラスには定義がない。 したがって、 U3、CXの観点からすべての回路を展開することはもはや不可能である。 その代わり、UとCXはすべての回路に使うことができる。

  • Qiskit Terra を Python 3.5 で実行するための非推奨サポートは削除されました。 このリリース以降、Qiskit Terra を使用するには、少なくとも Python 3.6 を使用する必要があります。 Python 3.5 をお使いの場合、動作する最後のバージョンは Qiskit Terra 0.15.2 です。

  • 属性では PulseBackendConfigurationhamiltonian 属性の vars フィールドは、以前使用されていた GHz の代わりに Hz 単位で返されるようになりました。 この変更は、クラス内の他の属性で使用されている単位と一貫性を持たせるために行われた。

  • の最初の位置引数として辞書を渡すサポートは廃止されました。 DAGNode コンストラクタの最初の位置引数として辞書を渡すサポートは削除されました。 最初の位置引数にディクショナリーを使用することは、 0.13.0 リリースで非推奨となった。 オブジェクトを作成するには DAGNode オブジェクトを作成するには、コンストラクタのkwargsとして属性を直接渡す必要がある。

  • 回路ゲート・メソッドのキーワード引数(例. qiskit.circuit.QuantumCircuit.cx0.12.0 リリースで非推奨となった qctl*tgt* は削除されました。 代わりに、 qubitcontrol_qubit*target_qubit* のみが、これらのメソッドの名前付き引数として使用できる。

  • 以前は非推奨だったモジュール qiskit.extensions.standard は削除された。 このモジュールは 0.14.0 リリース以降、非推奨となっている。 代わりに qiskit.circuit.library が代わりに使える。 さらに、以前 qiskit.extensions.standard にあったすべてのゲートクラスは、今でも qiskit.extensions.

  • モジュール qiskit.extensions.quantum_initializer: DiagGate, UCGG, UCPauliRotGate, UCRot, UCRXGate, UCX, UCRYGate, UCY, UCRZGate, UCZ の以前の非推奨ゲートは削除された。 これらはすべて 0.14.0 リリースで非推奨となり、回路ライブラリ (qiskit.circuit.library).

  • 以前は非推奨だった qiskit.circuit.QuantumCircuit gate メソッド iden() は削除されました。 これは 0.13.0 リリースで非推奨となり i() または id() を代わりに使うことができる。

非推奨のメモ

  • クラスのコンストラクタの params kwarg のパラメータに numpy.ndarray を使用することは廃止されました。 Gate クラスとサブクラスのコンストラクタの kwarg のパラメータに を使用することは非推奨となっており、将来のリリースでは削除される予定です。 これは、 parms の型チェックの処理方法のリファクタリングの一環として行われた。 Gate クラスの型チェックの処理方法のリファクタリングの一環として行われました。 のサブクラスであるカスタム・ゲート・クラスがある場合、 パラメータを受け入れます。 Gate のサブクラスであるカスタムゲートクラスがある場合 (あるいは階層内の別の親を経由して)、 ndarray パラメータを受け付けるので、そのクラスのカスタムメソッドを定義する必要があります。 validate_parameter() メソッドを定義する必要があります。 例:

    def validate_parameter(self, parameter):
        """Custom gate parameter has to be an ndarray."""
        if isinstance(parameter, numpy.ndarray):
            return parameter
        else:
            raise CircuitError("invalid param type {0} in gate "
                               "{1}".format(type(parameter), self.name))
  • その num_ancilla_qubits プロパティは PiecewiseLinearPauliRotationsPolynomialPauliRotations クラスのプロパティは非推奨となり、将来のリリースで削除される予定です。 代わりにプロパティ num_ancillas を代わりに使うべきである。 これは QuantumCircuit メソッド num_ancillas().

  • この qiskit.circuit.library.MSGate クラスは廃止されましたが、古いジョブのロードを可能にするために残ります。 これは qiskit.circuit.library.GMS クラスに置き換えられている。

  • MSBasisDecomposer トランスパイラー・パスは非推奨となり、将来のリリースで削除される予定です。 代わりに qiskit.transpiler.passes.BasisTranslator パスが代わりに使える。

  • メソッド QuantumCircuit メソッド u1u2u3 は非推奨となった。 その代わりに、次のような置き換えが可能である。

    u1(theta) = p(theta) = u(0, 0, theta)
    u2(phi, lam) = u(pi/2, phi, lam) = p(pi/2 + phi) sx p(pi/2 lam)
    u3(theta, phi, lam) = u(theta, phi, lam) = p(phi + pi) sx p(theta + pi) sx p(lam)

    ゲートクラスそのもの、 U1Gate, U2GateU3Gate は、古いジョブのロードを可能にするために残っている。

バグ修正

  • この Result クラスのメソッド data(), get_memory(), get_counts(), get_unitary()のいずれかを使って結果をフェッチしようとする場合は、 get_statevector ` will now emit a warning when the ``experiment`() kwargが指定される。 QuantumCircuit または Schedule インスタンス名と一致する複数のエントリが Result オブジェクトに存在する場合、kwarg が指定されます。 この名前に一致する最初のエントリーだけが返されることに注意。 修正番号 #3207
  • その qiskit.circuit.QuantumCircuit メソッド append() メソッドは、1つのパラメータ化されたゲート・インスタンスを複数の回路に挿入するのに使えるようになった。 これは、1つのパラメータ化されたオブジェクトを複数の回路に挿入すると、1つの回路にパラメータが割り当てられている場合に失敗するという以前の問題を修正するものである。 Gate オブジェクトを複数の回路に挿入すると、1つの回路にパラメータが割り当てられている場合にエラーが発生するという以前の問題が修正されました。 4697を修正
  • 以前は、 qiskit.execute.execute() 関数は、 backendpass_manager の両方の kwargs を同時に指定することを誤って許可していた。 この問題は修正され、 backendpass_manager の両方を、 execute() へのコールで併用できるようになった。 5037を修正
  • その QuantumCircuit メソッド unitary() メソッドが修正され、 qarg (1-qubitユニタリーを追加する場合)の引数に1つの整数を受け付けるようになりました。 引数 qargs に指定できる型は、 intQubitまたは整数のリストである。 修正番号#4944
  • 以前は、 BlueprintCircuit オブジェクトで inverse() を呼び出すと、その内部データ・プロパティがまだ入力されていない場合に失敗することがあった。 inverse() 、逆回路を生成する前に内部データを入力するように修正された。 修正番号 5140
  • 空のデータ辞書から qiskit.result.Counts オブジェクトを作成する際の問題を修正しました。 これで空の Counts オブジェクトを作成します。 この most_frequent() メソッドも更新され、オブジェクトが空の場合、より説明的な例外が発生するようになった。 5017を修正
  • UnitaryGatectrl_state の設定が2回適用されるバグを修正。 definition() クラスの qiskit.circuit.ControlledGate クラスのメソッドを呼び出すときに再度適用されます。 これでは、 ctrl_state を設定しても何の効果もないように見えてしまう。
  • 以前は ControlledGate メソッド inverse() メソッドは、 ctrl_state パラメータを保持しない場合がありました。 これは inverse() を呼び出しても出力に ctrl_state という値が残るように修正された。
  • サーキットドロワーの mpl 出力バックエンドのバグを修正した。 qiskit.circuit.QuantumCircuit.draw()qiskit.visualization.circuit_drawer()style kwargが文字列に設定されている場合、ドロワーが失敗するバグを修正。 正しい動作は、この文字列を視覚化用のスタイル・シートを含むJSONファイルへのパスとして扱うことです。 これは修正され、スタイル・シートのJSONファイルをロードできない場合に警告が発生するようになりました。
  • を介してQASMファイルをロードする際のエラーを修正しました。 from_qasm_file() または from_qasm_str() を使ったQASMファイルのロードが、 uphase(p)sxsxdg ゲートがQASMファイルに存在する場合に失敗するエラーを修正しました。 5156を修正
  • 1つの2量子ビット演算のみで定義されたゲートを展開/分解する際に、レジスタがミスマップされる可能性のあるバグを修正。

エア 0.7.0

前奏曲

この 0.7.0 リリースでは、シミュレーターのインターフェイスに多数のパフォーマンス改善と大幅な機能強化が施され、 Python 3.5 のサポートが停止されました。 主なインターフェイスの変更点は、設定可能なシミュレータ・バックエンドと、IBMQバックエンドからの設定済みシミュレータの構築です。 ノイズモデルと基底ゲートのサポートは、Qiskit回路ライブラリ標準ゲートのほとんどに対して拡張され、1量子ビットと2量子ビットの回転ゲートも新たにサポートされました。 性能の改善には、密度行列とユニタリー・シミュレーション手法にSIMDサポートを追加すること、ステートベクトルと密度行列のスナップショットを使用する回路の使用メモリを削減し性能を向上させること、ノイズの多いステートベクトル・シミュレーションの性能を大幅に向上させるゲート融合回路の最適化にクラウス命令をサポートすることなどが含まれます。

新機能

  • の基底ゲート・サポートを追加。 qiskit.circuit.DelayStatevectorSimulatorUnitarySimulatorQasmSimulator への命令サポートを追加。 シミュレーション中、このゲートはアイデンティティ・ゲートとして扱われ、遅延長パラメータは無視されることに注意してください。

  • 単一量子ビット・ゲートの基底ゲート・サポートを追加。 qiskit.circuit.library.UGateStatevectorSimulatorUnitarySimulator"statevector""density_matrix""matrix_product_state""extended_stabilizer" メソッドに、 QasmSimulator

  • フェーズ・ゲートの基底ゲート・サポートを追加 qiskit.circuit.library.PhaseGateStatevectorSimulatorStatevectorSimulatorUnitarySimulator"statevector""density_matrix""matrix_product_state""extended_stabilizer" のメソッド QasmSimulator

  • 制御位相ゲートの基底ゲート・サポートを追加。 qiskit.circuit.library.CPhaseGateStatevectorSimulatorStatevectorSimulatorUnitarySimulator"statevector""density_matrix""matrix_product_state" のメソッド QasmSimulator

  • マルチ制御位相ゲートのサポートを追加 qiskit.circuit.library.MCPhaseGateStatevectorSimulator , UnitarySimulator, および QasmSimulator"statevector" メソッドに対応。

  • (X)\sqrt(X) ゲートのサポートを追加。 qiskit.circuit.library.SXGateStatevectorSimulator UnitarySimulator QasmSimulatorのサポートを追加。

  • 1,2量子ビットQiskit回路ライブラリ回転ゲートのサポートを追加。 RXGate, RYGate, RZGate, RGate, RXXGate, RYYGate, RZZGate, RZXGateStatevectorSimulatorUnitarySimulator"statevector""density_matrix" の方法 QasmSimulator

  • StatevectorSimulator, UnitarySimulator, および QasmSimulator"statevector" メソッドに、マルチ制御回転ゲート "mcr", "mcrx", "mcry", "mcrz" のサポートを追加。

  • シミュレータのバックエンドを設定可能にする。 これにより、シミュレータのバックエンドオブジェクトごとに、シミュレーション方法やノイズモデルなどの永続的なオプションを設定することができます。

    QasmSimulatorPulseSimulator は、 :meth:`~qiskit.providers.aer.QasmSimulator.from_backend メソッドを使って、 IBMQBackend バックエンドオブジェクトから設定することもできる。 QasmSimulator 、バックエンドのコンフィギュレーションとプロパティに基づいて、カップリングマップ、ベーシス・ゲート、基本的なデバイス・ノイズ・モデルが設定される。 PulseSimulator 、システムモデルとデフォルトは、バックエンドのコンフィギュレーション、プロパティ、デフォルトから自動的に設定される。

    例えば、ノイズ密度行列シミュレータのバックエンドは QasmSimulator(method='density_matrix', noise_model=noise_model) のように構築でき、理想行列積状態シミュレータは QasmSimulator(method='matrix_product_state') のように構築できます。

    PulseSimulator 例えば、実際のバックエンドを使う前にシミュレーターでコードをテストする場合など、シミュレーターと実際のバックエンドを簡単に入れ替えることができる。 例えば、以下のコードブロックでは、 PulseSimulatorFakeArmonk() バックエンドからインスタンス化されている。 コンフィギュレーションとデフォルトのデータはすべてシミュレータのインスタンスにコピーされるため、 assemble への引数として渡されると、あたかもオリジナルのバックエンドが提供されたかのように振る舞います(例えば、 FakeArmonk のデフォルトが存在し、 assemble で使用されます)。

    armonk_sim = qiskit.providers.aer.PulseSimulator.from_backend(FakeArmonk())
    pulse_qobj = assemble(schedules, backend=armonk_sim)
    armonk_sim.run(pulse_qobj)

    上記の例は小規模なものであるが、実証された「ドロップイン置換」動作は、より複雑なワークフロー、例えばバックエンドの属性を用いてキャリブレーション実験を構築する場合の使い勝手を大幅に向上させるはずである。

  • StatevectorSimulator, UnitarySimulator, および QasmSimulator の statevector メソッドに qobj global phase のサポートを追加。

  • ゲート・フュージョン回路の最適化にクラウス法を追加することで、一般的なクラウス・ノイズを含むノイズの多い状態ベクトル・シミュレーションにゲート・フュージョンを適用できるようになり、一般的なノイズの多い状態ベクトル・シミュレーションの性能が向上しました。

  • 回路の最終命令である場合、 QasmSimulator の "statevector "と "density_matrix "メ ソッドに対して、状態ベクトルと密度行列のスナップショットに移動セマンティクス を使用する。 これにより、シミュレータのメモリ使用量が削減され、結果に大きな配列がコピーされることがなくなり、パフォーマンスが向上します。

  • QasmSimulator"matrix_product_state" メソッドに、 NoiseModel の一般的なクラウス QauntumError ゲートエラーのサポートを追加。

  • QasmSimulator"matrix_product_state" メソッドに密度行列スナップショット命令 qiskit.providers.aer.extensions.SnapshotDensityMatrix のサポートを追加。

  • 状態ベクトルシミュレーション法のSIMDベクトル化をユニタリー行列、スーパーオペレータ行列、密度行列シミュレーション法に拡張。 これにより、 UnitarySimulator"density_matrix" の方法 QasmSimulator、ゲート融合、ノイズシミュレーションを使用した一般的なシミュレーションでは、 2x の性能しか向上しない。

  • C++ コードにカスタムベクタクラスを追加し、 Pybind11 との統合を改善。 StatevectorSimulator これにより、最終的なシミュレータの状態を Python。

アップグレードの注意

  • AERは現在、Lapackを使って行列関連の計算をいくつか行っている。 これは、 OpenBlas にバンドルされている Lapack ライブラリ( Linux と Macos の典型的な OpenBlas ディストリビューションではすでに利用可能。Windows 版は AER で配布)、または MacOS の accelerate フレームワークを使用します。

  • Python 3.5 で qiskit-aer を実行する非推奨のサポートは削除されました。 qiskit-aer >= 0.7.0 を使用するには、少なくとも Python 3.6 が必要です。 Python 3.5 をお使いの場合、動作する最後のバージョンは qiskit-aer 0.6.x です。

  • ゲート・フュージョンのデフォルトしきい値を更新し、 StatevectorSimulator および QasmSimulator の状態ベクトル・シミュレーションにおいて、14量子ビットを超える回路にゲート・フュージョンが適用されるようにしました。

    QasmSimulator"density_matrix" 方式と UnitarySimulator のゲート融合は、7量子ビット以上の回路に適用される。

    fusion_threshold 、バックエンドオプションを使用して、カスタム閾値を設定することができます。 backend.set_options(fusion_threshold=10)

  • OpenMP qubit thresholdパラメーターの動作に合わせて、閾値と同じかそれ以上ではなく、閾値以上の量子ビット数の場合にフュージョンを適用するように、 fusion_threshold バックエンドオプションを変更。

非推奨のメモ

  • qiskit.providers.aer.noise.NoiseModel.set_x90_single_qubit_gates() は、qiskitトランスパイラにカスタム基底ゲートへのアンロールが追加されたため、非推奨となりました。 X90 ベースのノイズモデルを使用する正しい方法は、Sqrt(X) "sx" または "rx" ゲートと、ノイズモデル内のシングル量子ビット位相ゲート "u1", "rx", "p" のいずれか1つに対してノイズを定義することです。
  • スナップショット命令の variance kwarg は廃止されました。 この関数は、測定統計による分散ではなく、ノイズモデルのサンプリングによるスナップショットの標本分散を計算するため、しばしば誤って使用されていました。 ノイズモデリングの分散が必要な場合は、シングルショットのスナップショットを使用し、後処理で分散を手動で計算できるようにする。

バグ修正

  • AVX2 を搭載したシステム、またはバックエンドオプションで単精度または GPU メソッドが指定された場合でも、 SIMD/AVX2 をサポートせずに常に倍精度の CPU として実行される原因となっていた StatevectorSimulator のバグを修正。
  • C++コードの一部のforループで、コンテナ要素の参照ではなくコピーを反復していた問題を修正。
  • スナップショットデータが可能な限り移動されるのではなく、常にC++から Python にコピーされるバグが修正されました。 これにより、大きな状態ベクトルや密度行列のスナップショットを使用する際のメモリ使用量が半減し、シミュレーション時間が短縮されます。
  • スタビライザー・シミュレーターで正しいY期待値を返すようにState::snapshot_pauli_expvalを修正。 詳細は#895 <https://github.com/Qiskit/qiskit-aer/issues/895> を参照。
  • controller_executeラッパーが、フリー関数ではなくファンクタ(オブジェクト)になるように調整された。 特に、 multiprocessing.pool.map。
  • StatevectorSimulatorUnitarySimulator の使用可能メモリ不足チェックを追加。 回路内の量子ビット数をシミュレートするために必要なメモリが、システムの利用可能なメモリを超えた場合、例外がスローされます。

イグニス 0.5.0

前奏曲

このリリースには、期待値測定エラー軽減のための新しいモジュール、量子体積実験のためのプロット機能の改善、いくつかのバグ修正、 Python 3.5 のドロップサポートが含まれています。

新機能

  • qiskit.ignis.verification.randomized_benchmarking.randomized_benchmarking_seq() 、オプションでゲート・オブジェクトをinterleaved_elemとして入力できる。 さらに、CNOT-Dihedralクラス qiskit.ignis.verification.randomized_benchmarking.CNOTDihedral に新しいメソッドto_instructionが追加され、既存のfrom_circuitメソッドに( QuantumCircuit に加えて)Instructionのオプション入力が追加された。

  • qiskit.ignis.verification.randomized_benchmarking.CNOTDihedral に以下の新機能が追加された。 様々なタイプのオブジェクトからの初期化:CNOTDihedral, ScalarOp, QuantumCircuit, 命令と Pauli。 to_matrixで行列に、to_operatorで演算子に変換。 テンソル積法 テンソルと展開。 コンジュゲート、コンジュゲート、転置法を用いたアジョイント、コンジュゲート、転置の計算。 is_cnotdihedralメソッドを使用して、要素がCNOTDihedralであることを確認する。 関数decompose_cnotdihedral_generalに基づいて、CNOTDihedral要素の回路への分解方法to_circuitを拡張し、任意の数の量子ビットを許容できるようにした。

  • ミティゲーション・モジュールに期待値測定エラー緩和機能を追加。 これは、計数辞書から対角演算子の期待値を計算する際に、 完全な N量子ビット割り当て行列、単一量子ビットテンソル割り当て行列、または連続時間マルコフ過程(CTMP) [1の]測定誤差緩和を使用することをサポートします。 期待値は、 qiskit.ignis.mitigation.expectation_value() 関数を用いて計算される。

    測定誤差軽減器を較正するための較正回路は、 qiskit.ignis.mitigation.expval_meas_mitigator_circuits() 関数を使用して生成され、 qiskit.ignis.mitigation.ExpvalMeasMitigatorFitter クラスを使用して結果がフィッティングされます。 フィッターはミティゲーターオブジェクトを返し、 expectation_value() 関数の引数として与えることで、ミティゲーションを適用することができます。


    [1] S・ブラヴィイ、S・シェルドン、A・カンダラ、DC・マッケイ、JM・ガンベッタ

    マルチ量子ビット実験における測定誤差の軽減, arXiv:2006.14044 [quant-ph].

    例:

    次の例は、 'tensored' メソッドを用いた5量子ビット期待値測定誤差緩和器の較正を示している。

    from qiskit import execute
    from qiskit.test.mock import FakeVigo
    import qiskit.ignis.mitigation as mit
    
    backend = FakeVigo()
    num_qubits = backend.configuration().num_qubits
    
    # Generate calibration circuits
    circuits, metadata = mit.expval_meas_mitigator_circuits(
        num_qubits, method='tensored')
    result = execute(circuits, backend, shots=8192).result()
    
    # Fit mitigator
    mitigator = mit.ExpvalMeasMitigatorFitter(result, metadata).fit()
    
    # Plot fitted N-qubit assignment matrix
    mitigator.plot_assignment_matrix()

    以下は、上記のミティゲータを使用して、期待値計算に測定誤差緩和を適用する方法を示している

    from qiskit import QuantumCircuit
    
    # Test Circuit with expectation value -1.
    qc = QuantumCircuit(num_qubits)
    qc.x(range(num_qubits))
    qc.measure_all()
    
    # Execute
    shots = 8192
    seed_simulator = 1999
    result = execute(qc, backend, shots=8192, seed_simulator=1999).result()
    counts = result.get_counts(0)
    
    # Expectation value of Z^N without mitigation
    expval_nomit, error_nomit = mit.expectation_value(counts)
    print('Expval (no mitigation): {:.2f} \u00B1 {:.2f}'.format(
        expval_nomit, error_nomit))
    
    # Expectation value of Z^N with mitigation
    expval_mit, error_mit = mit.expectation_value(counts,
        meas_mitigator=mitigator)
    print('Expval (with mitigation): {:.2f} \u00B1 {:.2f}'.format(
        expval_mit, error_mit))
  • Numbaをオプションの依存関係として追加する。 Numbaは、CTMP法による期待値測定誤差の軽減に使用される qiskit.ignis.mitigation.CTMPExpvalMeasMitigator クラスの性能を大幅に向上させるために使用される。

  • qiskit.ignis.verification.quantum_volume.QVFitter に2つのメソッドを追加する。

    • qiskit.ignis.verification.quantum_volume.QVFitter.calc_z_value() 平均と標準偏差シグマを使って標準正規分布のz値を計算する。 sigma = 0の場合、警告が表示され、シグマに小さな値( 1e-10 )が割り当てられる。
    • qiskit.ignis.verification.quantum_volume.QVFitter.calc_confidence_level() を使って信頼度を計算する。
  • qiskit.ignis.verification.quantum_volume.QVFitter.qv_success() において、hmean < 2/3 の場合でも信頼度を保存する。

  • qiskit.ignis.verification.quantum_volume.QVFitter.calc_statistics() における二項分布に基づく統計の計算方法についての説明を追加する。

  • qiskit.ignis.verification.QVFitter メソッド plot_qv_data() が更新され、 matplotlib.Figure オブジェクトを返すようになった。 以前は何も返さなかった。 図を返すことで、ビジュアライゼーションをより大きな matplotlib ワークフローに統合することが容易になる。

  • qiskit.ignis.verification.QVFitterqiskit.ignis.verification.QVFitter.plot_qv_data() 、2シグマの信頼区間を表すように更新された。 以前は、エラーバーは1シグマの信頼区間を表していた。 量子ボリュームのベンチマークの成功基準は、片側2シグマ信頼度( ~97.7 %)で2/3以上の重い出力確率を要求する。 エラーバーを2シグマの信頼区間に変更することで、図中の成功を簡単に識別できるようになった。

  • 新しいクワーグ、 figsizeqiskit.ignis.verification.QVFitter メソッド qiskit.ignis.verification.QVFitter.plot_qv_data() に追加された。 このkwargは、 (x, y) 形式のタプルを取り込む。 xy は、生成されるプロットを作るためのインチ単位の寸法である。

  • qiskit.ignis.verification.quantum_volume.QVFitter.plot_hop_accumulative() 2a Quantum64巻論文( arXiv:2008.08571 ). 個々の試行のHOPは散布図、累積HOPは赤線でプロットした。 2シグマ信頼区間は斜線で、2/3成功閾値は破線でプロットした。

  • qiskit.ignis.verification.quantum_volume.QVFitter.plot_qv_trial() メソッドが追加され、Qiskit Terraのメソッドを活用して個々のトライアルをプロットできるようになった。 qiskit.visualization.plot_histogram() メソッドが追加された。 ビットストリング数は、理想値(空洞)と実験値(塗りつぶし)のオーバーラップヒストグラムとしてプロットされている。 実験の重出力確率は凡例に示されている。 確率の中央値は赤い破線で示した。

アップグレードの注意

  • qiskit-ignis を Python 3.5 で実行する非推奨のサポートは削除されました。 qiskit-ignis >= 0.5.0 を使用するには、少なくとも Python 3.6 が必要です。 Python 3.5 を使用している場合、動作する最後のバージョンは qiskit-ignis 0.4.x です。

バグ修正

  • 5回以上終了した要素のクラス qiskit.ignis.verification.randomized_benchmarking.CNOTDihedral のバグを修正。
  • qiskit.ignis.verification.quantum_volume.QVFitter.qv_success() 、QV論文アルゴリズム1で定義されたz = 2に対応する 0.977、信頼レベルのしきい値を固定する。
  • 関数に'rand_seed'パラメーターが与えられた場合に、与えられたrb_patternの中で同じサイズのサブシステムがすべて同じゲートを持つ原因となっていたバグを qiskit.ignis.verification.randomized_benchmarking.randomized_benchmarking_seq()

アクア 0.8.0

前奏曲

このリリースでは、ボソニック問題で利用可能なメソッドを実行するためのインターフェイスが導入されています。 特に、振動電子構造計算を実行するための完全なインターフェイスを導入した。

このリリースでは、励起状態計算用のインターフェイスが導入されました。 一般的な励起状態の計算が容易になりました。 この計算は、分子に関する関連情報を提供するDriver、問題の量子ビットハミルトニアンへのマッピングに関する情報を提供するTransformation、そして最後にSolverに基づいている。 ソルバーは、励起状態の計算を行う具体的な方法(アルゴリズム)である。 この構造は、基底状態の計算と同じである。 結果は、単一の期待値ではなく、期待値のリストを取るように修正される。 QEOMと NumpyEigensolver は新体制に適応している。 特定のフィルター(特定の対称性の状態をターゲットとする)でnumpy固有値ソルバーを実行するためのファクトリーが導入されました。

Aer qasm_simulatorでのVQE期待値計算が、期待されるショットノイズの挙動を持つ計算にデフォルト設定されるようになりました。

新機能

  • 他のオプションを調整しても効果がない場合に使用するオプションwarm_startを導入。 このオプションを有効にすると、まず緩和問題(すべての変数が連続的)が解かれ、その解がオプティマイザの状態を初期化するために使用されます。

  • 振幅推定アルゴリズムは、A演算子とQ演算子を指定する入力として、 QuantumCircuit オブジェクトを使用するようになった。 この変更は、回路ライブラリに GroverOperator が導入されたことに伴うもので、これによりさまざまなQ演算子を直感的かつ高速に構築できるようになった。 例えば、ベルヌーイ実験は次のように組み立てられる

    import numpy as np
    from qiskit import QuantumCircuit
    from qiskit.aqua.algorithms import AmplitudeEstimation
    
    probability = 0.5
    angle = 2 * np.sqrt(np.arcsin(probability))
    a_operator = QuantumCircuit(1)
    a_operator.ry(angle, 0)
    
    # construct directly
    q_operator = QuantumCircuit(1)
    q_operator.ry(2 * angle, 0)
    
    # construct via Grover operator
    from qiskit.circuit.library import GroverOperator
    oracle = QuantumCircuit(1)
    oracle.z(0)  # good state = the qubit is in state |1>
    q_operator = GroverOperator(oracle, state_preparation=a_operator)
    
    # use default construction in QAE
    q_operator = None
    
    ae = AmplitudeEstimation(a_operator, q_operator)
  • Conditional Value at Risk ( CVaR ) 期待値の計算機能を追加。

    多くの場合、最適化問題の目的関数に対応する対角の観測値Hが与えられた場合、観測された測定値の平均エネルギーを最小化することにはあまり興味がないことが多い。 この文脈では、少なくともいくつかの測定が低エネルギーを達成できれば満足である。 (これは化学の問題には当てはまらないことに注意)。

    このため、変分最適化の際に、最良の観測サンプルをコスト関数として使用することが考えられる。 ここで問題になるのは、この結果、最適化されたサーフェスが滑らかでなくなる可能性があるということだ。 この問題を解決するために、最良の観測サンプルだけを使用するのではなく、最良の観測サンプルの何割かを平均することで、最適化表面を滑らかにすることができる。 これはまさに、 CVaR 推定器が達成していることで[ある]。

    α\alpha[0,1][0,1] の実数とする。この実数は、目的関数を計算するために使用する最良観測サンプルの割合を指定する。 α=1\alpha = 1, CVaR が標準期待値と等価であることに注意。 同様に、 α=0\alpha = 0 の場合、 CVaR は最良の観測サンプルを使用することに相当する。 α\alpha の中間値は、これら2つの目的関数の間を補間する。

    CVaR を使用する機能は、 OperatorStateFn の新しいサブクラス、 CVaRMeasurement を通して、オペレーターフローに含まれている。 この新しい StateFn オブジェクトは、 OperatorMeasurement と同じようにインスタンス化されるが、alpha パラメータを受け付けることと、is_measurement 属性が自動的に True になることが例外である。 CVaRStateFn、それが測定でなかったら何を表すのかが不明であることに注意してほしい。

    例:

    qc = QuantumCircuit(1)
    qc.h(0)
    op = CVaRMeasurement(Z, alpha=0.5) @ CircuitStateFn(primitive=qc, coeff=1.0)
    result = op.eval()

    同様に、標準的な期待値に対応する演算子は、 CVaRExpectation コンバーターを用いて CVaR 期待値に変換することができる。

    例:

    qc = QuantumCircuit(1)
    qc.h(0)
    op = ~StateFn(Z) @ CircuitStateFn(primitive=qc, coeff=1.0)
    cvar_expecation = CVaRExpectation(alpha=0.1).convert(op)
    result = cvar_expecation.eval()

    このテクニックとその経験的パフォーマンスに関する詳細は [1を]参照。

    参照資料:


    [1] : バルクアウトソス, P. K., ナンニチーニ, G., ロバート・A タヴェルネッリ, I., および ヴォルナー、S

    「 CVaR” を用いた変分量子最適化の改善 arXiv:1907.04769

  • Eigensolverアルゴリズム用の新しいインターフェース Eigensolver .

  • 化学モジュールに励起状態計算のインターフェースが追加されました。 一般的な励起状態の計算が容易になりました。 この計算は、分子に関する関連情報を提供する Driver 、問題の量子ビット・ハミルトニアンへのマッピングに関する情報を提供する Transformation 、そして最後にソルバーに基づいている。 ソルバーは、励起状態の計算を行う具体的な方法(アルゴリズム)である。 この構造は、基底状態の計算と同じである。 結果は、単一の期待値ではなく、期待値のリストを取るように修正される。 QEOMNumpyEigensolver 。 特定のフィルター(特定の対称性の状態をターゲットとする)でnumpy固有値ソルバーを実行するためのファクトリーが導入されました。

  • フェルミオンの問題を解くワークフローに加えて、ボソニックの基底状態と励起状態を計算するためのインターフェースが追加された。 特に、振動電子構造計算を実行するための完全なインターフェイスを導入した。

  • 化学モジュールに新しい基底状態ソルバーとして OrbitalOptimizationVQE が追加された。 このソルバーにより、分子の変分パラメータと軌道をシミュレーション的に最適化することができます。 このアルゴリズムはSokolovらに紹介されている、 The Journal of Chemical Physics 152 (12).

  • 新しいアルゴリズムとして、分子の異なる自由度に沿ったポテンシャルエネルギー曲面を計算するBorn Openheimerポテンシャルエネルギー曲面が追加されました。 このアルゴリズムは BOPESSampler と呼ばれる。 さらに、ポテンシャルエネルギー曲面をあらかじめ定義されたポテンシャルの解析関数に当てはめる機能も備えている。

  • 最適化スタック内のすべてのオプティマイザーに、得られた解の実行可能性チェックが追加された。 これは、 QuadraticProgram に2つの新しいメソッドを追加することで実装されました:* get_feasibility_info(self, x: Union[List[float], np.ndarray]) は配列を受け取り、この解が実行可能かどうかと、違反した変数(違反した 境界)のリストと違反した制約のリストを返します。* is_feasible(self, x: Union[List[float], np.ndarray]) は配列を受け取り、その解が実行可能かどうかを返します。

  • FixedIncomeExpectedValueEuropeanCallDeltaGaussianConditionalIndependenceModelEuropeanCallExpectedValue の回路ベースのバージョンを qiskit.finance.applications に追加する。

  • グラディエント・フレームワーク qiskit.operators.gradients 量子状態を表す演算子が与えられる。 勾配のフレームワークは、勾配、自然勾配、ヘシアン、量子フィッシャー情報の評価を可能にする。

    パラメータ化された量子状態|ψ(θ)〉=V(θ)|ψ|が入力状態|ψ|とパラメータ化されたアンサッツV(θ)と演算子O(ω)を持つとします。

    勾配: dψ(θ)O(ω)ψ(θ)/dωd⟨ψ(θ)|O(ω)|ψ(θ)〉/ dω resp. dψ(θ)O(ω)ψ(θ)/dθd⟨ψ(θ)|O(ω)|ψ(θ)〉/ dθ resp. dψ(θ)iiψ(θ)/dθd⟨ψ(θ)|i〉⟨i|ψ(θ)〉/ dθ を計算したい。

    最後のケースは、グラデーション w.r.t に対応する。 ψ(θ)のサンプリング確率。 これらの勾配は、パラメータシフト、ユニタリーの線形結合、有限差分法など、さまざまな方法で計算することができる。

    例:

    x = Parameter('x')
    ham = x * X
    a = Parameter('a')
    
    q = QuantumRegister(1)
    qc = QuantumCircuit(q)
    qc.h(q)
    qc.p(params[0], q[0])
    op = ~StateFn(ham) @ CircuitStateFn(primitive=qc, coeff=1.)
    
    value_dict = {x: 0.1, a: np.pi / 4}
    
    ham_grad = Gradient(grad_method='param_shift').convert(operator=op, params=[x])
    ham_grad.assign_parameters(value_dict).eval()
    
    state_grad = Gradient(grad_method='lin_comb').convert(operator=op, params=[a])
    state_grad.assign_parameters(value_dict).eval()
    
    prob_grad = Gradient(grad_method='fin_diff').convert(operator=CircuitStateFn(primitive=qc, coeff=1.),
                                                         params=[a])
    prob_grad.assign_parameters(value_dict).eval()

    ヘシアン: d2ψ(θ)O(ω)ψ(θ)/dω2d^2⟨ψ(θ)|O(ω)|ψ(θ)〉/ dω^2 resp. d2ψ(θ)O(ω)ψ(θ)/dθ2d^2⟨ψ(θ)|O(ω)|ψ(θ)〉/ dθ^2 resp. d2ψ(θ)O(ω)ψ(θ)/dθdωd^2⟨ψ(θ)|O(ω)|ψ(θ)〉/ dθdω resp. d2ψ(θ)iiψ(θ)/dθ2d^2⟨ψ(θ)|i〉⟨i|ψ(θ)〉/ dθ^2 を計算したい。

    最後のケースは、ヘシアン w.r.t に対応する。 ψ(θ)のサンプリング確率。 1次勾配と同様に、ヘシアンもパラメータ・シフト、ユニタリーの線形結合、有限差分法など、さまざまな方法で評価することができる。 パラメータのタプルが与えられたとき、 Hessian().convert(op, param_tuple) は2階微分の値を返す。 パラメータのリストが与えられた場合、 Hessian().convert(op, param_list) は、与えられたパラメータの順序に従って、与えられたすべてのパラメータに対する完全なヘシアンを返します。

    QFI量子フィッシャー情報QFIは、入力状態|ψ|とパラメタ化されたアンサッツV(θ)によって生成されるパラメタ化された量子状態|ψ(θ)=V(θ)|ψ|の表現能力を代表する計量テンソルである。 純粋な状態のQFIのエントリーは、 [QFI]kl=Re[kψlψkψψ〉〈ψlψ]4[QFI]kl= Re[〈∂kψ|∂lψ〉−〈∂kψ|ψ〉〈ψ|∂lψ〉] * 4

    以前の微分タイプと同様に、QFIはさまざまな方法で計算することができる:ユニタリーの線形結合の実装に基づく完全な表現、ブロック対角表現、オーバーラップ法に基づく対角表現。

    例:

    q = QuantumRegister(1)
    qc = QuantumCircuit(q)
    qc.h(q)
    qc.p(params[0], q[0])
    op = ~StateFn(ham) @ CircuitStateFn(primitive=qc, coeff=1.)
    
    value_dict = {x: 0.1, a: np.pi / 4}
    qfi = QFI('lin_comb_full').convert(operator=CircuitStateFn(primitive=qc, coeff=1.), params=[a])
    qfi.assign_parameters(value_dict).eval()

    QFIと勾配を組み合わせると、次のような特殊な勾配ができる

    NaturalGradients: 自然勾配は特殊な勾配法で、勾配 w.r.t を再スケーリングする。 は、対応する量子フィッシャー情報(QFI) QFI1dψ(θ)O(ω)ψ(θ)/dθQFI^-1 d⟨ψ(θ)|O(ω)|ψ(θ)〉/ dθ の逆数を持つ状態パラメータである。これにより、QFIの厳密な逆変換の代わりに、QFI法と最小二乗ソルバーと併用する正則化法と同様に勾配を選択することができます:

    例:

    op = ~StateFn(ham) @ CircuitStateFn(primitive=qc, coeff=1.)
    nat_grad = NaturalGradient(grad_method='lin_comb, qfi_method='lin_comb_full', \
                               regularization='ridge').convert(operator=op, params=params)

    勾配フレームワークは、 qiskit.aqua.components.optimizers のオプティマイザーとも互換性がある。 派生クラスには、対応する callable を返す gradient_wrapper() 関数が付属している。

  • 問題インスタンスのフェルミオン変換とボソニック変換について transformations 。 フェルミオン演算子を量子ビット演算子に変換する。 変換に対応するクラスは fermionic_transformation アルゴリズムに導入 ground_state_solvers 、基底状態の特性を計算する。 計算には、 MinimumEigensolver を使用するか、 AdaptVQE を使用することができる。 chemistry/results では、アルゴリズムにeigenstate_resultとelectronic_structure_resultも使用される。 化学固有の最小固有値ソルバーを初期化できる最小固有値ソルバーファクトリー minimum_eigensolver_factories を導入 化学アプリケーションの基底状態ソルバーとして軌道最適化 vqe oovqe を導入

  • 新しいアルゴリズム結果クラス:

    Grover メソッド _run() はクラス GroverResult を返す。 AmplitudeEstimation メソッド _run() はクラス AmplitudeEstimationResult を返す。 IterativeAmplitudeEstimation メソッド _run() はクラス IterativeAmplitudeEstimationResult を返す。 MaximumLikelihoodAmplitudeEstimation メソッド _run() はクラス MaximumLikelihoodAmplitudeEstimationResult を返す。

    すべての新しい結果クラスは、以前の結果辞書と下位互換性があります。

  • 新しいリニアソルバーの結果クラス:

    HHL メソッド _run() はクラス HHLResult を返す。 NumPyLSsolver メソッド _run() はクラス NumPyLSsolverResult を返す。

    すべての新しい結果クラスは、以前の結果辞書と下位互換性があります。

  • MinimumEigenOptimizationResult samples と。 eigensolver_result 後者は、オプティマイザが使用する基本的なアルゴリズムから得られ、そのアルゴリズムに固有のものです。 RecursiveMinimumEigenOptimizer 結果クラス RecursiveMinimumEigenOptimizationResult のインスタンスを返すようになった。結果クラス には、基本的なアルゴリズムから得られた中間結果が含まれることがある。 専用の結果クラスは、このオプティマイザー専用のプロパティ replacementshistory を公開している。 履歴の深さは、オプティマイザの history パラメーターで管理される。

  • GroverOptimizer GroverOptimizationResult この結果クラスは、 operation_countsn_input_qubitsn_output_qubits のプロパティを直接公開する。 これらのプロパティは、 raw_results 辞書ではもう利用できません。

  • SlsqpOptimizerSlsqpOptimizationResult のインスタンスを返すようになり、この結果クラスは SLSQP 実装に固有の追加プロパティを公開します。

  • QuantumCircuit オブジェクトをジェネレーター回路として QuantumGenerator に渡すことができる。

  • CircuitStateFn.from_vector における実数入力ベクトルへの制限を解除する。 このメソッドは extensions.Initialize を呼び出す。 後者は(APIとドキュメントで)複雑な入力ベクトルを明示的にサポートしている。 だから、この制限は必要ないように思える。

  • retworkxのグラフカラーリングアルゴリズムを用いた簡略化された AbelianGrouper。 numpyベースのカラーリングアルゴリズムよりも高速です。

  • VectorStateFn ステート関数オブジェクトに対して引数なしで eval 。 これは、引数が渡されない場合に MatrixOp 表現を返す OperatorBase.eval と一貫した動作である。

  • VQEAdapt クラスに max_iterations を追加し、アルゴリズムが実行する最大反復回数を制限できるようにする。

  • Aer qasm_simulatorでのVQE期待値計算が、期待されるショットノイズの挙動を持つ計算にデフォルト設定されるようになりました。 状態ベクトル・シミュレーターに似た理想的な出力で、より高速なAerスナップショット・ベースの特別な計算を選択することもできますが、以前のAqua 0.7 のようにデフォルトでは選択できなくなりました。

アップグレードの注意

  • 従来のAnalytic Quantum Gradient Descent (AQGD)古典的オプティマイザをエポック付きAQGDで拡張。 現在、AQGDは、運動量項、解析的勾配、パラメトリック量子ゲート用にカスタマイズされたステップ長スケジュールを追加した勾配降下最適化を実行します。 勾配は、目的関数を評価する際に量子回路を使って "解析的に "計算される。
  • Python 3.5 で qiskit-aqua を実行する非推奨のサポートは削除されました。 qiskit-aqua >= 0.8.0 を使用するには、少なくとも Python 3.6 が必要です。 Python 3.5 をお使いの場合、動作する最後のバージョンは qiskit-aqua 0.7.x です。
  • 新しい依存関係としてretworkxを追加。

非推奨のメモ

  • 振幅推定アルゴリズムの引数 i_objective は、 objective_qubits に改名された。

  • TransformationType

  • QubitMappingType

  • CircuitFactory 、派生型を非推奨とする。 CircuitFactory は、 QuantumCircuit がアクアでのアプリケーションに必要な機能を欠いていたため、一時的なクラスとして導入された。 これで回路に必要な機能がすべて備わったので、回路ファクトリーを取り外すことができる。 交換部品は以下の表の通り。

    Circuit factory class               | Replacement
    ------------------------------------+-----------------------------------------------
    CircuitFactory                      | use QuantumCircuit
                                        |
    UncertaintyModel                    | -
    UnivariateDistribution              | -
    MultivariateDistribution            | -
    NormalDistribution                  | qiskit.circuit.library.NormalDistribution
    MultivariateNormalDistribution      | qiskit.circuit.library.NormalDistribution
    LogNormalDistribution               | qiskit.circuit.library.LogNormalDistribution
    MultivariateLogNormalDistribution   | qiskit.circuit.library.LogNormalDistribution
    UniformDistribution                 | qiskit.circuit.library.UniformDistribution
    MultivariateUniformDistribution     | qiskit.circuit.library.UniformDistribution
    UnivariateVariationalDistribution   | use parameterized QuantumCircuit
    MultivariateVariationalDistribution | use parameterized QuantumCircuit
                                        |
    UncertaintyProblem                  | -
    UnivariateProblem                   | -
    MultivariateProblem                 | -
    UnivariatePiecewiseLinearObjective  | qiskit.circuit.library.LinearAmplitudeFunction
  • ising変換クラス qiskit.optimization.converters.QuadraticProgramToIsingqiskit.optimization.converters.IsingToQuadraticProgram は非推奨となり、将来のリリースで削除される予定です。 代わりに qiskit.optimization.QuadraticProgram メソッド to_ising()from_ising() を使うべきである。

  • qiskit.circuit.libraryWeightedAdder として回路ライブラリに移植された WeightedSumOperator を非推奨とする。

  • Core Hamiltonian クラスは非推奨となり、 FermionicTransformation Chemistry Operator クラスは非推奨となり、 tranformations minimum_eigen_solvers/vqe_adapt はまた非推奨となり、ground_state_solver インタフェースの実装として移動する applications/molecular_ground_state_energy は非推奨となり、 は非推奨となり、 は非推奨となる。 ground_state_solver

  • Optimizer.SupportLevel 入れ子になったenumは OptimizerSupportLevelOptimizer.SupportLevel 。 例えば、 Optimizer.SupportLevel.required の代わりに OptimizerSupportLevel.required を使う。

  • QuantumGenerator への入力として UnivariateVariationalDistributionMultivariateVariationalDistribution を非推奨とする。 代わりに、プレーンな QuantumCircuit

  • AbelianGrouper.group_subops の無視されたfastオプションとuse_nxオプションは、将来のリリースで削除される。

  • GSLS オプティマイザー・クラスは __init__ パラメーター max_iter を廃止し、 maxiter を採用した。 SPSA オプティマイザ・クラスは __init__ パラメータ max_trials を廃止し、 maxiter を採用した。 optimize_svm関数は max_iters パラメータを廃止し、 maxiter に変更した。 ADMMParameters クラスは __init__ パラメータ max_iter を非推奨とし、 maxiter を採用した。

バグ修正

  • active_(un)occupiedパラメータを使ってUCSSDにアクティブスペースが明示的に提供された場合、単一励起と二重励起からなるUCCSD励起リストが正しく生成されませんでした。
  • 振幅推定アルゴリズムでは、Q演算子/Grover演算子の適用回数をオラクルクエリの回数と定義する。 これにはショット数も含まれる。 この要素はMLAEとIQAEには含まれているが、"標準的な "QAEには欠けていた。
  • CircuitSampler.convertを修正し、 is_measurement プロパティが変換された StateFns に反映されるようにした。
  • :meth`~qiskit.aqua.operators.VectorStateFn.to_circuit での係数の二重計算を修正した。
  • 恒等式のスカラー倍である項を含む演算子で PauliTrotterEvolution.convertを呼び出すと、スカラー係数を無視した誤った回路が生成された。 この修正には、回路のglobal_phaseプロパティの係数の影響が含まれる。
  • Make ListOp.num_qubits check that all ops in list have same num_qubits 以前は、 ListOp の最初の演算子の量子ビット数が返されていた。 この変更により、他のすべての演算子も同じ数の量子ビットを持つことが追加チェックされる。
  • 以下の変更により、 PauliOp.exp_i() が正しい行列を生成するようにする。 2) 回路をマトリックスに変換する際、グローバル位相が無視されていた。 回路をユニタリー行列に変換するのに便利な qiskit.quantum_info.Operator。
  • でバグが報告されていた周期性の検出を修正した。 https://github.com/qiskit-community/qiskit-aqua/issues/1184.

IBM Q プロバイダー 0.11.0

アップグレードの注意

  • qiskit-ibmq-provider を Python 3.5 で実行する非推奨のサポートは削除された。 qiskit-ibmq-provider >= 0.11.0 を使用するには、少なくとも Python 3.6 が必要です。 Python 3.5 を使用している場合、動作する最後のバージョンは qiskit-ibmq-provider 0.10.x です。
  • このリリース以前は、 websockets 7.0 が Python 3.6 に使われていた。 このリリースでは、すべての Python バージョンで websockets 8.0 以上が必要です。 パッケージの要件はこれを反映して更新された。
このページは役に立ちましたか?
バグや誤字の報告、またはコンテンツの要求はGitHubで行ってください。