Hi-QUBOとは

Hi-QUBO は,組合せ最適化問題をバイナリ変数の多項式(QUBO/HUBO)として定式化・求解するフレームワークです. 制約条件を cons() で明示すると,バンドルされたソルバーが制約を満たす解を効率よく探索します.

  • C++ と Python — C++(Hi-QUBO)でもPython(PyQBPP)でも使えます.

  • 簡単インストール — C++は sudo apt install qbpp,Pythonは pip install pyqbpp.ソースからのビルドは不要です.

  • シンボリックDSL — 行列のインデックスではなく,数式を書くように最適化モデルを構築.自然なforループで制約を記述することも,ベクトル演算でループなしに記述することもできます.

  • ネイティブ制約 — 制約条件を cons() で囲んで宣言すると,制約として特別に処理され,バンドルされたソルバーが制約を満たす解を効率よく探索します.ペナルティ式の重み調整の負担が減り,同じ宣言を厳密ソルバーやMIPソルバーではハード制約として扱えます.詳細はネイティブ制約(Python版)をご覧ください.

  • 次数無制限のHUBO — 二次だけでなく任意の次数の高次項をサポート.否定リテラル(~x)をネイティブにサポートし,\(\overline{x}\) を \(1-x\) に置き換えることによる項数爆発を回避します.

  • 大規模な変数数 — 1つのモデルでバイナリ変数・整数変数をそれぞれ最大 1,073,741,823 個(\(2^{30}-1\))扱えます.

  • 任意精度の整数係数 — ビット数に上限のない整数係数を扱えます.32ビットから数千桁まで,オーバーフローの心配なく計算可能.

  • 実数(double)係数 — 整数だけでなく double 係数もサポート.式は double のまま構築し,求解時に自動で整数ソルバーへスケーリング・量子化され,エネルギーも double で返るため,整数バックエンドを意識せず実数で計算できます.

  • 3つの内蔵ソルバー — Easy Solver(高速ヒューリスティック),Exhaustive Solver(最適性保証付き完全探索),ABS3(GPU+CPUヒューリスティック).

  • GPU加速 — 内蔵のABS3ソルバーがGPUリソースをフル活用して並列探索を実行.マルチGPUにも対応.Exhaustive SolverもCUDA GPUを自動的に使用します.

  • CPU並列加速 — すべてのソルバーがマルチコアCPU上でマルチスレッド並列実行されます.

  • 実験的なサードパーティソルバー連携 — Gurobi, SCIP, HiGHS, GLPK, CBC, IBM CPLEX, IBM Qiskit Optimization, dimod ExactSolver, Fixstars Amplify, D-Wave Ocean (Advantage / ネイティブ QPU / Leap Hybrid / Neal / Tabu / Steepest), OpenJij, TYTAN-SDK MIKAS, qubovert, Simulated Bifurcation, Google OR-Tools CP-SAT を統一された Solver.search() プロトコルで呼び出せます.Gurobi・SCIP・HiGHS・GLPK・CBC は C++(Hi-QUBO)からも利用でき,その他は PyQBPP から利用できます.詳細は QUBO/HUBO ソルバー,MILP ソルバー,CP ソルバー をご覧ください.

  • どこでも実行 — Raspberry PiからノートPC,GPUサーバー,スーパーコンピュータまで.amd64 (x86_64) および arm64 Linux で利用可能.

Hi-QUBO ソルバー: Easy Solver, Exhaustive Solver, ABS3 Solver

Easy Solver

  • QUBO/HUBO に最適化されたヒューリスティックソルバー: マルチコア CPU 上で QUBO/HUBO モデルの解を探索します.

  • マルチスレッド加速: マルチコアCPU上で並列探索.

  • 任意精度の整数係数: 任意の大きさの整数係数をサポート.

Exhaustive Solver

  • マルチコア CPU と CUDA GPU 上で QUBO/HUBO 定式化の全解を列挙します.

  • 最適性保証: 大域最適解が発見・証明されます.

  • マルチスレッド加速: マルチコアCPU上で並列探索.

  • 任意精度の整数係数: 任意の大きさの整数係数をサポート.

  • GPU 加速: CUDA GPU が利用可能な場合,GPU ワーカーが CPU スレッドと並行して探索に参加します.128ビット整数までの係数で GPU 加速が利用可能で,それ以上の係数は CPU のみで実行されます.

ABS3 Solver

  • マルチコア CPU と CUDA GPU 上のヒューリスティックソルバー: CPU スレッドと CUDA GPU の両方を使用して QUBO/HUBO インスタンスの解を探索します.

  • 任意精度の整数係数: 任意の大きさの整数係数をサポート.

  • マルチ GPU スケーリング: Linux ホスト上の検出されたすべての GPU を使用.128ビット整数までの係数で GPU 加速が利用可能で,それ以上の係数は CPU のみで実行されます.

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 (ワークステーション)

  • 検証について: 上記アーキテクチャの一部のみが実機で検証済みです.

