Symbolic QUBO Modeling
Project description
quboify
quboify is an open-source Python package for constructing Quadratic Unconstrained Binary Optimization (QUBO) models from symbolic expressions while preserving symbolic parameters.
The primary use case of quboify is to take a SymPy model, and convert it into QUBO form with a qubovert data structure while maintaining the symbolic expressions such that late-stage adjustments of parameters is possible.
quboify offers only limited links to existing quantum optimization solvers. As these solvers are expected to develop and change in the future, this toolkit offers an extendable solver-independent interface.
quboify was developed at the Institute of Energy Systems Engineering (ICE-1) at Forschungszentrum Jülich GmbH, Germany.
Getting Started
Installation
The authors recommend installation using Pixi:
pixi add quboify
Alternatively from PyPI:
pip install quboify
Usage
The following example showcases the support of potentially problematic variable names and expressions (see a-0-0 and 1e-7) and parameter modification without reconstructing the QUBO (see p).
from quboify import Constraints, ObjectiveFunctions, Problem, Solver, Symbols
variables = Symbols()
constraints = Constraints()
obj_func = ObjectiveFunctions()
a = variables.add_binary_variable("a-0-0")
b = variables.add_discrete_variable("b", [-1, 1, 3])
c = variables.add_continuous_variable("c", -2, 2, 0.25)
p = variables.add_parameter("p")
constraints.add_constraint(variables.encoding_constraints)
constraints.add_constraint("b + c >= 2", variable_precision=True)
obj_func.add_objective_function(a + (b+p)*c + c**2 + 1e-7)
problem = Problem(variables, constraints, obj_func)
solver = Solver(problem)
problem.set_parameters({"p": 2})
solutions = solver.solve_simulated_annealing()
print(f"Best solution: {solutions.best_solution}")
print(f"with objective function value: {solutions.best_solution_objective_values}")
problem.set_parameters({"p": -1})
solutions = solver.solve_simulated_annealing()
print(f"Best solution: {solutions.best_solution}")
print(f"with objective function value: {solutions.best_solution_objective_values}")
Referencing
In case you are quboify in your work, we would be thankful if you referred to it by citing the following publication (also found in paper/paper.md):
to be published
Acknowledgements
The project originated as a fork of mqt-qao. The authors acknowledge the original developers for establishing the foundational concepts on which quboify builds.
The code and paper for this project were written as part of the project “Quantum-based Energy Grids (QuGrids)”, which is receiving funding from the programme “Profilbildung 2022”, an initiative of the Ministry of Culture and Science of the State of North Rhine-Westphalia.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file quboify-1.0.2-py2.py3-none-any.whl.
File metadata
- Download URL: quboify-1.0.2-py2.py3-none-any.whl
- Upload date:
- Size: 25.7 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0f41888b1f563e2ad87b438a87c2466bd7bd8de1e0fa6a7349fbafed70e16404
|
|
| MD5 |
9ebe931d19f06f00cb64727471d9e6fc
|
|
| BLAKE2b-256 |
936d3f5b0556a6b07d91571c519cd81641e6e2b9aff99fc7773b49a25f70d2c8
|