QUBO++: QUBO/HUBOによる組み合わせ最適化のためのモデル構築・解法フレームワーク
- 組み合わせ最適化問題を解くための二進変数の多項式を構築する C++ ライブラリ
- 現在、amd64 (x86_64) および arm64 Linux システム向けにビルド済み
- 2 つの CPU ソルバーを同梱: Easy Solver (ヒューリスティック) および Exhaustive Solver (完全探索)
- GPUソルバーを同梱:ABS3
- 最大16次までの高次無制約二値最適化(HUBO)をサポート
- 可能な限りoneTBBを用いたマルチスレッド加速を適用
- 二次制約なし二値最適化(QUBO)問題を解くためにGurobi Optimizerを呼び出すためのAPIを含みます
- 作者: 中野 浩司
- 著作権: © 2026 中野浩司. 無断複写・転載を禁じます。
QUBO++ ソルバー: Easy Solver、Exhaustive Solver、ABS3 Solver
イージーソルバー
- マルチコア CPU 上で QUBO/HUBO 形式の解を模索します。
- マルチスレッドによる高速化: 並列探索に Intel oneTBB を活用。
- 整数係数:任意の大きさの係数をサポート。
網羅的ソルバー
- マルチコアCPU上でQUBO/HUBO定式化の全解を列挙します。
- 最適性の保証:グローバル最適解を見つけ、それを保証します。
- マルチスレッドによる高速化:並列列挙に Intel oneTBB を利用。
- 整数係数:任意の大きさの係数をサポートします。
ABS3 ソルバー
- CUDA対応GPU上でQUBO/HUBO定式化の解を検索します。
ABS3 対応 GPU アーキテクチャ
- sm_80 : NVIDIA A100 (Ampere)
- sm_86 : NVIDIA RTX A6000、GeForce RTX 3090/3080/3070 (Ampere)
- sm_89 : NVIDIA RTX 6000 Ada、GeForce RTX 4090/4080/4070 (Ada)
- sm_90 : NVIDIA H100 / H200 / GH200 (Hopper)
- sm_100 : NVIDIA B200 / GB200 (Blackwell、データセンター)
- sm_120 : GeForce RTX 5090/5080/5070(Ti)/5060(Ti)/5050、RTX PRO 6000/5000/4500/4000/2000 Blackwell (ワークステーション)
- 検証に関する注記:上記のアーキテクチャの一部のみが実際のハードウェアで検証されています。
数値型
- 32 ビットおよび 64 ビット項係数
- 64ビットエネルギー値
パフォーマンスに関する注記
- パフォーマンスを最大化するため、算術オーバーフローチェックは省略されています。
ビルド環境
QUBO++のビルドには以下の環境が使用されました。
互換性を確保するため、記載されたコンポーネントと同等またはそれ以降のバージョンを使用してください。
- オペレーティングシステム: Ubuntu 20.04.6 LTS
- glibc: 2.31
- C++標準: C++17
- コンパイラ: g++ 9.4.0
- Boost: 1.81.0
- CUDA: 12.8
oneTBB / TBB 依存関係
QUBO++はTBBをバンドルしません。パブリックAPIにはTBBヘッダーを含みますが、 ライブラリ自体はデフォルトのユースケースにおいてTBBへのリンクを必要としません。
- ビルドおよび実行の検証環境: Ubuntu 20.04 (従来の TBB 2020.1)、22.04 / 24.04 (oneTBB 2021+)。
ディレクトリ構造と主要ファイル
bin/- 実行ファイルqbpp-license: QUBO++ ライセンスマネージャー
include/— ヘッダーファイルqbpp.hpp: メイン QUBO++ BQ Edition ツールキットqbpp_abs3_solver.hpp: ABS3 GPUソルバーqbpp_defs.hpp: 共通定義とマクロqbpp_easy_solver.hpp: 簡易ソルバー実装qbpp_exhaustive_solver.hpp: 網羅的ソルバー実装qbpp_grb.hpp: Gurobi オプティマイザ インターフェースqbpp_misc.hpp: その他のライブラリ
lib/— QUBO++ 共有ライブラリlibqbpp.so: QUBO++ コア用共有ライブラリlibqbpp_abs3c32.so: 32ビット項係数を持つABS3 GPUソルバー用共有ライブラリlibqbpp_abs3c64.so: 64ビット項係数を持つABS3 GPUソルバー用共有ライブラリ
samples/— サンプルプログラムfactorization.cpp: 整数因数分解graph_color.cpp: グラフ着色tsp.cpp: イージーソルバーを用いた巡回セールスマン問題の解法qbpp_tsp.hpp: TSP用QUBOモデルの作成integer_poly.cpp: 整数多項式最適化labs.cpp: 低自己相関二進列問題nqueen_easy.cpp: イージーソルバーを用いたNクイーンズ問題の解法qbpp_nqueen.hpp: Nクイーンズ問題のQUBO式生成shift_scheduling: シフトスケジューリング問題factorization_abs3.cpp: ABS3を用いた整数因数分解labs_abs3.cpp: ABS3 GPUソルバーを用いた低自己相関二進数列問題ilp_grb.cpp: Gurobi Optimizerを用いた整数線形計画法の例
QUBO++ ライセンス
ライセンスの種類
QUBO++ は、ライセンス管理に Cryptlex を使用しています。 ノードロックライセンスをアクティベートすると、実行環境に関する情報(ハードウェア識別子など)が、ライセンスを検証するために Cryptlex サーバーに安全に保存されます。
- 匿名試用版
- ライセンスキー不要
- 有効期間:7日間
- 最大変数数:1,000(CPU)/1,000(GPU)
- 登録済みトライアル
- 無料ライセンスキーが必要
- 30日間有効
- 最大変数数:10,000 (CPU) / 10,000 (GPU)
- 標準ライセンス
- 有料ライセンスキーが必要
- ライセンス契約期間中有効
- 最大変数数:2,147,483,647 ($2^{31} - 1$) (CPU) / 1,000 (GPU)
- 実際には、利用可能な物理メモリによって最大変数数が制限される場合があります。
- プロフェッショナルライセンス
- 有料ライセンスキーが必要です
- ライセンス契約期間中有効
- 最大変数数:2,147,483,647 ($2^{31} - 1$) (CPU) / 2,147,483,647 ($2^{31} - 1$) (GPU)
- 実際には、利用可能な物理メモリによって最大変数数が制限される場合があります。
- フォールバック(ライセンスなし/ライセンス期限切れの場合)
- 最大変数数:100 (CPU) / 100 (GPU)
QUBO++ ライセンスの表示/有効化/無効化
-
qbpp-licenseユーティリティ(QUBO++インストールディレクトリ内)は、現在のマシン上のライセンスを表示、有効化、無効化します。/binQUBO++インストールディレクトリ内)は、現在のマシン上のライセンスを表示、アクティベート、および非アクティベートします。 - QUBO++ プログラムを実行するには、まずマシン上で QUBO++ ライセンスをアクティベートする必要があります。
- 各ライセンスキーには、有効化および無効化できる回数に制限があります。これらの制限はライセンスごとに追跡されます。
ライセンスの表示
このマシンでライセンスが既にアクティベートされている場合、 qbpp-license を実行すると、ライセンス情報(有効期限、アクティベーション総回数、非アクティベーション総回数など)が表示されます。
- 登録済み試用版
/スタンダードライセンス/プロフェッショナルライセンスライセンスキー
は、環境変数またはコマンドラインオプションで指定できます。
- 環境変数を使用する場合:
$ export QBPP_LICENSE_KEY=XXXXXX-XXXXXX-XXXXXX-XXXXXX-XXXXXX-XXXXXX $ qbpp-license - コマンドラインオプションを使用する場合:
$ qbpp-license -k XXXXXX-XXXXXX-XXXXXX-XXXXXX-XXXXXX-XXXXXX
- 環境変数を使用する場合:
- 匿名トライアル
ライセンスキーを指定
せずにコマンドを実行するだけです:$ qbpp-license
ライセンスの有効化
- 現在のマシンでライセンスを有効化するには、
-a(または--activate) オプションを追加してください:$ qbpp-license -a - これによりライセンスのアクティベーションが1回消費されます。
ライセンスの無効化
- 現在のマシンでライセンスを無効化するには、
-d(または--deactivate)オプションを使用します:$ qbpp-license -d - 匿名試用版は解除できません。
- 無効化により無効化カウントが増加し、アクティベーションスロットが解放されます。これにより、ライセンスをこのマシンまたは別のマシンで再度有効化できます。
ライセンスキー付きで QUBO++ を実行します。
- 匿名トライアルの場合、設定するライセンスキーはありません。
- ライセンスキーをお持ちの場合は、プログラム実行前に以下のいずれかの方法で指定してください:
- コード経由:
qbpp::license_key("XXXXXX-XXXXXX-XXXXXX-XXXXXX-XXXXXX-XXXXXX"); - 環境変数経由:
export QBPP_LICENSE_KEY=XXXXXX-XXXXXX-XXXXXX-XXXXXX-XXXXXX-XXXXXX
- コード経由:
利用規約
QUBO++をご利用になる場合、以下の利用規約に同意したものとみなされます:
-
ライセンス
範囲 QUBO++は、ライセンスの種類(匿名トライアル、登録済みトライアル、スタンダードまたはプロフェッショナルライセンス)に応じて、期間限定ライセンスで提供されます。 -
トライアルライセンスの制限 匿名トライアルおよび
登録済みトライアルライセンスは、評価目的のみに厳密に提供されます。 -
スタンダード/プロフェッショナルライセンスと支払い
要件 スタンダード/プロフェッショナルライセンスには有料ライセンスキーの購入が必要です。これらのライセンスは、ライセンス契約の条件に従い、商用および研究目的でのQUBO++への完全なアクセス権を付与します。 -
再配布 QUBO++ の再配布(全体または一部
、ヘッダーおよびバイナリを含む)は、著作権者の事前の書面による許可なく禁止されています。 -
リバースエンジニアリング ソフトウェアのいかなる部分についても、
リバースエンジニアリング、逆コンパイル、または逆アセンブルを行ってはなりません。 -
免責事項
QUBO++は「現状有姿」で提供され、明示的または黙示的ないかなる保証もありません。本ソフトウェアの使用に起因する損害について、作者は一切の責任を負いません。 -
所有権
QUBO++に関連する全ての知的財産権は、原作者または著作権者の所有物として存続します。 -
終了
本ライセンスは、これらの条項に違反した場合、自動的に終了します。終了時には、ソフトウェアの使用をすべて中止し、すべてのコピーを破棄しなければなりません。
サードパーティ製ライブラリ
- Gurobi Optimizer
- Gurobi Optimizer との統合をサポートする QUBO++ 向け API。
- これらの API を使用するには、Gurobi Optimization, LLC から Gurobi Optimizer の有効なライセンスを取得する必要があります。
- Gurobi Optimizer は QUBO++ に含まれておらず、その使用には Gurobi Optimizer 独自のライセンス契約の条項が適用されます。
- oneTBB (oneAPI スレッディング ビルディング ブロック)
- Apache License 2.0 の下でライセンス供与されています。
- Copyright © Intel Corporation.
- 詳細については、https://www.apache.org/licenses/LICENSE-2.0 をご覧ください。
- Boost C++ ライブラリ
- Boost Software License、バージョン 1.0 の下でライセンス供与されています。
- 詳細は https://www.boost.org/LICENSE_1_0.txt をご覧ください。
- xxHash
- BSD 2-Clause License の下でライセンス供与されています。
- Copyright © Yann Collet.
- 詳細は https://opensource.org/license/bsd-2-clause/ をご覧ください。
ライセンスに関するご質問やライセンスキーの取得をご希望の場合は、販売元または開発者にお問い合わせください。