探索パラメータ

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つのソルバーすべてで共通です:

パラメータ 型 説明
target_energy 整数 エネルギーがこの値以下の解が見つかったら探索を停止する。cons() で制約を宣言したモデルでは、全制約の充足も停止の条件(ソルバーごとの対応と意味論)。
enable_default_callback 0/1 新たに見つかった最良解を標準出力に表示する。デフォルト: 0。
topk_sols 整数 探索中にエネルギー上位N個の解を保持する。
best_energy_sols 0/整数 保持する最良エネルギー解の最大数。0 = 上限なし。

Easy Solver のパラメータ

パラメータ 型 説明 デフォルト
time_limit 浮動小数点数 制限時間(秒)。0 で無制限。 10.0
target_energy 整数 目標エネルギー。 (なし)
enable_default_callback 0/1 進捗を表示。 0
topk_sols 整数 保持するトップk解の数。 (無効)
best_energy_sols 0/整数 保持する最良エネルギー解の数。 (無効)
thread_count 整数 探索に使う CPU スレッド数。 (自動)
seed 整数 乱数シード(再現用)。 (ランダム)

例:

#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 パラメータはありません。

パラメータ 型 説明 デフォルト
target_energy 整数 目標エネルギー(早期終了用)。 (なし)
verbose 0/1 探索進捗率を表示する。 0
enable_default_callback 0/1 進捗を表示。 0
topk_sols 整数 保持するトップk解の数。 (無効)
best_energy_sols 0/整数 最適解を保持(値=最大数、0=無制限)。 (無効)
all_sols 0/1 すべての解を保持(cons() の制約に違反する割り当ても含む。バイナリ変数 $n$ 個なら $2^n$ 個)。 (無効)

例:

#include <qbpp/qbpp.hpp>
#include <qbpp/exhaustive_solver.hpp>

auto solver = qbpp::ExhaustiveSolver(f);
auto sol = solver.search({{"target_energy", 0}});

ABS3 Solver のパラメータ

パラメータ 型 説明 デフォルト
time_limit 浮動小数点数 制限時間(秒)。 10.0
target_energy 整数 目標エネルギー。 (なし)
enable_default_callback 0/1 進捗を表示。 0
topk_sols 整数 保持するトップk解の数。 (無効)
best_energy_sols 0/整数 最適解を保持(値=最大数、0=無制限)。 (無効)
cpu_enable 0/1 CPUソルバーの有効/無効。 1
seed 整数 乱数シード(再現用)。 (ランダム)
cpu_thread_count 整数 CPUスレッド数。 (自動)
block_count 整数 GPUブロック数。 (自動)
thread_count 整数 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}});

CPU スレッド数の自動設定

thread_count(Easy Solver)と cpu_thread_count(ABS3 Solver)を指定しないと、このプロセスが使える CPU の数に合わせてスレッド数を決めます(Easy Solver と ABS3 Solver は 4 以上)。 使える CPU の数は、マシンの CPU 数・CPU の割り当て(taskset など)・コンテナの CPU 制限・ジョブスケジューラーが割り当てたコア数(PBS の NCPUS、Slurm の SLURM_CPUS_PER_TASK)のうちいちばん小さい値です。 スーパーコンピュータの共用ノードでジョブを実行すると、割り当てられたコア数だけを使います。 ABS3 Solver の CPU 側は、大きなモデルでは自動で決めるスレッド数を 16 までにします(指定した cpu_thread_count はそのまま使います)。 Exhaustive Solver も同じ数の CPU を使います。

エラー処理

  • 不明なパラメータキーを指定すると、std::runtime_error が発生します。
  • 値が正しくないと std::invalid_argument が発生します。数をとるパラメータに数でない値({"time_limit", "abc"} など)、0/1 をとるパラメータにそれ以外の値(true/false は可)、整数のパラメータに小数や範囲外の値、time_limit と thread_count・cpu_thread_count・block_count・topk_sols に負の値(Easy Solver の thread_count は 0 も)を指定した場合です。

Back to top

Page last modified: 2026.10.30.

© 2026 中野浩嗣, 広島大学