# 探索パラメータ
:::{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:
```
## エラー処理
不明なパラメータキーを指定すると,実行時にエラーが発生します.
:::