# 探索パラメータ :::{container} prog-cpp Hi-QUBO の3つのソルバー — **Easy Solver**,**Exhaustive Solver**,**ABS3 Solver** — は,`search()` を通じて探索パラメータを受け取ります. パラメータはキーと値のペアです. 値は文字列・整数・浮動小数点数のいずれでも指定可能で,数値は内部的に自動で文字列に変換されます. ## パラメータの指定 `search()` に初期化子リストを直接渡します: ```{include} /../programFiles/markDown/advanced/search-parameter.md :start-after: :end-before: ``` 値は文字列・整数・浮動小数点数を混在させることができます: ```{include} /../programFiles/markDown/advanced/search-parameter.md :start-after: :end-before: ``` プログラムで動的にパラメータを構築する場合は,`qbpp::Params` オブジェクトを作成し `operator()` で設定します: ```{include} /../programFiles/markDown/advanced/search-parameter.md :start-after: :end-before: ``` ## 共通パラメータ 以下のパラメータは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`/整数 | 保持する最良エネルギー解の数. | (無効) | 例: ```{literalinclude} /../programFiles/cppPrograms/advanced/search-parameter-program1.cpp :language: cpp :caption: search-parameter-program1.cpp ``` ## 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` | すべての実行可能解を保持. | (無効) | 例: ```{literalinclude} /../programFiles/cppPrograms/advanced/search-parameter-program2.cpp :language: cpp :caption: search-parameter-program2.cpp ``` ## 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ブロックあたりのスレッド数. | (自動) | 例: ```{literalinclude} /../programFiles/cppPrograms/advanced/search-parameter-program3.cpp :language: cpp :caption: search-parameter-program3.cpp ``` ## エラー処理 不明なパラメータキーを指定すると,実行時に `std::runtime_error` が発生します. ::: :::{container} prog-python PyQBPP の3つのソルバー — **EasySolver**,**ExhaustiveSolver**,**ABS3Solver** — は,`search()` を通じて探索パラメータを受け取ります. パラメータは **キーワード引数** で渡します. 値は文字列・整数・浮動小数点数のいずれでも指定可能で,バックエンドに渡す前に自動的に文字列に変換されます. ## パラメータの指定 `search()` にキーワード引数を直接渡します: ```{include} /../programFiles/markDown/advanced/search-parameter.md :start-after: :end-before: ``` 値は文字列・整数・浮動小数点数を混在させることができます: ```{include} /../programFiles/markDown/advanced/search-parameter.md :start-after: :end-before: ``` プログラムで動的にパラメータを構築する場合は,辞書を作成して `**` で展開します: ```{include} /../programFiles/markDown/advanced/search-parameter.md :start-after: :end-before: ``` 特別な `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 | 保持する最良エネルギー解の数. | (無効) | 例: ```{include} /../programFiles/markDown/advanced/search-parameter.md :start-after: :end-before: ``` ## 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`) | すべての実行可能解を保持. | (無効) | 例: ```{include} /../programFiles/markDown/advanced/search-parameter.md :start-after: :end-before: ``` パラメータを組み合わせて複数の解を収集できます: ```{include} /../programFiles/markDown/advanced/search-parameter.md :start-after: :end-before: ``` ## 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ブロックあたりのスレッド数. | (自動) | 例: ```{include} /../programFiles/markDown/advanced/search-parameter.md :start-after: :end-before: ``` ## エラー処理 不明なパラメータキーを指定すると,実行時にエラーが発生します. :::