簡潔なC++17ベースの設計
基本的な3つのC++クラス、変数(qbpp::Var)、式(qbpp::Expr)、解(qbpp::Sol)を理解すれば、QUBO/HUBO問題を扱うC++コードを簡単に作成できます。
変数、多項式などのコアクラスにはQUBO++エンジンを採用、提供されるクラス、APIを用いてプログラミングします。
About
概要や計算の流れなどをご紹介します。
Hi-QUBOは、組み合わせ最適化問題(QUBO/HUBO)を計算するためのソルバーとQUBO/HUBOへの数式変換のためのプログラミング用インタフェースがセットになったライブラリの商用サービスです。
コア部分の計算にQUBO++エンジンを用いており、組み合わせ最適化問題をHUBO(High-order Unconstrained Binary Optimization)形式に記号処理で変換でき、効率よく解を探索するQUBO/HUBOソルバー群をまとめたC++ライブラリです。
定式化された最適化問題のプログラミング、QUBO/HUBO形式への変換、解の探索といった一連のプロセスをシームレスに開発できます。
C++またはPythonで開発可能
外部ソルバー連携を可能にするAPIを搭載
組み合わせ最適化問題は、
など、現代社会の幅広い分野で重要な役割を果たしています。これらの課題を効率的に解くことは、社会的コストの削減や持続可能な社会の実現に直結するため、極めて重要です。
しかし、各課題に特化した専用ソルバーを開発するには、高度な専門知識と膨大なコストが必要であり、実装のハードルが高いのが現状です。
多くの組み合わせ最適化問題は、QUBO(Quadratic Unconstrained Binary Optimization)問題に変換できることが知られています。
この性質を活用することで、Hi-QUBOではより効率的な解法を構築することが可能になります。
具体的には、以下の3ステップで最適化計算を行います。
変換
解きたい組み合わせ最適化問題をQUBO形式に変換する
探索
QUBOソルバーを用いて最適解を探索する
逆変換
得られた結果を元の問題の解に逆変換する
このアプローチにより、高性能なQUBOソルバーを利用すれば、変換処理と逆変換処理の開発だけで、複雑な組み合わせ最適化問題に対して高精度な解を得ることができます。
基本的な3つのC++クラス、変数(qbpp::Var)、式(qbpp::Expr)、解(qbpp::Sol)を理解すれば、QUBO/HUBO問題を扱うC++コードを簡単に作成できます。
変数、多項式などのコアクラスにはQUBO++エンジンを採用、提供されるクラス、APIを用いてプログラミングします。
2次に限定されるQUBOだけでなく高次のHUBOも扱えます。
Hi-QUBOのHUBOソルバーは、次数削減せず、直接探索で元の式の構造を保持して計算します
QUBO++エンジンを用いて、最適解を探索します。
Easy Solver(ヒューリスティック型)
ヒューリスティックアルゴリズムにより解探索。単純ながら比較的高い解探索能力を備えています。
Exhaustive Solver(全探索型)
全解探索。小規模QUBO問題で、すべての最適解を列挙できるため、デバッグに活用できます。
ABS3 GPU Solver
マルチGPUでヒューリスティックアルゴリズムにより解探索を行うQUBO/HUBOソルバーです。
商用の最適化ソルバー Groubi Optimizer のAPIを呼び出して計算することも可能性です。
マルチスレッド化により、標準的なPCでも高速な計算が期待できます。
BoostやTBBなどの標準的なライブラリのみを利用し、Linuxベースの多くの計算機で動作します。
WindowsのWSLでも動作確認済みです。