性能に関する注意

  • パフォーマンスを最大化するため,算術オーバーフローチェックは省略されています.

ビルド環境

以下の環境を使用して Hi-QUBO をビルドしています. Hi-QUBO は Ubuntu 20.04 に限定されません.Ubuntu 22.04/24.04 およびその他の Linux ディストリビューション(CentOS/RHEL系を含む)でもテスト済みです. 互換性を確保するため,以下のコンポーネントと同じかそれ以降のバージョンをお使いください.

  • オペレーティングシステム: Ubuntu 20.04.6 LTS

  • C++ 標準: C++17

  • glibc: 2.31

  • コンパイラ: g++ 9.4.0

  • Boost: 1.81.0

  • CUDA: 12.8

Hi-QUBO ライセンス

無料の Trial ライセンス(30日間,10,000変数)は Hi-QUBO User Portal で取得できます. Hi-QUBO をインストールしたら qbpp-license -s を実行して本日のサインアップコードを取得し,portal で登録すると Trial キーが受け取れます.

ライセンスの有効化,ライセンスの種類,条件の詳細は License Management をご覧ください.

サードパーティライブラリ

以下のライブラリは Hi-QUBO の共有ライブラリ (qbpp_*.so) にリンクされています:

オプションのソルバーバックエンド

3 つの組み込みソルバーに加え,Hi-QUBO は外部ソルバーへモデルを渡せます. 各ソルバーが受け取るモデルの形でグループ分けしています:

  • QUBO/HUBO ソルバー — モデルを直接受け取る(Gurobi, D-Wave, Fixstars Amplify, OpenJij, IBM CPLEX ほか).

  • MILP ソルバー — QUBO を純 MILP に線形化してから渡す(SCIP, HiGHS, GLPK, CBC).

  • CP ソルバー — 制約プログラミング(Google OR-Tools CP-SAT).

各バックエンドは別途インストールが必要で,それぞれ独自のライセンスで配布 されています(商用・アカデミックライセンスが必要なものもあります).これらの 連携は Experimental で,仕様(API)は将来予告なく変更される可能性が あります.ソルバーの全一覧・インストール方法・注意点は上記の各ページを 参照してください.

Hi-QUBO は,組合せ最適化問題をバイナリ変数の多項式(QUBO/HUBO)として定式化・求解するフレームワークです. 制約条件を cons() で明示すると,バンドルされたソルバーが制約を満たす解を効率よく探索します.

  • C++ と Python — C++(Hi-QUBO)でもPython(PyQBPP)でも使えます.

  • 簡単インストール — C++は sudo apt install qbpp,Pythonは pip install pyqbpp.ソースからのビルドは不要です.

  • シンボリックDSL — 行列のインデックスではなく,数式を書くように最適化モデルを構築.自然なforループで制約を記述することも,ベクトル演算でループなしに記述することもできます.

  • ネイティブ制約 — 制約条件を cons() で囲んで宣言すると,制約として特別に処理され,バンドルされたソルバーが制約を満たす解を効率よく探索します.ペナルティ式の重み調整の負担が減り,同じ宣言を厳密ソルバーやMIPソルバーではハード制約として扱えます.詳細はネイティブ制約(Python版)をご覧ください.

  • 次数無制限のHUBO — 二次だけでなく任意の次数の高次項をサポート.否定リテラル(~x)をネイティブにサポートし,\(\overline{x}\) を \(1-x\) に置き換えることによる項数爆発を回避します.

  • 大規模な変数数 — 1つのモデルでバイナリ変数・整数変数をそれぞれ最大 1,073,741,823 個(\(2^{30}-1\))扱えます.

  • 任意精度の整数係数 — ビット数に上限のない整数係数を扱えます.32ビットから数千桁まで,オーバーフローの心配なく計算可能.

  • 実数(double)係数 — 整数だけでなく double 係数もサポート.式は double のまま構築し,求解時に自動で整数ソルバーへスケーリング・量子化され,エネルギーも double で返るため,整数バックエンドを意識せず実数で計算できます.

  • 3つの内蔵ソルバー — Easy Solver(高速ヒューリスティック),Exhaustive Solver(最適性保証付き完全探索),ABS3(GPU+CPUヒューリスティック).

  • GPU加速 — 内蔵のABS3ソルバーがGPUリソースをフル活用して並列探索を実行.マルチGPUにも対応.Exhaustive SolverもCUDA GPUを自動的に使用します.

  • CPU並列加速 — すべてのソルバーがマルチコアCPU上でマルチスレッド並列実行されます.

  • 実験的なサードパーティソルバー連携 — Gurobi, SCIP, HiGHS, GLPK, CBC, IBM CPLEX, IBM Qiskit Optimization, dimod ExactSolver, Fixstars Amplify, D-Wave Ocean (Advantage / ネイティブ QPU / Leap Hybrid / Neal / Tabu / Steepest), OpenJij, TYTAN-SDK MIKAS, qubovert, Simulated Bifurcation, Google OR-Tools CP-SAT を統一された Solver.search() プロトコルで呼び出せます.Gurobi・SCIP・HiGHS・GLPK・CBC は C++(Hi-QUBO)からも利用でき,その他は PyQBPP から利用できます.詳細は QUBO/HUBO ソルバー,MILP ソルバー,CP ソルバー をご覧ください.

  • どこでも実行 — Raspberry PiからノートPC,GPUサーバー,スーパーコンピュータまで.amd64 (x86_64) および arm64 Linux で利用可能.

