探索パラメータ

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

パラメータ

型

説明

target_energy

整数

エネルギーがこの値以下の解が見つかったら探索を停止する.

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/整数

保持する最良エネルギー解の数.

(無効)

例:

search-parameter-program1.cpp
#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

すべての実行可能解を保持.

(無効)

例:

search-parameter-program2.cpp
#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

cpu_thread_count

整数

CPUスレッド数.

(自動)

block_count

整数

GPUブロック数.

(自動)

thread_count

整数

GPUブロックあたりのスレッド数.

(自動)

例:

search-parameter-program3.cpp
#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つのソルバーすべてで共通です:

パラメータ

型

説明

target_energy

int

エネルギーがこの値以下の解が見つかったら探索を停止する.

enable_default_callback

int (0/1)

新たに見つかった最良解を標準出力に表示する.デフォルト: 0.

topk_sols

int

探索中にエネルギー上位N個の解を保持する.

best_energy_sols

int

保持する最良エネルギー解の最大数.0 = 上限なし.

EasySolver のパラメータ

パラメータ

型

説明

デフォルト

time_limit

float

制限時間(秒).0 で無制限.

10.0

target_energy

int

目標エネルギー.

(なし)

enable_default_callback

int (0/1)

進捗を表示.

0

topk_sols

int

保持するトップk解の数.

(無効)

best_energy_sols

int

保持する最良エネルギー解の数.

(無効)

例:

solver = qbpp.EasySolver(f)
sol = solver.search(time_limit=5, target_energy=0)

ExhaustiveSolver のパラメータ

ExhaustiveSolver は完全探索を行うため,time_limit パラメータはありません.

パラメータ

型

説明

デフォルト

target_energy

int

目標エネルギー(早期終了用).

(なし)

verbose

int (0/1)

探索進捗率を表示する.

0

enable_default_callback

int (0/1)

進捗を表示.

0

topk_sols

int

保持するトップk解の数.

(無効)

best_energy_sols

int

最適解を保持(値=最大数,0=無制限).

(無効)

all_sols

int (0/1)

すべての実行可能解を保持.

(無効)

例:

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 のパラメータ

パラメータ

型

説明

デフォルト

time_limit

float

制限時間(秒).

10.0

target_energy

int

目標エネルギー.

(なし)

enable_default_callback

int (0/1)

進捗を表示.

0

topk_sols

int

保持するトップk解の数.

(無効)

best_energy_sols

int

最適解を保持(値=最大数,0=無制限).

(無効)

cpu_enable

int (0/1)

CPUソルバーの有効/無効.

1

cpu_thread_count

int

CPUスレッド数.

(自動)

block_count

int

GPUブロック数.

(自動)

thread_count

int

GPUブロックあたりのスレッド数.

(自動)

例:

solver = qbpp.ABS3Solver(f)
sol = solver.search(time_limit=10, target_energy=0)

エラー処理

不明なパラメータキーを指定すると,実行時にエラーが発生します.