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の場合はC3XGate、num_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オブジェクトの しかし、現在ではパルスゲートを使えば、遅延だけをスケジューリングすることができ、遅延自体を含めなければ遅延がなくなる状況もある。 -
カスタムゲートキャリブレーションを持つ回路は、各回路キャリブレーションの持続時間を明示的に提供することなく、トランスパイラでスケジューリングできるようになりました。
-
その
BasisTranslatorとUnrollerのパスは、場合によっては、トランスピレーション下の回路のグローバルな位相を保っていなかった。 現在では、修正されています。 -
のバグ。
qiskit.pulse.builder.frequency_offset()compensate_phaseがセットされたとき、 のファクターが追加フェーズから欠落していたバグ。 -
の出力のグローバル位相を固定する。
QuantumCircuitメソッドrepeat(). グローバル位相を持つ回路が別の回路に付加される場合、現在グローバル位相は伝播されない。 シミュレーターは、位相が複数回適用されるため、これに依存している。 これはrepeat()を0 に設定してから繰り返し回路を追加する。 -
のバグを修正した。
SparsePauliOpPython 以外の Numpy 組み込みのスカラー型の乗算が不正な値を返すというバグを修正した。 5408を修正 -
ヘリンガー・フィデリティの定義は、P, Qの対角密度行列としての量子状態フィデリティと等しくなるように、以前の定義 から に修正された。
-
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 の標準ライブラリ定義と一致するように修正されました。
- 量子チャンネル 、 がオブジェクトであった場合の減算のバグを修正。
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 詳細の解析関数にフィットさせる機能を提供する。
重大な問題
QAOAのinitial_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をcusominitial_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軸と の角度をなす角度 。 -
回路ドロワーの
mplバックエンドに、新しいカラースキームiqxが追加された。qiskit.visualization.circuit_drawer()そしてqiskit.circuit.QuantumCircuit.draw(). これは、 IBM Quantum エクスペリエンス・ウェブサイトのサーキット・コンポーザーと同じ配色を使用している。default、iqx、bwの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'}) -
回路引き出しの
stylekwargでqiskit.visualization.circuit_drawer()とqiskit.circuit.QuantumCircuit.draw()mplバックエンドのdisplaycolorフィールドでは、各ゲート・タイプのゲート・カラーとテキスト・カラーの両方をフォーム(gate_color, text_color)に入力できるようになりました。 これにより、明暗のあるゲートカラーと対照的なテキストカラーを使用することができる。 その場合、gatetextcolorフィールドが使用されます。 ゲートカラーは、styledictで、1つからdisplaycolordict全体まで、ゲートタイプの数だけ設定できる。 例: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_delay。QasmQobjクラスに追加されました、QasmQobjConfig. このパラメータは、プログラムの実行間隔を示すために使用される。 で指定されたバックエンドの範囲から選ばなければならない。BackendConfigurationメソッドrep_delay_range()で与えられるバックエンドの範囲から選ばなければならない。 値が指定されない場合は、バックエンドのデフォルト値qiskit.providers.models.BackendConfiguration.default_rep_delayが使用される。rep_delayは、動的な繰り返し時間を許可するバックエンドでのみ動作します。 これはBackendConfigurationプロパティdynamic_reprate_enabled。 -
qiskit.schemasのqobj_schema.jsonJSON Schema ファイルが更新され、QASM Qobjs のオプション設定プロパティとしてrep_delayが追加されました。 -
qiskit.schemasのbackend_configuration_schema.jsonJSON Schema ファイルが更新され、dynamic_reprate_enabled、rep_delay_range、default_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=False。qiskit.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)に新しいクラスが追加されました、
マッピングは、以下のように、制御されたパウリY回転とテイラー近似に基づいている。 https://arxiv.org/abs/1806.06893. この回路は、量子振幅推定アルゴリズムを使って線形関数の期待値を計算するのに使うことができる。
-
新しいjupyter magic
monospaced_output。qiskit.tools.jupyterモジュールに追加されました。 このマジックはJupyterノートブックの出力フォントを可能な限り "Courier New "に設定します。 このフォントを使用すると、より整列されたテキスト回路図が返されます。import qiskit.tools.jupyter %monospaced_output -
新しいトランスパイラー・パスが追加されました、
Optimize1qGatesDecompositionが追加された。 このトランスパイラー・パスは、既存のOptimize1qGatesクラスを使ってOneQubitEulerDecomposerクラスを使って単一量子ビット・ゲートの連鎖を分解し、単純化します。 この方法はどのような基底セットとも互換性がある。Optimize1qGatesは u1, u2, u3 でのみ動作する。optimization_level1、2、3 のデフォルト・パス・マネージャーは、基本セットに u1、 u2、 u3 が含まれていない場合、この新しいパスを使用するように更新された。 -
をサポートしている。
OneQubitEulerDecomposerは、'PSX'と'U'の2つの新しい基底をサポートしている。 これらはコンストラクターのbasiskwargで指定できる。 これは、PGateとSXGate'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 -
確率分布を量子ビット振幅にロードするためのいくつかのクラス、
UniformDistribution、NormalDistribution、LogNormalDistributionが回路ライブラリ(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_typekwargが'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'))
アップグレードの注意
-
クラスおよびサブクラスのコンストラクタの
paramskwarg の型チェックが変更されました。Gateクラスとそのサブクラスのコンストラクタの型チェックが変更されました。 以前はGateクラスで定義された許容される型のセットでなければなりませんでした。Instructionクラスで定義された 新しいメソッドvalidate_parameter()は、パラメータ型が有効かどうかを判定するために使われます。 サブクラスでのこのメソッドの定義は、その親よりも優先される。 例えば、UnitaryGateは、numpy.ndarray型のパラメーターを受け入れ、それがnumpy.ndarrayである場合にパラメーターを返すカスタムvalidate_parameter()メソッドを定義する。 これは、親クラスで定義された関数よりも優先されます。Gate.UnitaryGateが新しいクラスの親として使われる場合、新しい子クラスが独自のメソッドを定義しない限り、このvalidate_parameterメソッドが使われる。 -
n_qubits、numberofqubitsという名前のメソッド、引数、プロパティは削除されました。 これらは 0.13.0 リリースで非推奨となった。 変更点は以下の通り:クラス旧新規QuantumCircuitn_qubitsnum_qubitsPaulinumberofqubitsnum_qubits関数古い議論新しい議論qiskit.circuit.random.random_circuit()n_qubitsnum_qubitsqiskit.circuit.library.MSGaten_qubitsnum_qubits -
パラメータ化されたインスタンスを
GateインスタンスをQuantumCircuitに挿入すると、回路で使用されるそのゲートのコピーが作成されます。 回路に挿入されたインスタンスに変更が加えられた場合、回路内のゲートには反映されなくなる。 この変更は、1つのパラメータ化されたオブジェクトを複数の回路に挿入する際の問題を修正するために行われました。Gateオブジェクトを複数の回路に挿入するときの問題を修正するために行われました。 -
関数
qiskit.result.marginal_counts()はデフォルトではqiskit.result.Resultインスタンスパラメータを変更しません。 以前は、Resultオブジェクトは常にその場で修正されていた。 新しいkwarginplaceが追加された。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 リリースで非推奨となったq、ctl*、tgt*は削除されました。 代わりに、qubit、control_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.QuantumCircuitgate メソッドiden()は削除されました。 これは 0.13.0 リリースで非推奨となりi()またはid()を代わりに使うことができる。
非推奨のメモ
-
クラスのコンストラクタの
paramskwarg のパラメータに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プロパティはPiecewiseLinearPauliRotationsとPolynomialPauliRotationsクラスのプロパティは非推奨となり、将来のリリースで削除される予定です。 代わりにプロパティnum_ancillasを代わりに使うべきである。 これはQuantumCircuitメソッドnum_ancillas(). -
この
qiskit.circuit.library.MSGateクラスは廃止されましたが、古いジョブのロードを可能にするために残ります。 これはqiskit.circuit.library.GMSクラスに置き換えられている。 -
MSBasisDecomposerトランスパイラー・パスは非推奨となり、将来のリリースで削除される予定です。 代わりにqiskit.transpiler.passes.BasisTranslatorパスが代わりに使える。 -
メソッド
QuantumCircuitメソッドu1、u2、u3は非推奨となった。 その代わりに、次のような置き換えが可能である。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,U2GateとU3Gateは、古いジョブのロードを可能にするために残っている。
バグ修正
- この
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()関数は、backendとpass_managerの両方の kwargs を同時に指定することを誤って許可していた。 この問題は修正され、backendとpass_managerの両方を、execute()へのコールで併用できるようになった。 5037を修正 - その
QuantumCircuitメソッドunitary()メソッドが修正され、qarg(1-qubitユニタリーを追加する場合)の引数に1つの整数を受け付けるようになりました。 引数qargsに指定できる型は、int、Qubitまたは整数のリストである。 修正番号#4944 - 以前は、
BlueprintCircuitオブジェクトでinverse()を呼び出すと、その内部データ・プロパティがまだ入力されていない場合に失敗することがあった。inverse()、逆回路を生成する前に内部データを入力するように修正された。 修正番号 5140 - 空のデータ辞書から
qiskit.result.Countsオブジェクトを作成する際の問題を修正しました。 これで空のCountsオブジェクトを作成します。 このmost_frequent()メソッドも更新され、オブジェクトが空の場合、より説明的な例外が発生するようになった。 5017を修正 UnitaryGateのctrl_stateの設定が2回適用されるバグを修正。definition()クラスのqiskit.circuit.ControlledGateクラスのメソッドを呼び出すときに再度適用されます。 これでは、ctrl_stateを設定しても何の効果もないように見えてしまう。- 以前は
ControlledGateメソッドinverse()メソッドは、ctrl_stateパラメータを保持しない場合がありました。 これはinverse()を呼び出しても出力にctrl_stateという値が残るように修正された。 - サーキットドロワーの
mpl出力バックエンドのバグを修正した。qiskit.circuit.QuantumCircuit.draw()とqiskit.visualization.circuit_drawer()stylekwargが文字列に設定されている場合、ドロワーが失敗するバグを修正。 正しい動作は、この文字列を視覚化用のスタイル・シートを含むJSONファイルへのパスとして扱うことです。 これは修正され、スタイル・シートのJSONファイルをロードできない場合に警告が発生するようになりました。 - を介してQASMファイルをロードする際のエラーを修正しました。
from_qasm_file()またはfrom_qasm_str()を使ったQASMファイルのロードが、u、phase(p)、sx、sxdgゲートがQASMファイルに存在する場合に失敗するエラーを修正しました。 5156を修正 - 1つの2量子ビット演算のみで定義されたゲートを展開/分解する際に、レジスタがミスマップされる可能性のあるバグを修正。
エア 0.7.0
前奏曲
この 0.7.0 リリースでは、シミュレーターのインターフェイスに多数のパフォーマンス改善と大幅な機能強化が施され、 Python 3.5 のサポートが停止されました。 主なインターフェイスの変更点は、設定可能なシミュレータ・バックエンドと、IBMQバックエンドからの設定済みシミュレータの構築です。 ノイズモデルと基底ゲートのサポートは、Qiskit回路ライブラリ標準ゲートのほとんどに対して拡張され、1量子ビットと2量子ビットの回転ゲートも新たにサポートされました。 性能の改善には、密度行列とユニタリー・シミュレーション手法にSIMDサポートを追加すること、ステートベクトルと密度行列のスナップショットを使用する回路の使用メモリを削減し性能を向上させること、ノイズの多いステートベクトル・シミュレーションの性能を大幅に向上させるゲート融合回路の最適化にクラウス命令をサポートすることなどが含まれます。
新機能
-
の基底ゲート・サポートを追加。
qiskit.circuit.DelayStatevectorSimulator、UnitarySimulator、QasmSimulatorへの命令サポートを追加。 シミュレーション中、このゲートはアイデンティティ・ゲートとして扱われ、遅延長パラメータは無視されることに注意してください。 -
単一量子ビット・ゲートの基底ゲート・サポートを追加。
qiskit.circuit.library.UGateのStatevectorSimulator、UnitarySimulator、"statevector"、"density_matrix"、"matrix_product_state"、"extended_stabilizer"メソッドに、QasmSimulator。 -
フェーズ・ゲートの基底ゲート・サポートを追加
qiskit.circuit.library.PhaseGateStatevectorSimulator、StatevectorSimulator、UnitarySimulator、"statevector"、"density_matrix"、"matrix_product_state"、"extended_stabilizer"のメソッドQasmSimulator。 -
制御位相ゲートの基底ゲート・サポートを追加。
qiskit.circuit.library.CPhaseGateStatevectorSimulator、StatevectorSimulator、UnitarySimulator、"statevector"、"density_matrix"、"matrix_product_state"のメソッドQasmSimulator。 -
マルチ制御位相ゲートのサポートを追加
qiskit.circuit.library.MCPhaseGateStatevectorSimulator,UnitarySimulator, およびQasmSimulatorの"statevector"メソッドに対応。 -
ゲートのサポートを追加。
qiskit.circuit.library.SXGateStatevectorSimulatorUnitarySimulatorQasmSimulatorのサポートを追加。 -
1,2量子ビットQiskit回路ライブラリ回転ゲートのサポートを追加。
RXGate,RYGate,RZGate,RGate,RXXGate,RYYGate,RZZGate,RZXGateのStatevectorSimulator、UnitarySimulator、"statevector"、"density_matrix"の方法QasmSimulator。 -
StatevectorSimulator,UnitarySimulator, およびQasmSimulatorの"statevector"メソッドに、マルチ制御回転ゲート"mcr","mcrx","mcry","mcrz"のサポートを追加。 -
シミュレータのバックエンドを設定可能にする。 これにより、シミュレータのバックエンドオブジェクトごとに、シミュレーション方法やノイズモデルなどの永続的なオプションを設定することができます。
QasmSimulatorとPulseSimulatorは、 :meth:`~qiskit.providers.aer.QasmSimulator.from_backend メソッドを使って、IBMQBackendバックエンドオブジェクトから設定することもできる。QasmSimulator、バックエンドのコンフィギュレーションとプロパティに基づいて、カップリングマップ、ベーシス・ゲート、基本的なデバイス・ノイズ・モデルが設定される。PulseSimulator、システムモデルとデフォルトは、バックエンドのコンフィギュレーション、プロパティ、デフォルトから自動的に設定される。例えば、ノイズ密度行列シミュレータのバックエンドは
QasmSimulator(method='density_matrix', noise_model=noise_model)のように構築でき、理想行列積状態シミュレータはQasmSimulator(method='matrix_product_state')のように構築できます。PulseSimulator例えば、実際のバックエンドを使う前にシミュレーターでコードをテストする場合など、シミュレーターと実際のバックエンドを簡単に入れ替えることができる。 例えば、以下のコードブロックでは、PulseSimulatorがFakeArmonk()バックエンドからインスタンス化されている。 コンフィギュレーションとデフォルトのデータはすべてシミュレータのインスタンスにコピーされるため、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つに対してノイズを定義することです。- スナップショット命令の
variancekwarg は廃止されました。 この関数は、測定統計による分散ではなく、ノイズモデルのサンプリングによるスナップショットの標本分散を計算するため、しばしば誤って使用されていました。 ノイズモデリングの分散が必要な場合は、シングルショットのスナップショットを使用し、後処理で分散を手動で計算できるようにする。
バグ修正
- 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。
StatevectorSimulatorとUnitarySimulatorの使用可能メモリ不足チェックを追加。 回路内の量子ビット数をシミュレートするために必要なメモリが、システムの利用可能なメモリを超えた場合、例外がスローされます。
イグニス 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.QVFitter、qiskit.ignis.verification.QVFitter.plot_qv_data()、2シグマの信頼区間を表すように更新された。 以前は、エラーバーは1シグマの信頼区間を表していた。 量子ボリュームのベンチマークの成功基準は、片側2シグマ信頼度( ~97.7 %)で2/3以上の重い出力確率を要求する。 エラーバーを2シグマの信頼区間に変更することで、図中の成功を簡単に識別できるようになった。 -
新しいクワーグ、
figsizeがqiskit.ignis.verification.QVFitterメソッドqiskit.ignis.verification.QVFitter.plot_qv_data()に追加された。 このkwargは、(x, y)形式のタプルを取り込む。xとyは、生成されるプロットを作るためのインチ単位の寸法である。 -
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 推定器が達成していることで[ある]。
を の実数とする。この実数は、目的関数を計算するために使用する最良観測サンプルの割合を指定する。 , CVaR が標準期待値と等価であることに注意。 同様に、 の場合、 CVaR は最良の観測サンプルを使用することに相当する。 の中間値は、これら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、そして最後にソルバーに基づいている。 ソルバーは、励起状態の計算を行う具体的な方法(アルゴリズム)である。 この構造は、基底状態の計算と同じである。 結果は、単一の期待値ではなく、期待値のリストを取るように修正される。QEOM、NumpyEigensolver。 特定のフィルター(特定の対称性の状態をターゲットとする)で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])は配列を受け取り、その解が実行可能かどうかを返します。 -
FixedIncomeExpectedValue、EuropeanCallDelta、GaussianConditionalIndependenceModel、EuropeanCallExpectedValueの回路ベースのバージョンをqiskit.finance.applicationsに追加する。 -
グラディエント・フレームワーク
qiskit.operators.gradients量子状態を表す演算子が与えられる。 勾配のフレームワークは、勾配、自然勾配、ヘシアン、量子フィッシャー情報の評価を可能にする。パラメータ化された量子状態|ψ(θ)〉=V(θ)|ψ|が入力状態|ψ|とパラメータ化されたアンサッツV(θ)と演算子O(ω)を持つとします。
勾配: resp. resp. を計算したい。
最後のケースは、グラデーション 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()ヘシアン: resp. resp. resp. を計算したい。
最後のケースは、ヘシアン w.r.t に対応する。 ψ(θ)のサンプリング確率。 1次勾配と同様に、ヘシアンもパラメータ・シフト、ユニタリーの線形結合、有限差分法など、さまざまな方法で評価することができる。 パラメータのタプルが与えられたとき、
Hessian().convert(op, param_tuple)は2階微分の値を返す。 パラメータのリストが与えられた場合、Hessian().convert(op, param_list)は、与えられたパラメータの順序に従って、与えられたすべてのパラメータに対する完全なヘシアンを返します。QFI量子フィッシャー情報QFIは、入力状態|ψ|とパラメタ化されたアンサッツV(θ)によって生成されるパラメタ化された量子状態|ψ(θ)=V(θ)|ψ|の表現能力を代表する計量テンソルである。 純粋な状態のQFIのエントリーは、 。
以前の微分タイプと同様に、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) の逆数を持つ状態パラメータである。これにより、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を導入 化学アプリケーションの基底状態ソルバーとして軌道最適化 vqeoovqeを導入 -
新しいアルゴリズム結果クラス:
Groverメソッド_run()はクラスGroverResultを返す。AmplitudeEstimationメソッド_run()はクラスAmplitudeEstimationResultを返す。IterativeAmplitudeEstimationメソッド_run()はクラスIterativeAmplitudeEstimationResultを返す。MaximumLikelihoodAmplitudeEstimationメソッド_run()はクラスMaximumLikelihoodAmplitudeEstimationResultを返す。すべての新しい結果クラスは、以前の結果辞書と下位互換性があります。
-
新しいリニアソルバーの結果クラス:
HHLメソッド_run()はクラスHHLResultを返す。NumPyLSsolverメソッド_run()はクラスNumPyLSsolverResultを返す。すべての新しい結果クラスは、以前の結果辞書と下位互換性があります。
-
MinimumEigenOptimizationResultsamplesと。eigensolver_result後者は、オプティマイザが使用する基本的なアルゴリズムから得られ、そのアルゴリズムに固有のものです。RecursiveMinimumEigenOptimizer結果クラスRecursiveMinimumEigenOptimizationResultのインスタンスを返すようになった。結果クラス には、基本的なアルゴリズムから得られた中間結果が含まれることがある。 専用の結果クラスは、このオプティマイザー専用のプロパティreplacementsとhistoryを公開している。 履歴の深さは、オプティマイザのhistoryパラメーターで管理される。 -
GroverOptimizerGroverOptimizationResultこの結果クラスは、operation_counts、n_input_qubits、n_output_qubitsのプロパティを直接公開する。 これらのプロパティは、raw_results辞書ではもう利用できません。 -
SlsqpOptimizerはSlsqpOptimizationResultのインスタンスを返すようになり、この結果クラスは 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.QuadraticProgramToIsingとqiskit.optimization.converters.IsingToQuadraticProgramは非推奨となり、将来のリリースで削除される予定です。 代わりにqiskit.optimization.QuadraticProgramメソッドto_ising()とfrom_ising()を使うべきである。 -
qiskit.circuit.libraryのWeightedAdderとして回路ライブラリに移植されたWeightedSumOperatorを非推奨とする。 -
Core Hamiltonianクラスは非推奨となり、FermionicTransformationChemistry Operatorクラスは非推奨となり、tranformationsminimum_eigen_solvers/vqe_adaptはまた非推奨となり、ground_state_solver インタフェースの実装として移動するapplications/molecular_ground_state_energyは非推奨となり、 は非推奨となり、 は非推奨となる。ground_state_solver -
Optimizer.SupportLevel入れ子になったenumはOptimizerSupportLevel、Optimizer.SupportLevel。 例えば、Optimizer.SupportLevel.requiredの代わりにOptimizerSupportLevel.requiredを使う。 -
QuantumGeneratorへの入力としてUnivariateVariationalDistributionとMultivariateVariationalDistributionを非推奨とする。 代わりに、プレーンな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 です。
- このリリース以前は、
websockets7.0 が Python 3.6 に使われていた。 このリリースでは、すべての Python バージョンでwebsockets8.0 以上が必要です。 パッケージの要件はこれを反映して更新された。