Quantum Portfolio Optimizer API リファレンス
Qiskit Functions — パートナー組織によって開発された既成のツール — ソフトウェア開発ワークフローの一部を抽象化することで、ユーティリティ規模でのアルゴリズムの発見とアプリケーション開発を簡素化し、加速させます。 このQiskit関数のガイドを表示するには、ここをクリックしてください。
Quantum Portfolio Optimizer Qiskit 関数ガイド
入力
この関数の入力引数については、以下のリストに説明があります。 アセットデータやその他の問題仕様を提供する必要があります。さらに、最適化プロセスをカスタマイズするために、VQE設定を含めることも可能です。
assets
タイプ: `json`
資産価格を掲載した辞書。 データは、特定の日付における金融資産の終値に関する情報を格納するJSONオブジェクトとして構成されている必要があります。 形式は以下のようになります。
- 主キー(文字列):金融資産の名称またはティッカーシンボル(例:「 8801.T 」)。
- 副キー(文字列):YYYY-MM-DD形式の日付。
- 値(数値):指定された日付における当該資産の終値。 価格は正規化された形式でも、正規化されていない形式でも入力できます。
すべての辞書は、同じセカンダリキー(日付)を持つ必要があることに注意してください。 特定の資産に、他の資産にはある日付が欠けている場合、一貫性を保つためにそのデータを補完する必要があります。 例えば、その資産の直近の終値を使用することで、これを行うことができます。
- 必須:はい
- 例:
{
"8801.T": {
"2023-01-01": 2374.0,
"2023-01-02": 2374.0,
"2023-01-03": 2374.0,
"2023-01-04": 2356.5,
...
},
"AAPL": {
"2023-01-01": 145.2,
"2023-01-02": 146.5,
"2023-01-03": 147.3,
"2023-01-04": 148.1,
...
},
...
}{
"asset_name": {
"date": closing_value,
...
},
...
}資産データには、少なくとも(入力セクション qubo_settings を参照)のタイム (nt+1) * dt スタンプ(例:日)における終値が含まれている必要があります。
qubo_settings
タイプ: `json`
QUBOの設定。 次の表は、辞 qubo_settings 書のキーについて説明しています。 時間ステップ数 nt、解像度クビット数 nq、および を指定して max_investment 辞書を作成するか、その他のデフォルト値を変更します。
名前 | タイプ | 説明 | 必須 | デフォルト | 例 |
|---|---|---|---|---|---|
nt | int | 時間ステップ数 | はい | - | 4 |
nq | int | 解像度量子ビット数 | はい | - | 4 |
max_investment | 浮動小数点 | 全資産における投資通貨単位の最大数 | はい | - | 10 |
dt* | int | 各時間ステップで考慮される時間窓。 このユニットは、アセットデータ内のキー間の時間間隔と一致します | いいえ | 30時間まで | - |
risk_aversion | 浮動小数点 | リスク回避係数 | いいえ | 1000 | - |
transaction_fee | 浮動小数点 | 取引手数料率 | いいえ | 0.01 | - |
restriction_coeff | 浮動小数点 | QUBO形式化において問題の制約を課すために用いられるラグランジュ乗数 | いいえ | 1 | - |
- 必須:はい
ansatz_settings
タイプ: `json`
デフォルト値: `None`
アンザッツの設定。 デフォルトのオプションを変更するには、以下のキーを持つ パラメータ ansatz_settings 用の辞書を作成してください。 デフォルトでは、ansatz は に設定されており "real_amplitudes"、2つの追加オプション(次の表を参照)はいずれも に設定されています False。
名前 | タイプ | 説明 | 必須 | デフォルト |
|---|---|---|---|---|
ansatz* | str | 使用するアプローチ | いいえ | "real_amplitudes" |
multiple_passmanager** | ブール値 | 複数のPassManagerサブルーチンを有効にします(Tailored Ansatzでは利用不可) | いいえ | False |
dd_enable | ブール値 | 動的なデカップリングを追加します | いいえ | False |
* 利用可能なアプローチ
real_amplitudescyclicoptimized_real_amplitudestailored(バックエンドibm_torino専用、アセット7個、タイムステップ4、解像度4の量子ビット)
** が に設定 multiple_passmanager されている False場合、この関数は を指定したデフォルトの Qiskit optimization_level=3 パスマネージャーを使用します。 に設定すると True、この multiple_passmanager サブルーチンは3つのパスマネージャーを比較します。具体的には、以前のデフォルトのQiskitパスマネージャー、QPUのファーストネイバーチェーン上の量子ビットをマッピングするパスマネージャー、 およびAIトランスパイラー サービスです。 その後、推定累積誤差が小さいパスマネージャーが選択される。
- 必須:いいえ
optimizer_settings
タイプ: `json`
デフォルト値: `None`
オプティマイザーの設定。 このパラメータは、最適化プロセスの調整可能なオプションをいくつか含む辞書です。
名前 | タイプ | 説明 | 必須 | デフォルト |
|---|---|---|---|---|
primitive_options | json | プリミティブの設定 | いいえ | - |
optimizer | str | 厳選された古典的最適化アルゴリズム | いいえ | "differential_evolution" |
optimizer_options | json | オプティマイザの設定 | いいえ | - |
現在、利用可能なオプティマイザーのオプションは のみです "differential_evolution"。
および optimizer_options キー primitive_options の下に、以下のパラメータを持つ辞書を設定します:
primitive_options
名前 | タイプ | 説明 | 必須 | デフォルト | 例 |
|---|---|---|---|---|---|
sampler_shots | int | サンプラーのショット数。 | いいえ | 100000 | - |
estimator_shots | int | エスティメーターの撮影回数。 | いいえ | 25000 | - |
estimator_precision | 浮動小数点 | 期待値の望ましい精度。 指定された場合、小数点以下の桁数(precision)が、 estimator_shots. の代わりに使用されます。 | いいえ | None | 0.015625 · (1 / √4096) |
max_time | int または str | ランタイムセッションが強制終了されるまで、開いたままにできる最大時間。 秒数(int型)または文字列(例 "2h 30m 40s":)として指定できます。 システムで定められた上限値未満でなければなりません。 | いいえ | None | "1h 15m" |
optimizer_options
名前 | タイプ | 説明 | 必須 | デフォルト |
|---|---|---|---|---|
num_generations | int | 世代数 | いいえ | 20 |
population_size | int | 人口規模 | いいえ | 20 |
mutation_range | リスト | 最大および最小の変異係数 | いいえ | [0, 0.25] |
recombination | 浮動小数点 | 組換え因子 | いいえ | 0.4 |
max_parallel_jobs | int | 並列で実行されるQPUジョブの最大数 | いいえ | 3 |
max_batchsize | int | 最大バッチ・サイズ | いいえ | 200 |
-
初期個体群も含まれるため、差分進化によって評価される世代数は +1
num_generationsとなります。 -
回路の総数は次のように計算されます
(num_generations + 1) * population_size。 -
一般的に、母集団の規模を大きくし、世代数を増やすことで、最適化結果の質が向上する。 ただし、個体群の規模を120を超えたり、世代数を20以上(例えば、
120 * 21 = 2520総回路数)にしたりすることは推奨されません。これを行うと回路数が過剰になり、計算負荷が高くなり、処理に時間がかかる可能性があるためです。 -
この関数を使用すると、以前の最適化を再開することができます。また、世代数を増やすこともいつでも可能です(とを除き
previous_session_id、その他の入力は同じままにし、を増加させることでnum_generations)。
- 必須:いいえ
backend
タイプ: `str`
QPUバックエンド名
- 必須:いいえ
- 例:
ibm_torino
previous_session_id
タイプ: `list` of `str`
デフォルト値: Empty list
過去の実行データを取り出すためのセッションIDの一覧。 以前の1つ以上のセッションで処理されたジョブの実行を再開したり、それらのジョブを取得したりするには、 previous_session_id パラメータにセッションIDのリストを渡す必要があります。 これは、最適化タスクが処理中のエラーにより完了できなかった場合で、実行を完了させる必要がある場合に特に役立ちます。 これを実現するには、最初の実行時と同じ引数に加え、説明通りに previous_session_id リストを指定する必要があります。
- 必須:いいえ
- 例:
["session_id_1", "session_id_2"]
apply_postprocess
タイプ: `bool`
デフォルト値: `True`
ノイズを考慮したSQD後処理を適用する。
- 必須:いいえ
- 例:
True
tags
タイプ: `list` of `str`
デフォルト値: Empty list
実験を特定するためのタグの一覧。
- 必須:いいえ
- 例:
["optimization", "quantum_computing"]
前回のセッションからデータを読み込む(最適化を再開するため)には、最大1時間の通常の計算時間が必要になる場合があります。 これは量子ランタイムリソースを消費しません。
IBM Quantum Compute Service のジョブ制限を確実に遵守してください。
- サンプル:
sampler_shots <= 10_000_000. - 推定量:
max_batchsize * estimator_shots * observable_size <= 10_000_000(この関数については、観測量のすべての項が可換であるため、observable_size=1)。
詳細については、「 ジョブの制限 」ガイドをご覧ください。
出力
この関数は2つの辞書( "result" ディクショナリ)を返します。1つは "metadata"、最適解とその対応する最小目的関数コストを含む、最良の最適化結果が格納された辞書です。もう1つは、最適化プロセス中に得られたすべての結果のデータと、それぞれの評価指標が格納された辞書です。
最初の辞書は、最も優れたパフォーマンスを発揮するソリューションに焦点を当てているのに対し、2つ目の辞書は、目的関数のコストやその他の関連指標を含め、すべてのソリューションに関する詳細な情報を提供しています。
result 辞書
タイプ: dict[str, dict[str, float]]
時間の経過に伴う投資戦略が含まれており、各タイムスタンプには資産ごとの投資ウェイトが対応付けられています(各ウェイトは、総投資額で正規化された投資額です)。
- 例:
{'time_1': {'asset_1': 0.2, 'asset_2': 0.3, ...}, ...}
metadata 辞書
タイプ: dict[str, Any]
分析中に生成されたデータ(解決策、コスト、指標など)。
名前 | タイプ | 説明 | 例 |
|---|---|---|---|
session_id | str | IBM Quantum セッションの一意の識別子。 | "d0h30qjvpqf00084fgw0" |
all_samples_metrics | dict | 各後処理済みサンプルに対するコストや制約など、さまざまなメトリクスを格納した辞書。 | 説明を参照 |
sampler_counts | [d] ictstr, int | キーがサンプリングされた解のビット列表現であり、値がその出現回数である辞書。 | {"101010": 3, "111000": 1} |
asset_order | [liststr] | 投資戦略における各時点での資産の投資順序を記載したリスト。 | ["Asset_0", "Asset_1", "Asset_3"] |
QUBO | リスト[ [listfloat] ] | この問題のQUBO行列。 | [[-6.96e-01, 5.81e-01, -1.26e-02, 0.00e+00], ...] |
resource_summary | dict[文字列, [辞]書文字列, 浮動小数点数] | プロセスの各段階におけるCPUおよびQPUの使用時間の概要(秒単位)。 | {'RUNNING: EXECUTING_QPU': {'CPU_TIME': 412.84, 'QPU_TIME': 87.22}, ...} |
辞書の all_samples_metrics 説明
名前 | タイプ | 説明 | 例 |
|---|---|---|---|
investment_trajectories | [リストリスト] | 量子状態の解読から導き出された投資戦略。 | [[1, 2, 2], [1, 2, 1]] |
counts | [リスト] | 各投資経路がサンプリングされた回数。 インデックスが一致します investment_trajectories。 | [5, 3] |
objective_costs | [リストフロート] | 各投資経路における目的関数の値(低い順から高い順に並べたもの)。 | [0.98, 1.25] |
sharpe_ratios | [リストフロート] | 各投資経路におけるリスク調整後リターン(シャープレシオ)。 索引順に並べ替えられています。 | [1.1, 0.7] |
returns | [リストフロート] | 各投資シナリオにおける期待リターン。 索引順に並べ替えられています。 | [0.15, 0.10] |
rest_breaches | [リストフロート] | 各投資経路における制約からの最大逸脱量。 索引順に並べ替えられています。 | [0.0, 0.25] |
transaction_costs | [リストフロート] | 各投資シナリオに関連する推定取引コスト。 索引順に並べ替えられています。 | [0.01, 0.02] |