Hi-QUBO ソルバー: Easy Solver, Exhaustive Solver, ABS3 Solver

Easy Solver

  • QUBO/HUBO に最適化されたヒューリスティックソルバー: マルチコア CPU 上で QUBO/HUBO モデルの解を探索します.

  • マルチスレッド加速: マルチコアCPU上で並列探索.

  • 任意精度の整数係数: 任意の大きさの整数係数をサポート.

Exhaustive Solver

  • マルチコア CPU と CUDA GPU 上で QUBO/HUBO 定式化の全解を列挙します.

  • 最適性保証: 大域最適解が発見・証明されます.

  • マルチスレッド加速: マルチコアCPU上で並列探索.

  • 任意精度の整数係数: 任意の大きさの整数係数をサポート.

  • GPU 加速: CUDA GPU が利用可能な場合,GPU ワーカーが CPU スレッドと並行して探索に参加します.128ビット整数までの係数で GPU 加速が利用可能で,それ以上の係数は CPU のみで実行されます.

ABS3 Solver

  • マルチコア CPU と CUDA GPU 上のヒューリスティックソルバー: CPU スレッドと CUDA GPU の両方を使用して QUBO/HUBO インスタンスの解を探索します.

  • 任意精度の整数係数: 任意の大きさの整数係数をサポート.

  • マルチ GPU スケーリング: Linux ホスト上の検出されたすべての GPU を使用.128ビット整数までの係数で GPU 加速が利用可能で,それ以上の係数は CPU のみで実行されます.

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 (ワークステーション)

  • 検証について: 上記アーキテクチャの一部のみが実機で検証済みです.

性能に関する注意

  • パフォーマンスを最大化するため,算術オーバーフローチェックは省略されています.

ビルド環境

以下の環境を使用して Hi-QUBO をビルドしています. Hi-QUBO は Ubuntu 20.04 に限定されません.Ubuntu 22.04/24.04 およびその他の Linux ディストリビューション(CentOS/RHEL系を含む)でもテスト済みです. 互換性を確保するため,以下のコンポーネントと同じかそれ以降のバージョンをお使いください.

  • オペレーティングシステム: Ubuntu 20.04.6 LTS

  • C++ 標準: C++17

  • glibc: 2.31

  • コンパイラ: g++ 9.4.0

  • Boost: 1.81.0

  • CUDA: 12.8

Hi-QUBO ライセンス

無料の Trial ライセンス(30日間,10,000変数)は Hi-QUBO User Portal で取得できます. Hi-QUBO をインストールしたら qbpp-license -s を実行して本日のサインアップコードを取得し,portal で登録すると Trial キーが受け取れます.

ライセンスの有効化,ライセンスの種類,条件の詳細は License Management をご覧ください.

サードパーティライブラリ

以下のライブラリは Hi-QUBO の共有ライブラリ (qbpp_*.so) にリンクされています:

オプションのソルバーバックエンド

3 つの組み込みソルバーに加え,Hi-QUBO は外部ソルバーへモデルを渡せます. 各ソルバーが受け取るモデルの形でグループ分けしています:

  • QUBO/HUBO ソルバー — モデルを直接受け取る(Gurobi, D-Wave, Fixstars Amplify, OpenJij, IBM CPLEX ほか).

  • MILP ソルバー — QUBO を純 MILP に線形化してから渡す(SCIP, HiGHS, GLPK, CBC).

  • CP ソルバー — 制約プログラミング(Google OR-Tools CP-SAT).

各バックエンドは別途インストールが必要で,それぞれ独自のライセンスで配布 されています(商用・アカデミックライセンスが必要なものもあります).これらの 連携は Experimental で,仕様(API)は将来予告なく変更される可能性が あります.ソルバーの全一覧・インストール方法・注意点は上記の各ページを 参照してください.