QUBO++
A C++ library generating QUBO models by manipulating variables and formulas
QUBO++ a C++ library designed to create and manipulate polynomials of binary variables, specifically to simplify the formulation of QUBO (Quadratic Unconstrained Binary Optimization) problems, which involve quadratic expressions of binary variables in the form of 0/1. The objective of QUBO problems is to find an optimal binary assignment that minimizes these expressions.
Key features include:
Simplified C++17-based implementation: The library requires understanding only three essential C++ classes—variables (qbpp::Var), expressions (qbpp::Expr), and solutions (qbpp::Sol).
High Portability: This software relies only on standard libraries such as Boost and TBB, ensuring compatibility with many Linux-based systems. We have verified its functionality on Windows WSL as well as macOS with both Intel and ARM CPUs.
Unlimited integer coefficient support: Expressions can involve terms with integer coefficients of any magnitude.
Support for integer variables: Integer variables are represented using multiple binary variables.
Rich operator and function support: Provides a wide range of operators and functions for designing and manipulating expressions, including robust vector manipulation capabilities.
Built-in solvers for testing and debugging: Includes two basic QUBO solvers, EasySolver and ExhaustiveSolver.
Performance acceleration: Multithreading is leveraged wherever possible. The library incorporates components from Intel® Threading Building Blocks (TBB), licensed under the Apache License 2.0.
Advanced solver integration: Offers API integrations for powerful solvers like the ABS2 GPU Solver and the Gurobi Optimizer for solving QUBO problems.
Partial support for Ising expressions: Supports spin variables ( −1/+1) and provides functions for equivalent conversions between QUBO and Ising expressions.
HUBO to QUBO conversion: Includes functionality to convert HUBO (High-Order Unconstrained Binary Optimization) expressions into equivalent QUBO forms.
QUBO++ includes the following solvers and APIs:
QUBO++ Easy Solver with API : A basic QUBO solver running on a CPU, developed for testing, evaluation, and learning purposes.
QUBO++ Exhaustive Solver with API : A straightforward QUBO solver running on a CPU, which searches all solutions to find all optimal solutions. This solver also aims for testing, and debugging purposes.
ABS2 GPU QUBO Solver with API : A QUBO solver running on a Linux machine with single or multiple GPUs, which can be used only for non-commercial, testing, and research purposes.
Gurobi Optimizer Access API : An API for utilizing the Gurobi Optimizer to solve QUBO problems through the QUBO++ library. Since the Gurobi Optimizer is a commercial MIP solver, an appropriate license is required to use it. Please see https://www.gurobi.com/ for details.
Author: Koji Nakano
License: Only for non-commercial use, evaluation, and research purposes with no warranties. Redistribution is strictly prohibited.
Copywright: © 2024 Koji Nakano. All rights reserved.
This software uses the following third-party libraries: Intel® Threading Building Blocks (Intel® TBB) Licensed under the Apache License, Version 2.0