探索パラメータ¶
Hi-QUBO の3つのソルバー — Easy Solver、Exhaustive Solver、ABS3 Solver — は、search() を通じて探索パラメータを受け取ります。 パラメータはキーと値のペアです。 値は文字列・整数・浮動小数点数のいずれでも指定可能で、数値は内部的に自動で文字列に変換されます。
pyQBPP の3つのソルバー — Easy Solver、Exhaustive Solver、ABS3 Solver — は、search() を通じて探索パラメータを受け取ります。 パラメータはキーと値のペアです。 値は文字列・整数・浮動小数点数のいずれでも指定可能で、数値は内部的に自動で文字列に変換されます。
パラメータの指定¶
search() に初期化子リストを直接渡します:
auto sol = solver.search({{"time_limit", 10}, {"target_energy", 0}});
sol = solver.search(time_limit=10, target_energy=0)
値は文字列・整数・浮動小数点数を混在させることができます:
auto sol = solver.search({{"time_limit", 2.5}, {"target_energy", "0"}});
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);
params = {}
params["time_limit"] = 10
params["target_energy"] = 0
sol = solver.search(**params)
共通パラメータ¶
以下のパラメータは3つのソルバーすべてで共通です:
パラメータ |
型 |
説明 |
|---|---|---|
|
整数 |
エネルギーがこの値以下の解が見つかったら探索を停止する。 |
|
|
新たに見つかった最良解を標準エラー出力に表示する。デフォルト: |
|
整数 |
探索中にエネルギー上位N個の解を保持する。 |
|
|
最良エネルギーのすべての解を保持する。 |
Easy Solver のパラメータ¶
パラメータ |
型 |
説明 |
デフォルト |
|---|---|---|---|
|
浮動小数点数 |
制限時間(秒)。0 で無制限。 |
|
|
整数 |
目標エネルギー。 |
|
|
|
進捗を表示。 |
|
|
整数 |
保持するトップ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}});
solver = qbpp.EasySolver(f)
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}});
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)
ABS3 Solver のパラメーター¶
パラメータ |
型 |
説明 |
デフォルト |
|---|---|---|---|
|
浮動小数点数 |
制限時間(秒)。 |
|
|
整数 |
目標エネルギー。 |
|
|
|
進捗を表示。 |
|
|
整数 |
保持するトップk解の数。 |
|
|
|
すべての最適解を保持。 |
|
|
0/1 |
CPUソルバーの有効/無効。 |
|
|
整数 |
CPUスレッド数。 |
|
|
整数 |
GPUブロック数。 |
|
|
整数 |
GPUブロックあたりのスレッド数。 |
|
例:
#include <qbpp/qbpp.hpp>
#include <qbpp/abs3_solver.hpp>
auto solver = qbpp::abs3::ABS3Solver(f);
auto sol = solver.search({{"time_limit", 10}, {"target_energy", 0}});
solver = qbpp.ABS3Solver(f)
sol = solver.search(time_limit=10, target_energy=0)
エラー処理¶
不明なパラメータキーを指定すると、実行時に std::runtime_error が発生します。