Hi-QUBO

ABS3ソルバーの使用方法

式を解く f ABS3ソルバーを使用した式を解くには、以下の3つの手順が必要です:

  1. 式に対して ABS3 ソルバー (または qbpp::abs3::ABS3Solver) オブジェクトを作成する f.
  2. パラメータオブジェクト(またはqbpp::abs3::Params)を作成し、解の探索オプションを設定する。
  3. ABSsearch()3ソルバーオブジェクトのメンバ関数を呼び出し、得られた解を取得する

ABS3ソルバーを用いたLABS問題の解法

以下のQUBO++プログラムは、ABS3ソルバーを用いて低自己相関二値列(LABS)問題を解きます:

#include "qbpp.hpp"
#include "qbpp_abs3_solver.hpp"

int main() {
  const size_t size = 100;
  auto x = qbpp::var("x", size);
  auto f = qbpp::expr();
  for (size_t d = 1; d < size; ++d) {
    auto temp = qbpp::expr();
    for (size_t i = 0; i < size - d; ++i) {
      temp += (2 * x[i] - 1) * (2 * x[i + d] - 1);
    }
    f += qbpp::sqr(temp);
  }
  f.simplify_as_binary();

  auto solver = qbpp::abs3::ABS3Solver(f);
  auto params = qbpp::abs3::Params();
  params("time_limit", "10.0");
  params("enable_callback", "1");

  auto sol = solver.search(params);
  std::cout << sol.energy() << ": ";
  for (auto val : sol(x)) {
    std::cout << (val == 0 ? "-" : "+");
  }
  std::cout << std::endl;
}

このプログラムでは、まず式に対してABS3ソルバーオブジェクトがsolver作成される fに対してABS3ソルバーオブジェクトを作成します。 次に、パラメータparamsオブジェクトを作成し、オプション time_limitenable_callback を設定します。 オプション time_limit オプションは最大探索時間を秒単位で指定し、 enable_callback は、検索中に新たに発見された最適解を報告するコールバック関数を有効にします。 のメンバsearch()関数 solver が引数として呼び出されます。この関数は、指定された時間制限内で見つかった最良解を返します。 params を引数として呼び出されます。 この関数は指定時間内に発見された最適解を返し、それは sol.

プログラムは解のエネルギーと対応する二進数列を出力します。ここで「+」は1を、「-」は0を表します。

このプログラムは以下の出力を生成します:

TTS = 0.002s Energy = 1218
TTS = 0.002s Energy = 1170
TTS = 0.002s Energy = 994
TTS = 0.015s Energy = 958
TTS = 0.018s Energy = 922
TTS = 0.034s Energy = 874
TTS = 4.364s Energy = 834
834: -+--+---++-++-+---++-++--+++--+-+-+++++----+++-+-+---++-+--+-----+--+----++----+-+--++++++---+------

ABS3 Solver オブジェクト

与えられた式に対してABS3ソルバー(または qbpp::abs3::ABS3Solver) オブジェクトが作成されます。 ソルバーオブジェクトの構築時、式は内部データ形式に変換されGPUメモリにロードされます。 したがって、使用するGPUデバイスの数は第二引数として指定可能です:

パラメータオブジェクト(または qbpp::abs3::Params)は、解の探索中にABS3ソルバーが使用するオプションを格納します。 各オプションは文字列のキーと値のペアで指定されます。 上記の例では:

ABS3 パラメータ

パラメータ(または qbpp::abs3::Param()) オブジェクトは、ABS3 ソルバーが解を検索する際に使用するパラメータオプションを格納します。 オプションはキーと値を文字列として構成します。 上記のプログラムでは、 params("time_limit", "10.0") タイムリミットを10.0秒に設定 および params("enable_callback", "1") コールバック関数を有効化し、新たに得られた解のエネルギーを表示します。

基本オプション

キー 説明
time_limit 秒単位の時間制限 制限時間に達した時点で検索を終了する
target_energy 目標エネルギー値 目標エネルギー値に到達したときに検索を終了します

詳細オプション

キー 説明
enable_callback “1” コールバック関数を有効化
block_count GPUあたりのCUDAブロック数 ソルバーカーネルによって起動されるCUDAブロックの数
thread_count CUDAブロックごとのスレッド数 CUDAブロックごとのスレッド数

最終更新日: 2025.12.26