探索パラメータ¶
Hi-QUBO の3つのソルバー — Easy Solver,Exhaustive Solver,ABS3 Solver — は,search() を通じて探索パラメータを受け取ります.
パラメータはキーと値のペアです.
値は文字列・整数・浮動小数点数のいずれでも指定可能で,数値は内部的に自動で文字列に変換されます.
パラメータの指定
search() に初期化子リストを直接渡します:
auto sol = solver.search({{"time_limit", 10}, {"target_energy", 0}});
値は文字列・整数・浮動小数点数を混在させることができます:
auto sol = solver.search({{"time_limit", 2.5}, {"target_energy", "0"}});
プログラムで動的にパラメータを構築する場合は,qbpp::Params オブジェクトを作成し operator() で設定します:
qbpp::Params params;
params("time_limit", 10);
params("target_energy", 0);
auto sol = solver.search(params);
共通パラメータ
以下のパラメータは3つのソルバーすべてで共通です:
パラメータ |
型 |
説明 |
|---|---|---|
|
整数 |
エネルギーがこの値以下の解が見つかったら探索を停止する. |
|
|
新たに見つかった最良解を標準出力に表示する.デフォルト: |
|
整数 |
探索中にエネルギー上位N個の解を保持する. |
|
|
保持する最良エネルギー解の最大数. |
Easy Solver のパラメータ
パラメータ |
型 |
説明 |
デフォルト |
|---|---|---|---|
|
浮動小数点数 |
制限時間(秒). |
|
|
整数 |
目標エネルギー. |
(なし) |
|
|
進捗を表示. |
|
|
整数 |
保持するトップk解の数. |
(無効) |
|
|
保持する最良エネルギー解の数. |
(無効) |
例:
#include <qbpp/qbpp.hpp>
#include <qbpp/easy_solver.hpp>
auto solver = qbpp::EasySolver(f);
auto sol = solver.search({{"time_limit", 5}, {"target_energy", 0}});
Exhaustive Solver のパラメータ
Exhaustive Solver は完全探索を行うため,time_limit パラメータはありません.
パラメータ |
型 |
説明 |
デフォルト |
|---|---|---|---|
|
整数 |
目標エネルギー(早期終了用). |
(なし) |
|
|
探索進捗率を表示する. |
|
|
|
進捗を表示. |
|
|
整数 |
保持するトップk解の数. |
(無効) |
|
|
最適解を保持(値=最大数, |
(無効) |
|
|
すべての実行可能解を保持. |
(無効) |
例:
#include <qbpp/qbpp.hpp>
#include <qbpp/exhaustive_solver.hpp>
auto solver = qbpp::ExhaustiveSolver(f);
auto sol = solver.search({{"target_energy", 0}});
ABS3 Solver のパラメータ
パラメータ |
型 |
説明 |
デフォルト |
|---|---|---|---|
|
浮動小数点数 |
制限時間(秒). |
|
|
整数 |
目標エネルギー. |
(なし) |
|
|
進捗を表示. |
|
|
整数 |
保持するトップk解の数. |
(無効) |
|
|
最適解を保持(値=最大数, |
(無効) |
|
|
CPUソルバーの有効/無効. |
|
|
整数 |
CPUスレッド数. |
(自動) |
|
整数 |
GPUブロック数. |
(自動) |
|
整数 |
GPUブロックあたりのスレッド数. |
(自動) |
例:
#include <qbpp/qbpp.hpp>
#include <qbpp/abs3_solver.hpp>
auto solver = qbpp::ABS3Solver(f);
auto sol = solver.search({{"time_limit", 10}, {"target_energy", 0}});
エラー処理
不明なパラメータキーを指定すると,実行時に std::runtime_error が発生します.
PyQBPP の3つのソルバー — EasySolver,ExhaustiveSolver,ABS3Solver — は,search() を通じて探索パラメータを受け取ります.
パラメータは キーワード引数 で渡します.
値は文字列・整数・浮動小数点数のいずれでも指定可能で,バックエンドに渡す前に自動的に文字列に変換されます.
パラメータの指定
search() にキーワード引数を直接渡します:
sol = solver.search(time_limit=10, target_energy=0)
値は文字列・整数・浮動小数点数を混在させることができます:
sol = solver.search(time_limit=2.5, target_energy="0")
プログラムで動的にパラメータを構築する場合は,辞書を作成して ** で展開します:
params = {}
params["time_limit"] = 10
params["target_energy"] = 0
sol = solver.search(**params)
特別な Params オブジェクトは不要です — キーワード引数だけで十分です.
内部的には,PyQBPP が各値を文字列に変換し,キーと値のペアをソルバーに渡します.
共通パラメータ
以下のパラメータは3つのソルバーすべてで共通です:
パラメータ |
型 |
説明 |
|---|---|---|
|
int |
エネルギーがこの値以下の解が見つかったら探索を停止する. |
|
int ( |
新たに見つかった最良解を標準出力に表示する.デフォルト: |
|
int |
探索中にエネルギー上位N個の解を保持する. |
|
int |
保持する最良エネルギー解の最大数. |
EasySolver のパラメータ
パラメータ |
型 |
説明 |
デフォルト |
|---|---|---|---|
|
float |
制限時間(秒). |
|
|
int |
目標エネルギー. |
(なし) |
|
int ( |
進捗を表示. |
|
|
int |
保持するトップk解の数. |
(無効) |
|
int |
保持する最良エネルギー解の数. |
(無効) |
例:
solver = qbpp.EasySolver(f)
sol = solver.search(time_limit=5, target_energy=0)
ExhaustiveSolver のパラメータ
ExhaustiveSolver は完全探索を行うため,time_limit パラメータはありません.
パラメータ |
型 |
説明 |
デフォルト |
|---|---|---|---|
|
int |
目標エネルギー(早期終了用). |
(なし) |
|
int ( |
探索進捗率を表示する. |
|
|
int ( |
進捗を表示. |
|
|
int |
保持するトップk解の数. |
(無効) |
|
int |
最適解を保持(値=最大数, |
(無効) |
|
int ( |
すべての実行可能解を保持. |
(無効) |
例:
solver = qbpp.ExhaustiveSolver(f)
sol = solver.search(target_energy=0)
パラメータを組み合わせて複数の解を収集できます:
sol = solver.search(best_energy_sols=0, target_energy=0)
for s in sol.sols:
print(s.energy)
ABS3Solver のパラメータ
パラメータ |
型 |
説明 |
デフォルト |
|---|---|---|---|
|
float |
制限時間(秒). |
|
|
int |
目標エネルギー. |
(なし) |
|
int ( |
進捗を表示. |
|
|
int |
保持するトップk解の数. |
(無効) |
|
int |
最適解を保持(値=最大数, |
(無効) |
|
int ( |
CPUソルバーの有効/無効. |
|
|
int |
CPUスレッド数. |
(自動) |
|
int |
GPUブロック数. |
(自動) |
|
int |
GPUブロックあたりのスレッド数. |
(自動) |
例:
solver = qbpp.ABS3Solver(f)
sol = solver.search(time_limit=10, target_energy=0)
エラー処理
不明なパラメータキーを指定すると,実行時にエラーが発生します.